<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 基于動(dòng)態(tài)輸入追蹤的模糊技術(shù)研究

基于動(dòng)態(tài)輸入追蹤的模糊技術(shù)研究

作者: 時(shí)間:2011-12-20 來(lái)源:網(wǎng)絡(luò ) 收藏

 1 概述

本文引用地址:http://dyxdggzs.com/article/187078.htm

  隨著(zhù)信息技術(shù)的廣泛應用,軟件安全漏洞所造成的危害正日益嚴重。軟件安全漏洞發(fā)掘作為一種預先發(fā)現軟件潛在安全漏洞、保證信息安全的重要技術(shù),也越來(lái)越受到人們的重視。目前國內外常用的漏洞自動(dòng)發(fā)掘技術(shù)主要有手工分析、(fuzzing)技術(shù)、補丁比較、源碼自動(dòng)分析和調試等。

  軟件安全漏洞發(fā)掘技術(shù)大致分為基于源代碼的漏洞發(fā)掘技術(shù)和基于可執行文件的漏洞發(fā)掘技術(shù)。然而現在大多數軟件都不是開(kāi)源的,如各種商業(yè)軟件和操作系統軟件等,因此,針對可執行文件的漏洞發(fā)掘技術(shù)顯得尤為重要。

  fuzzing 測試是通過(guò)提供非正常的并監測系統異常發(fā)現軟件安全漏洞的自動(dòng)化方法。它的基本原理是將利用正確數據隨機修改得到的畸形數據注入應用程序中,觀(guān)察運行結果(程序崩潰或者異常中斷),通過(guò)程序運行的錯誤來(lái)挖掘軟件的脆弱點(diǎn)。fuzzing 測試的思想比較直觀(guān),便于實(shí)現自動(dòng)化。利用這種方法進(jìn)行漏洞發(fā)掘,發(fā)現漏洞到定位漏洞比較容易,并且不存在誤報,但卻能揭示出程序中的重要漏洞,目前正廣泛應用于各類(lèi)軟件漏洞的發(fā)掘,在近幾年的漏洞挖掘實(shí)踐過(guò)程中取得了很好的效果。

  雖然經(jīng)過(guò)多年的發(fā)展fuzzing 技術(shù)已經(jīng)取得長(cháng)足的進(jìn)步,但是仍然存在較多的不足,主要體現在以下4 個(gè)方面:

 ?。?)測試數據生成有一定程度的盲目性,不能進(jìn)行有針對性的測試,因此數據變化空間難以控制。(2)代碼覆蓋問(wèn)題,通常生成的大量測試用例分布在某些特定的分支和狀態(tài)上,而一些特殊的分支或者狀態(tài)得不到覆蓋,因此代碼的測試完整性不足。(3)生成用例難以通過(guò)軟件的正確性和一致性檢測,造成生成大量無(wú)效測試用例,或需要人工對復雜的文件格式進(jìn)行分析,測試效率低下。(4)難以發(fā)現需要幾個(gè)同時(shí)起作用才能引發(fā)的異?;蚨嚯A段綜合條件觸發(fā)的復雜漏洞。本文在結合了靜態(tài)分析和分析技術(shù)的基礎上,提出一種基于路徑追蹤的fuzzing 技術(shù)進(jìn)行軟件安全漏洞發(fā)掘的新思路,較好地解決了上述問(wèn)題。

  2 總體框架與關(guān)鍵技術(shù)

  2.1 基本框架

  基于動(dòng)態(tài)輸入跟蹤的fuzzing 技術(shù)的基本原理為:將待測軟件的可執行代碼反匯編為匯編代碼,通過(guò)靜態(tài)分析匯編代碼,確定函數塊及其調用關(guān)系,并查找代碼分支選擇信息以供生成測試用例,動(dòng)態(tài)跟蹤輸入數據的流向以確定錯誤注入點(diǎn),將測試用例注入后若無(wú)異常發(fā)生則恢復注入前的進(jìn)程快照重新進(jìn)行fuzzing,其基本框架如圖1 所示。

