漏洞挖掘分析技術總結


漏洞挖掘分析技術有多種,只應用一種漏洞挖掘技術,是很難完成分析工作的,一般是將幾種漏洞挖掘技術優化組合,尋求效率和質量的均衡。

2.1.人工分析

人工分析是一種灰盒分析技術。針對被分析目標程序,手工構造特殊輸入條件,觀察輸出、目標狀態變化等,獲得漏洞的分析技術。輸入包括有效的和無效的輸入,輸出包括正常輸出和非正常輸出。非正常輸出是漏洞出現的前提,或者就是目標程序的漏洞。非正常目標狀態的變化也是發現漏洞的預兆,是深入挖掘的方向。人工分析高度依賴於分析人員的經驗和技巧。人工分析多用於有人機交互界面的目標程序,Web漏洞挖掘中多使用人工分析的方法。

2.2.Fuzzing技術

Fuzzing技術是一種基於缺陷注入的自動軟件測試技術,它利用黑盒分析技術方法,使用大量半有效的數據作為應用程序的輸入,以程序是否出現異常為標志,來發現應用程序中可能存在的安全漏洞。半有效數據是指被測目標程序的必要標識部分和大部分數據是有效的,有意構造的數據部分是無效的,應用程序在處理該數據時就有可能發生錯誤,可能導致應用程序的崩潰或者觸發相應的安全漏洞。

根據分析目標的特點,Fuzzing可以分為三類:

1.動態Web頁面Fuzzing,針對ASP、PHP、Java、Perl等編寫的網頁程序,也包括使用這類技術構建的B/S架構應用程序,典型應用軟件為HTTP Fuzz;

2.文件格式Fuzzing,針對各種文檔格式,典型應用軟件為PDF Fuzz;

3.協議Fuzzing,針對網絡協議,典型應用軟件為針對微軟RPC(遠程過程調用)的Fuzz。

Fuzzer軟件輸入的構造方法與黑盒測試軟件的構造相似,邊界值、字符串、文件頭、文件尾的附加字符串等均可以作為基本的構造條件。Fuzzer軟件可以用於檢測多種安全漏洞,包括緩沖區溢出漏洞、整型溢出漏洞、格式化字符串和特殊字符漏洞、競爭條件和死鎖漏洞、SQL注入、跨站腳本、RPC漏洞攻擊、文件系統攻擊、信息泄露等。

與其它技術相比,Fuzzing技術具有思想簡單,容易理解、從發現漏洞到漏洞重現容易、不存在誤報的優點。同時它也存在黑盒分析的全部缺點,而且具有不通用、構造測試周期長等問題。

常用的Fuzzer軟件包括SPIKE Proxy、Peach Fuzzer Framework、Acunetix Web Vulnerability Scanner的HTTP Fuzzer、OWASP JBroFuzz、WebScarab等。

2.3.補丁比對技術

補丁比對技術主要用於黑客或競爭對手找出軟件發布者已修正但未尚公開的漏洞,是黑客利用漏洞前經常使用的技術手段。

安全公告或補丁發布說明書中一般不指明漏洞的准確位置和原因,黑客很難僅根據該聲明利用漏洞。黑客可以通過比較打補丁前后的二進制文件,確定漏洞的位置,再結合其他漏洞挖掘技術,即可了解漏洞的細節,最后可以得到漏洞利用的攻擊代碼。

簡單的比較方法有二進制字節和字符串比較、對目標程序逆向工程后的比較兩種。第一種方法適用於補丁前后有少量變化的比較,常用的於字符串變化、邊界值變化等導致漏洞的分析。第二種方法適用於程序可被反編譯,且可根據反編譯找到函數參數變化導致漏洞的分析。這兩種方法都不適合文件修改較多的情況。

復雜的比較方法有Tobb Sabin提出的基於指令相似性的圖形化比較和Halvar Flake提出的結構化二進制比較,可以發現文件中一些非結構化的變化,如緩沖區大小的改變,且以圖形化的方式進行顯示。

常用的補丁比對工具有Beyond Compare、IDACompare、Binary Diffing Suite(EBDS)、BinDiff、NIPC Binary Differ(NBD)。此外大量的高級文字編輯工具也有相似的功能,如Ultra Edit、HexEdit等。這些補丁比對工具軟件基於字符串比較或二進制比較技術。

2.4.靜態分析技術

