999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2014-10-17 18:10:42張斌等
現代電子技術 2014年19期

張斌等

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

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

中圖分類號: 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 引 言

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

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

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

1 導向性模糊測試技術

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

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

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

1.1 在線安全敏感操作分析

1.1.1 細顆粒度動態污點分析技術

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

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

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

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

1.1.2 安全敏感函數分析

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

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

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

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

T(16 17 18 19 20 21 22 23)

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

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

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

1.2.1 基于執行跡的輸入分域技術

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

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

算法將污點輸入的處理信息表示為四元組,。其中i代表指令地址;s表示當前指令的調用棧信息;t表示當前指令的污點集合信息;c為當前進程線程信息。TaintedFuzz采用動態維護影子棧的方法完成對程序運行時調用棧的獲取,對進程中每個線程影子棧進行分別維護。影子棧的維護通過插樁函數調用指令,如CALL和函數返回指令如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節點。對于每條信息preInfo[i],如果當前信息污點集合與前一條信息污點集合連續或“偽連續”(偽連續是指當前信息污點集合最小值與前一條信息污點集合最大值相等),并且當前調用棧與前一條調用棧相同,則認為當前污點信息集合與前一條污點信息集合屬于同一個輸入域(第9、10行);如果污點集合信息不連續或調用棧不同,算法首先在樹中找到一個包含當前污點集合信息的最小節點(第14行),然后將當前污點信息作為該節點的子節點插入到樹中;同時,如果該節點有子節點,則將子節點中是當前污點信息子集的子節點移動為當前污點信息集合節點的子節點(第17~19行)。

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

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

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

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

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

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

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

表1 被污染函數復雜度排序

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

1.3 模糊測試引擎

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

2 TaintedFuzz系統實現及實驗結果

2.1 TaintedFuzz系統實現

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

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

2.2 實驗結果

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

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:}

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

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

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

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

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函數將當前.m3u文件的文件名(第0~10字節)拷入到當前的線程棧當中(0x0012eb4c);在對危險函數lstrcpyA的參數進行分析后,TaintedFuzz將測試點(第0~10字節)送入到導向性模糊測試引擎當中作為字符串進行變異,模糊測試引擎成功觸發該漏洞。異常發生時上下文環境如圖9所示。

3 結 語

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

參考文獻

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

[2] SUTTON Michael.模糊測試:強制性安全漏洞發掘[M].北京:機械工業出版社,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緩沖區溢出漏洞,該漏洞在EDB數據庫的編號為EDB?ID:30336。VUPlayer是Windows平臺下一款功能強大的媒體播放工具,支持多種媒體格式。該軟件2.49版本在解析.m3u的文件名時存在嚴重的緩沖區溢出漏洞。

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

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函數將當前.m3u文件的文件名(第0~10字節)拷入到當前的線程棧當中(0x0012eb4c);在對危險函數lstrcpyA的參數進行分析后,TaintedFuzz將測試點(第0~10字節)送入到導向性模糊測試引擎當中作為字符串進行變異,模糊測試引擎成功觸發該漏洞。異常發生時上下文環境如圖9所示。

3 結 語

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

參考文獻

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

[2] SUTTON Michael.模糊測試:強制性安全漏洞發掘[M].北京:機械工業出版社,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緩沖區溢出漏洞,該漏洞在EDB數據庫的編號為EDB?ID:30336。VUPlayer是Windows平臺下一款功能強大的媒體播放工具,支持多種媒體格式。該軟件2.49版本在解析.m3u的文件名時存在嚴重的緩沖區溢出漏洞。

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

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函數將當前.m3u文件的文件名(第0~10字節)拷入到當前的線程棧當中(0x0012eb4c);在對危險函數lstrcpyA的參數進行分析后,TaintedFuzz將測試點(第0~10字節)送入到導向性模糊測試引擎當中作為字符串進行變異,模糊測試引擎成功觸發該漏洞。異常發生時上下文環境如圖9所示。

3 結 語

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

參考文獻

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

[2] SUTTON Michael.模糊測試:強制性安全漏洞發掘[M].北京:機械工業出版社,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.

主站蜘蛛池模板: 色婷婷国产精品视频| 久久久久亚洲精品成人网 | 亚洲香蕉在线| 91无码人妻精品一区二区蜜桃| 五月激激激综合网色播免费| 中文字幕在线日本| 素人激情视频福利| 潮喷在线无码白浆| 色AV色 综合网站| 亚洲综合婷婷激情| 午夜老司机永久免费看片| 国产成人精品在线1区| 中文字幕有乳无码| 国产在线第二页| 青青青国产在线播放| 中文无码精品a∨在线观看| 亚洲无码日韩一区| 国产精品区视频中文字幕| 97视频免费在线观看| 中文字幕在线看| 99re66精品视频在线观看| 国产理论最新国产精品视频| 热99re99首页精品亚洲五月天| 在线播放精品一区二区啪视频| 影音先锋亚洲无码| 亚洲久悠悠色悠在线播放| 日韩中文字幕免费在线观看| 亚洲精品777| 欧美亚洲欧美区| 免费一级大毛片a一观看不卡| 中文字幕久久精品波多野结| 国产a在视频线精品视频下载| 精品视频一区二区观看| 茄子视频毛片免费观看| 免费一级无码在线网站| 99久久无色码中文字幕| 老司机午夜精品网站在线观看| 91在线丝袜| 人妖无码第一页| 毛片视频网址| 91久久夜色精品| 一级毛片在线播放免费| 亚洲系列中文字幕一区二区| 色欲色欲久久综合网| 日韩中文无码av超清| 欧美一级高清片欧美国产欧美| 亚洲一区二区成人| 亚洲精品大秀视频| 日本精品一在线观看视频| 性视频久久| 欧美日韩高清在线| 国产精品久久久免费视频| 99re热精品视频中文字幕不卡| 色综合中文综合网| 久久久久国色AV免费观看性色| 亚洲黄色视频在线观看一区| 一级香蕉人体视频| 精品成人免费自拍视频| 国产精品无码作爱| 福利片91| 色综合国产| 四虎影视无码永久免费观看| 操操操综合网| 国产在线视频自拍| 欧美精品亚洲二区| 丁香婷婷激情综合激情| 国产成年无码AⅤ片在线| 亚洲色婷婷一区二区| 夜夜操天天摸| 亚洲国产91人成在线| 国产区91| 在线中文字幕日韩| 看国产一级毛片| av在线5g无码天天| 免费中文字幕在在线不卡| 国产在线小视频| 真实国产精品vr专区| 素人激情视频福利| 亚洲综合中文字幕国产精品欧美| 中文字幕无码制服中字| 国产白浆视频| 婷婷六月在线|