《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 基于動態(tài)輸入追蹤的模糊技術研究
基于動態(tài)輸入追蹤的模糊技術研究
摘要: 在基于反匯編的輸入路徑追蹤技術的基礎上,結合基于代碼覆蓋的測試數(shù)據(jù)生成和基于快照恢復的錯誤注入技術,將其應用于模糊測試中。提出一種軟件安全漏洞自動化挖掘的方法,較好地解決傳統(tǒng)模糊技術存在的若干局限。
Abstract:
Key words :

  1 概述

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

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

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

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

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

 

  2 總體框架與關鍵技術

 

  2.1 基本框架

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

 

  基于動態(tài)<a class=輸入追蹤的fuzzing 測試基本框架" border="0" height="230" src="http://files.chinaaet.com/images/20111205/54a1504f-94a2-49d3-b6bf-385316f85568.jpg" width="450" />

 

  2.2 基于反匯編的輸入路徑追蹤技術

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

  2.3 基于代碼覆蓋的測試數(shù)據(jù)生成

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

  

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

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

  2.4 基于快照恢復的錯誤注入技術

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

 

  3 系統(tǒng)的設計實現(xiàn)與實驗評估

 

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

 

  測試系統(tǒng)的模塊組成

 

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

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

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

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

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

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

 

  4 結束語

 

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
中国女人久久久| 亚洲欧美国产日韩天堂区| 欧美系列亚洲系列| 欧美丰满少妇xxxbbb| 久久久精品午夜少妇| 欧美在线在线| 亚洲欧美清纯在线制服| 在线视频你懂得一区二区三区| 亚洲三级影院| 亚洲靠逼com| 日韩手机在线导航| 亚洲精品日韩欧美| 亚洲精品一区二区三区蜜桃久| 亚洲欧洲一区二区在线观看| 亚洲第一偷拍| 亚洲第一精品夜夜躁人人躁| 欧美一区二区三区视频在线观看| 午夜精品久久久久久| 亚洲自啪免费| 午夜精品久久| 欧美亚洲免费电影| 欧美综合二区| 亚洲高清在线观看| 91久久精品一区二区别| 亚洲欧洲视频| 一区二区日韩| 亚洲一区二区综合| 性亚洲最疯狂xxxx高清| 欧美在线一二三区| 久久久亚洲精品一区二区三区| 久久裸体艺术| 欧美大片va欧美在线播放| 欧美激情精品久久久久久大尺度 | 午夜精品福利电影| 欧美在线啊v一区| 狼人天天伊人久久| 欧美美女视频| 国产精品女人久久久久久| 国产欧美一区二区三区另类精品 | 好吊妞这里只有精品| 一区二区三区自拍| 亚洲精品网站在线播放gif| 中文精品99久久国产香蕉| 亚洲尤物在线| 亚洲二区三区四区| av成人手机在线| 午夜国产欧美理论在线播放 | 欧美另类综合| 国产精品视频精品视频| 一区免费观看视频| av成人毛片| 欧美怡红院视频| 99re6热在线精品视频播放速度| 亚洲永久免费视频| 久久久久国产精品www | 欧美日韩国产bt| 国产精品视频你懂的| 国内揄拍国内精品少妇国语| 亚洲精品一区二区三区不| 亚洲影音一区| 亚洲日本成人| 性欧美暴力猛交另类hd| 女女同性女同一区二区三区91| 欧美色图一区二区三区| 国产一区二区三区在线观看免费视频| 亚洲福利视频在线| 亚洲一区免费看| 日韩一本二本av| 久久gogo国模啪啪人体图| 欧美激情视频网站| 国产亚洲精品久久久久婷婷瑜伽 | 日韩视频在线观看一区二区| 欧美一区二区三区免费观看视频| 一区二区国产日产| 久久综合九色欧美综合狠狠| 欧美午夜精品电影| 在线成人av| 亚洲欧美怡红院| 在线午夜精品| 美女诱惑一区| 国产视频综合在线| 一区二区三区国产在线观看| 亚洲国产日韩欧美在线图片| 性感少妇一区| 欧美日韩一区二区在线观看| 在线观看视频一区| 午夜精品视频一区| 亚洲视频精品| 欧美激情日韩| 在线播放中文一区| 欧美亚洲在线| 亚洲欧美在线免费| 欧美人妖另类| 亚洲第一精品福利| 午夜精品久久久99热福利| 亚洲一区3d动漫同人无遮挡| 欧美激情第8页| 在线观看日韩一区| 久久精彩视频| 久久久久国产精品厨房| 国产精品一区久久久| 99视频国产精品免费观看| 亚洲精品一区二区三区在线观看| 久久影视精品| 狠狠色噜噜狠狠色综合久| 亚洲欧美日韩国产中文在线| 中日韩高清电影网| 欧美另类在线播放| 亚洲欧洲日夜超级视频| 亚洲国产另类久久精品| 久久午夜国产精品| 国产自产v一区二区三区c| 午夜国产精品视频免费体验区| 亚洲欧美综合精品久久成人| 欧美日韩一区成人| 99精品视频一区二区三区| 一区二区动漫| 欧美日韩一区在线观看| 99视频超级精品| 亚洲一区国产一区| 日韩亚洲欧美一区| 一区二区三区久久| 欧美日韩精品欧美日韩精品一| 亚洲国产高清aⅴ视频| 亚洲欧洲日产国产网站| 欧美国产国产综合| 亚洲东热激情| 99精品欧美一区二区三区| 欧美国产日韩a欧美在线观看| 亚洲福利小视频| 日韩视频精品在线| 欧美日韩亚洲一区二区| 亚洲一级黄色| 欧美制服丝袜第一页| 国产欧美日韩亚洲一区二区三区| 午夜国产精品视频| 久久先锋影音| 亚洲黄色在线观看| 亚洲视屏在线播放| 国产精品丝袜xxxxxxx| 亚洲在线中文字幕| 久久久国产精品一区| 在线看无码的免费网站| 日韩午夜三级在线| 欧美视频在线一区| 亚洲欧美影音先锋| 蜜臀久久99精品久久久画质超高清| 亚洲国产美女| 亚洲一区二区三区免费视频| 国产精品你懂的| 久久精品国产精品 | 一区二区三区在线视频观看| 亚洲人成在线观看网站高清| 欧美精品国产| 亚洲一区二区免费在线| 久久久久久欧美| 亚洲人成欧美中文字幕| 亚洲欧美日韩视频一区| 国产日韩精品一区二区浪潮av| 欧美在线视屏| 欧美日韩国产页| 新67194成人永久网站| 免费成人毛片| 在线综合亚洲| 久久中文久久字幕| 一本久久a久久免费精品不卡| 久久爱www.| 亚洲激情av在线| 篠田优中文在线播放第一区| 激情丁香综合| 亚洲午夜高清视频| 国内揄拍国内精品久久| 一区二区国产日产| 国产一区二区日韩精品| 99re6这里只有精品| 国产亚洲精品一区二区| 一本色道久久99精品综合 | 99re66热这里只有精品4| 国产精品一区二区久久国产| 亚洲电影免费在线观看| 欧美日韩在线播| 亚洲大黄网站| 国产精品美女视频网站| 亚洲国产精品黑人久久久| 欧美午夜电影完整版| 久久精品国产99国产精品| 国产精品成人久久久久| 亚洲激情影院| 国产美女精品免费电影| 一区二区免费看| 在线播放不卡| 欧美综合国产| 99国产精品国产精品久久| 久热成人在线视频| 午夜精品短视频| 欧美吻胸吃奶大尺度电影| 亚洲人成网站在线播| 国内精品久久久久久久97牛牛| 亚洲图片在区色| 亚洲韩国青草视频|