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 賬號?

TAG:网络安全 | 信息安全 | 学术论文 |