漏洞挖掘分析技術總結

weixin_33941350發表於2014-03-22

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

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.結束語

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

相關文章