文獻鏈接:http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8115640&isnumber=8115603 一.背景介紹 基於堆的緩衝區溢出是最近安全事件中被廣泛利用的漏洞之一。攻擊者可以利用高風險堆溢出錯誤來執行任意代碼或者泄露敏感信 ...
文獻鏈接:http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8115640&isnumber=8115603
一.背景介紹
基於堆的緩衝區溢出是最近安全事件中被廣泛利用的漏洞之一。攻擊者可以利用高風險堆溢出錯誤來執行任意代碼或者泄露敏感信息(例如密碼和加密秘鑰),而低風險的溢出可能只會導致拒絕服務攻擊(DoS),鑒於每年報告的的堆溢出錯誤數量很大,因此高效地評估其嚴重性,以便將資源分配給高風險的資源,及時的分析和修補,嚴重性體現在可利用性(可以利用堆溢出錯誤來啟動攻擊執行任意代碼)。
演示漏洞可利用性的最終方法就是生成working exploits。以前的工作文獻[1],[2],[3],[4]研究自動生成exploits的實際可行性。一種機制是象徵性地執行整個程式並將整個約束捕獲為謂詞,然後通過解決約束來生成working exploits。AEG[1]和Mayhem[2]是此類別中的代表。儘管使用漏洞利用生成作為評估方法是準確的,但是由於程式分析技術的限制,它們無法為所有潛在的漏洞生成exploits。
另一種方法評估方法是分析崩潰點(導致程式崩潰的指令)後的執行代碼,例如Microsoft開發的!exploitable工具檢查與崩潰點相同的基本塊中的所有指令,來查找漏洞利用點——可利用的特殊用途指令,如控制流轉指令(call,jmp)或者影響條件的指令(cmp後跟jnz)。CRAX[3]採用這兩種技術的混合方法:從崩潰點開始,它象徵性地執行程式以便找到漏洞利用點。這類解決方案的弱點在於結果的正確性。這種崩潰通常會影響原來程式的行為,阻止了這些技術繼續找到其他任何可利用的點。此外,這些工具在發生崩潰的時停止工作,從而導致錯過潛在的漏洞利用點。
這篇文獻主要貢獻是:提出了一組度量來量化堆溢出的可利用性,這是一種旨在自動評估堆溢出可利用性的方法。
基於兩個指標:攻擊指標和可行性指標。前者是為了測量堆溢出的潛在威脅,後者則是構建實際工作漏洞的具體困難。基於這些指標,作者提出了一個框架HCSIFTER,用於自動評估堆溢出崩潰。這個框架通過動態程式分析準確檢測堆溢出錯誤。它跟蹤所有堆對象並檢查相關操作以檢查出超出範圍的堆記憶體訪問。檢測發生在崩潰點實際執行(導致堆溢出的指令)之前,為了提取溢出對程式執行的影響,HCSIFTER在損壞的記憶體區域中動態的執行數據恢復,以便程式能夠繼續正常執行分析,這是在堆溢出發生後繼續執行的而不發生任何崩潰的關鍵步驟(也是與其他動態方法相比的不同之處),在動態後續執行期間,HCSIFTER會跟蹤所有恢復記憶體區域,並根據漏洞利用模式檢測漏洞。作者還確定了幾種新的策略,使HCSIFTER能夠檢測其他技術遺漏的漏洞點。
在這篇文獻中,作者的目標是評估給定崩潰的單一路徑。如果存在多個路徑,他們的技術可以分別應用於每個路徑。使用模糊測試工具,或者符號執行工具,可以找到崩潰的其他執行路徑。
二.最終成果
1.作者提出了一套新的度量標準來量化堆溢出的嚴重性。他們的指標衡量了將崩潰轉化為漏洞的難度級別,包括潛在的攻擊方面和可行性方面。
2.作者設計並實現了一個原型工具HCSIFTER,它根據作者的指標自動評估給定堆溢出的可利用性。HCSIFTER引入了動態記憶體恢復和二階溢出,以自動評估漏洞利用生成的難度。
3.作者使用真實易受攻擊的程式評估了HCSIFTER。結果證明瞭它的有效性和效率性。
三.相關工作
這篇文獻主要涉及兩個方面:第一個是自動生成開發,第二個是檢測軟體溢出,特別是本文所關註的堆溢出。
自動開發生成:文獻[20]提出了第一個基於補丁的自動利用軟體漏洞。後來,通過整合預處理的符號執行和動態指令儀器,文獻[1]實現了第一個用於全自動漏洞利用生成的端到端系統。實際上,程式源代碼通常不可用。因此需要基於二進位代碼的漏洞利用生成,文獻[2]是第一個實際對二進位程式自動生成利用的人。文獻[21]進一步的目標是基於控制流劫持和重定向為給定的易受攻擊的程式生成多個漏洞利用。文獻[4]的目標是通過搜索加入程式數據流的方式自動生成面向數據的漏洞利用。
檢測堆溢出:文獻[22]建議在堆的頭部或尾部附加額外的保護數據以檢測緩衝區溢出。在緩衝區溢出期間,保護數據被破壞,然後就可以被檢測到(類似security_cookie和cannary)。除了保護數據外,還可以分配不可訪問的記憶體頁來檢測緩衝區溢出(文獻[23]),Low-fat指針[24]採用一種方法來檢測運行時堆溢出,它對地址中的堆對象信息進行編碼。傳播信息,並檢測緩衝區溢出。
與本文獻最相關的工作是由文獻[25]提出來的,這是基於二進位數據結構的逆轉,該方法為不同的堆分配不同的顏色並監視每個堆訪問。然而,這種方法嚴重依賴於二進位數據反轉,這將導致不精確(即錯誤否定)。
參考文獻鏈接:
1. T. Avgerinos, S. K. Cha, B. L. T. Hao, D. Brumley, "AEG: Automatic Exploit Generation", Proceedings of the 18th Annual Network and Distributed System Security Symposium, 2011.
2. S. K. Cha, T. Avgerinos, A. Rebert, D. Brumley, "Unleashing Mayhem on Binary Code", Proceedings of the 33rd IEEE Symposium on Security and Privacy, 2012.
3. S. K. Huang, M. H. Huang, P. Y. Huang, C. W. Lai, "CRAX: Software Crash Analysis for Automatic Exploit Generation by Modeling Attacks as Symbolic Continuations", Proceedings of the 6th International Conference on Software Security and Reliability, 2012.
4. H. Hu, Z. L. Chua, S. Adrian, P. Saxena, Z. Liang, "Automatic Generation of Data-Oriented Exploits", Proceedings of the 24th USENIX Security Symposium, 2015.
5. !exploitable Crash Analyzer, [online] Available: http://msecdbg.codeplex.com/.
20. D. Brumley, P. Poosankam, D. Song, J. Zheng, "Automatic Patch-Based Exploit Generation is Possible: Techniques and Implications", Proceedings of the 29st IEEE Symposium on Security and Privacy, 2008.
21. M. Wang, P. Su, Q. Li, L. Ying, Y. Yang, D. Feng, "Automatic Polymorphic Exploit Generation for Software Vulnerabilities", Proceedings of the 9th International Conference on Security and Privacy in Communication Networks, 2013.
22. W. Robertson, C. Kruegel, D. Mutz, F. Valeur, "Run-time Detection of Heap-based Overflows", Proceedings of the 17th USENIX Conference on System Administration, 2003.
23. S. Sidiroglou, G. Giovanidis, A. D. Keromytis, "A Dynamic Mechanism for Recovering from Buffer Overflow Attacks", Proceedings of the 8th International Conference on Information Security, 2005.
24. G. J. Duck, R. H. C. Yap, "Heap Bounds Protection with Low Fat Pointers", Proceedings of the 25th International Conference on Compiler Construction, 2016.
25. A. Slowinska, T. Stancescu, H. Bos, "Body Armor for Binaries: preventing buffer overflows without recompilation", Proceedings of the Usenix Technical Conference, 2012.