182555-111206114230252.jpg

  2.2 基于反匯編的輸入路徑追蹤技術(shù)

  軟件從外部接收的輸入數據由于可被用戶(hù)控制,因而是引發(fā)各類(lèi)軟件漏洞的根源。輸入點(diǎn)是指用戶(hù)提供的數據提交給程序的地方,它位于軟件與用戶(hù)交界處,是軟件中漏洞產(chǎn)生的發(fā)源地,因此需要觀(guān)測目標軟件的輸入點(diǎn),以便動(dòng)態(tài)跟蹤輸入數據在程序中的流向和使用。采用輸入追蹤法,首先需要確定代碼的輸入點(diǎn)。利用反匯編工具反匯編目標程序的二進(jìn)制代碼,分析得到的匯編代碼以確定程序的函數塊及其內部的基本塊。查找所有可能接受外部輸入的庫函數調用,確定為可能的輸入點(diǎn)。例如WSARecvFrom()的調用將會(huì )接收網(wǎng)絡(luò )報文,并把數據放入緩存區。接著(zhù),利用動(dòng)態(tài)調試工具監測輸入點(diǎn)函數的調用,并在其被調用時(shí)觀(guān)察其調用結果,若經(jīng)比較發(fā)現來(lái)自外部輸入,則記錄此輸入數據的存放緩沖區并設置內存中斷,當有指令讀寫(xiě)該內存時(shí)即發(fā)生中斷,記錄所有讀寫(xiě)此緩存區的函數指令并標記為錯誤注入點(diǎn),記錄每個(gè)輸入數據執行的代碼路徑。通過(guò)對動(dòng)態(tài)執行中輸入數據的實(shí)時(shí)跟蹤,可以監測到函數具體調用的是輸入數據的哪些部分,也就可以對測試數據的相應部分進(jìn)行有針對性的fuzzing,從而避免了測試數據變化空間巨大的問(wèn)題,而且由于是從內部直接對相關(guān)函數進(jìn)行測試,因此有助于發(fā)掘多重輸入向量或多階段綜合條件觸發(fā)的復雜漏洞。

  2.3 基于代碼覆蓋的測試數據生成

  黑盒測試通常不考慮測試的路徑覆蓋問(wèn)題,在測試的完整性方面存在局限,往往不能發(fā)現未執行代碼中的漏洞。例如下面是摘自于一個(gè)服務(wù)器軟件的代碼片段:

  

  此處軟件利用sscanf() API 將原始網(wǎng)絡(luò )數據轉換為一個(gè)整數,然后將所生成的該整數與靜態(tài)整數值3 857 106 359 進(jìn)行比較,如果這2 個(gè)值不匹配,那么協(xié)議解析器就會(huì )由于一個(gè)“訪(fǎng)問(wèn)協(xié)議錯誤”而返回。若測試用例中無(wú)此整數,則無(wú)法對跳轉后的代碼進(jìn)行測試,而要想通過(guò)一般的數據變異生成包含此數的用例,所要構造的測試用例數和耗費的測試時(shí)間都是相當龐大的。為提高效率,可以根據諸如此類(lèi)的代碼中的靜態(tài)整數和字符串生成相應的測試用例集。只要利用靜態(tài)代碼分析工具,查找代碼中的靜態(tài)字符串、整數和路徑分支處有關(guān)路徑選擇的比較字段,將其保存到測試數據庫。

  另外還可在錯誤注入點(diǎn)所在的函數中搜索對不安全庫函數的調用,根據不安全庫函數易引發(fā)漏洞的類(lèi)型,生成相關(guān)的測試用例集。同時(shí)還可以在動(dòng)態(tài)追蹤過(guò)程中,在執行跳轉指令前修改指定寄存器的值以到達不同路徑的代碼,從而提高了測試的代碼覆蓋率。

  2.4 基于快照恢復的錯誤注入技術(shù)

  現今大多數軟件為了提高自身安全性,都加強了軟件的糾錯能力和安全保護機制,會(huì )在接收外部輸入后對輸入數據進(jìn)行正確和一致性檢測,甚至一些軟件還要在之前對編碼的數據進(jìn)行解碼,不考慮數據格式的暴力測試在軟件對輸入數據進(jìn)行的正確和一致性檢測中都會(huì )被過(guò)濾掉。而大多數協(xié)議或文件格式都非常復雜且未被公開(kāi),想要了解格式的結構或生成正確格式的文件都非常困難。為此,采用基于內存快照恢復的錯誤注入技術(shù),以繞過(guò)軟件的檢測機制進(jìn)行fuzzing測試。選用具有正確格式的輸入數據樣本以通過(guò)軟件的相關(guān)檢測函數的驗證,在執行到真正對數據進(jìn)行應用的相關(guān)解析函數時(shí),設置錯誤注入點(diǎn),保存此時(shí)進(jìn)程的所有上下文內容即進(jìn)程快照,接著(zhù)改變調用參數為生成的測試用例,再在函數的結束處設置還原點(diǎn),接著(zhù)繼續運行并監測程序的運行狀況。若無(wú)異常發(fā)生,則當程序運行到還原點(diǎn)時(shí)掛起進(jìn)程,將進(jìn)程環(huán)境恢復為錯誤注入點(diǎn)處保存的上下文內容,重新進(jìn)行錯誤注入,直到程序發(fā)生異?;驕y試用例耗盡。采用這種方法還可以避免通常測試過(guò)程中的網(wǎng)絡(luò )延遲、重啟程序和執行與處理輸入無(wú)關(guān)的代碼等所耗費時(shí)間,大大提高了測試效率。

  3 系統的設計實(shí)現與實(shí)驗評估

  用pythON 語(yǔ)言編寫(xiě)了基于上述技術(shù)的測試工具,此工具主要由5 個(gè)模塊組成,分別為靜態(tài)逆向分析模塊、動(dòng)態(tài)跟蹤模塊、測試數據生成模塊、錯誤注入模塊、異常檢測及記錄模塊??傮w模塊組成如圖2 所示。

  測試系統的模塊組成

  靜態(tài)逆向分析模塊主要是利用反匯編工具IDA Pro 來(lái)反匯編目標程序的二進(jìn)制代碼,以生成相應的匯編代碼,在此基礎上利用腳本自動(dòng)識別確定函數塊及其內部的基本塊,分析程序的基本結構和函數調用關(guān)系;查找代碼中的靜態(tài)字符串、整數和代碼分支處的比較字段,并搜索代碼中調用的不安全庫函數,用以建立測試用例庫。

  動(dòng)態(tài)跟蹤模塊在調試器的基礎上構建而成,主要負責在程序執行期間動(dòng)態(tài)監測輸入函數的調用,以確定輸入數據的內存位置;接著(zhù)跟蹤輸入數據的流向和使用,在輸入數據被讀寫(xiě)時(shí)記錄操作函數,以確定錯誤注入點(diǎn)。

  測試數據生成模塊主要負責根據靜態(tài)逆向分析模塊提供的分析查找結果自動(dòng)建立測試用例庫,并利用測試用例庫在測試過(guò)程中自動(dòng)生成測試用例。

  錯誤注入模塊主要負責自動(dòng)將測試數據生成模塊生成的測試用例注入到程序進(jìn)程中。在程序運行到錯誤注入點(diǎn)時(shí),保存錯誤注入前的進(jìn)程快照,修改輸入數據所在的地址指針;在執行到還原點(diǎn)時(shí),恢復之前保存的進(jìn)程快照,重新進(jìn)行錯誤注入。

  異常檢測記錄模塊主要負責通過(guò)監測程序的異常報錯,尋找軟件存在的問(wèn)題。要記錄分析的部分包括:(1)異常的類(lèi)型:運算錯誤,標準輸入/輸出錯誤,內存訪(fǎng)問(wèn)錯誤,系統APIs 調用錯誤,一般運行時(shí)錯誤,語(yǔ)法錯誤,應用程序不可預知的崩潰等。(2)錯誤記錄:系統自身的錯誤記錄,可執行程序的錯誤記錄。(3)出錯時(shí)各個(gè)寄存器值和其他環(huán)境變量的值,以及程序的返回值。

  選取一款小型代理服務(wù)器軟件Polipo 作為測試對象,驗證該動(dòng)態(tài)輸入追蹤方法的有效性。用系統動(dòng)態(tài)跟蹤服務(wù)器進(jìn)程接收來(lái)自遠程client 的http 請求,針對處理請求消息中各字段的處理函數生成測試用例并注入進(jìn)行fuzzing。當生成測試用例的Content-Length 字段值為一個(gè)極大整數時(shí),檢測到發(fā)生內存非法訪(fǎng)問(wèn)異常,服務(wù)器隨即崩潰。通過(guò)調試器調試軟件發(fā)現Polipo 的client.c 文件中httpClientDiscardBody()函數存在符號錯誤,當遠程用戶(hù)提交帶有超長(cháng)Content-Length頭的http 請求會(huì )產(chǎn)生整數溢出,進(jìn)而導致服務(wù)崩潰,從而驗證了該漏洞的存在。

  4 結束語(yǔ)

  本文在基于反匯編的輸入路徑追蹤技術(shù)的基礎上,結合基于代碼覆蓋的測試數據生成和基于快照恢復的錯誤注入技術(shù),將其應用于fuzzing 測試中,提出了一種軟件安全漏洞自動(dòng)挖掘的新方法。該方法較好地解決了fuzzing 技術(shù)存在的測試數據空間巨大、代碼覆蓋不完整和測試效率低等問(wèn)題,且無(wú)需目標軟件源代碼,因而應用范圍較廣?;诖朔椒ㄔO計并實(shí)現了一個(gè)測試系統,通過(guò)對實(shí)例軟件的漏洞挖掘實(shí)驗,驗證了該方法的有效性。下一步工作主要為對輸入路徑的追蹤細化為針對指令級的追蹤,以進(jìn)一步提高動(dòng)態(tài)追蹤的精確性和可靠性。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>