1、簡介
漏洞研究主要分為漏洞分析和漏洞挖掘兩部分。漏洞分析技術是指對已發現漏洞的細節進行深入分析,為漏洞利用、補救等處理措施做鋪墊。
漏洞挖掘技術是指對未知漏洞的探索,綜合各種應用各種技術和工具,盡可能找出軟件中潛在的漏洞。
2、漏洞挖掘技術分類
目前廣泛應用的漏洞挖掘技術可以分為兩類:
- 靜態代碼審計:代碼審計技術根據分析對象的不同,可以分為源碼審計和基於目標代碼的漏洞挖掘。(白盒測試)
- 模糊測試:使用模糊測試的方法可以發現那些在源代碼審計中無法發現的關鍵漏洞。(黑盒測試)
2.1、靜態代碼審計
在路由器漏洞挖掘技術中,由於系統的封閉性,所以基本上是得不到源代碼的。可以使用IDA等匯編工具幫助我們將二進制代碼轉換為可讀性更好的匯編代碼,以便對代碼進行匯編層次的審計。
2.1.1、人工代碼審計
通常對路由器進行人工審計,需要具備審核人員熟悉二進制、多種匯編語言、操作系統底層的知識。一般采用的步驟為:
(1)使用IDA對目標程序進行反匯編。
(2)搜索可能造成安全漏洞的危險函數。
(3)跟蹤危險函數如何提取和處理用戶提供的數據的過程,判斷是否存在安全漏洞。
1、可能造成安全漏洞的函數
(1)部分用戶提供數據來源的相關函數
命令行參數:argv操作。
環境變量:getenv()。
輸入數據文件:read()、fscanf()、getc()、fgetc()、fgets()、vfscanf()。
鍵盤輸入/stdin:read()、scanf()、getchar()、gets()。
網絡數據:read()、recv()、recvfrom()。
(2)部分數據操作相關的危險函數
字符串復制:strcpy()、strncpy()。
命令執行:system()、execve()系列。
字符串合並:strcat()。
格式化字符串:sprintf()、snprintf()。
2、跟蹤和分析方法
既然我們已經知道了哪些函數是可能造成安全漏洞的危險函數,接下來我們需要定位到危險函數以及如何跟蹤其參數列表。根據危險函數類別的不同,提供了兩種跟蹤分析方法:
(1)正向數據流跟蹤
適用於用戶數據輸入類型的危險函數跟蹤。從用戶輸入點(用戶數據輸入函數)開始跟蹤數據處理過程中數據會對程序邏輯造成何種影響,從而判斷是否造成可利用的安全漏洞。
(2)數據處理逆向流跟蹤
適用於數據操作類型的危險函數跟蹤。跟蹤常見的數據操作危險函數,反向跟蹤函數參數的數據流向,找出源緩沖區和目的緩沖區,確定輸入數據是否會造成安全漏洞。
這兩種方法各有利弊。正向跟蹤的流程稍顯復雜、分支較多、跟蹤難度大,但是覆蓋全面,可以找到所有可能的安全漏洞。而逆向跟蹤的數據構造較容易、流程比較確定,卻容易遺漏漏洞,覆蓋面不廣。
2.1.2、二進制自動化漏洞審計
要想實現對二進制文件潛在漏洞審計的自動化,必須理解二進制文件是哪一種可執行文件格式,理解其使用的機器語言指令,並且能夠通過對指令流和數據流的分析確定指令所執行的動作是否可被利用。
二進制文件漏洞自動化審計工具的主要難題集中在如何准確地描述導致漏洞條件的行為特征上。這類行為包括越界訪問分配的內存(棧或堆內存)、使用未初始化的變量或直接將用戶輸入傳給危險函數。要想完成這些任務中的任何一個,自動化分析工具都必須能夠精確計算索引變量或指針的值的范圍,追蹤程序使用的用戶輸入的處理流程,並跟蹤程序引用的所有變量的初始化代碼。最后,為了做到真正有效,還必須能夠可靠地執行以上所有任務。
1、BugScam工具
BugScam是Halvar Flake編寫的一組用於IDA Pro的腳本。
IDA Pro具有兩個異常強大的功能,即腳本編程和插件架構。這兩個功能都可以讓用戶擴展IDA Pro的功能,並利用IDA Pro對目標二進制代碼進行大量分析。
BugScam工具會掃描那些往往會導致可被利用漏洞條件的潛在的不安全函數。而且會嘗試執行一些初步的數據流分析,以便更准確地判斷這些不安全函數是否真的可以被利用。
BugScam工具會在掃描完成后生產一份HTML報告,其中包含潛在問題所處的虛擬地址,以及掃描發現的問題。
BugScam工具在x86平台上的運行效果還是不錯的,但是存在一定局限性。不能審計MIPS指令系統的應用程序,而且誤報率和漏報率還是稍微高一些。但是可以將其移植到MIPS系統中。
具體玩法,等以后測試過在寫。
2.2、模糊測試Fuzzing
模糊測試的是一種介於完全的手工滲透測試與完全自動化測試自己的安全性黑盒測試類型。測試過程大致分為5個階段。
- 確定輸入向量
- 生成模糊測試數據
- 執行模糊測試
- 監視異常
- 根據被測系統的狀態判斷是否存在潛在的安全漏洞。