◆李維峰
淺析shellshock漏洞的原理及危害
◆李維峰
(中國飛行試驗(yàn)研究院 陜西 710089)
Shellshock是Bash命令行界面shell中的一個(gè)漏洞,已經(jīng)存在30年,并在2014年被發(fā)現(xiàn)為重大威脅。今天,Shellshock仍然對(duì)企業(yè)構(gòu)成威脅。時(shí)至今日,盡管它的威脅性已經(jīng)比發(fā)現(xiàn)之年要低。但我們不得不面對(duì)在一些疏于打補(bǔ)丁的服務(wù)器上仍舊存在著這個(gè)漏洞,并且風(fēng)險(xiǎn)巨大。本文淺析了shellshock漏洞的原理及危害,提出簡單有效的檢測(cè)與防御手段,供業(yè)內(nèi)同行探討研究。
shellshock;漏洞;HTTP;Bash
Shellshock是一個(gè)威脅性較高的漏洞,它能夠給予了攻擊者更高的特權(quán),借此攻擊者甚至可以隨意破壞系統(tǒng)。盡管2014年發(fā)現(xiàn)了ShellShock漏洞:CVE-2014-6271,但目前已知該漏洞仍然存在于世界上大量服務(wù)器上。此漏洞在2018年又進(jìn)行了更新:CVE-2014-7169。
Shellshock普遍存在的原因并令人意外,因?yàn)楣粽呖梢岳迷撀┒催M(jìn)行一種簡單且廉價(jià)的攻擊。雖然自該漏洞發(fā)布以來,就已經(jīng)有可用的修補(bǔ)程序,但是對(duì)于那些沒有及時(shí)更新補(bǔ)丁或進(jìn)行防御的公司而言,依然容易受到攻擊。有傳言稱該漏洞曾經(jīng)造成過美國佐治亞州選舉系統(tǒng)的癱瘓[1]。
Shellshock漏洞可以歸類為任意代碼執(zhí)行(ACE)漏洞的一個(gè)示例。一般而言,ACE漏洞攻擊是在運(yùn)行中的程序上執(zhí)行的,并且需要對(duì)代碼執(zhí)行,內(nèi)存布局和匯編語言的內(nèi)部結(jié)構(gòu)有高度的了解。簡而言之,此類攻擊需要專家。
攻擊者會(huì)利用ACE漏洞來上傳或運(yùn)行程序,從而為他們提供控制目標(biāo)計(jì)算機(jī)的簡單方法。這通常是通過運(yùn)行“shell”來實(shí)現(xiàn)的。Shell是可以在其中輸入和執(zhí)行命令的命令行。
Shellshock漏洞是一個(gè)主要問題,因?yàn)樗藢?duì)專業(yè)知識(shí)的需求,并提供了一種控制另一臺(tái)計(jì)算機(jī)(例如Web服務(wù)器)并使其運(yùn)行代碼的簡單的方式。
簡單說來,Shellshock是一個(gè)漏洞,它允許包含漏洞版本Bash的系統(tǒng)被利用來執(zhí)行具有更高特權(quán)的命令。這使攻擊者有可能接管該系統(tǒng)。
Shellshock是Bash Shell(GNU Bash最高版本為4.3)中的一個(gè)安全漏洞,該漏洞導(dǎo)致Bash從環(huán)境變量執(zhí)行意外Bash命令。利用此漏洞的威脅參與者可以在目標(biāo)主機(jī)上遠(yuǎn)程發(fā)出命令。雖然Bash本身并不是面向Internet的,但是許多內(nèi)部和外部服務(wù)(例如Web服務(wù)器)確實(shí)使用環(huán)境變量與服務(wù)器的操作系統(tǒng)進(jìn)行通信。因此,如果未對(duì)輸入數(shù)據(jù)進(jìn)行檢查,則在執(zhí)行之前,攻擊者可能會(huì)啟動(dòng)通過Bash Shell執(zhí)行的HTTP請(qǐng)求命令。
當(dāng)Web服務(wù)器接收到對(duì)頁面的請(qǐng)求時(shí),該請(qǐng)求的三個(gè)部分都可能會(huì)受到Shellshock攻擊:請(qǐng)求URL,與URL一起發(fā)送的標(biāo)頭以及所謂的“參數(shù)”(當(dāng)您在網(wǎng)站上輸入您的姓名和地址,通常會(huì)將其作為參數(shù)發(fā)送給請(qǐng)求)。
例如,以下是檢索example主頁的實(shí)際HTTP請(qǐng)求:
GET / HTTP/1.1
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Cache-Control: no-cache
Pragma:no-cache
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36(KHTML,like Gecko) Chrome/37.0.2062.124 Safari/537.36
Host: example.com
在此例中,URL是網(wǎng)址,標(biāo)頭為Accept-Encoding,Accept-Language等。這些標(biāo)頭向Web服務(wù)器提供有關(guān)用戶Web瀏覽器功能,首選語言,使用的瀏覽器等信息。
服務(wù)器會(huì)將它們轉(zhuǎn)換為Web服務(wù)器內(nèi)部的變量以便于處理,這樣的情況并不少見。例如:Web服務(wù)器想知道用戶首選的語言是什么,以便于決定如何回應(yīng)用戶。
服務(wù)器在響應(yīng)用戶對(duì)于exmaple主頁的請(qǐng)求時(shí),可以通過逐個(gè)字符復(fù)制請(qǐng)求標(biāo)頭來定義以下變量。
HTTP_ACCEPT_ENCODING=gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8,fr;q=0.6
HTTP_CACHE_CONTROL=no-cache
HTTP_PRAGMA=no-cache
HTTP_USER_AGENT=Mozilla/5.0(Macintosh; Intel Mac OS X 10_9_4)AppleWebKit/537.36(KHTML,like Gecko) Chrome/37.0.2062.124 Safari/537.36
HTTP_HOST=cloudflare.com
只要這些變量保留在Web服務(wù)器軟件中,并且不傳遞給Web服務(wù)器上運(yùn)行的其他程序,該服務(wù)器就不會(huì)受到攻擊。
當(dāng)將變量傳遞到稱為“ bash”的shell中時(shí),會(huì)發(fā)生Shellshock。 Bash是Linux系統(tǒng)上使用的通用shell。Web服務(wù)器經(jīng)常需要運(yùn)行其他程序來響應(yīng)請(qǐng)求,并且通常將這些變量傳遞到bash或另一個(gè)shell中。
當(dāng)攻擊者修改原始HTTP請(qǐng)求以包含神奇的(){:;};時(shí),就會(huì)發(fā)生Shellshock問題。
假設(shè)攻擊者把HTTP頭部中的User-Agent內(nèi)容改為:(){:;}; /bin/eject,就會(huì)在服務(wù)器端創(chuàng)建如下變量:HTTP_USER_AGENT=(){:;};/bin/eject。
如果該變量被Web服務(wù)器傳遞到bash中,則會(huì)發(fā)生Shellshock問題。這是因?yàn)閎ash對(duì)于處理以(){:;};開頭的變量具有特殊的規(guī)則。bash不會(huì)將變量HTTP_USER_AGENT視為沒有特殊含義的字符序列,而是將其解釋為需要執(zhí)行的命令。
問題在于HTTP_USER_AGENT來自User-Agent標(biāo)頭,攻擊者可以控制此標(biāo)頭,因?yàn)樗峭ㄟ^HTTP請(qǐng)求進(jìn)入Web服務(wù)器的。這就是漏洞形成的關(guān)鍵所在,因?yàn)楣粽呖梢允挂资芄舻姆?wù)器運(yùn)行所需的任何命令。
存在Shellshock漏洞的服務(wù)器非常容易受到攻擊,而且由于易受攻擊的計(jì)算機(jī)將運(yùn)行發(fā)送給它的任何命令,因此該漏洞帶來的危害可能會(huì)超出你的想象。一家名為CloudFlare的公司生產(chǎn)WAF,他們的WAF能夠提取和分析實(shí)際使用的Shellshock字符串。他們發(fā)現(xiàn)Shellshock主要用于獲取私人信息、獲取服務(wù)器控制權(quán)甚至是進(jìn)行拒絕服務(wù)器攻擊。
大多數(shù)Shellshock命令是使用HTTP User-Agent和Referer標(biāo)頭注入的,但也有攻擊者使用GET和POST參數(shù)以及其他隨機(jī)HTTP標(biāo)頭。
為了提取私人信息,攻擊者使用了兩種技術(shù)。最簡單的提取攻擊的形式為:() {:;}; /bin/cat /etc/passwd。
它將讀取密碼文件/ etc / passwd,并將其添加到Web服務(wù)器的響應(yīng)中。因此,通過Shellshock漏洞注入此代碼的攻擊者將看到密碼文件作為返回的網(wǎng)頁的一部分顯示在他們的屏幕上。
在一次攻擊中,他們只是通過電子郵件將私人文件發(fā)送給自己。為了通過電子郵件獲取數(shù)據(jù),攻擊者正在使用如下的mail命令:
(){:;}; /bin/bash -c "whoami | mail -s 'example.com l' xxxxxxxxxxxxxxxx@gmail.com
該命令首先運(yùn)行whoami以找出運(yùn)行Web服務(wù)器的用戶的名稱。這特別有用,因?yàn)槿绻鸚eb服務(wù)器以root用戶身份運(yùn)行,則該服務(wù)器將成為特別豐富的目標(biāo)。
然后,它通過電子郵件發(fā)送用戶名以及受攻擊的網(wǎng)站名稱(上面的example.com)。網(wǎng)站名稱出現(xiàn)在電子郵件主題行中。
攻擊者可以在閑暇時(shí)登錄他們的電子郵件,并找出哪些站點(diǎn)容易受到攻擊。可以使用相同的電子郵件技術(shù)來提取數(shù)據(jù),例如密碼文件。
由于Shellshock公布已有六年,因此在網(wǎng)上可以找到很多針對(duì)該漏洞的掃描程序,其中一些還是免費(fèi)的。
當(dāng)然對(duì)于技術(shù)人員來說,使用簡單的手工命令也能檢測(cè)到該漏洞。在Bash提示符下鍵入一個(gè)簡單的命令:
env X=”(){ :;} ; echo Bash is Infected”/bin/sh -c “echo completed”
env X=”(){ :;} ; echo Bash is Infected” `which bash` -c “echo completed”
env VAR='(){ :;}; echo Bash is Infected‘ bash -c “echo completed”
如果提示返回“Bash is Infected”消息,那么系統(tǒng)就該進(jìn)行更新和修復(fù)了。如果您的輸出未返回“ Bash is Infected”,它將以以下方式響應(yīng):
bash:warning:VAR:ignoring function definition attempt
bash:error importing function definition for `VAR’
Bash Test
鑒于手工檢測(cè)的效率低下,對(duì)于大規(guī)模的服務(wù)器,建議還是使用專業(yè)的漏掃檢測(cè)比較方便。
對(duì)于各家網(wǎng)站而言,最重要的防御手段就是及時(shí)更新系統(tǒng)補(bǔ)丁。盡管有些公司認(rèn)為補(bǔ)丁程序管理更多的是IT運(yùn)維部門的責(zé)任,而不是安全部門。但其實(shí)應(yīng)把補(bǔ)丁程序的管理列為安全部門的首要任務(wù),因?yàn)楸绕鹗潞筇幚矶?,這是節(jié)省資源的最有效的防御手段。
如果您的系統(tǒng)今天仍然容易受到此類攻擊,那么您所面對(duì)的問題可能就不止這一項(xiàng)了。Shellshock是一個(gè)非常老的漏洞,幾乎所有系統(tǒng)都有針對(duì)該漏洞的補(bǔ)丁。保護(hù)自己免受此類漏洞影響的最佳方法是,使用為此漏洞發(fā)布的所有修補(bǔ)程序,使系統(tǒng)保持最新。
經(jīng)過全面測(cè)試的補(bǔ)丁程序是最大限度地減少業(yè)務(wù)影響的好方法,例如,運(yùn)行舊操作系統(tǒng)的關(guān)鍵任務(wù)服務(wù)器。如果無法立即修補(bǔ)系統(tǒng),則必須權(quán)衡該漏洞的潛在風(fēng)險(xiǎn)與業(yè)務(wù)影響。
Shellshock只是企業(yè)必須處理的眾多漏洞中的一個(gè)。管理看似無窮無盡的漏洞一直并將永遠(yuǎn)是支撐網(wǎng)絡(luò)安全的關(guān)鍵策略。
Shellshock漏洞雖已公布多年,但在一些由于種種原因而無法更新補(bǔ)丁程序的舊服務(wù)器上仍然存在,并且風(fēng)險(xiǎn)巨大。作者希望通過本文簡單介紹與分析Shellshock漏洞,能夠引起業(yè)內(nèi)同行的重視,降低此類漏洞造成的危害。
[1]Mark Stone.Shellshock In-Depth:Why This Old Vulnerability Won’t Go Away[EB/OL].https://securityintelligence.com/articles/shellshock-vulnerability-in-depth/,2020-8-6.
[2]John Graham.Inside Shellshock:How hackers are using it to exploit systems[EB/OL].https://blog.cloudflare.com/inside-shellshock/,2014-10-1.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2021年2期