RETracer: Triaging Crashes by Reverse Execution from Partial Memory Dumps - Week 7
清華大學網路與信息安全實驗室(NISL)學術分享的試運行,歡迎關注~
從專欄發布試運行開始短短几天以來,已經吸引了近千同學的支持與關注,非常感謝!
導語
本篇為第七周的論文分享回顧,以梗概的形式對論文進行了簡單總結,方便感興趣的同學進行快速了解以及備忘。
我們的分享由兩部分組成:每周四的直播分享以及每周的論文推薦/回顧欄目,而論文推薦欄目由短文和長文兩種題材形式。
本周為大家帶來的是上周四分享的一篇文章:《RETracer: Triaging Crashes by Reverse Execution from Partial Memory Dumps》,本篇文章來自ICSE 2016,是軟體安全方向Crash分析的一篇值得一讀的好文。
本篇分享由 @reece 倪遠東同學帶來,版權歸 @reece 所有,未經授權禁止轉載。
RETracer: Triaging Crashes by Reverse Execution from Partial Memory Dumps
大多數軟體廠商都會通過crash報告服務來從眾多的客戶中自動收集crash。由於軟體廠商每天可能收到上百萬的crash報告,因此對廠商來說,對crash進行精確分類十分重要。然而,現有的crash分類系統僅僅基於崩潰棧上的信息而不考慮程序語義,因此效果十分有限。
本文提出了一種名為RETracer的工具,用於大規模的自動化crash分類。
RETracer是第一個根據core dump文件中重建的程序語義信息來進行crash分類的工具,其通過不依賴程序執行流的反向污點分析技術來進行分析。RETracer是目前微軟公司主流的crash分類服務,主要用於分類x86和x86-64架構下軟體產生的崩潰。
RETracer的主要工作流程如下:
- 從崩潰棧中的崩潰指令開始,按照規則引入污點。污點可以為寄存器或者具體的內存地址。
- 從崩潰指令開始,反向執行程序,逆向執行每一條指令,嘗試恢復程序的數據流,同時按照指令的語義進行污點的傳播。
- 但過程中可能遇到諸如XOR之類的不可逆指令,當遇到不可逆指令時,執行函數內的靜態分析,分析寄存器之間的值依賴關係,以輔助恢複數據流。
- 執行反向污點傳播,直到遇到常數、全局變數、動態內存地址等情況時停止污點傳播和程序反向執行,輸出反向污點傳播圖。
圖1 反向污點傳播圖的一個實例
- 利用反向污點傳播圖來找到初始的bad value,並分析可能引入bad value的節點,該節點所在的函數作為最終的blamed function。
- 按照確定的blamed function及其所在的模塊對crash進行分類。
目前,RETracer作為WinDBG的一個插件,被部署在微軟的crash報告服務平台用於crash的分類,其分類結果用於提交給相應的開發人員進行bug修復。
論文中的測試結果顯示,RETracer與微軟之前使用的!Analyze相比,降低了2/3的誤報率,因此目前其已經取代了!Analyze成為最主要的crash分類工具。
推薦閱讀:
※發表SCI論文有多難?
※為什麼當我閱讀英語時的記憶比閱讀中文時淺很多呢?
※蘭德公司推薦的經典論文
※看論文文獻用哪種閱讀器比較好?
※怎麼充分利用ELSEVIER和WEB OF SCIENCE 賬號?