你是不是要玩死我呀 - 疑犯追蹤 Person of Interest S04E11 (IF-THEN-ELSE)
/1.webp)
疑犯追蹤劇照,圖片來源:primevideo.com
嗨,大家好,我是 ISDA 的 Walter,趁著最近有空把很久之前發現的美劇資安部分寫一下,因新冠肺炎 (COVID-19) 的疫情關係上半年協會活動較少,但之後應該會漸漸開設課程,再請大家多多關注,本人才疏學淺文章中如有錯誤之處還請不吝指教
疑犯追蹤這部影集
疑犯追蹤 (Person of Interest) 是一部 2011 開始播放的美劇,由非常有名的諾蘭兄弟中的弟弟 Jonathan Nolan 的創作之一,故事是從電腦天才 Harold Finch 與身手不凡的前 CIA 探員 John Reese 開始,Harold 創造出超強的人工智慧 The Machine 與運用國家級的資源監看所有人預測兇案聯手好身手的 John 加以預防,故事到了後半段更有其他有趣的角色加入,也加入了許多資訊工作者會懂的有趣彩蛋,是值得細細品味的一部好劇,我自己大概也從頭到尾看了三次了 XD
以下有雷請注意
======= 防雷分隔線 =======
/2.webp)
要進入請小心的防雷圖。圖片來源:MMMMM_禾野男孩
======= 防雷分隔線 =======
劇中出現的 Shellshock 指令
而我們這次所要講的是在第 4 季第 11 集中的部分,他們遇到前所未有的強敵 — 另外一個人工智慧 Samaritan,Samaritan 想運用他的資源與技術造成美國股市的崩盤,Harold 他們為了不讓世界造成恐慌即全力阻止 Samaritan,但為了阻止 Samaritan 必須進交易所安裝反制的程式駭入系統,殊不知此為 Samaritan 的陷阱,就在他們被困住的時候 The Machine 運用他強力的模擬功能預測最可行的逃脫方案,其中一個模擬方案便是請懂電腦的 Finch 小組去解鎖電梯,較為不懂電腦技術的 Reese 小組去安裝程式,結果在 Reese 輸入駭客程式的畫面竟然出現了資安人應該都很熟悉的指令
1 | env x='(){ :;}; echo vulnerable' bash-c |
/3.webp)
攻擊畫面與指令圖片來源:Person of Interest 劇中畫面
這段 PoC 有什麼問題
這個不就是 2014 年 9 月紅極一時 CVSSSv2 滿分 10 分的大漏洞 shellshock(CVE-2014–6271) 嗎?但是仔細一看,發現以下幾個問題:
雖然畫面上還沒輸入完,但怎麼在被好幾支槍指著的危急時刻還在輸入僅僅只是驗證是否存在漏洞實際上並無攻擊能力的 PoC(Proof of concept) 呢,此 PoC 在已經拿到可以下 bash 的情況下是沒有辦法有更深度的利用,頂多知道 bash 存在 shellshock 漏洞,Finch 是不是嫉妒 Reese 太帥想搞死他呀 (((゚Д゚;)))
看更仔細發現 bash-c 中間少個空白耶!這樣的 PoC 可能沒辦法正常運行,我們等一下做個測試看看
/4.webp)
來源:唐伯虎點秋香劇照
/5.webp)
打錯會哭哭喔。圖片來源:imgflip.com
順便吐槽台劇的駭客畫面
個人猜測可能是劇組人員想加入真實的攻擊手法但尚未了解其原理,但跟台灣鄉土劇的駭客嘴上說防火牆很難入侵但實際上亂打指令與使用 PPT 還沒全螢幕播放已經好上幾百倍了 (拜託台灣連續劇快來找專業的資安人員當顧問呀~~),而且當疑犯追蹤第四季播出首集也才 2014 的 9 月,所以幾乎是公布弱點 PoC 沒多久就將其編入劇中,已經算是相當用心了
/6.webp)
windows cmd 亂輸入。圖片來源:台灣連續劇 - 天下女人心劇照
漏洞模擬與測試
接下來讓我們來實際測試 shellshock 弱點看看吧!在研究漏洞的時候光是建立存在漏洞環境就需要許多時間,幸好有 Vulhub 已經建立了一堆的 docker 漏洞環境與簡單的 Exploit 或 PoC,我們只需要安裝 docker 並且下載 vulhub 的檔案就可以很輕鬆隨意的建立與移除漏洞環境
/7.webp)
超級方便的漏洞環境建立網站。圖片來源:Vulhub
漏洞模擬
我們首先使用 VMWare 先安裝一個 Ubuntu 之後依照他的文件或影片複製貼上語法就可以了
如果你的 Ubuntu 預設沒有 curl 與 git 等必要軟體就自己裝一個
1 | # Install package curl, git |
接下來是官方的建議,我小量修改
1 | # If you don't have a docker installed, you'll need to install docker |
查看一下是否正常運作,並且查看開啟的 port,預設應該為 8080
1 | ewater@ubuntu:~/Downloads/vulhub/bash/shellshock$ sudo docker ps |
我們查看一下 vulhub.org 對於 shellshock 的漏洞說明,文件上說了會有兩個 cgi 程式,分別是 safe.cgi 與 victim.cgi,safe.cgi 是用安全版本的 bash,victim.cgi 是使用存在 shellshock 漏洞的 bash4.3
我們嘗試存取對應的 ip:port/path (請依照自己的環境修改),發現都是顯示 Hello world
/8.webp)
存取對應路徑顯示 Hello world 代表環境已經正常執行
漏洞測試
再來我們就使用駭客神器 Burp Suite 攔截封包,有興趣的小夥伴可以下載免費的 Community 版本安裝,並且將 proxy 設定為 8080,攔截成功之後我們將封包傳送到 Burp Suite 的 repeater,將 User-Agent 的部分依照 vulhub 所描述的送到 victim.cgi
1 | User-Agent: () { foo; }; echo Content-Type: text/plain; echo; /usr/bin/id |
果然攻擊成功並且返回我們原本想要執行的 /usr/bin/id,顯示了 uid, gid 等資料
1 | uid=33(www-data) gid=33(www-data) groups=33(www-data) |
/9.webp)
利用 Burp Suite 攔截封包並修改後攻擊 shellshock 漏洞成功
再來嘗試相同的攻擊語法,僅將路徑改為 safe.cgi,果然攻擊失敗了
/10.webp)
利用 Burp Suite 攔截封包並修改後攻擊 shellshock 漏洞失敗
回頭驗證劇中那道少一個空白的 PoC
接著我們來嘗試進入 docker 裡面跑影片中的 PoC,發現的確影片中的指令少個空格,系統告訴我們找不到 bash-c 這個檔案或資料夾,在 bash 與 -c 中加入空格之後就成功顯示 vulnerable 與 whoami 的結果了
/11.webp)
進入 docker 內測試 PoC 結果
我們嘗試以 Ubuntu 較新的 4.4.20 版本 bash 嘗試看看,發現尚未將 bash 與 -c 分開之前仍然是失敗,修改後也只能顯示 whoami 的結果,並未顯示 vulnerable,代表此弱點已經修補
/12.webp)
於無 shellshock 漏洞之環境測試 PoC 結果
假如已經測試完畢記得將 docker 先停止
1 | # Stop shellshock docker |
/13.webp)
停止 shellshock 之 docker 環境
如果不想再測試 shellshock 也可以使用 rm 及 rmi 指令將它移除
漏洞原理與修補建議
測試完畢後我們來理解一下原理,在 linux 的環境下可以用設定環境變數甚至 function,如下圖於 shell 中的 PoC,綠色部分就是正常使用環境變數,而 shellshock 就是針對 bash 對環境變數的解析上的污染,紅色部分就是攻擊者在環境變數中塞入惡意指令,而藍色部分是當使用 bash 的時候,此時就會將當初我們設定環境變數裡面的紅色部分惡意指令也執行
/14.webp)
shellshock 原理。圖片來源:OWASP
而從外面的攻擊就是因為伺服器會將 HTTP Header 中 (剛才例子中使用 User-Agent) 之內容透過 module 放入環境變數中,若伺服器程式呼叫到 bash,就會受到惡意語法的影響
此弱點為 2014 年 9 月的弱點,如果你有好好的在更新上 Patch 應該是不太需要擔心此問題,若是擔心可以參考 DEVCORE 的文章進行評估與修補
文章就先寫到這邊,如果小夥伴們對資安有興趣或者想分享電影或劇集也可以在 ISDA 的 Line 或 Telegram 找到我,與我的小夥伴們一起學資安!
參考:










