自動評估堆溢出的崩潰

来源:https://www.cnblogs.com/Kluas/archive/2018/10/10/9769492.html
-Advertisement-
Play Games

文獻鏈接: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.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用vs code開發紙殼CMS,在編輯Razor視圖時,啟用智能提示。之前使用vs code在編輯Razor(cshtml)時,並沒有智能提示,所以一直沒有使用vs code來做.net core的開發。 ...
  • 這個也是比較容易翻車的東西,記錄一下 補充點內容差點忘了:C#裡面 棧是編譯期間就分配好的記憶體空間,因此你的代碼中必須就棧的大小有明確的定義;局部值類型變數、值類型參數等都在棧記憶體中。 堆是程式運行期間動態分配的記憶體空間,你可以根據程式的運行情況確定要分配的堆記憶體的大小。 堆 1,有人老是搞不明白堆 ...
  • 碰到這個問題兩次了,翻了兩次車的情況下總結一下裝箱和拆箱,這裡呢涉及到兩個東西,值類型還有引用類型 值類型是什麼:C#中的多數基本類型都是值類型,值類型包括簡單類型,枚舉類型,結構類型 引用類型是什麼:引用類型表示指向數據的指針或引用,可存儲對實際數據的引用。引用類型 在記憶體中的存儲位置僅包含堆上對 ...
  • 最近也研究了一段時間的IdentityServer4,園裡關於IdentityServer的文章也很多,這裡也簡單寫寫,做做記錄(文筆不佳,見諒)。 1.identityserver是什麼? Identityserver是一個OpenID Connect和OAuth 2.0框架。它實現了這兩種協議流 ...
  • 1. 更新站點修改 由於之前說過,安裝Jenkins後首次訪問時由於其他原因【具體未知】會產生離線問題。網上找了個遍還是不能解決,所以只能跳過常用插件安裝這步。進入Jenkins後再安裝這些插件。 在安裝插件前,先修改“更新站點”信息,如下: 站點信息從:https://updates.jenkin ...
  • 經歷一次莫名其妙的懵逼系統崩潰後,我對破解軟體/激活軟體終於有了陰影,想想就想哭,不過怨不了別人,鍋不能隨便甩,怪自己粗心大意,怪自己太懶嗚嗚嗚... 所以有心將這次心路歷程記錄下來,謹防自己下次再犯無腦錯誤!!! 事件起因:為了激活matlab r2017b,在網上找啊找,我知道要激活需要的還是許 ...
  • ssh服務突然連接不了案例總結 一臺Oracle資料庫伺服器(Linux版本為Oracle Linux Server release 5.7)今天中午突然出現短暫的ssh連接不上的情況,ssh連接不上的時候,ping伺服器正常,使用psping檢測埠22也是正常(只返回5個包,沒有持續ping),... ...
  • 1. 安裝的需求背景 我們知道ifconfig 命令可以用於查看、配置、啟用或禁用指定網路介面,如配置網卡的IP地址、掩碼、廣播地址、網關等,功能不可謂不豐富。 此命令的功能和windows系統的ipconfig非常類似。 但是,centos 7 預設已不再安裝此命令,其中很多功能用 ip addr ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...