資安防護的震撼彈 ─ Shellshock
ASRC 研究中心主任 高銘鍾

2014年4月爆發了OpenSSL Heartbleed漏洞,其威脅性在於只要啟動了OpenSSL中Heartbeat這個提高連線效率的擴充程式,就有機會遭到程式自動重覆猜測,以獲取記憶體中的機敏訊息,由於許多Unix-like的伺服器都存在這個問題,因此它算是一個範圍相當大的資安議題。而在2014年9月被發現的Shellshock漏洞,比起Heartbleed是更加嚴重的!這個漏洞其實已經存在相當久時間,許多Unix-like的伺服器普遍存在這個漏洞,或許,早有人在此漏洞揭露前即已長期利用!

漏洞原理

造成Shellshock的漏洞原因,在於bash可視為一種手稿語言(Script Language),可以描述簡單的語言與電腦溝通,不經編譯(compile)即可直接執行並看見結果,因此它也可以定義出新的指令功能,比方:
ok() { echo ‘ASRC is good!’; }

如此定義後,輸入「ok」,即會立即顯示「ASRC is good!」的結果。但這個「ok」指令在另一個新開的bash環境就不再可以被執行,比方再次輸入一個「bash」指令,接著再輸入「ok」,則不會再出現「ASRC is good!」的結果。如果再新的bash也希望還能保留「ok」這個指令,那需要以「export -f ok」將「ok」匯出到bash的執行環境。匯出後,您可以「env」指令來查看目前bash執行的環境變數,會再最底下看見剛剛「export」的結果。

bash在初始化環境變數時,會掃瞄環境變數中是否有函式定義,它只要看見「() {」開頭的字串就會認定它是函式。這邊存在一個Bug,就是環境變數若已存在一組「() { :;};」函式定義,並於其後接上指令時,再開一個新的bash初始化環境變數時,它會順便執行上一層環境變數中,函式定義外面的指令。利用這個原理,您就可以在新的bash執行環境被執行前,預先注入一個你想執行的指令,比方:
export x='() { echo "ASRC is good!"; }; echo "problem!";'

匯出後,以「env」指令來查看目前bash執行的環境變數,會看見「x='() { echo "ASRC is good!"; }; echo "problem!";'」存在環境變數中。



此時再輸入一次「bash」開一個新的bash環境,則「echo "problem!"」就會被順便執行起來,然後再以「env」查看新的bash環境,只會存在「x=() { echo "ASRC is good!"}」。



我們用下面這個簡單的流程來說明這情況:

根據這個原理,我們可以利用「() { :;};」這個神奇字串,再搭配bash -c這個指令強迫開啟一個新的bash,就可以順便執行神奇字串後的指令,比方:
env x='() { :;}; echo problem!' bash -c 'echo test'

如果您在您的Unix-like系統執行上述指令,看見了「problem!」,則表示您的系統存在了Shellsock的問題,在執行bash –c時,「echo problem!」指令已經順便被執行。

攻擊方法

這個漏洞乍看之下,似乎僅影響登入本機的使用者,可透過此漏洞繞過受限的shell功能;事實上,這個漏洞的影響層面十分廣泛,凡是存在此漏洞的伺服器所使用的程式語言、對外網路服務,只要服務或撰寫的程式語言有呼叫bash指令,就有機會被利用。漏洞爆發之初,最先大範圍受害的為Web服務,若您為系統管理者,建議您可以檢查各種對外服務的log檔,並搜尋其中是否存在「() { :;};」這個神奇字串,或許您可在其中看到不少的攻擊嘗試。

郵件伺服器亦存在被攻擊的危險,qmail郵件伺服器即為一例。只要假裝對其發送郵件,並在輸入寄件人資訊時,刻意輸入「mail from:<() { :; };」,其後即可接上任何的攻擊指令,比方常見用以建立後門的「nc」指令;並可透過「;」串接多個指令,要求受攻擊的郵件伺服器先下載一個複雜的Perl程式後,再執行它!

如何防範

多數知名的Unix-like作業系統 (CentOS、Debian、Fedora、Ubuntu、Gentoo在漏洞爆發前的版本) 都已經有針對此漏洞釋出修補程式,建議您應盡速更新修補此漏洞。若您的系統在更新修補前,已經存在這個漏洞,在您更新修補後,應詳查各種log、暫存檔及自動、定時服務的設定檔…等,確認系統未遭到任何非預期的植入或改寫。除了自行架設的Unix-like系統外,容易被忽略的是外購的現成網路服務設備,比方各種Router與NAS,它們的作業系統所使用的Shell很可能也是bash,並且其上所提供的服務也受此漏洞影響,建設您務必速洽這些設備的開發商尋求合宜的修補程序。

回到列表