Bash 漏洞是什麼級別的漏洞,有什麼危害,具體如何修復?

另外能不能介紹下,黑客如何利用此漏洞控制系統。

補充下鏈接:Linux發現安全漏洞 危險程度或超過「心臟出血」


2014 年 9 月 24 日,Bash 驚爆嚴重安全漏洞,編號為 CVE-2014-6271,該漏洞將導致遠程攻擊者在受影響的系統上執行任意代碼。GNU Bash 是一個為 GNU 計劃編寫的 Unix Shell,廣泛使用在 Linux 系統內,最初的功能僅是一個簡單的基於終端的命令解釋器。這意味全球至少 150 萬的主機將受到影響,此外 Linux/Unix 世界內的安卓和蘋果都難倖免。

破殼漏洞(ShellShock)的嚴重性被定義為 10 級(最高),今年 4 月爆發的 OpenSSL「心臟出血」漏洞才 5 級!

漏洞描述:

GNU Bash 4.3 及之前版本在評估某些構造的環境變數時存在安全漏洞,向環境變數值內的函數定義後添加多餘的字元串會觸發此漏洞,攻擊者可利用此漏洞改變或繞過環境限制,以執行 Shell 命令。某些服務和應用允許未經身份驗證的遠程攻擊者提供環境變數以利用此漏洞。此漏洞源於在調用 Bash Shell 之前可以用構造的值創建環境變數。這些變數可以包含代碼,在 Shell 被調用後會被立即執行。

影響情況:

這個破殼漏洞確實是一個危害極大的漏洞,勝於今年 4 月 8 號爆發的「心臟出血」,但破殼漏洞的探測方式很複雜,不同的組件測試方式有所區別,很難評估一個影響面,但是可以肯定的是 Bash&<=4.3 版本都受影響,而 Bash 在至少百億級別數量的設備上使用,因為 Bash 是最流行的 Linux Shell。

來自知道創宇的 ZoomEye 團隊通過幾種方式的組合檢測,得到了些影響結論。

第一組數據

經過 ZoomEye 的特殊探測,發現國內某廠家的互聯網系統在全國範圍內有 13254 台設備受到破殼漏洞影響,可被直接遠程攻擊(root許可權):

補充:由於這次的成功探測,之後又發現了好些其他重要主機設備的這個漏洞。

第二組數據

經過 ZoomEye 的 Fuzzing 探測,全球大概存在 142000 主機受影響,需要注意的是由於 Fuzzing 規則不完備,得到的數量肯定會不完備,但這個數字至少可以看到可被直接遠程攻擊利用的面很大。

第三組數據

我們看到 masscan 的官方發布了消息:

http://blog.erratasec.com/2014/09/bash-shellshock-bug-is-wormable.html

他們全球探測的結論是:至少 150 萬受影響,而這驗證規則很簡單,僅對主機的 80 埠進行直接請求,這個結論我們也在驗證。

可以從這幾組數據看到,探測方式各不相同,如果繼續擴展可以逐步描繪出越來越清晰的影響面(可直接遠程攻擊),知道創宇會繼續。

破殼漏洞幾個有趣點:

  1. 危害等級是 10(不能再高了),心臟出血那麼厲害才 5;
  2. 破殼破的是 Bash,這個在 Linux/Unix 世界存活超過了 20 來年;
  3. 破殼蠕蟲已經傳播感染;
  4. 雖然這是 Linux/Unix 世界的問題,別忘了安卓、蘋果都是(需要深入驗證),當然 Windows 這次沒事;
  5. 破殼漏洞的利用比心臟出血麻煩,怪不得帶來的衝擊力低了很多,很多媒體都沒關注也可理解,但破殼的後勁絕對很大。

此漏洞可能會影響到的地方。

註:以下幾點參考自:

https://raw.githubusercontent.com/citypw/DNFWAH/master/4/d4_0x07_DNFWAH_shellshock_bash_story_cve-2014-6271.txt

且結論經過我們驗證有效。

  1. 在 SSHD 配置中使用了 ForceCommand 用以限制遠程用戶執行命令,這個漏洞可以繞過限制去執行任何命令。一些 Git 和 Subversion 部署環境的限制 Shell 也會出現類似情況,OpenSSH 通常用法沒有問題。
  2. Apache 伺服器使用 mod_cgi 或者 mod_cgid,如果 CGI 腳本在 BASH 或者運行在子 Shell 里都會受影響。子 Shell 中使用 C 的 system/popen,Python 中使用 os.system/os.popen,PHP 中使用 system/exec(CGI 模式) 和 Perl 中使用 open/system 的情況都會受此漏洞影響。
  3. PHP 腳本執行在 mod_php 不會受影響。
  4. DHCP 客戶端調用 Shell 腳本接收遠程惡意伺服器的環境變數參數值的情況會被此漏洞利用。
  5. 守護進程和 SUID 程序在環境變數設置的環境下執行 Shell 腳本也可能受到影響。
  6. 任何其他程序執行 Shell 腳本時用 Bash 作為解釋器都可能受影響。Shell 腳本不導出的情況下不會受影響。

