自動化二進位文件分析框架:angr
作者:@劉巍然-學酥
鏈接:知乎專欄
前言
各位知友新年快樂!
今天收到私信,我這個接近半年沒有更新的專欄竟然被知乎的編輯們推薦到了App端「發現」頁面的「專欄」項目中了。我個人其實感覺挺羞愧難當的。雖然下半年也完成了不少Black Hat、DEF CON視頻的翻譯工作,無奈手頭上的事情實在太多,沒能靜下心來好好撰寫分析文章。不過現在好啦,手上的事情基本處理完了,我也能抽出時間踏踏實實讀一讀材料,盡量為知友們帶來高質量的國際黑客大會演講分析。
今天為大家帶來的視頻來自Black Hat 2015,題目為:應用靜態二進位分析方法尋找固件中的漏洞和後門(Using Static Binary Analysis To Find Vulnerabilities And Backdoors In Firmware)。之所以分析這個視頻,是因為我非常認同此種研究:依託高校,解決實際問題,同時在頂級安全會議和頂級黑客會議上報告。我認為這才是安全應有的態度,理論和實踐本身是不分家的,理論和實踐的結合會做出更棒的成果!
固件和固件中的後門
嵌入式設備越來越多地出現在人們的日常生活之中。所謂嵌入式設備,簡單地說就是一個可獨立完成特定工作的設備,或者說是一個微型計算機。最經典的嵌入式設備就是日常生活中的手機了。當然,不光智能手機屬於嵌入式設備,以前的哪些非智能手機,甚至是最早的大哥大,都可以看作是嵌入式設備。
和計算機類似,嵌入式設備也有硬體部分和軟體部分。嵌入式設備的硬體部分就是設備本身,而軟體部分就是「固件」。為什麼起了這麼個名字呢?因為嵌入式設備的固件一般存儲在EROM(可擦寫只讀存儲器)或EEPROM(電可擦可編程只讀存儲器)中。
注意,這兩種存儲器都包含同一個關鍵字:「只讀」。當寫入到此類存儲器後,固件只能被讀取、或被擦除後重寫,但是不能修改。這也是為什麼如手機、路由器等典型嵌入式設備總有一個功能為:恢復出廠設置。所謂恢復出廠設置,就是把手機的全部內容擦除,把手機重置為存儲在固件中的出廠設置。
不過,我們總會聽到一種說法:刷一下固件。一般刷固件就是把EROM或EEPROM中存儲的固件刪除,再重寫入一個新的固件。之前的很多手機都可以通過刷固件的方式實現各種神奇的功能,比如清除系統應用程序什麼的。本質上,刷固件相當於把嵌入式設備的軟體系統完全替換。軟體系統都被完全替換了,系統應用程序自然而然也就被替換了。
什麼是固件中的後門呢?固件後門是指,固件的開發人員或者惡意攻擊者,可以利用所謂的後門,在未得到用戶授權的條件下控制或完全控制設備。
聽起來比較抽象,我們舉個例子:一般來說,手機用戶需要自行設置手機的解鎖口令(比如密碼、九宮格什麼的),只有正確輸入解鎖口令才能解鎖手機。然而,手機的固件中存在一個後門:只要輸入一個特殊的口令就可以直接解鎖手機。更隱蔽的方法可能是:按10次Home鍵,按3次增加音量鍵,再按2次減小音量鍵,就可以解鎖手機。這就是所謂的後門了。
後門可能不僅僅是解鎖手機這麼簡單。如果汽車、門禁系統有後門,那可就糟糕了。舉幾個例子:
- 如果門禁系統有後門,攻擊者可以通過後門打開門禁。當然,後門還可能是另一種形式:攻擊者給門禁發送一個特殊的指令,門禁告訴攻擊者用戶那些時候開門了。這樣一來,攻擊者就可以把握用戶的動向,判斷用戶是否在家。
- 如果智能電報有後門,攻擊者或許可以篡改電錶數字,讓用戶支付更多的電費。攻擊者或許還可以知道用戶用電量的趨勢。如果某時刻用電量大,則判斷用戶在家;如果長時間用電量低,則判斷用戶出遠門了。
分析固件的後門還有一個難題:一般來說設備廠商不會公開固件的源代碼。如果有源代碼的話,後門的分析可能還簡單一些。但是,我們可能只能從二進位文件入手分析固件的後門了。
我們知道,源代碼要經過編譯、鏈接等操作,最終生成二進位可執行文件:
但在生成二進位文件的過程中,代碼中的變數名、變數類型、函數名等會被完全剔除。由於存儲固件的存儲器空間有限,編譯器有時候還會對代碼進行優化,甚至從彙編語言的層面上進行優化。這使得逆向工程會變得非常困難。即使實現了二進位文件的逆向工程,源代碼可能也和天書沒什麼區別…
那麼,如果不能對固件的二進位文件實施逆向,就無法分析後門了嗎?答案是否定的。
靜態二進位分析與動態二進位分析
一般來說,二進位文件有兩種分析方法:靜態分析、動態分析。
靜態分析是指:直接閱讀二進位編碼。雖然固件已經被編譯為二進位文件,但畢竟二進位文件本身還在,如果能弄明白二進位文件在做什麼,肯定能判斷固件是否存在後門。因此,靜態分析的特點是:覆蓋全面。
但是,靜態分析有它的缺點。如前面所說,二進位文件本身並不好理解,甚至像天書一樣。因此,靜態分析想得到精確的結果,則需要進行長時間的分析,使分析時間變長。如果分析時間有限,靜態分析得出的結論可能是不準確的。結論可能會是這樣的:這個固件可能存在後門。這個結論沒錯,但是沒什麼卵用。靜態分析的優缺點可見下圖的幻燈片:
另外,我在網上找到了科羅拉多大學計算機科學家Mario Barrenechea的一個課件,課件中詳細講解了靜態分析、動態分析這兩種程序分析手段。知友們可參考此課件了解相關的知識:https://www.cs.colorado.edu/~kena/classes/5828/s12/presentation-materials/barrenecheamario.pdf。
我們的問題是:能否克服靜態分析或者動態分析的缺點,實現一個比較好的二進位文件自動化分析工具呢?
基本實現思想
Christophe Hauser與Yan Shoshitaishvili解決的問題是:應用靜態分析方法,尋找「認證旁路」這類特殊的後門。所謂認證旁路,就是後門可以不執行固件中的身份認證演算法,從而直接控制設備。
傳統的認證旁路檢測思路如下圖所示:
控制流圖中一般存在一個「認證過程」,程序執行時先通過認證,認證通過後達到「認證通過」狀態,進行後續操作;否則,達到「認證失敗」狀態,不允許進行後續操作。所謂後門,就是幻燈片左邊的程序分支:應用後門可以繞過認證過程,直接達到「認證通過」狀態。這種方法的問題是:從二進位程序中找到「認證過程」很麻煩。
我們換個思路,能否不找「認證過程」,而是找「認證通過」狀態,通過「認證通過」狀態回溯「認證過程」呢?答案是肯定的。實際上,這便是Christophe Hauser與Yan Shoshitaishvili的核心創新點:
如何尋找認證通過狀態呢?因為認證通過的目的是允許用戶執行一些操作,因此我們可以先從功能上定義,哪些操作可以認為是認證通過後才允許執行的。這些操作就可以作為「認證通過」狀態。這些操作包括但不限於:
- 執行特定的系統服務,如喚醒系統、重啟、關機等
- 訪問特定的文件
- 訪問特定的內存地址,甚至訪問特定的寄存器地址
- 執行特定的代碼,如向周邊設備發送「請求數據」命令
得到「認證通過」狀態後,以此狀態為出發點對程序進行針對性的分析,從而找到漏洞。
二進位自動化分析工具:angr
Christophe Hauser與Yan Shoshitaishvili所在的團隊開發了二進位自動化分析工具angr,實現了上述思路,做到了固件認證旁路的自動化分析。當然了,他們的分析工具用到了很多比較複雜的技術,如符號執行(Symbolic Execution)、值-集分析(Value-Set Analysis)等。這些雖然是已經存在的技術,但是對非專業人士來說相對比較複雜。感興趣的知友們需要閱讀Christophe Hauser與Yan Shoshitaishvili發表的論文。我在專欄的最後會給出論文題目。
先來看看效果吧,Yan編寫了一個包含後門的小程序:一般情況下,正確輸入用戶名和口令後,輸入特定的口令,程序才會列印「認證通過」。但是,當輸入特定的口令時,程序會直接列印「認證通過」。這個特定的口令直接寫在了程序內部,並硬編碼到了二進位可執行文件中。
隨後,Yan用angr的圖形化操作界面,簡單地點了點滑鼠,就完成了此二進位文件的分析,找到了這個特定的口令:Welcom to the admin console, trusted user。當然了,實際二進位文件的控制流圖會非常複雜,後門可能不僅僅是特殊口令這麼簡單了。Yan用angr直接對bash的二進位文件進行分析。只分析bash的初始化過程就消耗了大量的時間。
為實現對任意二進位文件的快速分析,Yan等人綜合應用了多種靜態分析方法。這些方法的深入分析已經超過了我的理解能力… 感興趣的知友真的需要閱讀論文了。哎,不得不說,現在做安全也要讀文獻啦,其實是個好消息。Yan等人把angr用在了哪裡呢?他們把angr用到了DARPA網路大挑戰(DAPRA Cyber Grand Challenge)中,並獲勝(官方網址:http://archive.darpa.mil/CyberGrandChallenge_CompetitorSite/)。可能有些知友不了解這個所謂的DAPRA Cyber Grand Challenge。這個比賽的宗旨是構建自動化工具,實現攻擊和防禦功能。可別小看這個比賽,Cyber Grand Challenge屬於Grand Challenge的一部分,組織方是那個縮寫Defense Advanced Research Projects Agency(DAPRA),這個組織隸屬於美國國防部…
The DARPA Grand Challenge is a prize competition for American autonomous vehicles, funded by the Defense Advanced Research Projects Agency, the most prominent research organization of the United States Department of Defense. Congress has authorized DARPA to award cash prizes to further DARPAs mission to sponsor revolutionary, high-payoff research that bridges the gap between fundamental discoveries and military use.(來源:DARPA Grand Challenge)
因為angr實在是太優秀了,Yan等人分別在Black Hat 2015和DEF CON 24上講解了angr。下方連接為DEF CON 24的演講稿:https://media.defcon.org/DEF%20CON%2024/DEF%20CON%2024%20presentations/DEFCON-24-Shellphish-Cyber%20Grand%20Shellphish-UPDATED.pdf。
與此同時,團隊還在信息安全旗艦會議NDSS 2015、NDSS 2016、Security and Privacy 2016上分別介紹了angr的各個組成部分和功能。
最令人欣慰的是,在Black Hat 2015結束後,團隊把angr開源了!整個工程用Python撰寫,代碼量約為60000行。angr的官方網址為:http://angr.io。
最後,我分別給出與angr相關的學術論文,它們是:
- NDSS 2015:Firmalice - Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware(http://101.96.8.164/www.cs.ucsb.edu/~chris/research/doc/ndss15_firmalice.pdf)。
- NDSS 2016:Driller: Augmenting Fuzzing Through Selective Symbolic Execution(https://www.internetsociety.org/sites/default/files/blogs-media/driller-augmenting-fuzzing-through-selective-symbolic-execution.pdf)
- Security and Privacy 2016:SoK: (State of) The Art of War: Offensive Techniques in Binary Analysis(SOK: (State of) The Art of War: Offensive Techniques in Binary Analysis)
PS
以前我一般會等中文翻譯視頻發布到i春秋的公開課平台(網路安全課程|網路安全視頻課程|網路安全培訓課程|信息安全培訓教程-i春秋)上後再撰寫分析貼的。但我現在發現,等視頻發出來了,視頻內容我也就忘得差不多了… 所以,後面的視頻我做完後就會直接撰寫分析貼。如果知友英語水平不錯,可以直接翻牆到YouTube上面看原始視頻,也可以關注i春秋的公開課頁面,等待中文翻譯版本上線。
需要強調的是,我還真不是為i春秋打廣告。由於是i春秋平台組織的視頻翻譯工作,並負責中文字幕視頻的發布與更新,因此知友們想看的話,可能只能通過這一種手段觀看…不過,我負責翻譯的視頻在i春秋上都是免費觀看的(但需要註冊i春秋賬號),我認為這也是盡量踢除廣告效應,真切實現技術交流目的的一種方式。安全無價!
推薦閱讀:
※那些年病毒用過的損招——攻擊調試器
※安卓逆向入門(一)
※演算法逆向1——簡單演算法逆向
※GCHQ 對卡巴斯基實驗室的商業軟體進行逆向工程,卡巴斯基實驗室是否可以提起法律訴訟?
※為何我國可以生產j20,卻生產不出好的汽車?