亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于動態(tài)污點分析的二進制程序導向性模糊測試方法

        2014-10-17 18:10:42張斌等
        現(xiàn)代電子技術 2014年19期
        關鍵詞:安全漏洞

        張斌等

        摘 要: 傳統(tǒng)模糊測試中,由于不同的輸入可能重復測試相同的狀態(tài)空間,導致其效率嚴重低下。提出一種基于動態(tài)污點分析與輸入分域技術相結合的二進制程序導向性模糊測試技術,可以對典型安全敏感操作與一般模塊函數(shù)進行導向性模糊測試,很好地解決了傳統(tǒng)模糊測試效率低下的問題。實現(xiàn)了二進制導向性模糊測試的原型系統(tǒng)TaintedFuzz,實驗證明,該系統(tǒng)能夠對二進制程序中存在的典型安全漏洞進行高效地發(fā)掘。

        關鍵詞: 安全漏洞; 導向性模糊測試; 動態(tài)污點分析; 輸入分域

        中圖分類號: TN915.08?34 文獻標識碼: A 文章編號: 1004?373X(2014)19?0089?06

        Method of binary oriented fuzzy testing based on dynamic taint analysis

        ZHANG Bin, LI Meng?jun, WU bo, TANG Chao?jing

        (College of Electronic Science and Engineering, National University of Defence Technology, Changsha 410073, China)

        Abstract: Since traditional fuzzy testing may test the same state space repeatedly due to the different input, and lead to a low efficiency, a binary oriented fuzzy testing technique based on dynamic taint analysis combined with input field classification technology is presented in this paper, which can perform the oriented fuzzy testing for typical security?sensitive operation and general module function, and serve as a good solution to the problem of low efficiency of the traditional fuzzy testing. The prototype system TaintedFuzz was also realized for binary oriented fuzzy testing. The experiment proves that the method is capable of exploring the typical security vulnerabilities in the binary program efficiently.

        Keywords: security vulnerability; oriented fuzzy testing; dynamic taint analysis; input field classification

        0 引 言

        隨著現(xiàn)代信息系統(tǒng)規(guī)模和復雜度的逐步增加,計算機軟件安全問題變得尤為突出,而軟件安全漏洞又是威脅信息系統(tǒng)安全的核心問題,因此,如何快速準確地發(fā)掘軟件安全漏洞成為安全界的熱點研究問題。根據(jù)研究對象的不同,軟件安全漏洞挖掘分為針對開源軟件的源碼級別漏洞挖掘和針對閉源軟件的二進制級別漏洞挖掘。出于對自身商業(yè)利益和知識產權的保護,大部分軟件廠商并不向外開放其軟件源代碼,因此針對二進制程序進行安全漏洞發(fā)掘是當前研究的一大主流方向。目前,針對二進制程序有效的發(fā)掘方法有補丁對比技術、模糊測試技術、靜態(tài)分析技術和動態(tài)分析技術[1]。

        模糊測試(Fuzzing)技術是一種通過向目標系統(tǒng)提供非預期的輸入并監(jiān)視異常結果來發(fā)現(xiàn)軟件漏洞的方法[2]。模糊測試首先通過正常樣本構造出一系列畸形測試用例,然后針對目標系統(tǒng)使用這些測試用例逐一進行測試并實時監(jiān)控目標狀態(tài),通過對目標異常信息的分析來發(fā)掘目標系統(tǒng)中存在的安全漏洞。模糊測試是一種通過輸入空間的完全遍歷來驅動程序在狀態(tài)空間進行完全遍歷的測試方法,具有測試簡單、易于部署等特點。然而,輸入空間與狀態(tài)空間的非對等性導致不同的輸入可能驅動程序重復測試相同的狀態(tài)空間,因此模糊測試具有效率低下的天然缺陷。

        傳統(tǒng)模糊測試采用完全黑盒的測試方法,在畸形測試用例的生成過程中,沒有用到程序的內部信息[3],造成大部分畸形測試用例對程序狀態(tài)空間進行了重復性測試。如何提高模糊測試的效率是當前模糊測試的主要研究方向,本文提出并實現(xiàn)了針對二進制程序的導向性模糊測試原型系統(tǒng)TaintedFuzz。該系統(tǒng)采用基于動態(tài)污點分析與輸入分域技術相結合的導向性模糊測試方法,利用程序在動態(tài)執(zhí)行過程中的運行時信息指導模糊測試畸形樣本的生成,很好地解決了傳統(tǒng)模糊測試效率低下的問題。

        1 導向性模糊測試技術

        畸形樣本生成是模糊測試技術的關鍵。正常樣本數(shù)據(jù)由安全相關數(shù)據(jù)和安全無關數(shù)據(jù)組成,安全相關數(shù)據(jù)是指與程序安全敏感操作相關的數(shù)據(jù),安全無關數(shù)據(jù)指對安全敏感操作不產生影響的數(shù)據(jù)[3]。典型安全敏感操作包括字符串處理函數(shù)(如strcpy、memcpy)、內存分配函數(shù)(如malloc、HeapAlloc)以及用戶根據(jù)具體需求指定的安全操作。對安全無關數(shù)據(jù)的變異通常不會導致軟件異常,而對安全相關數(shù)據(jù)的變異往往能夠觸發(fā)軟件中潛在的安全漏洞,因此,首先通過靜態(tài)分析技術獲得安全敏感函數(shù)的調用點;然后利用動態(tài)污點分析技術對數(shù)據(jù)依賴關系進行動態(tài)跟蹤,根據(jù)安全敏感函數(shù)的參數(shù)類型分析對應的安全相關數(shù)據(jù);最終通過對安全相關數(shù)據(jù)的變異實現(xiàn)對目標程序的導向性模糊測試。

        考慮到編譯器的優(yōu)化工作,如函數(shù)內聯(lián)、無用代碼刪除、循環(huán)體展開等,這些優(yōu)化工作可能會將一些安全敏感函數(shù)內聯(lián)到模塊函數(shù)當中,造成模塊函數(shù)中出現(xiàn)漏洞的可能性增大。因此,對模塊函數(shù)進行模糊測試時,發(fā)掘目標程序中的安全漏洞具有重要意義。然而,不同于安全敏感函數(shù),這些模塊函數(shù)往往不具有調試信息,其函數(shù)參數(shù)類型不可獲得,所以無法根據(jù)其函數(shù)類型對其相關數(shù)據(jù)進行變異。提出基于動態(tài)污點分析與輸入分域技術相結合的導向性模糊測試方法,通過對目標程序處理正常樣本過程的學習,獲取所有處理輸入的模塊函數(shù)及對應的污點輸入;并通過基于執(zhí)行跡的分域技術,完成對未知格式輸入的輸入域的劃分;最終根據(jù)輸入域劃分的結果對模塊函數(shù)的污點輸入進行變異,實現(xiàn)對目標程序的導向性模糊測試。

        本文實現(xiàn)了基于動態(tài)污點分析與輸入分域技術的導向性模糊測試原型系統(tǒng)TaintedFuzz,整體框架如圖1所示。系統(tǒng)分為前端信息收集、中端測試點分析及后端Fuzzing引擎三大模塊。系統(tǒng)前端模塊利用動態(tài)污點分析技術收集目標軟件在執(zhí)行正常測試樣本時的運行時信息;中端模塊通過對前端收集的預處理信息進行分析處理,獲得后端Fuzzing引擎的測試點(check點);后端Fuzzing引擎通過對check點的變異測試,完成對目標軟件的導向性模糊測試。

        1.1 在線安全敏感操作分析

        1.1.1 細顆粒度動態(tài)污點分析技術

        TaintedFuzz采用細顆粒度動態(tài)污點分析技術(Fine?Grained Dynamic Taint Analysis)完成對目標程序執(zhí)行過程的監(jiān)控及信息獲取。

        動態(tài)污點分析技術本質上是一種信息流分析,其基本思想是在程序的動態(tài)執(zhí)行過程中,追蹤并收集程序對特定輸入數(shù)據(jù)的處理過程。傳統(tǒng)動態(tài)污點分析技術僅能夠分析內存、寄存器或指令是否被單一污點源污染,無法滿足針對復雜輸入軟件的分析。TaintedFuzz通過對污點數(shù)據(jù)進行字節(jié)粒度的標定與傳播,完成對目標程序的細顆粒度污點分析。

        TaintedFuzz對目標程序的動態(tài)監(jiān)控及信息收集主要由三個部分構成:污點數(shù)據(jù)的標定、污點數(shù)據(jù)的傳播以及污點分析策略。圖2描述了其基本過程。

        TaintedFuzz依靠劫持特定的Windows API函數(shù)完成對目標程序污點數(shù)據(jù)的標定及注入。如針對命令行輸入型程序可以攔截GetCommandLine的返回值,該函數(shù)返回一個指向命令行參數(shù)的指針,通過對該指針指向的內存區(qū)域進行污點標記,完成對命令行參數(shù)的污點標記;針對文件輸入型程序,TaintedFuzz通過攔截Windows系統(tǒng)中典型的文件操作函數(shù)(如fread、ReadFile、MapViewOfFile等)并分析這些函數(shù)的參數(shù)或返回值,完成對文件輸入型程序的污點標定。TaintedFuzz通過對輸入數(shù)據(jù)的每個字節(jié)賦予一個特定的污點標簽,來完成字節(jié)粒度上多污點源的標定。污點標簽結構為二元組。其中:s表示污染源,如文件、命令行等;o表示該污點字節(jié)在整個污染源中的偏移量。在完成污點數(shù)據(jù)的標定之后,TaintedFuzz監(jiān)控并分析每條CPU指令,來實現(xiàn)對目標代碼執(zhí)行的動態(tài)監(jiān)控,并通過影子內存(Shadow Memory)[4]技術實現(xiàn)對內存和寄存器污點信息的存儲及傳播。在程序的執(zhí)行過程中,TaintedFuzz將根據(jù)需要對相應的信息進行收集,并在達到需要分析的位置(sink點)之后,根據(jù)特定的污點分析策略對收集到的信息進行分析。

        1.1.2 安全敏感函數(shù)分析

        TaintedFuzz在細粒度動態(tài)污點分析基礎上實現(xiàn)了數(shù)據(jù)依賴關系的動態(tài)跟蹤,因此在監(jiān)控程序動態(tài)執(zhí)行的同時,可以在線完成典型安全敏感操作的分析工作。TaintedFuzz首先通過靜態(tài)分析技術獲得安全敏感函數(shù)的調用點,然后在動態(tài)污點分析時,根據(jù)這些安全敏感函數(shù)的參數(shù)類型分析對應的安全相關數(shù)據(jù),如對于strcpy,其函數(shù)原型為:

        char*strcpy(char*strDestination,const char *strSource)

        其中strDestination表示寫入地址,strSource表示源地址。TaintedFuzz通過對strSource指向的內存地址進行污點檢查,獲取對應的安全相關數(shù)據(jù),并記錄當前運行時信息,運行時信息記錄格式為(Danger_func,TID,Module,InvokeEIP,RETAddr,StackBase,StackLimit, arg1,arg2,…),Danger_func代表安全敏感函數(shù);TID、 Module分別表示當前線程ID與模塊名稱;InvokeEIP與RETAddr分別表示安全敏感函數(shù)調用地址與返回地址;StackBase與StackLimit分別表示當前線程棧的?;放c棧界限;arg1等代表當前安全敏感函數(shù)參數(shù)。下面給出了具體的執(zhí)行結果:

        (1, 1856, cmd_overflow.exe, 0x0040e791, 0x0040e796, 0x0012e000, 0x00130000, 0x0012ff10, 0x00380bbd)

        T(16 17 18 19 20 21 22 23)

        其中1表示當前安全敏感函數(shù)為strcpy;T(16 17 18 19 20 21 22 23)表示strSource參數(shù)所指向的內存被偏移量為(16 17 18 19 20 21 22 23)的污點數(shù)據(jù)所污染。那么這8個連續(xù)污點數(shù)據(jù)將被作為檢測點,用來指導后端的模糊測試。這樣可以避免對輸入空間的盲目枚舉,提高模糊測試的效率。

        1.2 針對模塊函數(shù)的測試用例生成方法

        模糊測試的有效性完全取決于測試用例的有效性。例如,針對安全敏感操作的測試用例生成,可以在已知敏感操作函數(shù)參數(shù)類型的情況下,根據(jù)參數(shù)類型對安全相關數(shù)據(jù)進行變異,這樣生成的測試用例更容易觸發(fā)安全漏洞。然而,如何針對未知參數(shù)類型的模塊函數(shù)進行有效的測試用例生成,卻成為模糊測試的難題。在對輸入進行輸入域劃分的基礎上,結合程序循環(huán)復雜度提出一種針對模塊函數(shù)的測試用例生成方法,該方法可以針對復雜模塊函數(shù)生成有效的測試用例。

        1.2.1 基于執(zhí)行跡的輸入分域技術

        作為輸入驅動的測試方法,模糊測試的有效性完全依賴于畸形數(shù)據(jù)的生成方式。傳統(tǒng)模糊測試畸形測試用例產生的方法有兩種:基于變異的畸形數(shù)據(jù)生成方法和基于規(guī)范的畸形數(shù)據(jù)生成方法[2]?;谧儺惖纳煞椒ㄍㄟ^對正常數(shù)據(jù)進行隨機修改/破壞而生成畸形數(shù)據(jù),其主要優(yōu)勢在于不依賴具體的格式而且易于實現(xiàn),然而這種測試方法生成的測試數(shù)據(jù)對程序狀態(tài)空間覆蓋率比較低,嚴重影響模糊測試的效率;基于規(guī)范的畸形數(shù)據(jù)測試方法依賴于測試人員對文件/協(xié)議格式的先驗知識,然而如何獲取畸形數(shù)據(jù)生成規(guī)范卻成為這種方法的瓶頸,對于未公開或非常復雜的輸入格式,如何構造出有效的測試用例成為基于規(guī)范的畸形數(shù)據(jù)生成方法的難點。在文獻[5?7]對協(xié)議格式逆向工程(Protocol Format Reverse Engineering)已經取得一定成果的基礎上,提出一種基于執(zhí)行跡的輸入分域方法,通過學習目標程序對正常樣本的處理過程,完成對輸入數(shù)據(jù)的域劃分。

        算法的核心思想是程序在解析輸入時總是將不同的輸入域(Input Field)放置在不同的執(zhí)行環(huán)境(Execution Context)中處理,也就是說,屬于同一個輸入域的相鄰字節(jié)將在同樣的執(zhí)行環(huán)境中處理。因此,TaintedFuzz在已獲取到每個輸入字節(jié)處理信息(執(zhí)行跡、調用棧等)的基礎上,通過基于執(zhí)行跡的輸入分域算法完成對輸入中各個域的區(qū)別與劃分。

        算法將污點輸入的處理信息表示為四元組,。其中i代表指令地址;s表示當前指令的調用棧信息;t表示當前指令的污點集合信息;c為當前進程線程信息。TaintedFuzz采用動態(tài)維護影子棧的方法完成對程序運行時調用棧的獲取,對進程中每個線程影子棧進行分別維護。影子棧的維護通過插樁函數(shù)調用指令,如CALL和函數(shù)返回指令如RET完成。若將每條處理信息表示為preInfo[i],則每條處理信息中的四元信息將分別表示為preInfo[i].i、preInfo[i].s、preInfo[i].t以及preInfo[i].c。具體輸入分域算法如下:

        Algorithm2 Input Format Reverse

        1:Initial:IFtree = ROOT – Input Format Tree

        2:Input:preInfo

        3:Output:IFtree

        4:Input_Format_Reverse (preInfo){

        5: p=preInfo[0].t; i = 1;

        6: while(preInfo is not EOF){

        7: q=preInfo[i].t;

        8: if(q == p){}

        9: else if ((q.min == p.max || q.min ==p.max+1) &&

        10: preInfo[i].s == preInfo[i-1].s)

        11: p=UNION(p, q);

        12: else{

        13: Vnode =CreateNoe(p);

        14: Find Unode in IFtree where Unode contains Vnode, but not its children;

        15: Insert Vnode into IFtree as the child of Unode;

        16: if (Unode.children != NULL){

        17: Find NeedMoves in Unode.children which are subset of Vnode;

        18: Insert NeedMoves into IFtree as the child of Vnode;

        19: }

        20: p=q;

        21: }

        22: i++;

        23: }

        24: return IFtree;

        25: }

        算法將整個輸入看作一個輸入格式樹。首先將樹初始化為包含所有污點標簽的ROOT節(jié)點。對于每條信息preInfo[i],如果當前信息污點集合與前一條信息污點集合連續(xù)或“偽連續(xù)”(偽連續(xù)是指當前信息污點集合最小值與前一條信息污點集合最大值相等),并且當前調用棧與前一條調用棧相同,則認為當前污點信息集合與前一條污點信息集合屬于同一個輸入域(第9、10行);如果污點集合信息不連續(xù)或調用棧不同,算法首先在樹中找到一個包含當前污點集合信息的最小節(jié)點(第14行),然后將當前污點信息作為該節(jié)點的子節(jié)點插入到樹中;同時,如果該節(jié)點有子節(jié)點,則將子節(jié)點中是當前污點信息子集的子節(jié)點移動為當前污點信息集合節(jié)點的子節(jié)點(第17~19行)。

        用于測試的文件格式如圖3所示。

        該測試文件格式前兩個字節(jié)表示文件格式,第2~5個字節(jié)表示數(shù)據(jù)偏移位置,第6~9個字節(jié)表征數(shù)據(jù)域的長度,第10個字節(jié)以后為數(shù)據(jù)域。測試程序為簡單的文件讀入解析程序,經過輸入域劃分之后的結果如圖4所示。可以看到,基于執(zhí)行跡的輸入分域算法可以很好地識別與劃分輸入域。

        1.2.2 輸入分域與循環(huán)復雜度結合的測試用例生成法

        考慮到目標程序中模塊函數(shù)的數(shù)量比較龐大,在有效時間內對目標程序中所有模塊函數(shù)進行完全模糊測試將會消耗大量資源,因此,為了提高模糊測試效率,發(fā)掘更多的安全漏洞,結合程序分析理論,對模塊函數(shù)進行篩選,選擇其中比較復雜的函數(shù)進行選擇性的分析與測試。

        循環(huán)復雜度(Cyclomatic Complexity)也稱為條件復雜度或圈復雜度,用于表示程序復雜度[8]。程序的循環(huán)復雜度是其線性獨立路徑的數(shù)量,一般通過程序的控制流圖來定義,其定義為[M=E-N+2P,]其中[E]代表流圖中邊的個數(shù),[N]代表流圖中節(jié)點個數(shù),[P]代表流圖中連接組件的個數(shù)[9]。例如,在圖5給出的簡單控制流圖中,[E=9,][N=8,][P=1,]因此其循環(huán)復雜度為[9-8+(2×1)=3。]

        循環(huán)復雜度和軟件缺陷個數(shù)具有高度的正相關性,因此循環(huán)復雜度可以用來預測軟件中安全缺陷的個數(shù)[10]。提出基于輸入分域與循環(huán)復雜度相結合的測試用例生成方法,首先通過對動態(tài)污點分析執(zhí)行跡進行分析,獲得被污染的函數(shù)及其污點信息集合;然后,為了提高模糊測試中發(fā)現(xiàn)漏洞的概率,根據(jù)循環(huán)復雜度,對被污染函數(shù)進行排序,選取其中復雜度較高的函數(shù);最后,根據(jù)輸入分域的結果對這些函數(shù)的污點信息進行分析和輸入域劃分,用于指導模糊測試的測試用例生成。

        如表1所示,在對動態(tài)污點分析的執(zhí)行跡進行分析的基礎上,針對循環(huán)復雜度較高的Func1,F(xiàn)unc2,F(xiàn)unc3,可以根據(jù)輸入分域的結果將其對應的污點信息進行輸入域劃分,如(2,3,4,5)四個字節(jié)很可能表示一個整形數(shù)據(jù),(10,11,12,13,14,15)連續(xù)多字節(jié)表示字符串數(shù)據(jù),那么用這些信息指導生成的測試用例將會更容易觸發(fā)復雜函數(shù)中的安全漏洞。

        表1 被污染函數(shù)復雜度排序

        [污點信息集合\&函數(shù)\&循環(huán)復雜度\&(2,3,4,5,8,9)\&Func1\&40\&(10,11,12,13,14,15)\&Func2\&37\&(1,5,6,7)\&Func3\&23\&…\&…\&…\&]

        1.3 模糊測試引擎

        在完成安全相關數(shù)據(jù)偏移及類型識別之后,TaintedFuzz系統(tǒng)將識別的關鍵測試點送至模糊測試引擎中進行變異。TaintedFuzz的模糊測試引擎主要負責畸形測試用例的生成和針對目標程序的安全測試。TaintedFuzz的模糊測試引擎實現(xiàn)了針對不同數(shù)據(jù)類型(如longint,int,shortint,char,string等)的變異,并且每種數(shù)據(jù)類型均具有多種變異策略,如針對char類型的深度變異、針對string類型的長度變異,針對整形的臨界安全值變異及隨機變異等;安全測試部分采用調試器技術實現(xiàn)對目標程序執(zhí)行的動態(tài)監(jiān)控及異常捕獲,并且可以將異常發(fā)生時的CPU狀態(tài)及執(zhí)行上下文記錄下來,供安全人員進行分析。

        2 TaintedFuzz系統(tǒng)實現(xiàn)及實驗結果

        2.1 TaintedFuzz系統(tǒng)實現(xiàn)

        TaintedFuzz原型系統(tǒng)基于二進制代碼分析平臺Bitblaze[11]的TEMU[12]動態(tài)污點分析組件實現(xiàn)。TEMU是一個基于QEMU虛擬化技術開發(fā)的全系統(tǒng)動態(tài)二進制污點分析平臺,在TEMU中可以運行操作系統(tǒng)及應用程序,并通過相應接口完成對相關二進制代碼執(zhí)行的細粒度監(jiān)控與分析。TEMU架構如圖6所示,其中語義提取器用于提取仿真系統(tǒng)的操作系統(tǒng)級語義信息,包括進程、線程、模塊及符號信息;動態(tài)污點分析引擎采用影子內存技術實現(xiàn)對物理內存、CPU寄存器、磁盤及網絡接口緩沖區(qū)數(shù)據(jù)的污點標記及傳播;同時用戶還可以自定義插件,以擴展TEMU功能。TaintedFuzz通過編寫命令行污點標記模塊、文件污點標記模塊、執(zhí)行上下文記錄模塊、敏感函數(shù)在線分析插件,實現(xiàn)針對二進制程序的執(zhí)行跡及運行時信息的維護與記錄。

        TaintedFuzz模糊測試引擎基于模糊測試框架antiparser實現(xiàn)。antiparser是一個由python開發(fā)的跨平臺模糊測試框架,主要用于針對不同數(shù)據(jù)類型實現(xiàn)畸形測試用例的生成[2]。TaintedFuzz擴展了antiparser數(shù)據(jù)的生成方式,以提高生成數(shù)據(jù)的有效性;并在antiparser的基礎上實現(xiàn)了針對命令行輸入型程序與文件輸入型程序的模糊測試引擎,可以完成對二進制程序執(zhí)行的監(jiān)控及異常捕獲。TaintedFuzz模糊測試引擎的測試及異常捕獲模塊基于調試器技術實現(xiàn),通過集成輕量級調試器pydbg[2]完成對異常的捕獲及對異常發(fā)生時現(xiàn)場環(huán)境的記錄。

        2.2 實驗結果

        實驗針對未知參數(shù)類型的模塊函數(shù)和典型安全敏感操作的導向型模糊測試,分別選取兩個不同的目標程序進行測試。針對模塊函數(shù)的測試程序代碼片段如下:

        Test Code 1:

        1:char * get_Data(char *arg_[], int len){

        2: char dest[10];

        3: memset(dest, 0, sizeof(dest));

        4: char * a = NULL;

        5: if (len > 0){

        6: strcpy(dest,arg_[2]);

        7: a=dest;

        8: }

        9: return a;

        10:}

        程序從命令行參數(shù)中獲取數(shù)據(jù)字符串arg_[2],并將其復制到緩沖區(qū)當中;然而在復制時未對參數(shù)的長度進行合理的驗證(第5行),如果命令行第二個參數(shù)長度大于10則會造成嚴重的緩沖區(qū)溢出。程序中雖然顯式調用了安全敏感函數(shù)strcpy,但是由于編譯器的優(yōu)化,使strcpy被內聯(lián)到當前模塊中,無法通過靜態(tài)分析的方式獲得這些安全敏感函數(shù)的調用點。雖然現(xiàn)有一些可以通過函數(shù)摘要匹配的安全敏感函數(shù)識別的算法[13],但由于編譯器的多樣化造成內聯(lián)代碼的多樣化,因此這些算法仍無法完全解決安全敏感函數(shù)的識別問題。TaintedFuzz通過學習目標代碼對輸入的解析過程,從而完成對命令行參數(shù)的輸入域劃分,劃分之后的輸入格式如圖7所示(輸入命令行參數(shù)為“soft_metric.exe 8 AAAAAAAA”):

        同時,通過分析執(zhí)行跡信息得知,get_Data函數(shù)的污點集合信息為(15,17,18,19,20,21,22,23,24)的非連續(xù)字節(jié)數(shù)據(jù)(考慮到目標程序中用戶自定義函數(shù)較少,因此跳過函數(shù)循環(huán)復雜度排序),那么根據(jù)輸入劃分的結果,判定偏移量為15的參數(shù)“8”和偏移量為(17,18,19,20,21,22,23,24)的參數(shù)“AAAAAAAA”分別屬于不同的輸入域;然后通過導向型模糊測試引擎分別對偏移量為15的單字節(jié)進行深度變異和偏移量為(17, 18,19,20,21,22,23,24)的連續(xù)字節(jié)進行字符串變長變異;最終模糊測試引擎成功觸發(fā)該漏洞。

        針對典型安全敏感操作造成的安全漏洞,實驗選取VUPlayer 2.49的.m3u緩沖區(qū)溢出漏洞,該漏洞在EDB數(shù)據(jù)庫的編號為EDB?ID:30336。VUPlayer是Windows平臺下一款功能強大的媒體播放工具,支持多種媒體格式。該軟件2.49版本在解析.m3u的文件名時存在嚴重的緩沖區(qū)溢出漏洞。

        TaintedFuzz隨機選取簡單的樣本.m3u文件,如圖8所示,文件僅包含一條播放記錄。通過對VUplayer解析樣本.m3u文件的過程進行動態(tài)污點分析及在線安全敏感函數(shù)分析后,獲得安全敏感函數(shù)調用記錄如下:

        CALL lstrcpyA() at 0x00453313: (Dest: 0x0012eb4c, Scr: 0x00ba93e4)

        PID: 1700, MODULE: VUPlayer.exe, TID: 1696, RETADDR: 0x00453319.

        TID: 1696, StackBase: 0x00129000, StackLimit: 0x00130000.

        Writing to current stack.

        Taint(0~10)

        VUPlayer在0x00453313處通過調用lstrcpyA函數(shù)將當前.m3u文件的文件名(第0~10字節(jié))拷入到當前的線程棧當中(0x0012eb4c);在對危險函數(shù)lstrcpyA的參數(shù)進行分析后,TaintedFuzz將測試點(第0~10字節(jié))送入到導向性模糊測試引擎當中作為字符串進行變異,模糊測試引擎成功觸發(fā)該漏洞。異常發(fā)生時上下文環(huán)境如圖9所示。

        3 結 語

        本文提出了一種基于動態(tài)污點分析的二進制程序導向性模糊測試技術。該技術可以根據(jù)動態(tài)污點分析的結果,對安全敏感相關字段進行有效地廣度或深度變異。同時,針對未知參數(shù)類型函數(shù),特別是內聯(lián)了安全敏感操作的模塊函數(shù),提出了一種基于輸入分域與循環(huán)復雜度的測試用例生成方法,該方法利用基于執(zhí)行跡的輸入分域方法。首先通過對目標程序處理正常樣本過程的學習,完成輸入字段的劃分;之后,為了提高漏洞發(fā)現(xiàn)的效率,根據(jù)模塊函數(shù)的循環(huán)復雜度對模塊函數(shù)進行排序;選擇復雜度較高的模塊函數(shù),對其根據(jù)輸入分域結果進行測試用例生成。該方法可以針對復雜模塊函數(shù)生成有效的測試用例,提高了模糊測試的效率。實現(xiàn)了基于動態(tài)污點分析的二進制模糊測試的原型系統(tǒng)TaintedFuzz,實驗證明該系統(tǒng)針對二進制目標程序中的模塊函數(shù)和典型安全敏感操作可以進行導向性模糊測試,能夠對二進制程序中存在的典型安全漏洞進行高效地發(fā)掘。

        參考文獻

        [1] 文偉平,吳興麗,蔣建春.軟件安全漏洞挖掘的研究思路及發(fā)展趨勢[J].信息網絡安全,2009 (10):78?80.

        [2] SUTTON Michael.模糊測試:強制性安全漏洞發(fā)掘[M].北京:機械工業(yè)出版社,2009.

        [3] 王鐵磊.面向二進制程序的漏洞挖掘關鍵技術研究[D].北京:北京大學,2011.

        [4] SCHWARTZ E J, AVGERINOS T, BRUMLEY D. All you ever wanted to know about dynamic taint analysis and forward symbolic execution (but might have been afraid to ask) [C]// 2010 IEEE Symposium on Security and Privacy (SP). [S.l.]: IEEE, 2010: 317?331.

        [5] LIN Z, JIANG X, XU D, et al. Automatic protocol format reverse engineering through context?aware monitored execution [J]. NDSS, 2008, 8: 1?15.

        [6] LIN Z, ZHANG X, XU D. Reverse engineering input syntactic structure from program execution and its applications [J]. IEEE Transactions on Software Engineering, 2010, 36(5): 688?703.

        [7] CABALLERO J, YIN H, LIANG Z, et al. Polyglot: Automatic extraction of protocol message format using dynamic binary analysis [C]// Proceedings of the 14th ACM conference on Computer and Communications Security. [S.l.]: ACM, 2007: 317?329.

        [8] KANER C, BOND W P. Software engineering metrics: What do they measure and how do we know [J]. Methodology, 2004, 8: 6?18.

        [9] MCCABE T J. A complexity measure [J]. IEEE Transactions on Software Engineering, 1976 (4): 308?320.

        [10] HATTON L. The role of empiricism in improving the reliability of future software [J/OL]. [2012?08?29]. http://www.computer.org/csdl/.

        [11] SONG D, BRUMLEY D, YIN H, et al. BitBlaze: A new approach to computer security via binary analysis [J]. Information Systems Security: Lecture Notes in Computer Science, 2008, 5352: 1?25.

        [12] YIN H, SONG D. Temu: Binary code analysis via whole?system layered annotative execution, UCB/EECS?2010?3 [R]. Berkeley: EECS Department, University of California, 2010.

        針對典型安全敏感操作造成的安全漏洞,實驗選取VUPlayer 2.49的.m3u緩沖區(qū)溢出漏洞,該漏洞在EDB數(shù)據(jù)庫的編號為EDB?ID:30336。VUPlayer是Windows平臺下一款功能強大的媒體播放工具,支持多種媒體格式。該軟件2.49版本在解析.m3u的文件名時存在嚴重的緩沖區(qū)溢出漏洞。

        TaintedFuzz隨機選取簡單的樣本.m3u文件,如圖8所示,文件僅包含一條播放記錄。通過對VUplayer解析樣本.m3u文件的過程進行動態(tài)污點分析及在線安全敏感函數(shù)分析后,獲得安全敏感函數(shù)調用記錄如下:

        CALL lstrcpyA() at 0x00453313: (Dest: 0x0012eb4c, Scr: 0x00ba93e4)

        PID: 1700, MODULE: VUPlayer.exe, TID: 1696, RETADDR: 0x00453319.

        TID: 1696, StackBase: 0x00129000, StackLimit: 0x00130000.

        Writing to current stack.

        Taint(0~10)

        VUPlayer在0x00453313處通過調用lstrcpyA函數(shù)將當前.m3u文件的文件名(第0~10字節(jié))拷入到當前的線程棧當中(0x0012eb4c);在對危險函數(shù)lstrcpyA的參數(shù)進行分析后,TaintedFuzz將測試點(第0~10字節(jié))送入到導向性模糊測試引擎當中作為字符串進行變異,模糊測試引擎成功觸發(fā)該漏洞。異常發(fā)生時上下文環(huán)境如圖9所示。

        3 結 語

        本文提出了一種基于動態(tài)污點分析的二進制程序導向性模糊測試技術。該技術可以根據(jù)動態(tài)污點分析的結果,對安全敏感相關字段進行有效地廣度或深度變異。同時,針對未知參數(shù)類型函數(shù),特別是內聯(lián)了安全敏感操作的模塊函數(shù),提出了一種基于輸入分域與循環(huán)復雜度的測試用例生成方法,該方法利用基于執(zhí)行跡的輸入分域方法。首先通過對目標程序處理正常樣本過程的學習,完成輸入字段的劃分;之后,為了提高漏洞發(fā)現(xiàn)的效率,根據(jù)模塊函數(shù)的循環(huán)復雜度對模塊函數(shù)進行排序;選擇復雜度較高的模塊函數(shù),對其根據(jù)輸入分域結果進行測試用例生成。該方法可以針對復雜模塊函數(shù)生成有效的測試用例,提高了模糊測試的效率。實現(xiàn)了基于動態(tài)污點分析的二進制模糊測試的原型系統(tǒng)TaintedFuzz,實驗證明該系統(tǒng)針對二進制目標程序中的模塊函數(shù)和典型安全敏感操作可以進行導向性模糊測試,能夠對二進制程序中存在的典型安全漏洞進行高效地發(fā)掘。

        參考文獻

        [1] 文偉平,吳興麗,蔣建春.軟件安全漏洞挖掘的研究思路及發(fā)展趨勢[J].信息網絡安全,2009 (10):78?80.

        [2] SUTTON Michael.模糊測試:強制性安全漏洞發(fā)掘[M].北京:機械工業(yè)出版社,2009.

        [3] 王鐵磊.面向二進制程序的漏洞挖掘關鍵技術研究[D].北京:北京大學,2011.

        [4] SCHWARTZ E J, AVGERINOS T, BRUMLEY D. All you ever wanted to know about dynamic taint analysis and forward symbolic execution (but might have been afraid to ask) [C]// 2010 IEEE Symposium on Security and Privacy (SP). [S.l.]: IEEE, 2010: 317?331.

        [5] LIN Z, JIANG X, XU D, et al. Automatic protocol format reverse engineering through context?aware monitored execution [J]. NDSS, 2008, 8: 1?15.

        [6] LIN Z, ZHANG X, XU D. Reverse engineering input syntactic structure from program execution and its applications [J]. IEEE Transactions on Software Engineering, 2010, 36(5): 688?703.

        [7] CABALLERO J, YIN H, LIANG Z, et al. Polyglot: Automatic extraction of protocol message format using dynamic binary analysis [C]// Proceedings of the 14th ACM conference on Computer and Communications Security. [S.l.]: ACM, 2007: 317?329.

        [8] KANER C, BOND W P. Software engineering metrics: What do they measure and how do we know [J]. Methodology, 2004, 8: 6?18.

        [9] MCCABE T J. A complexity measure [J]. IEEE Transactions on Software Engineering, 1976 (4): 308?320.

        [10] HATTON L. The role of empiricism in improving the reliability of future software [J/OL]. [2012?08?29]. http://www.computer.org/csdl/.

        [11] SONG D, BRUMLEY D, YIN H, et al. BitBlaze: A new approach to computer security via binary analysis [J]. Information Systems Security: Lecture Notes in Computer Science, 2008, 5352: 1?25.

        [12] YIN H, SONG D. Temu: Binary code analysis via whole?system layered annotative execution, UCB/EECS?2010?3 [R]. Berkeley: EECS Department, University of California, 2010.

        針對典型安全敏感操作造成的安全漏洞,實驗選取VUPlayer 2.49的.m3u緩沖區(qū)溢出漏洞,該漏洞在EDB數(shù)據(jù)庫的編號為EDB?ID:30336。VUPlayer是Windows平臺下一款功能強大的媒體播放工具,支持多種媒體格式。該軟件2.49版本在解析.m3u的文件名時存在嚴重的緩沖區(qū)溢出漏洞。

        TaintedFuzz隨機選取簡單的樣本.m3u文件,如圖8所示,文件僅包含一條播放記錄。通過對VUplayer解析樣本.m3u文件的過程進行動態(tài)污點分析及在線安全敏感函數(shù)分析后,獲得安全敏感函數(shù)調用記錄如下:

        CALL lstrcpyA() at 0x00453313: (Dest: 0x0012eb4c, Scr: 0x00ba93e4)

        PID: 1700, MODULE: VUPlayer.exe, TID: 1696, RETADDR: 0x00453319.

        TID: 1696, StackBase: 0x00129000, StackLimit: 0x00130000.

        Writing to current stack.

        Taint(0~10)

        VUPlayer在0x00453313處通過調用lstrcpyA函數(shù)將當前.m3u文件的文件名(第0~10字節(jié))拷入到當前的線程棧當中(0x0012eb4c);在對危險函數(shù)lstrcpyA的參數(shù)進行分析后,TaintedFuzz將測試點(第0~10字節(jié))送入到導向性模糊測試引擎當中作為字符串進行變異,模糊測試引擎成功觸發(fā)該漏洞。異常發(fā)生時上下文環(huán)境如圖9所示。

        3 結 語

        本文提出了一種基于動態(tài)污點分析的二進制程序導向性模糊測試技術。該技術可以根據(jù)動態(tài)污點分析的結果,對安全敏感相關字段進行有效地廣度或深度變異。同時,針對未知參數(shù)類型函數(shù),特別是內聯(lián)了安全敏感操作的模塊函數(shù),提出了一種基于輸入分域與循環(huán)復雜度的測試用例生成方法,該方法利用基于執(zhí)行跡的輸入分域方法。首先通過對目標程序處理正常樣本過程的學習,完成輸入字段的劃分;之后,為了提高漏洞發(fā)現(xiàn)的效率,根據(jù)模塊函數(shù)的循環(huán)復雜度對模塊函數(shù)進行排序;選擇復雜度較高的模塊函數(shù),對其根據(jù)輸入分域結果進行測試用例生成。該方法可以針對復雜模塊函數(shù)生成有效的測試用例,提高了模糊測試的效率。實現(xiàn)了基于動態(tài)污點分析的二進制模糊測試的原型系統(tǒng)TaintedFuzz,實驗證明該系統(tǒng)針對二進制目標程序中的模塊函數(shù)和典型安全敏感操作可以進行導向性模糊測試,能夠對二進制程序中存在的典型安全漏洞進行高效地發(fā)掘。

        參考文獻

        [1] 文偉平,吳興麗,蔣建春.軟件安全漏洞挖掘的研究思路及發(fā)展趨勢[J].信息網絡安全,2009 (10):78?80.

        [2] SUTTON Michael.模糊測試:強制性安全漏洞發(fā)掘[M].北京:機械工業(yè)出版社,2009.

        [3] 王鐵磊.面向二進制程序的漏洞挖掘關鍵技術研究[D].北京:北京大學,2011.

        [4] SCHWARTZ E J, AVGERINOS T, BRUMLEY D. All you ever wanted to know about dynamic taint analysis and forward symbolic execution (but might have been afraid to ask) [C]// 2010 IEEE Symposium on Security and Privacy (SP). [S.l.]: IEEE, 2010: 317?331.

        [5] LIN Z, JIANG X, XU D, et al. Automatic protocol format reverse engineering through context?aware monitored execution [J]. NDSS, 2008, 8: 1?15.

        [6] LIN Z, ZHANG X, XU D. Reverse engineering input syntactic structure from program execution and its applications [J]. IEEE Transactions on Software Engineering, 2010, 36(5): 688?703.

        [7] CABALLERO J, YIN H, LIANG Z, et al. Polyglot: Automatic extraction of protocol message format using dynamic binary analysis [C]// Proceedings of the 14th ACM conference on Computer and Communications Security. [S.l.]: ACM, 2007: 317?329.

        [8] KANER C, BOND W P. Software engineering metrics: What do they measure and how do we know [J]. Methodology, 2004, 8: 6?18.

        [9] MCCABE T J. A complexity measure [J]. IEEE Transactions on Software Engineering, 1976 (4): 308?320.

        [10] HATTON L. The role of empiricism in improving the reliability of future software [J/OL]. [2012?08?29]. http://www.computer.org/csdl/.

        [11] SONG D, BRUMLEY D, YIN H, et al. BitBlaze: A new approach to computer security via binary analysis [J]. Information Systems Security: Lecture Notes in Computer Science, 2008, 5352: 1?25.

        [12] YIN H, SONG D. Temu: Binary code analysis via whole?system layered annotative execution, UCB/EECS?2010?3 [R]. Berkeley: EECS Department, University of California, 2010.

        猜你喜歡
        安全漏洞
        基于大數(shù)據(jù)技術的軟件安全漏洞自動挖掘方法研究
        各國安全漏洞公平裁決程序對比研究
        計算機軟件中安全漏洞檢測技術的運用初探
        安全漏洞國際披露政策研究
        基于模糊測試技術的軟件安全漏洞挖掘方法研究
        智能設備安全漏洞知多少
        安全漏洞太大亞馬遜、沃爾瑪和Target緊急下架這種玩具
        玩具世界(2018年6期)2018-08-31 02:36:26
        安全漏洞檢測技術在計算機軟件中的應用
        基于安全漏洞掃描的校園網告警系統(tǒng)的開發(fā)與設計
        小洞不補 大洞吃苦安全漏洞你有嗎?
        免费美女黄网站久久久| 精品一区二区三区牛牛| 白嫩少妇高潮喷水av| 视频一区视频二区自拍偷拍| 日韩精品在线免费视频| 久久国产精品偷任你爽任你| 国产精品久久国产精品99 | 中文字幕免费人成在线网站| 国产精选自拍视频网站| 国产亚洲精品久久久久久国模美| 极品少妇被猛的白浆直喷白浆| 伊伊人成亚洲综合人网香| 麻豆五月婷婷| 亚洲av永久无码精品成人| 性色av手机在线观看| 日本一区二区三区激视频| 国产av剧情久久精品久久| 婷婷五月深深久久精品| yw尤物av无码国产在线观看| 亚洲av成人无码网站…| 乌克兰少妇xxxx做受6| 伊人婷婷色香五月综合缴激情| 国内精品九九久久精品小草| 亚洲精品女同在线观看| 你懂的视频网站亚洲视频 | 4hu四虎永久在线观看 | 在线看亚洲十八禁网站| 99久久免费精品色老| 国产免费一区二区在线视频| 亚洲大尺度无码无码专区| 中国老熟妇506070| 国产成人涩涩涩视频在线观看| 伊人精品无码AV一区二区三区 | 国产免费人成视频在线| 四虎成人精品国产永久免费无码| 无码福利写真片视频在线播放| 人伦片无码中文字幕| 亚洲女同av一区二区在线观看| 亚洲不卡av一区二区三区四区| 巨爆中文字幕巨爆区爆乳| 天天摸夜夜摸夜夜狠狠摸|