漏洞驗證,可以使用如下命令來檢查系統是否存在此漏洞:

CVE-2014-6271 測試方式:

env x="() { :;}; echo vulnerable" bash -c "echo this is a test"

註:玩黑客的同學,自己基於這段改改,一個強大的exp很容易出來的:)

註:CVE-2014-6271 的漏洞源碼級分析請參考:

Bash 3.0-4.3命令执行漏洞分析

修補後,又被繞過,CVE-2014-7169 最新測試方法:

$ env -i X="() { (a)=&>" bash -c "echo date"; cat echo

如執行結果如下則仍然存在漏洞:

bash: X: line 1: syntax error near unexpected token `="

bash: X: line 1: `"

bash: error importing function definition for `X"

Wed Sep 24 14:12:49 PDT 2014

暫時(2014/9/26)還沒最靠譜的通用修復方案,關注 Bash 的下一次升級,這幾天記得更新 Bash 為最新版就好。

By 知道創宇安全研究團隊 ZoomEye 團隊!


推薦一個同事的patch的方法,適用於無法聯通外網,發行版過老的修復方法,只要有gcc就ok

#include &
#include &
#include &

static void __attribute__ ((constructor)) strip_env(void);
extern char **environ;

static void strip_env()
{
char *p,*c;
int i = 0;
for (p = environ[i]; p!=NULL;i++ ) {
c = strstr(p,"=() {");
if (c != NULL) {
*(c+2) = "";
}
p = environ[i];
}
}

編譯成so文件

gcc bash_ld_preload.c -fPIC -shared -Wl,-soname,bash_ld_preload.so.1 -o bash_ld_preload.so

然後

echo /lib/bash_ld_preload.so &> /etc/ld.so.preload

成功patch


Linux 系統 Bash 漏洞修復方法

Linux官方內置Bash中新發現一個非常嚴重安全漏洞(點擊查看漏洞參考),黑客可以利用該Bash漏洞完全控制目標系統並發起攻擊。建議各位Linux使用者儘快修復這個漏洞!

受影響的系統

  • CentOS
  • Debian
  • Redhat
  • Ubuntu

檢測方法

使用此命令:

env x="() { :;}; echo vulnerable" bash -c "echo this is a test"

若輸出

vulnerable
this is a test

則表示存在此漏洞。

修復後則會輸出

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x"
this is a test

解決方案

紅帽系

可通過更新 bash 並重啟系統來解決這個問題:

yum update bash

更新後需要重啟。

Ubuntu

apt-get update
apt-get install bash

Ubuntu 無需重啟。

原文來自我的博客:Linux 系統 Bash 漏洞修復方法


還沒收到圈內的消息,不過就目前得到的信息來看,該漏洞雖然可以造成很嚴重的破壞,但不見得影響範圍就比Heartbleed要大。

該漏洞主要影響的是CGI程序,通過注入HTTP欄位讓bash在初始化環境變數的時候執行任意bash命令。

env VAR=() { :;}; id

怎麼說呢,感覺跟SQL注入有點類似,不過這個更加嚴重一點,因為直接有執行系統命令的許可權。

(update) 嚴格來說這個漏洞不應該歸咎於bash,而應該歸咎於CGI的服務端程序。環境變數在初始化之前應該先考慮注入的可能性,bash給了你靈活性,你的程序沒有考慮全面這不應該怪bash。就好比SQL注入的問題難道要怪SQL嗎?

這個郵件裡面已經大致講明白了原理:http://seclists.org/oss-sec/2014/q3/650

Matasploit已經第一時間把exploit都寫出來了:

metasploit-framework/apache_mod_cgi_bash_env.rb at master · rapid7/metasploit-framework · GitHub

所以我感覺已經沒什麼好分析的了,直接看代碼吧各位。

至於能拿來幹什麼嘛,恕我不是圈內人士,能想到的不多。如果我手頭上有個能注入的URL,先搞個反彈shell,然後嘗試提權吧。一般CGI的用戶是有資料庫許可權的,或者能在文件裡面翻到許可權的,所以拖庫應該是沒問題的。還有什麼暫且想不到了,如果僅僅是這樣的話,並不覺得這個漏洞比Heartbleed嚴重的說。畢竟Heartbleed能爆出證書啊,CGI用戶一般啥許可權都沒有。

好吧。剛看到的資料(https://twitter.com/taviso/status/514887394294652929)

第一次打完補丁的bash還是在函數解析上存在漏洞(CVE-2014-3659):

env VAR="() { ()=&>" :; id

所以請各位確保補丁打全了。

http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-025


感覺我的是最全的整合版本。。 知乎搜索功能不是很好用,這個問題其它地方也答過,再搬運下

原理:BASH除了可以將shell變數導出為環境變數,還可以將shell函數導出為環境變數!當前版本的bash通過以函數名作為環境變數名,以「(){」開頭的字串作為環境變數的值來將函數定義導出為環境變數。

此次爆出的漏洞在於BASH處理這樣的「函數環境變數」的時候,並沒有以函數結尾「}」為結束,而是一直執行其後的shell命令!

這是屬於遠程任意代碼執行的安全漏洞,所以完全控制是肯定沒有問題。

官方給出補丁,但是在本地測試證實可以被繞過。

通過升級後官方給出的測試方法是:env x="() { :;}; echo vulnerable" bash -c "echo this is a test"

這是打上補丁升級之後表示沒有問題。

但是通過繞過語句是env -i X="() { (a)=&>" bash -c "echo date"; cat echo 卻發現官方補丁效果毫無

當然除了輸出date 我換了其它試了 發現也是沒有問題的 比如free 那麼反彈拿shell控制許可權什麼不在話下了。

問題嚴重程度不言而喻,又有一陣腥風血雨即將到來。http://freebuf.com 有更多修復方法可以前往查看。

這個漏洞擴散甚至有影響到MacOSX和一些硬體設備中等等。

9月26日更新

bash漏洞官方現在繼續發布了補丁,上面path繞過問題已經解決。

大家周圍朋友有用到的趕緊擴散通知。目前版本為5.2。

利用資料:

ActiveScanPlusPlus/activeScan++.py at master · ctxis/ActiveScanPlusPlus · GitHub

CVE-2014-6271 google 批量

CVE-2014-6271: Bash lets you do bad things. (Shellshock)

Shellshock蠕蟲:Ok, shits real. Its in the wild... src:162.253.66.76


利用這個漏洞,需要兩個條件:

  1. 伺服器收到請求後,會執行bash
  2. 執行bash的時候,會將UserAgent等設置成環境變數

同時滿足這兩點的,一般是使用CGI的伺服器,所以受到影響的伺服器份額(我語文不好)不是很大。(經評論提醒WSGI也是這樣,不管怎麼樣,大家還是注意升級一下bash) /*突然想起來我的blog也是wsgi部署的*/

對它進行一下簡單的說明:

下面是烏雲上的測試腳本:

$ curl -A 『() { :; }; /bin/cat /etc/passwd &> dumped_file』 http://192.168.0.1/poc.cgi

poc.cgi 是一個開頭為 #! /bin/bash 的cgi腳本

在伺服器端會發生的事情:

  • 收到HTTP請求,此請求帶有Head: 「User-Agent: () { :; }; /bin/cat /etc/passwd &> dumped_file」

  • 伺服器將User-Agent設置為環境變數,並執行bash
  • bash由於解析漏洞,執行了如下腳本

$ /bin/cat /etc/passwd &> dumped_file

由於解析漏洞使得環境變數被運行的原理如下(圖片來源見篇尾):

大家可以用自己的bash運行下面的代碼嘗試:

env User-Agent="() { :;}; echo hehe" bash -c "echo test"
hehe

Linux(大)部分發行版都已經更新了bash,這個命令應該已經沒用了,不過OS X的用戶還是可以試一下的,Apple沒有發布新的安全更新(Cook: 你們一定不會用它當伺服器的)

PS:把echo hehe換成rm -rf ~效果更佳(誤)。

現在的情況:

因為我只有Debian的環境,所以我只能說上面的漏洞在Debian源更新的bash已經解決了。

//就當它已經解決了吧

但是不小心又看到了下面的漏洞

$ env User-Agent="() {(a)=&>" bash -c "output date"; cat output

// 從小bash沒學好,一路兵敗如山倒

// 我不會說我看不懂的

試了一下,確實會輸出執行的date,但是原理是?

先看一下下面的圖:

我試著在bash里輸入:

$ &>
# 然後bash的顯示
&>
# 輸入
&> output date
# ls一下,發現當前目錄有叫output的文件

嗯,應該是&>符號把date的輸出重定向到output里了

這個漏洞在Debian源里更新的bash還沒有解決.....(9月26日上午3:50)

關於可以利用它做什麼:

首先要反對一下目前排名第一的答案,有了bash不等於有一切,要看是什麼許可權運行的bash。

  • cgi伺服器進程一般不會是root許可權

  • 如果是的話,那個網站的網(yun)管(wei)就可以開了又開了。
  • 所以拿到的很大幾率是一個像"www_data"這樣的用戶許可權

拿到www_data可以做什麼呢?

可以看網站的配置文件,裡面可能有資料庫密碼,然後就可以進資料庫了。(真的這麼簡單么)

// 看起來還是有危險的,下面是解決方案

# debian/ubuntu 用戶
$ sudo apt-get update
$ sudo apt-get install bash
# centos 用戶
$ sudo yum update bash
# osx 用戶
# 等Apple更新吧
# windows 用戶
# 別湊熱鬧了親

// 這裡是一段結束語

// 這個漏洞我覺得是cgi伺服器的問題(誤),把用戶的輸入放到env里真心大丈夫?(經評論區 @yegle 提醒,這樣做確實是按標準做的,沒有錯)

Update:

  • Debian源里的bash已經修復第二個漏洞
  • OS X修復方法參考(鏈接來自評論區) security - How do I recompile Bash to avoid Shellshock (the remote exploit CVE-2014-6271 and CVE-2014-7169)?

圖片截屏自:

  • CVE-2014-6271 : Remote code execution through bash : netsec

參考鏈接:

  • CVE-2014-6271 -- WooYun(白帽子技術社區) -- 網路安全資訊、討論,跨站師,滲透師,結界師聚集之地又一個有意思的地方
  • CVE-2014-6271: Bash lets you do bad things. (Shellshock)


bash是類Unix系統的核心,控制了bash,就控制了機器的一切,bash漏洞屬於最高等級的漏洞。

漏洞檢測

bash中輸入

env x="() { :;}; echo vulnerable" bash -c "echo this is a test"

如果顯示

vulnerable
this is a test

表示漏洞存在。

Mac OS X 10.9.4 存在這個問題,蘋果已經推送10.9.5的更新,不知道是不是修復了這個問題,等升級以後再跑一下測試腳本。

去Archlinux的軟體倉庫搜了一下(Arch Linux - Package Database)

紅帽已經修復了這個問題(Bash Code Injection Vulnerability via Specially Crafted Environment Variables (CVE-2014-6271)),手上的CentOS 6 已經更新到新版本。

其他的發行版沒有去驗證了,估計情況都差不多,開源軟體修復bug的實效性還是很好的。

update:經驗證Mac OS X 10.9.5 沒有修復這個bug。

fixed:致歉,並不是所有類unix發行版都默認安裝bash,而且bash非核心,只是能夠控制整台機器(感謝 @yegle 指出)。

PS:有人留言CentOS 升級bash無效,我手裡的一台雲主機升級後漏洞修復,無需重啟(有部分人給出的解決方案顯示 CentOS 升級bash後需重啟)。


【各系統 最終 修補方案 】

請您根據Linux版本選擇您需要修復的命令, 為了防止意外情況發生,建議您執行命令前先對Linux伺服器系統盤打個快照,如果萬一出現升級影響您伺服器使用情況,可以通過回滾系統盤快照解決。

centos:(最終解決方案)

yum clean all

yum makecache

yum -y update bash

ubuntu:(最終解決方案)

apt-cache gencaches

apt-get -y install --only-upgrade bash

debian:(最終解決方案)

7.5 64bit 32bit

apt-cache gencaches

apt-get -y install --only-upgrade bash

6.0.x 64bit

wget http://mirrors.aliyun.com/debian/pool/main/b/bash/bash_4.1-3+deb6u2_amd64.deb dpkg -i bash_4.1-3+deb6u2_amd64.deb

6.0.x 32bit

wget http://mirrors.aliyun.com/debian/pool/main/b/bash/bash_4.1-3+deb6u2_i386.deb dpkg -i bash_4.1-3+deb6u2_i386.deb

aliyun linux:(最終解決方案)

5.x 64bit

wget http://mirrors.aliyun.com/centos/5/updates/x86_64/RPMS/bash-3.2-33.el5_10.4.x86_64.rpm rpm -Uvh bash-3.2-33.el5_10.4.x86_64.rpm

5.x 32bit

wget http://mirrors.aliyun.com/centos/5/updates/i386/RPMS/bash-3.2-33.el5_10.4.i386.rpm rpm -Uvh bash-3.2-33.el5_10.4.i386.rpm

opensuse:(官方還沒有給出最終解決方案,該方案存在被繞過的風險,阿里雲會第一時間更新,請繼續關注)

13.1 64bit

wget http://mirrors.aliyun.com/fix_stuff/bash-4.2-68.4.1.x86_64.rpm rpm -Uvh bash-4.2-68.4.1.x86_64.rpm

13.1 32bit

wget http://mirrors.aliyun.com/fix_stuff/bash-4.2-68.4.1.i586.rpm rpm -Uvh bash-4.2-68.4.1.i586.rpm

來自aliyun


反對以上很多答案

這個漏洞已經有過很多解釋,我也就不再重複

首先明確幾點:

1. 是bash的bug無疑。在解析bash函數時沒考慮函數的結束,而是相當於把函數定義後的命令一併eval了。

2. 不僅針對CGI。CGI只是這個漏洞下最容易想到的場景之一,但如其它回答所說,真正能被感染的CGI微乎其微。

3. 這個bug很嚴重!

為什麼說嚴重呢,我看到這樣一個應用場景:dhclient

1. dhclient是以root執行的,因為要配置網路嘛

2. dhclient會調用bash腳本配置網路,並且會通過從dhcp server獲取的信息當作環境變數來調用腳本

攻擊流程:

1. 在區域網內抓到dhcp請求,獲取到mac,偽造dhcp server的回復,包含code injection信息,比如 echo root:xxooooxx | chpasswd

2. dhclient受感染,將root密碼修改

3. dhclient再發dhcp請求,獲取到IP

4. 攻擊方通過arp獲取到IP, 直接通過root密碼連到被攻擊伺服器


目前來說,可以看到的點有,用bash寫的cgi,還有限制命令執行的ssh。其他情況只要不給修改環境變數的功能,用bash也不至於有啥事。。再說官方補丁也被繞過,只能等死的節奏。。。。。不過為了保險起見,還是持續關注,儘早修復把


Exploit的小站~


我廠收到漏洞報告時,安全負責人頭頭表示堵住漏洞是不難的,問題是堵的方式不對,不能從根本問解決題。後來我廠自己寫,你們可以看到我廠的 patch 是和其他發行版不太一樣的。這次 CVE 4連發,我廠有一份功勞。

不過我廠推廣了這麼多年 selinux,這種漏洞基本可以無視。但是以大部分國內運維的水平,我就呵呵一下。不知道多少人用 RH 系第一件事就是卸載 selinux。

不用 cgi 的網站基本沒什麼影響,而用這種架構的都和 perl 有關。

dhclient 這個的確蛋疼,但也不是沒有辦法。

http://danwalsh.livejournal.com/71122.html

https://access.redhat.com/articles/1200223

利益相關: 以前是黑客,現在是戴了紅帽子的黑客。


關於該Bug的目前資料匯總:https://raw.githubusercontent.com/citypw/DNFWAH/master/4/d4_0x07_DNFWAH_shellshock_bash_story_cve-2014-6271.txt

該Bug的現階段解決方案:ShellShock: CVE-2014-6271 漏洞及 OS X 緊急修復方法


複製一段博客:

通過最近的這個bash漏洞,獲得www用戶的許可權,簡直容易到家了。雖然有常識的管理員不會給普通用戶root許可權,即便造成損失,範圍可控,但是,不怕一萬就怕萬一,萬一管理員哪天喝高了來一次sudo……那後果是相當嚴重。Classic Shell Scripting 裡面就給過這樣一個木馬:

/bin/grep "$@"


case $(whoami) in


root) nasty stuff here


rm this_script


;;


esac

把這個木馬加到當前用戶的環境變數里,只要你用到grep就踩到了雷。當然,這裡的grep可以換成 Unix in a Nutshell 裡面所有的常用unix命令。


影響面太廣:畢竟bash幾乎是Linux上最常用的命令行軟體了;影響程度惡劣:即繞過許可權管理去執行任意命令。但作為一個早就拋棄bash使用zch的……我不知道在這裡回答這些是否恰當……


推薦閱讀:

了解了xss攻擊、sql注入漏洞之後,感到驚慌,失去了編寫一個網站的勇氣怎麼辦?
網路安全。什麼才是安全,怎樣才算是在安全領域頗有成就。?
QQ最近總是提示QQ安全中心為您攔截異常2次,您的帳號疑似被盜,正處於保護模式中,怎麼處理?
2015 年有哪些重大的網路安全事件?
如何評價黑暗幽靈木馬?

TAG:網路安全 | 計算機安全 |