第0036期•2016.03.21 發行
ISSN 2077-8813

首頁 > 技術論壇

Shellshock漏洞檢測與修補方法

作者:李美雯 / 臺灣大學計算機及資訊網路中心網路組程式設計師
轉載自臺灣大學計資中心北區學術資訊安全維運中心

Shellshock(CVE-2014-6271)為近期重大資安漏洞之一,本文件將介紹此漏洞、及北區ASOC如何進行檢測此漏洞,並說明如何修補此漏洞。

Shellshock漏洞簡介
Shellshock(CVE-2014-6271)是在2014/9/24公開發布資安漏洞之前幾日已發現漏洞被利用,而此漏洞已存在多年。此事件是利用bash對環境變數的解析上產生的漏洞,只要是能夠引入環境變數的部分,就能夠輕易的利用參數塞入任何程式碼,甚至可控制目標主機。
在此次Shellshock受影響的bash版本如下列所示:
 Bash 4.3 Patch 25
 Bash 4.2 Patch 48
 Bash 4.1 Patch 12
 Bash 4.0 Patch 39
 Bash 3.2 Patch 52
 Bash 3.1 Patch 18
 Bash 3.0 Patch 17
 Bash 2.0.5b Patch 8
 Bash 1.14.7
此次資安漏洞影響的範圍主要為使用bash的作業系統,如,Windows系列作業系統基本上不在此次的受影響範圍之中,但仍須注意是否使用了具有bash功能的第三方軟體。
本次影響的常見作業系統如下列所示:
 Red Hat Enterprise Linux
 Cent OS
 Ubuntu
 Mac OS X
 Fedora
 Debian
只要是上述作業系統,不論版本都建議進行檢測以確保使用的作業系統沒有Shellshock的問題。在稍後的章節將會說明如何進行檢測。
關於網頁部分,若使用CGI動態網頁並具備讀取環境變數的function,主機將有相當高的風險。會讀取環境變數的function如下列所示:
Ruby:
 `command`
  exec 'command'
  system 'command'
Python:
 os.system('command')
 subprocess.call('command', shell = True)
 subprocess.Popen('command', shell = True)
Perl:
 exec("command > /dev/null");
 open(SHELLSHOCK, "| command > /dev/null");
 system("command < /dev/null;");
 print'command > /dev/null'
PHP:
 exec('command');
 system('command');
 mb_sand_mail();
以上command部分為系統指令。
另外,部份作業系統在進行DHCP連線時,會將DHCP Server傳入的資訊帶入環境變數中。此次的Shellshock也能夠透過建立惡意DHCP Server的方式進行攻擊,而主機只要開機後自動連線到惡意DHCP Server時立刻成為受害主機而毫不自覺。容易受此種攻擊所影響的作業系統如下所示:
 CentOS
 Debian
 Fedora
 Ubuntu

Shellshock漏洞原理
Shellshock的用法,是在能夠使用環境變數的部份加入特定語句,讓後面帶入的程式碼能夠繼續被執行。


圖一 Shellshock漏洞利用內容

這是一個HTTP請求,但是在表頭欄位中塞入了導致問題發生的特殊語句,上圖紅框處的特殊用法使得後方的 /bin/ping -c 1 104.131.0.69能夠被執行,若收到此HTTP請求的伺服器的首頁入口為bash shell script或者其子程序有呼叫到bash,並具有Shellshock漏洞,則會ping 104.131.0.69做回報動作,讓攻擊者知道此設備有此弱點可被利用。
除了上圖所使用的ping外,只要是能夠被執行的系統指令被置入此處,皆可讓有此弱點的目標主機自動執行。非常簡單的用法,但具有強大的殺傷力。

Shellshock檢測
簡易的漏洞利用,同樣的也可利用簡單的指令檢測自己的系統是否有Shellshock的漏洞。
於Bash shell執行下述指令:
 env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
若出現下列結果,則代表目前使用的bash需要進行更新


圖二 Shellshock漏洞檢測指令


圖三 Shellshock漏洞檢測結果

Shellshock漏洞修補
目前具有高風險的系統已經針對其各個版本發布了修補程式,若已經檢測自己的系統有ShellShcok漏洞,可以依照下列指令更新bash。
Ubuntu及Debian的指令如下所示,使用其中一行即可:
 apt-get update → apt-get upgrade
 sudo apt-get install --only-upgrade bash (只更新bash)
而Fedora及CentOS的指令如下所示,使用其中一行即可:
 yum update
 yum update bash (只更新bash)
關於Mac OS X的部份,依照版本來下載相對應的Patch並安裝即可:
 Bash Update for Mavericks (OS X 10.9.5+ required):
  http://support.apple.com/kb/DL1769
 Bash update for Mountain Lion (OS X 10.8.5):
  http://support.apple.com/kb/DL1768
 Bash Update for Lion (OS X 10.7.5):
  http://support.apple.com/kb/DL1767

因應策略
北區ASOC在漏洞公佈兩日內,便在所有資安設備上增設Shellshock的偵測規則,並有效的對轄下區網進行保護,防止轄下區網內的設備遭受測試及漏洞被利用。


圖四 Shellshock漏洞被攻擊情況


圖五 Shellshock漏洞被攻擊情況(關聯圖)

由於利用Shellshock漏洞需要使用固定的關鍵字,同時也成為了漏洞防堵的首要因素。下列文字敘述為佈署於IPS中數個規則其中之一:
alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"OS-OTHER Bash CGI environment variable injection attempt"; flow:to_server,established; content:"() {"; fast_pattern:only; http_header; metadata:policy balanced-ips drop, policy security-ips drop, ruleset community, service http; reference:cve,2014-6271; reference:cve,2014-7169; classtype:web-application-activity; sid:31978; rev:3; )
本規則主要比對的是「() {」此字串以及「往伺服器的資料流」,而針對此規則所偵測到的事件中,以其中之一做為範例來說明。封包檔內容如下所示。


圖六 Shellshock漏洞規則字串圖

上圖紅框處標示符合此偵測規則,此封包也為向一伺服器發出HTTP GET而產生事件告警資訊。除此之外,從後面的內容來判斷,此事件目的為對目標主機進行測試,若目標主機的回應帶有xbash:test此字串,則表示目標主機具有Shellshock此漏洞。

總結
雖然Shellshock漏洞有其嚴重性,但需要執行成功的攻擊仍須符合一定的條件,並非主機上有有問題的bash就會遭受攻擊,但前面章節所提到之特定作業系統、是否使用DHCP連線,以及網站伺服器是否使用CGI的部份仍是必須列為首要處理的設備。
面對此次的威脅,對外開放的伺服器宜優先處理,但需留意內部網路的攻擊與惡意行為。

參考資料
● 轉載網址:http://cert.ntu.edu.tw/Document/TechDoc/Detection_Method_to_ShellShock.pdf
● http://blog.longwin.com.tw/2014/09/cve-2014-6271-bash-remote-code-execution-2014/
● http://devco.re/blog/2014/09/30/shellshock-CVE-2014-6271/
● http://osxdaily.com/2014/09/29/os-x-bash-update-1-0-shellshock-patch/
● https://sebijk.com/community/board9-community/board5-pc/2985-getting-xp-updates/?s=78aee0506c40aedfb524ce20bec1ddc9fc1f4010