• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      語義層次的協(xié)議格式提取方法

      2013-10-29 08:26:20潘璠洪征周振吉吳禮發(fā)
      通信學(xué)報 2013年10期
      關(guān)鍵詞:污點字段報文

      潘璠,洪征,周振吉,吳禮發(fā)

      (解放軍理工大學(xué) 指揮信息系統(tǒng)學(xué)院,江蘇 南京 210007)

      1 引言

      目前,協(xié)議逆向工程在入侵檢測、漏洞挖掘、協(xié)議重用等領(lǐng)域得到廣泛的應(yīng)用。根據(jù)分析對象的不同,現(xiàn)有的協(xié)議逆向方法大致分為2類:基于網(wǎng)絡(luò)流量分析的方法[1,2]和基于執(zhí)行軌跡分析的方法[3~7]。前者以截獲的網(wǎng)絡(luò)數(shù)據(jù)流為分析對象,依據(jù)協(xié)議字段的取值變化頻率和特征推斷得到協(xié)議格式。后者利用動態(tài)污點分析技術(shù)跟蹤程序?qū)笪臄?shù)據(jù)的解析過程,并通過分析帶污點信息的執(zhí)行軌跡實現(xiàn)協(xié)議格式的提取。相比于網(wǎng)絡(luò)流量分析,執(zhí)行軌跡分析獲取的協(xié)議知識更為精確且不受樣本集限制,正逐漸成為協(xié)議逆向技術(shù)的主流。

      Polyglot[3]首次提出基于執(zhí)行軌跡分析的協(xié)議格式提取方法,但僅實現(xiàn)了對格式中分隔符、定位符和關(guān)鍵字的識別。Wondracek等人[8]在 Polyglot的基礎(chǔ)上對多次分析的結(jié)果進行融合,得到更具通用性的協(xié)議格式描述。AutoFormat[9]在執(zhí)行軌跡中加入了指令執(zhí)行的上下文信息,通過上下文匹配實現(xiàn)了協(xié)議字段結(jié)構(gòu)的提取。Dispatcher[5]結(jié)合對函數(shù)調(diào)用參數(shù)的分析,豐富了分析結(jié)果中字段的語義信息。應(yīng)凌云等[7]則針對惡意軟件分析的需求,在現(xiàn)有方法的基礎(chǔ)上實現(xiàn)了對協(xié)議字段的程序行為語義關(guān)聯(lián)分析,進一步提升了協(xié)議逆向的應(yīng)用價值。然而,現(xiàn)有方法僅對執(zhí)行軌跡中處理污點數(shù)據(jù)的指令進行語法層次分析,可能導(dǎo)致字段識別存在冗余和沖突,進而影響了結(jié)構(gòu)提取和語義推斷的準確性。為此,提出了一種新的語義層次的協(xié)議格式提取方法。該方法在執(zhí)行軌跡的重放過程中,首先將二進制指令轉(zhuǎn)化為精簡的中間語言形式;然后,針對具有單一語義的中間指令,通過細粒度的動態(tài)污點分析對字段語義解析過程進行跟蹤;最后,依據(jù)字段的語義解析特征,在語義層次實現(xiàn)協(xié)議格式的提取。

      本文的主要貢獻如下:1) 首次將基于中間語言的動態(tài)污點分析思想應(yīng)用于協(xié)議逆向分析領(lǐng)域。將語義復(fù)雜、種類繁多的二進制指令轉(zhuǎn)化為精簡、單一語義的中間語言形式,在降低指令語義分析復(fù)雜度的同時,提高了報文數(shù)據(jù)跟蹤的準確性。2) 提出一種語義層次的字段識別策略。依據(jù)字段的語義不可分割性,在語義層次實現(xiàn)字段識別,避免了結(jié)果中的字段冗余和沖突,進而提高了協(xié)議格式提取的精確度。3) 實現(xiàn)了語義層次的協(xié)議格式提取工具原型系統(tǒng)(SPAE, semantic-level protocol format extractor)。利用原型系統(tǒng)對不同類型的多種協(xié)議進行了測試,并與現(xiàn)有方法進行了對比。測試結(jié)果驗證了本文方法的有效性。

      2 問題分析

      協(xié)議格式由若干個字段組成,字段為具有特定語義的最小不可分割的連續(xù)字節(jié)序列,字段之間存在順序、并列和層次關(guān)系。根據(jù)這一定義,協(xié)議格式提取可分為字段識別、結(jié)構(gòu)提取和字段語義推斷3個階段[5]。字段識別的正確與否直接影響到結(jié)構(gòu)提取和語義推斷的準確性,是協(xié)議格式提取的關(guān)鍵。

      傳統(tǒng)方法利用細粒度的動態(tài)污點分析對每個污點報文字節(jié)進行標定和追蹤,然后掃描執(zhí)行軌跡中指令操作數(shù)的污點記錄,根據(jù)污點數(shù)據(jù)塊訪問的粒度實現(xiàn)字段邊界的劃分。然而由于內(nèi)存拷貝、校驗和計算以及編譯器優(yōu)化等原因,這種在指令語法層次實現(xiàn)的字段識別方式存在粒度過細、冗余和沖突的缺陷[4]。表1給出了傳統(tǒng)方法通過分析執(zhí)行軌跡實現(xiàn)字段識別的簡單示例。其中,帶污點記錄的執(zhí)行軌跡片段取自網(wǎng)絡(luò)程序 Emule0.48a的報文解析過程。

      表1 傳統(tǒng)方法的字段識別過程

      在表1中,第1行指令將報文首部的4 byte數(shù)據(jù)讀入寄存器esi。由于第2~4行指令均操作了污點數(shù)據(jù)塊<0,3>,傳統(tǒng)方法對字段的識別明顯存在冗余。另外,讀入的4 byte污點數(shù)據(jù)經(jīng)過和0xFF的與運算,參與比較并影響跳轉(zhuǎn)的僅為單字節(jié)數(shù)據(jù),實際的字段邊界為<0,0>。由于污點數(shù)據(jù)塊<1,3>還將被后續(xù)指令訪問,這一誤差將導(dǎo)致字段識別的沖突。

      為了提高協(xié)議格式提取的精度,AutoFormat[9]根據(jù)字段的邊界范圍構(gòu)建報文結(jié)構(gòu)樹,通過刪除重復(fù)節(jié)點去除冗余,但其在消除邊界沖突時將使得字段劃分過細。Tupni[4]以指令操作數(shù)訪問的污點數(shù)據(jù)塊作為候選字段,并將訪問的次數(shù)作為該候選字段的權(quán)值,將邊界劃分問題轉(zhuǎn)化為具有最大權(quán)值的不相交字段集合的計算。考慮到集合覆蓋本質(zhì)為 NP完全問題,Tupni僅采用貪心算法獲取局部最優(yōu)解,并不能保證結(jié)果的正確性。

      僅在語法層次對二進制指令進行分析,是現(xiàn)有方法難以保證字段識別正確率的根本原因。對于輸入數(shù)據(jù)而言,其解析過程分為語法解析和語義解析2個階段[10]。在語法解析階段,協(xié)議實體將字段對應(yīng)的連續(xù)字節(jié)序列讀取到程序變量中,并進行格式化和校驗處理;在語義解析階段,協(xié)議實體將對程序變量中字段的取值做出解釋。但在二進制程序中,指令處理的對象為內(nèi)存單元和寄存器,沒有程序變量的概念。無論字段是數(shù)值、指針還是字符流,都被視為位寬有限的數(shù)字進行處理,其粒度與指令訪問污點數(shù)據(jù)的粒度之間并不存在嚴格的對應(yīng)關(guān)系。因此,現(xiàn)有語法層次的指令分析方式難免在識別字段的過程中存在誤差。

      字段作為協(xié)議格式的基本單位,在語義上具有最小不可分割性。因而在語義解析階段,與指令相關(guān)的連續(xù)輸入數(shù)據(jù)必然屬于同一個字段,并且該字段僅包含這些數(shù)據(jù)。即使在經(jīng)過編譯器編譯和優(yōu)化的二進制指令級,這種特性將依然存在,否則協(xié)議實體無法與對應(yīng)的協(xié)議規(guī)范相匹配。因此,利用字段的語義解析特征劃分字段邊界,將有效克服語法層次方法存在的缺陷,得到更為精準的結(jié)果。

      基于上述分析,本文考慮在語義層次實現(xiàn)字段識別。根據(jù)功能的不同,字段語義可以分為控制語義和操作語義2類[5]??刂普Z義指定報文自身的語法解析方式,如長度、分隔符、關(guān)鍵字等;操作語義則決定協(xié)議實體如何完成響應(yīng)操作,如網(wǎng)絡(luò)地址、端口、文件路徑等。本文發(fā)現(xiàn),二進制程序?qū)刂普Z義的解析通過跳轉(zhuǎn)條件與輸入相關(guān)的控制流分支實現(xiàn),而對操作語義的解析則通過參數(shù)與輸入相關(guān)的函數(shù)調(diào)用來完成。因此,本文方法的基本思路是,通過動態(tài)污點分析技術(shù)跟蹤報文解析過程,重點對分支指令的跳轉(zhuǎn)條件和函數(shù)調(diào)用參數(shù)進行分析,進而實現(xiàn)語義層次的協(xié)議格式提取。

      3 語義層次的協(xié)議格式提取方法

      3.1 方法概述

      方法以二進制程序和協(xié)議報文為輸入,記錄報文解析過程的完整執(zhí)行軌跡,然后對執(zhí)行軌跡進行重放,利用基于中間語言的細粒度動態(tài)污點分析技術(shù),在語義層次實現(xiàn)協(xié)議格式的提取。對于執(zhí)行軌跡中的每條二進制指令,重放過程分為3個階段。

      1) 中間語言轉(zhuǎn)換。將二進制指令轉(zhuǎn)換為精簡的、語義等價的中間語言形式,避免直接對種類繁多、語義復(fù)雜的二進制指令進行處理。

      2) 動態(tài)污點分析。依據(jù)中間語言的指令語義更新污點上下文C,實現(xiàn)基于中間語言的細粒度動態(tài)污點分析,為語義層次的協(xié)議格式提取提供支撐。

      3) 協(xié)議格式提取。分析字段語義解析相關(guān)的中間指令,根據(jù)語義層次的字段識別策略將指令操作數(shù)相關(guān)的污點標簽合并為字段,并利用已有方法提取報文結(jié)構(gòu),最終得到BNF形式的協(xié)議格式描述GM。

      方法流程更為精確的描述如算法1所示。后續(xù)將詳細介紹上述階段的具體處理策略。

      算法1 語義層次協(xié)議格式提取

      輸入:二進制程序P,報文輸入M

      輸出:BNF形式的協(xié)議格式描述GM

      1) ExtractFormat (Trace)

      2) let F, GM:= ?; /*F 為已識別字段集*/

      3) trace:= LogTrace(P, M); /*執(zhí)行軌跡的記錄*/

      4) C:=InitTaintContext(); /*污點上下文的初始化*/

      5) for each i in Trace do

      6) ilSeq:=ILtranslate(i); /*中間語言轉(zhuǎn)換*/

      7) for each stmt in ilSeq do

      /*細粒度動態(tài)污點分析*/

      8) C:=DynamicTaintAnalysis(stmt, C);

      9) f:=FieldIdentify(i, C, F); /*語義層次字段識別*/

      10) F:={f}∪F

      /*報文結(jié)構(gòu)提取*/

      11) GM:=StructureExtract(stmt, f , GM);

      12) end for

      13) end for

      14) return GM

      3.2 中間語言轉(zhuǎn)換

      在二進制級進行語義層次的字段識別主要面臨3個方面的挑戰(zhàn)。首先,指令語義的復(fù)雜度高,例如寄存器別名、指令前綴等問題必須考慮。如果對報文數(shù)據(jù)傳播的跟蹤不夠精確,將無法避免字段語法解析階段帶來的誤差。其次,指令集規(guī)模極其龐大,將導(dǎo)致指令語義分析策略過于繁冗。在 x86指令集中,僅條件跳轉(zhuǎn)指令的種類就超過 30種,在保證完備性的前提下分析策略的復(fù)雜度將不可接受。最后,底層指令缺乏對函數(shù)調(diào)用的抽象,無法通過函數(shù)調(diào)用參數(shù)實現(xiàn)對字段語義的推斷。

      針對上述挑戰(zhàn),采用將二進制級指令轉(zhuǎn)換為中間語言指令的方式進行分析。David Brumley等[11]提出了面向二進制程序分析的中間語言BIL,如圖1所示。為了簡化描述,省略了圖1中l(wèi)oad和store指令的部分參數(shù),默認采用小尾的內(nèi)存讀寫方式。

      圖1 擴展的BIL語法

      協(xié)議格式提取方法基于BIL實施,首先利用二進制代碼分析平臺 BAP[11]將執(zhí)行軌跡中的匯編指令轉(zhuǎn)換為中間語言,主要分為2個步驟:1) 將二進制指令轉(zhuǎn)化為精簡的VEX IL[12]形式;2) 使用BIL指令顯式描述VEX指令的副效應(yīng)(side-effect)。

      相比于原始匯編指令,BIL的指令規(guī)模明顯縮減,并且每條指令都具有單一且明確的語義,在指令語義描述方面具有明顯的優(yōu)勢。為了提升跨平臺的代碼分析能力,BAP在指令轉(zhuǎn)換時將所有平臺相關(guān)的特殊指令簡化為無執(zhí)行語義的special string指令,對其不做處理。由于執(zhí)行軌跡中的跳轉(zhuǎn)路徑與指令參數(shù)取值均已確定,并且特殊指令通常與報文數(shù)據(jù)的解析無關(guān),BAP的簡化不會造成后續(xù)動態(tài)污點分析的誤差。

      需要說明的是,中間語言轉(zhuǎn)換得到的BIL指令序列并不唯一,例如BAP可以進一步將BIL指令序列轉(zhuǎn)換為靜態(tài)單賦值(SSA, single static assignment)形式。雖然轉(zhuǎn)換后的BIL指令可以在語法特征上存在差異,但 BAP能夠保證除平臺相關(guān)的特殊指令外,得到BIL形式的指令在語義上與原始指令等價。因此,方法能夠在降低指令分析復(fù)雜度的同時,確保語義層次字段識別準確度。

      3.3 細粒度動態(tài)污點分析

      為了分析執(zhí)行軌跡重放過程中的報文解析語義,需要為每個輸入數(shù)據(jù)字節(jié)賦予唯一的污點標簽,進而跟蹤每個污點字節(jié)的傳播過程。為此,提出了基于BIL的細粒度動態(tài)污點分析策略,通過維護污點上下文來保存輸入字節(jié)的傳播狀態(tài),并根據(jù)指令的語義對污點上下文進行更新,實現(xiàn)細粒度的動態(tài)污點分析。首先給出污點上下文的定義。

      定義1 污點上下文C可定義為四元組<μ, Δ,Tμ, TΔ> ,其中,

      1) μ為內(nèi)存地址到取值的映射,μ[o]表示地址為o的內(nèi)存字節(jié)取值;

      2)Δ為變量到取值的映射,Δ[ var]表示變量var的取值;

      3)Tμ為內(nèi)存地址到污點屬性的映射,Tμ[o ]表示地址為o內(nèi)存字節(jié)的污點屬性;

      4)TΔ為變量及其字節(jié)偏移到污點屬性的映射,TΔ[v ar, n]表示變量var的第n byte的污點屬性。

      由于程序內(nèi)部復(fù)雜的數(shù)據(jù)依賴關(guān)系,內(nèi)存和寄存器變量通常與多個污點數(shù)據(jù)字節(jié)相關(guān)。因此在動態(tài)污點分析過程中,將污點屬性定義為污點標簽的集合。為了精確描述污點分析策略,采用式(1)所示推理規(guī)則對指令執(zhí)行語義進行定義。

      其中,stmt為當(dāng)前執(zhí)行的指令,運算符?I表示指令執(zhí)行操作,computation為完成污點屬性更新所需的計算條件。在 computation中,←表示更新操作符,■表示連續(xù)操作符。

      依據(jù)上述約定,基于BIL的細粒度動態(tài)污點分析策略如圖2所示。動態(tài)污點分析策略由3條指令語義規(guī)則和9條表達式賦值規(guī)則組成,實現(xiàn)對污點屬性的標記和傳播。污點標記由函數(shù)調(diào)用指令的語義規(guī)則實現(xiàn)。以recv函數(shù)為例,規(guī)則T-RECV依據(jù)函數(shù)返回的實際報文長度創(chuàng)建污點標簽,并對函數(shù)第 2個參數(shù)指向的內(nèi)存區(qū)域進行污點屬性的初始化。污點傳播是對污點屬性映射μT和ΔT的更新,分別由指令語義規(guī)則T-ASSIGN、T-RSTORE完成。

      在表達式賦值過程中,二元運算符&、|、⊕的結(jié)果與參數(shù)之間存在位對應(yīng)關(guān)系。為了提高精度,污點分析策略采用T-BBINOP規(guī)則單獨對這類運算符進行處理,得到位精確的表達式污點取值。而對于其余的二元運算符(+,*,mod等),則認為運算結(jié)果與所有參數(shù)中包含的污點標簽相關(guān),通過T-ABINOP規(guī)則進行表達式污點賦值。由于二進制程序中清零操作(xor EAX, EAX)和截取操作(and ECX, 0FFh)通過位運算指令實現(xiàn),T-BBINOP規(guī)則還根據(jù)指令的參數(shù)類型和取值對表達式的污點取值進行修正,以保證污點屬性映射與指令語義之間的等價性。

      動態(tài)污點分析策略僅對賦值、內(nèi)存寫入和函數(shù)調(diào)用3類指令進行處理,不考慮其他指令對動態(tài)污點上下文的影響。一方面,goto exp、return等跳轉(zhuǎn)指令只決定執(zhí)行流程,無法更新取值和污點屬性映射;另一方面,special string表示的如浮點計算等復(fù)雜指令或者特權(quán)指令,通常情況下與報文解析過程無關(guān)。因此,對指令語義規(guī)則的簡化是可以接受的,并且可以提高規(guī)則匹配的效率。

      圖2 基于BIL的細粒度動態(tài)污點分析策略

      由圖2可以看出,基于精簡的、具有單一語義的BIL指令集,方法采用少量規(guī)則即可實現(xiàn)細粒度的動態(tài)污點分析,顯著降低了指令分析的復(fù)雜度。與已有基于中間語言的動態(tài)污點分析[13]不同,上述策略還考慮了指令參數(shù)位寬的差異,與二進制指令的語義更相吻合。

      由于污點屬性為污點標簽的集合,字節(jié)粒度的污點屬性跟蹤將帶來巨大的內(nèi)存開銷,同時污點屬性的復(fù)制和合并操作也會導(dǎo)致嚴重的性能損失。王鐵磊等[14]依據(jù)污點數(shù)據(jù)傳播的重疊性和連續(xù)性特征,引入 roBDD表示集合形式的污點屬性,在減少內(nèi)存消耗的同時,顯著提高了分析效率。方法在具體實現(xiàn)時沿用了這一思想,以確保動態(tài)污點分析策略的可行性。

      3.4 協(xié)議格式提取

      在動態(tài)污點分析的基礎(chǔ)上,提出一種語義層次的字段識別策略?;舅枷胧牵航柚谖埸c上下文,分析分支跳轉(zhuǎn)指令和函數(shù)調(diào)用指令的參數(shù),將污點屬性中連續(xù)污點標簽識別為字段,并加入到字段集合F中。圖3給出了策略規(guī)則的形式化描述。

      以F-IF規(guī)則為例,對于if exp1then goto exp2else goto exp3指令,假定跳轉(zhuǎn)條件 e xp1的污點取值為T,計算T所包含污點標簽的集合若有,可將[p,q]識別為字段長度,并更新 F=F∪{f

      圖3 語義層次字段識別規(guī)則

      考慮到goto exp在跳轉(zhuǎn)地址輸入可控的條件下也作為分支跳轉(zhuǎn)指令,F(xiàn)-GOTO規(guī)則采用與F-IF規(guī)則相同的策略對跳轉(zhuǎn)地址的污點取值進行分析。而對于函數(shù)調(diào)用指令,F(xiàn)-CALL規(guī)則函數(shù)的輸入?yún)?shù)依次采用類似的策略。

      為了描述字段識別過程,以圖4所示的代碼片段為例。圖4(a)與表1對應(yīng),圖4(b)為轉(zhuǎn)換后的BIL代碼。

      圖4 BIL形式的代碼示例

      依據(jù)動態(tài)污點分析策略,圖4(b)中代碼片段的重放過程如表2所示。由于映射μ、Δ、μT與字段識別無關(guān),表中僅保留對映射ΔT更新的描述。1)~5)行均為賦值指令,因此應(yīng)用規(guī)則T-ASSIGN對映射ΔT進行更新。而第6行.為分支跳轉(zhuǎn)指令,觸發(fā)F-IF規(guī)則對字段進行識別。計算跳轉(zhuǎn)條件 R_ZF==0x1對應(yīng)的污點取值 T為[{i0},{i0},{i0},{i0}],顯然有,因而識別的字段為<0,0>。對比表 1和表2可以看出,語義層次的字段識別可以有效地避免字段語法解析過程帶來的冗余,識別字段邊界也更為精確。

      由于協(xié)議實體功能的差異,并不是所有協(xié)議字段都會被程序解析,因而識別的字段結(jié)果往往對報文數(shù)據(jù)的覆蓋并不完全。在執(zhí)行軌跡重放完畢后,將所有已識別字段之間的連續(xù)字節(jié)區(qū)域視為一個完整字段加入到字段集合F中。考慮到存在連續(xù)多個未解析字段的可能性,這種處理方式可能導(dǎo)致字段識別的粒度較粗,但能夠保證報文結(jié)構(gòu)的完整性。

      在字段識別的基礎(chǔ)上,方法還結(jié)合已有的結(jié)構(gòu)提取技術(shù)實現(xiàn)完整的協(xié)議格式逆向分析。Lin等[15]指出并通過實驗證明,當(dāng)結(jié)構(gòu)化數(shù)據(jù)按照自頂向下方式解析時,數(shù)據(jù)結(jié)構(gòu)可通過分析指令之間的動態(tài)控制依賴關(guān)系得到,克服了原有啟發(fā)式結(jié)構(gòu)提取策略的缺陷。但Cui等[4]發(fā)現(xiàn),當(dāng)內(nèi)存拷貝、校驗和計算等操作導(dǎo)致字段劃分過細甚至沖突時,Lin的方法將失效。本文方法將語義層次字段識別與 Lin的方法結(jié)合,有效彌補了這一缺陷。

      4 實驗評估

      為了評估方法的有效性,本文在Linux平臺上實現(xiàn)了原型系統(tǒng) SPAE,并使用SPAE對若干協(xié)議報文進行了格式提取,同時將提取的結(jié)果與現(xiàn)有方法結(jié)果進行了對比分析。

      表2 語義層次的字段識別過程

      4.1 原型系統(tǒng)架構(gòu)

      SPAE由靜態(tài)分析模塊、執(zhí)行軌跡生成模塊、中間語言翻譯模塊、污點分析引擎以及格式提取模塊5部分組成,如圖5所示。

      圖5 SPAE設(shè)計架構(gòu)

      靜態(tài)分析模塊利用 IDA Pro反匯編二進制程序,將識別的靜態(tài)庫函數(shù)信息提供給執(zhí)行軌跡生成模塊,并計算分支指令的直接必經(jīng)節(jié)點信息,為報文結(jié)構(gòu)提取時動態(tài)依賴關(guān)系的計算提供依據(jù)。

      考慮安全性與跨平臺需求,執(zhí)行軌跡生成模塊以插件形式與系統(tǒng)級動態(tài)分析平臺 TEMU[16]進行交互,負責(zé)記錄報文解析過程中指令靜態(tài)信息、指令運行時信息以及函數(shù)調(diào)用的參數(shù)和返回值等。

      中間語言翻譯模塊擴展了 BAP平臺[11]的組件toil和iltrans,負責(zé)將執(zhí)行軌跡中的指令轉(zhuǎn)換為帶函數(shù)抽象的BIL形式。

      作為SPAE的核心,污點分析引擎負責(zé)維護重放過程中的污點上下文。此外,污點分析執(zhí)行引擎還集成了roBDD開源庫BuDDY[17],用于實現(xiàn)污點屬性的壓縮存儲。

      格式提取模塊根據(jù)污點上下文分析指令語義,實現(xiàn)字段識別和結(jié)構(gòu)提取,并輸出分析結(jié)果。

      4.2 實驗及結(jié)果分析

      本文利用SPAE對Windows環(huán)境下多種協(xié)議解析程序進行了測試。具體分析環(huán)境配置如下:運行SPAE的分析主機配備了Intel Core Duo 2.93 GHz的E6500 CPU,4 GB內(nèi)存和32 bit的Ubuntu9.04系統(tǒng),同時在TEMU中加載32 bit的Windows XP系統(tǒng)作為協(xié)議解析程序的執(zhí)行環(huán)境。

      根據(jù)協(xié)議類型,選擇了3種二進制協(xié)議(DNS、eDonkey、DHCP)、3種文本型協(xié)議(FTP、HTTP、SIP)以及混合型的McAfee ePO框架服務(wù)協(xié)議作為測試對象。報文樣本及執(zhí)行軌跡信息如表3所示。

      SPAE對記錄的執(zhí)行軌跡進行重放,并輸出協(xié)議格式提取結(jié)果。將結(jié)果中識別的字段與公開的協(xié)議規(guī)范進行對比,以評估字段識別的準確率。同時作為對照,借助于TEMU自帶的tracecap插件記錄了帶污點信息的執(zhí)行軌跡,并分別采用AutoFormat的字段樹構(gòu)造方法和Tupni的加權(quán)集合覆蓋計算方法完成字段識別。

      表4給出了報文實際包含的字段數(shù)、執(zhí)行軌跡中與污點相關(guān)的記錄數(shù)以及3種方法的字段識別結(jié)果對比。|F|、|Fc|、|Fo|分別為正確識別、識別粒度過粗和識別粒度過細的字段數(shù)??梢钥闯?,3種方法識別的字段數(shù)與報文實際的字段數(shù)相當(dāng),均有效避免了大規(guī)模污點訪問記錄可能導(dǎo)致的字段重復(fù)識別。相比而言,AutoFormat與Tupni的識別結(jié)果中同時存在粒度過粗和過細的字段,而SPAE的結(jié)果中則僅存在少量粒度劃分過粗的字段。進一步統(tǒng)計得到AutoFormat、Tupni和SPAE的平均字段識別準確率分別為 71.1%、79.4%和 93.9%,這說明SPAE具有更精準的字段識別能力。在此,對字段識別誤差產(chǎn)生的原因進行詳細分析。

      對于 Emule客戶端之間發(fā)送的 Hello報文,SPAE能夠正確識別所有的字段,而 AutoFormat和Tupni均存在字段識別的誤差,如圖6所示。對于單字節(jié)的Protocol Type字段,目標程序采用表1所示的方式進行解析,對Protocol Type字段和Length字段訪問邊界分別為<0,3>、<1,4>。AutoFormat在構(gòu)造字段樹時,將數(shù)據(jù)塊<0,3>、<1,4>作為結(jié)構(gòu)處理,識別的字段為<0,1>、<1,3>和<3,4>,導(dǎo)致對Length字段的劃分粒度過細。盡管邊界存在沖突,Tupni能夠正確識別出Protocol Type字段和Length字段。這是由于Length字段作為循環(huán)條件被反復(fù)訪問,<0,3>的累計權(quán)值要遠小于<1,4>,因而在計算加權(quán)集合覆蓋的過程中被剔除。

      表3 SPAE測試樣本信息

      表4 字段識別的結(jié)果統(tǒng)計

      圖6 eDonkey Hello報文的字段識別結(jié)果對比

      程序?qū)ayload Type字段的解析方式與Protocol Type字段相同。類似地,AutoFormat將User Hash字段錯誤識別為2個劃分粒度過細的字段。另外,由于數(shù)據(jù)塊<5,8>的累計訪問權(quán)值大于數(shù)據(jù)塊<7,23> (<7,23>通過對同一指令連續(xù)訪問的數(shù)據(jù)塊合并得到),Tupni將字段邊界錯誤識別為<5,8>和<9,23>。相比 AutoFormat和 Tupni,SPAE采用更為精確的動態(tài)污點分析策略,避免了位運算造成的字段識別誤差。

      對于DNS查詢報文,3種方法正確識別的字段數(shù)分別為9、9和10,如圖7所示。通過分析發(fā)現(xiàn),程序分別采用不同的指令對Flags字段的2個字節(jié)進行讀取和運算,因而AutoFormat與Tupni將Flags字段錯誤識別為 2個單字節(jié)字段。而 SPAE只在Flags比較時實現(xiàn)字段識別,因而正確劃分了該字段邊界。此外,AutoFormat、Tupni和SPAE將連續(xù)的Answer RRs、Authority RRs和 Additional RRs字段識別為同一字段,導(dǎo)致對字段的劃分粒度過粗。這是由于目標程序在解析請求報文時跳過了對這些字段的處理,因而執(zhí)行軌跡中并不存在對這些字段的處理指令,3種方法只能將未識別的連續(xù)字節(jié)區(qū)域合并為單獨的字段。

      對于DHCP協(xié)議的BOOTP請求報文,3種方法的字段識別結(jié)果相同,除將Transaction ID、Server host name等11個字段被錯誤合并為5個字段粒度劃分過粗的字段之外,正確識別了其余的 28個字段。對執(zhí)行軌跡的分析表明,字段誤識別的原因與DNS報文解析類似,均在于目標程序未對這些字段進行處理。

      圖7 DNS查詢報文的字段識別結(jié)果對比

      對于文本型的FTP協(xié)議,由于用戶請求報文的格式較為簡單,3種方法均正確識別了所有的字段。需要說明的是,雖然程序以字節(jié)為粒度讀取和處理字符串,AutoFormat與Tupni通過對同一指令連續(xù)污點記錄的合并避免了字段誤識別;SPAE則通過對字符串處理函數(shù)的抽象,實現(xiàn)了語義層次的文本型字段的識別。

      對于 HTTP請求報文和 SIP注冊報文,SPAE的識別結(jié)果與協(xié)議規(guī)范一致,而 AutoFormat和Tupni識別結(jié)果中存在少量的劃分粒度過細的情況。通過分析發(fā)現(xiàn),誤識別的字段均為Quality Factor字段(如“q=0.500”),用于指定服務(wù)器返回媒體類型的優(yōu)先級。由于此類字段為字符串形式的浮點值,目標程序?qū)π?shù)點前后的字符采用了不同的加權(quán)方式,導(dǎo)致了AutoFormat和Tupni錯誤地將該字段細分為包括小數(shù)點在內(nèi)的3個字段??梢钥闯?,得益于語義層次的字段識別方式,SPAE消除了類似語法解析過程給字段識別帶來的誤差。

      對于 McAfee ePO框架服務(wù)協(xié)議的策略檢查報文,SPAE正確識別的字段數(shù)遠多于AutoFormat和Tupni。通過對執(zhí)行軌跡的分析發(fā)現(xiàn),ePO服務(wù)器首先將報文數(shù)據(jù)與 0xAA進行異或,以完成對報文的解密。因而在字段樹構(gòu)造過程中,AutoFormat將報文數(shù)據(jù)的每一字節(jié)都識別為字段,而將實際的報文字段識別為結(jié)構(gòu)體。同樣受到解密過程的影響,Tupni僅能正確識別出累計訪問權(quán)值超過自身長度的字段,其中包括 1個類型字段與 26個長度字段。而SPAE正確識別出了絕大部分的字段,僅報文尾部與數(shù)字簽名相關(guān)的5個字段因客戶端版本過低而未被服務(wù)器處理,導(dǎo)致了字段劃分粒度過粗的誤差。

      在字段識別的基礎(chǔ)上,還對報文樣本的結(jié)構(gòu)進行了識別。結(jié)果表明,SPAE能夠精確識別出所有報文樣本的結(jié)構(gòu)。以 eDonkey Hello報文為例,Wireshark和SPAE識別出的報文結(jié)構(gòu)如圖8所示??梢钥闯?,SPAE識別的報文結(jié)構(gòu)層次與Wireshark的識別結(jié)果基本一致,僅對協(xié)議類型字段的識別存在差異。這是由于Emule0.48a同時支持協(xié)議類型取值為0xC5的Emule擴展協(xié)議,需要對協(xié)議類型字段進行比較以選擇對應(yīng)的指令分支,因此協(xié)議類型字段在SPAE識別結(jié)果中的層次要高于其他字段。由此說明,SPAE的識別結(jié)果更加接近于程序?qū)笪牡慕馕龇绞健?/p>

      SPAE通過基于BIL的動態(tài)污點分析策略提高了字段識別的精確度,但可能存在時空開銷過于龐大的問題。表5給出了SPAE與tracecap跟蹤報文解析過程的時空開銷對比。為了精確評估動態(tài)污點分析對效率的影響,在統(tǒng)計過程中SPAE未啟用格式提取模塊。

      圖8 eDonkey Hello報文結(jié)構(gòu)識別對比

      表5 SPAE與tracecap的時空開銷對比

      從表 5中可以看出,SPAE的時間開銷約為tracecap的30~70倍。特別是對于擁有圖形界面的協(xié)議解析程序(eDonkey和SIP),協(xié)議格式提取過程耗費的時間接近0.5 h。但考慮到漏洞挖掘、協(xié)議重用等逆向應(yīng)用對實時性的要求較低,認為以這樣的時間開銷為代價換取格式提取的精確度是值得的。另外,SPAE使用的內(nèi)存空間要明顯多于tracecap,但仍在可接受的范圍之內(nèi)。同時SPAE的內(nèi)存開銷并未隨著報文數(shù)據(jù)規(guī)模的增大而顯著增長,由此驗證了文獻[14]的結(jié)論:基于roBBD的污點屬性存儲的開銷并不依賴于污點數(shù)據(jù)的多少,更適用于大規(guī)模的細粒度動態(tài)污點分析。

      5 討論

      由于缺乏公開的測試樣本集和原型工具,本文對 AutoFormat和 Tupni的字段識別部分進行了實現(xiàn),以對比SPAE與已有方法的字段識別準確度。結(jié)合已有測試結(jié)果[4,9]可以發(fā)現(xiàn),本文中AutoFormat和Tupni的字段識別準確率與已有測試結(jié)果基本一致,僅因測試目標的不同而存在細微差別。由此說明,SPAE在協(xié)議格式提取的精確度方面的確更具優(yōu)勢。此外認為,所提出的細粒度動態(tài)污點分析策略并不局限于協(xié)議逆向分析領(lǐng)域,還能與惡意攻擊檢測[18]、測試用例生成[19]等領(lǐng)域的研究成果相結(jié)合,進一步推進動態(tài)污點分析在網(wǎng)絡(luò)安全各個領(lǐng)域的應(yīng)用。

      本文方法在抽象的中間語言層進行指令分析,在降低分析策略復(fù)雜度的同時,能夠以較少的代價移植到其他指令系統(tǒng),具有跨平臺的優(yōu)勢。值得說明的是,在SPAE的設(shè)計架構(gòu)中,完全可以將TEMU替換為其他二進制插樁工具,如PIN、DynamoRIO等,以提高執(zhí)行軌跡生成的效率。但考慮到插樁操作可能對協(xié)議解析流程產(chǎn)生干擾,采用類似TEMU的虛擬機系統(tǒng)得到的分析結(jié)果更為可靠。另外,本文方法還可以采用在線方式實現(xiàn),以避免記錄指令數(shù)目龐大的程序執(zhí)行軌跡。但采用離線方式使執(zhí)行軌跡記錄階段和協(xié)議格式提取階段分離,能夠避免分析過程給目標程序執(zhí)行帶來過高的時延,確保報文解析流程的正常執(zhí)行;同時執(zhí)行軌跡分析可以在多個更高性能的計算平臺上并行實現(xiàn),以提高協(xié)議格式提取的效率。

      隱式信息流的跟蹤是動態(tài)污點分析所面臨的一個重要挑戰(zhàn),目前還沒有通用可行的解決方案。已有研究主要采用指針污染和控制流污染的方式,極易引起過污染 (over-tainting) 的問題[20,21]。與程序異常檢測不同,協(xié)議格式提取對過污染缺陷更為敏感。雖然欠污染 (under-tainting) 可能導(dǎo)致部分字段無法識別,但過污染將給整個協(xié)議格式提取過程帶來大量的干擾。目前在實驗中還尚未發(fā)現(xiàn)欠污染給字段識別帶來的影響,因此在動態(tài)污點分析策略中忽略了對隱式信息流的處理。

      筆者注意到,包括SPAE在內(nèi)的現(xiàn)有方法雖然實現(xiàn)了對字段邊界和語義的識別,但無法獲取字段之間的依賴關(guān)系。例如SPAE能識別出字段具有長度語義,但無法獲知其取值所表示的真實長度。存在這一缺陷的原因在于動態(tài)污點分析僅能跟蹤污點數(shù)據(jù)的傳播,但不能提供協(xié)議解析過程對污點數(shù)據(jù)處理的運算關(guān)系。在未來工作中,將嘗試引入基于中間語言的符號執(zhí)行技術(shù)[13,14],以獲取更為豐富的協(xié)議格式信息。

      目前,本文方法主要針對明文協(xié)議的格式提取,對復(fù)雜加密協(xié)議無能為力,并且沒有考慮到對協(xié)議狀態(tài)機的推斷。但現(xiàn)有的加密協(xié)議逆向方法[5,22]和協(xié)議狀態(tài)機推斷方法[6,23]均以協(xié)議格式提取為基礎(chǔ),因而相信,結(jié)合本文提出的語義層次的字段識別思想,這些方法的識別準確率將得到進一步提高。

      6 結(jié)束語

      針對現(xiàn)有方法存在的字段識別準確度不高的缺陷,本文提出了一種語義層次的協(xié)議格式提取方法。該方法將二進制指令轉(zhuǎn)換為語義等價的中間語言形式并進行重放,通過細粒度的動態(tài)污點分析技術(shù)跟蹤報文字段的語義解析過程,在語義層次實現(xiàn)了對協(xié)議格式的提取。對原型系統(tǒng)的測試結(jié)果表明,本文提出的方法能夠以可接受的時間和內(nèi)存開銷實現(xiàn)協(xié)議格式的提取,相比于 AutoFormat和Tupni具有更高的識別準確率。

      下一步,計劃結(jié)合符號執(zhí)行技術(shù)以增加對字段依賴關(guān)系的提取能力,并實現(xiàn)更為完善的支持加密協(xié)議和狀態(tài)協(xié)議識別的協(xié)議逆向系統(tǒng)。

      [1] CUI W, KANNAN J, WANG H. Discoverer: automatic protocol reverse engineering from network traces[A]. The 16th USENIX Security Symposium[C]. Boston, Sheraton, USA, 2007. 199-212.

      [2] 李偉明,張愛芳,劉建財?shù)? 網(wǎng)絡(luò)協(xié)議的自動化模糊測試漏洞挖掘方法[J].計算機學(xué)報,2011, 34(2):242-255.LI W M, ZHANG A F, LIU J C, et al. An automatic network protocol fuzz testing and vulnerability discovering method[J]. Chinese Journal of Computers, 2011, 34(2):242-255.

      [3] CABALLERO J, YIN H, LIANG Z, et al. Polyglot: automatic extraction of protocol format using dynamic binary analysis[A]. ACM CCS[C]. Alexandria, VA, USA, 2007.317-329.

      [4] CUI W, PEINADO M, CHEN K, et al. Tupni: automatic reverse engineering of input formats[A]. ACM CCS[C]. Alexandria, VA, USA,2008. 391-402

      [5] CABALLERO J, POOSANKAM P, KREIBICH C, et al. Dispatcher:enabling active botnet infiltration using automatic protocol Reverse-engineering[A]. ACM CCS[C]. Chicago, IL, USA, 2009.621-634.

      [6] COMPARETTI P, WONDRACEK G, KRUEGEL C, et al. Prospex:protocol specification extraction[A]. IEEE S&P[C]. Oakland, California, USA, 2009.110-125.

      [7] 應(yīng)凌云,楊軼,馮登國等. 惡意軟件網(wǎng)絡(luò)協(xié)議的語法和行為語義分析方法[J]. 軟件學(xué)報, 2011, 22(7): 1676-1689.YING L Y, YANG Y, FENG D G, et al. Syntax and behavior semantics analysis of network protocol of malware[J]. Journal of Software, 2011,22(7): 1676-1689.

      [8] WONDRACEK G, COMPARETTI P, KRUEGEL C, et al. Automatic network protocol analysis[A]. NDSS[C]. San Diego, California, USA,2008.1-14.

      [9] LIN Z, JIANG X, XU D, et al. Automatic protocol format reverse engineering through context-aware monitored execution[A]. NDSS[C].San Diego, California, USA, 2008.29-43.

      [10] GODEFRIOD P, KIEZUN A, LEVIN M, Grammar-based whitebox fuzzing[J]. ACM SIGPLAN Notices, 2008, 43(6):206-215.

      [11] BRUMLEY D, JAGER I, AVGERINOS T, et al. BAP: a binary analysis platform[A]. ACM CAV[C]. Snowbird, Utah, USA, 2011.463-369.

      [12] NICHOLAS N. Dynamic Binary Analysis and Instrumentation or Building Tools is Easy[D]. University of Cambridge, 2004.

      [13] EDWARD 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)[A]. IEEE S&P[C]. Oakland, California, USA, 2010. 317-331.

      [14] 王鐵磊. 面向二進制程序的漏洞挖掘關(guān)鍵技術(shù)研究[D]. 北京: 北京大學(xué), 2011.WANG T. Research on Binary-Executable-Oriented Software Vulnerability Detection[D]. Beijing: Peking University, 2011.

      [15] LIN Z, ZHANG X. Deriving input syntactic structure from execution[A]. ACM SIGSOFT[C]. Atlanta, Georgia, USA, 2008. 83-93.

      [16] YIN H, SONG D. TEMU: binary code analysis via whole-system layered annotative execution[EB/OL]. http://www.eecs.berkeley.edu/Pubs/TechRpts/2010/EECS-2010-3.html, 2010.

      [17] A BDD package[EB/OL]. http://buddy.sourceforge.net/.

      [18] 劉豫, 聶眉寧, 蘇璞睿等. 基于可回溯動態(tài)污點分析的攻擊特征生成方法[J]. 通信學(xué)報, 2012, 33(5):21-28.LIU Y, NIE M Y, SU P R, et al. Attack signature generation by traceable dynamic taint analysis[J]. Journal on Communications, 2012,33(5):21-28.

      [19] 陳愷,馮登國,蘇璞睿等.基于彩色污點傳播的黑盒測試方法[J]. 中國科學(xué):信息科學(xué), 2011, 41(5):526-540 CHEN K, FENG D G, SU P R, et al. Black-box testing based on colorful taint analysis[J]. Science China Information Science, 2011,41(5):526-540.

      [20] SLOWINSKA A, BOS H. Pointless tainting?: evaluating the practicality of pointer tainting[A]. ACM European Conference on Computer Systems[C]. Nuremberg, Germany, 2009. 61-74.

      [21] KAND M, MCCAMANT S, POOSANKAM P, et al. DTA++:dynamic taint analysis with targeted control-flow propagation[A]. NDSS[C].San Diego, California, USA, 2011.26-39.

      [22] WANG Z, JIANG X, CUI W, et al. ReFormat: automatic reverse engineering of encrypted messages[A]. CESORICS[C]. Athens, Greece,2010. 200-215.

      [23] CHO C, DOMAGOJ B, SHIN E, et al. Inference and analysis of formal models of botnet command and control protocols[A]. ACM CCS[C]. Chicago, Illinois, USA, 2010. 426-439

      猜你喜歡
      污點字段報文
      基于J1939 協(xié)議多包報文的時序研究及應(yīng)用
      汽車電器(2022年9期)2022-11-07 02:16:24
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      基于代碼重寫的動態(tài)污點分析
      CTCS-2級報文數(shù)據(jù)管理需求分析和實現(xiàn)
      淺析反駁類報文要點
      中國外匯(2019年11期)2019-08-27 02:06:30
      使用Lightroom污點去除工具清理照片中的瑕疵
      ATS與列車通信報文分析
      我國“污點證人”刑事責(zé)任豁免制度的構(gòu)建
      CNMARC304字段和314字段責(zé)任附注方式解析
      無正題名文獻著錄方法評述
      亳州市| 海伦市| 林周县| 融水| 永吉县| 微山县| 抚松县| 吉首市| 广南县| 故城县| 调兵山市| 上杭县| 湖口县| 尉氏县| 阳新县| 商丘市| 德兴市| 利津县| 滨海县| 乌拉特后旗| 盱眙县| 大港区| 隆德县| 施甸县| 红河县| 工布江达县| 天峻县| 邻水| 岳阳市| 武夷山市| 赤城县| 弥渡县| 安溪县| 崇文区| 新丰县| 阿巴嘎旗| 雅江县| 南昌市| 湛江市| 景宁| 南平市|