靜態分析技術是對被分析目標的源程序進行分析檢測,發現程序中存在的安全漏洞或隱患,是一種典型的白盒分析技術。它的方法主要包括靜態字符串搜索、上下文搜索。靜態分析過程主要是找到不正確的函數調用及返回狀態,特別是可能未進行邊界檢查或邊界檢查不正確的函數調用,可能造成緩沖區溢出的函數、外部調用函數、共享內存函數以及函數指針等。

對開放源代碼的程序,通過檢測程序中不符合安全規則的文件結構、命名規則、函數、堆棧指針可以發現程序中存在的安全缺陷。被分析目標沒有附帶源程序時,就需要對程序進行逆向工程,獲取類似於源代碼的逆向工程代碼,然后再進行搜索。使用與源代碼相似的方法,也可以發現程序中的漏洞,這類靜態分析方法叫做反匯編掃描。由於采用了底層的匯編語言進行漏洞分析,在理論上可以發現所有計算機可運行的漏洞,對於不公開源代碼的程序來說往往是最有效的發現安全漏洞的辦法。

但這種方法也存在很大的局限性,不斷擴充的特征庫或詞典將造成檢測的結果集大、誤報率高;同時此方法重點是分析代碼的“特征”,而不關心程序的功能,不會有針對功能及程序結構的分析檢查。

2.5.動態分析技術

動態分析技術起源於軟件調試技術,是用調試器作為動態分析工具,但不同於軟件調試技術的是它往往處理的是沒有源代碼的被分析程序,或是被逆向工程過的被分析程序。

動態分析需要在調試器中運行目標程序,通過觀察執行過程中程序的運行狀態、內存使用狀況以及寄存器的值等以發現漏洞。一般分析過程分為代碼流分析和數據流分析。代碼流分析主要是通過設置斷點動態跟蹤目標程序代碼流,以檢測有缺陷的函數調用及其參數。數據流分析是通過構造特殊數據觸發潛在錯誤。

比較特殊的,在動態分析過程中可以采用動態代碼替換技術,破壞程序運行流程、替換函數入口、函數參數,相當於構造半有效數據,從而找到隱藏在系統中的缺陷。

常見的動態分析工具有SoftIce、OllyDbg、WinDbg等。

3.典型技術應用


Acunetix Web Vulnerability Scanner軟件的HTTP Fuzzer工具

使用Acunetix Web Vulnerability Scanner軟件進行漏洞挖掘,該軟件提供了一些預定義好的Fuzz運算參數庫,可以便於初學者上手,也可以方便分析者使用。過程如下:

1.定義HTTP請求(Request),即定義所需訪問的網頁URL;

2.定義運算參數(Add generator),即定義可能產生漏洞的字符串表達式,如:查找$password、$passwd、$token;

3.插入運算參數(Insert into request),即將定義好的多條運算參數綁定為一條搜索策略;

4.定義成功觸發特征(Fuzzer Filters),將運算參數與HTTP請求綁定;

5.掃描(Start);

6.等待軟件返回匹配的項,這些項就是可能的漏洞。

經過以上步驟,一個網頁中可能存在的漏洞就被發現了。

 

3.2.使用補丁比對技術找到漏洞的例子

2008年10月23日,微軟發布的MS08-067的補丁,該問題被列為嚴重。該安全更新解決了服務器服務中一個秘密報告的漏洞。如果用戶在受影響的系統上收到特制的RPC請求,則該漏洞可能允許遠程執行代碼。

漏洞挖掘過程為例說明補丁對比技術的應用。

首先保留一份原始文件,然后安裝新的補丁程序,提取出相同和新加入的文件后,就可以使用軟件進行對比。

 

經過對比后發現被修改的3個函數

對比軟件列出了三個函數名稱,分別為0.250.670.94並列出補丁前后的相似程度。通過對比結果,可以針對性構造參數,觀察補丁前后的行為,最終發現在給出的這三個函數中,有兩個是和漏洞直接相關的。

 

4.結束語

漏洞挖掘技術脫胎於軟件測試理論和軟件開發調試技術,可以大大提高軟件的安全性。網絡安全界的第三方機構、技術愛好者也利用該技術尋找各種軟件漏洞,並及時發布給大眾,為提高信息安全整體水平做出了貢獻。但漏洞挖掘也是一把雙刃劍,已經成為黑客破解軟件的主流技術。漏洞挖掘技術的發展前景是廣闊的,隨着信息安全越來越被重視,軟件開發技術越來越先進,新的分析手段會隨之出現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM