Shellshock是Bash命令行界面shell中的一個漏洞,已經存在30年,并在2014年被發現為重大威脅。今天,Shellshock仍然對企業構成威脅。時至今日,盡管它的威脅性已經比發現之年要低。但我們不得不面對在一些疏于打補丁的服務器上仍舊存在著這個漏洞,并且風險巨大。本文淺析了shellshock漏洞的原理及危害,提出簡單有效的檢測與防御手段,供業內同行探討研究。
關鍵詞:shellshock;漏洞;HTTP;Bash
Shellshock是一個威脅性較高的漏洞,它能夠給予了攻擊者更高的特權,借此攻擊者甚至可以隨意破壞系統。盡管2014年發現了ShellShock漏洞:CVE-2014-6271,但目前已知該漏洞仍然存在于世界上大量服務器上。此漏洞在2018年又進行了更新:CVE-2014-7169。Shellshock普遍存在的原因并令人意外,因為攻擊者可以利用該漏洞進行一種簡單且廉價的攻擊。雖然自該漏洞發布以來,就已經有可用的修補程序,但是對于那些沒有及時更新補丁或進行防御的公司而言,依然容易受到攻擊。有傳言稱該漏洞曾經造成過美國佐治亞州選舉系統的癱瘓[1]。Shellshock漏洞可以歸類為任意代碼執行(ACE)漏洞的一個示例。一般而言,ACE漏洞攻擊是在運行中的程序上執行的,并且需要對代碼執行,內存布局和匯編語言的內部結構有高度的了解。簡而言之,此類攻擊需要專家。攻擊者會利用ACE漏洞來上傳或運行程序,從而為他們提供控制目標計算機的簡單方法。這通常是通過運行“shell”來實現的。Shell是可以在其中輸入和執行命令的命令行。Shellshock漏洞是一個主要問題,因為它消除了對專業知識的需求,并提供了一種控制另一臺計算機(例如Web服務器)并使其運行代碼的簡單的方式。
1原理
簡單說來,Shellshock是一個漏洞,它允許包含漏洞版本Bash的系統被利用來執行具有更高特權的命令。這使攻擊者有可能接管該系統。Shellshock是BashShell(GNUBash最高版本為4.3)中的一個安全漏洞,該漏洞導致Bash從環境變量執行意外Bash命令。利用此漏洞的威脅參與者可以在目標主機上遠程發出命令。雖然Bash本身并不是面向Internet的,但是許多內部和外部服務(例如Web服務器)確實使用環境變量與服務器的操作系統進行通信。因此,如果未對輸入數據進行檢查,則在執行之前,攻擊者可能會啟動通過BashShell執行的HTTP請求命令。當Web服務器接收到對頁面的請求時,該請求的三個部分都可能會受到Shellshock攻擊:請求URL,與URL一起發送的標頭以及所謂的“參數”(當您在網站上輸入您的姓名和地址,通常會將其作為參數發送給請求)。例如,以下是檢索example主頁的實際HTTP請求:GET/HTTP/1.1Accept-Encoding:gzip,deflate,sdchAccept-Language:en-US,en;q=0.8,fr;q=0.6Cache-Control:no-cachePragma:no-cacheUser-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10_9_4)AppleWebKit/537.36(KHTML,likeGecko)Chrome/37.0.2062.124Safari/537.36Host:example.com在此例中,URL是網址,標頭為Accept-Encoding,Accept-Language等。這些標頭向Web服務器提供有關用戶Web瀏覽器功能,首選語言,使用的瀏覽器等信息。服務器會將它們轉換為Web服務器內部的變量以便于處理,這樣的情況并不少見。例如:Web服務器想知道用戶首選的語言是什么,以便于決定如何回應用戶。服務器在響應用戶對于exmaple主頁的請求時,可以通過逐個字符復制請求標頭來定義以下變量。HTTP_ACCEPT_ENCODING=gzip,deflate,sdchHTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8,fr;q=0.6HTTP_CACHE_CONTROL=no-cacheHTTP_PRAGMA=no-cacheHTTP_USER_AGENT=Mozilla/5.0(Macintosh;IntelMacOSX10_9_4)AppleWebKit/537.36(KHTML,likeGecko)Chrome/37.0.2062.124Safari/537.36HTTP_HOST=cloudflare.com只要這些變量保留在Web服務器軟件中,并且不傳遞給Web服務器上運行的其他程序,該服務器就不會受到攻擊。當將變量傳遞到稱為“bash”的shell中時,會發生Shellshock。Bash是Linux系統上使用的通用shell。Web服務器經常需要運行其他程序來響應請求,并且通常將這些變量傳遞到bash或另一個shell中。當攻擊者修改原始HTTP請求以包含神奇的(){:;};時,就會發生Shellshock問題。假設攻擊者把HTTP頭部中的User-Agent內容改為:(){:;};/bin/eject,就會在服務器端創建如下變量:HTTP_USER_AGENT=(){:;};/bin/eject。如果該變量被Web服務器傳遞到bash中,則會發生Shellshock問題。這是因為bash對于處理以(){:;};開頭的變量具有特殊的規則。bash不會將變量HTTP_USER_AGENT視為沒有特殊含義的字符序列,而是將其解釋為需要執行的命令。問題在于HTTP_USER_AGENT來自User-Agent標頭,攻擊者可以控制此標頭,因為它是通過HTTP請求進入Web服務器的。這就是漏洞形成的關鍵所在,因為攻擊者可以使易受攻擊的服務器運行所需的任何命令。
2危害
存在Shellshock漏洞的服務器非常容易受到攻擊,而且由于易受攻擊的計算機將運行發送給它的任何命令,因此該漏洞帶來的危害可能會超出你的想象。一家名為CloudFlare的公司生產WAF,他們的WAF能夠提取和分析實際使用的Shellshock字符串。他們發現Shellshock主要用于獲取私人信息、獲取服務器控制權甚至是進行拒絕服務器攻擊。大多數Shellshock命令是使用HTTPUser-Agent和Referer標頭注入的,但也有攻擊者使用GET和POST參數以及其他隨機HTTP標頭。為了提取私人信息,攻擊者使用了兩種技術。最簡單的提取攻擊的形式為:(){:;};/bin/cat/etc/passwd。它將讀取密碼文件/etc/passwd,并將其添加到Web服務器的響應中。因此,通過Shellshock漏洞注入此代碼的攻擊者將看到密碼文件作為返回的網頁的一部分顯示在他們的屏幕上。在一次攻擊中,他們只是通過電子郵件將私人文件發送給自己。為了通過電子郵件獲取數據,攻擊者正在使用如下的mail命令:(){:;};/bin/bash-c\"該命令首先運行whoami以找出運行Web服務器的用戶的名稱。這特別有用,因為如果Web服務器以root用戶身份運行,則該服務器將成為特別豐富的目標。然后,它通過電子郵件發送用戶名以及受攻擊的網站名稱(上面的example.com)。網站名稱出現在電子郵件主題行中。攻擊者可以在閑暇時登錄他們的電子郵件,并找出哪些站點容易受到攻擊。可以使用相同的電子郵件技術來提取數據,例如密碼文件。
3檢測
由于Shellshock公布已有六年,因此在網上可以找到很多針對該漏洞的掃描程序,其中一些還是免費的。當然對于技術人員來說,使用簡單的手工命令也能檢測到該漏洞。在Bash提示符下鍵入一個簡單的命令:envX=”(){:;};echoBashisInfected”/bin/sh-c“echocompleted”envX=”(){:;};echoBashisInfected”`whichbash`-c“echocompleted”envVAR='(){:;};echoBashisInfected‘bash-c“echocompleted”如果提示返回“BashisInfected”消息,那么系統就該進行更新和修復了。如果您的輸出未返回“BashisInfected”,它將以以下方式響應:bash:warning:VAR:ignoringfunctiondefinitionattemptbash:errorimportingfunctiondefinitionfor`VAR’BashTest鑒于手工檢測的效率低下,對于大規模的服務器,建議還是使用專業的漏掃檢測比較方便。
4防御
對于各家網站而言,最重要的防御手段就是及時更新系統補丁。盡管有些公司認為補丁程序管理更多的是IT運維部門的責任,而不是安全部門。但其實應把補丁程序的管理列為安全部門的首要任務,因為比起事后處理而言,這是節省資源的最有效的防御手段。如果您的系統今天仍然容易受到此類攻擊,那么您所面對的問題可能就不止這一項了。Shellshock是一個非常老的漏洞,幾乎所有系統都有針對該漏洞的補丁。保護自己免受此類漏洞影響的最佳方法是,使用為此漏洞發布的所有修補程序,使系統保持最新。經過全面測試的補丁程序是最大限度地減少業務影響的好方法,例如,運行舊操作系統的關鍵任務服務器。如果無法立即修補系統,則必須權衡該漏洞的潛在風險與業務影響。Shellshock只是企業必須處理的眾多漏洞中的一個。管理看似無窮無盡的漏洞一直并將永遠是支撐網絡安全的關鍵策略。
5總結
Shellshock漏洞雖已公布多年,但在一些由于種種原因而無法更新補丁程序的舊服務器上仍然存在,并且風險巨大。作者希望通過本文簡單介紹與分析Shellshock漏洞,能夠引起業內同行的重視,降低此類漏洞造成的危害。
作者:李維峰
相關論文