• 
    

    
    

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

      ?

      基于污點(diǎn)分析的二進(jìn)制程序漏洞檢測(cè)

      2018-03-20 09:15:12董國(guó)良郭詠科
      關(guān)鍵詞:控制流污點(diǎn)漏洞

      董國(guó)良,臧 洌,李 航,甘 露,郭詠科

      (1.南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 211106;2.江南計(jì)算技術(shù)研究所,江蘇 無錫 214083)

      0 引 言

      動(dòng)態(tài)污點(diǎn)分析技術(shù)(dynamic taint analysis,DTA)是指對(duì)非信任來源的數(shù)據(jù)進(jìn)行標(biāo)記,追蹤并記錄其在程序執(zhí)行中的傳播過程,檢測(cè)污點(diǎn)數(shù)據(jù)的非法使用,以達(dá)到獲取關(guān)鍵位置與輸入數(shù)據(jù)關(guān)聯(lián)信息的分析方法[1]。在對(duì)攻擊進(jìn)行有效分析的同時(shí)獲得程序的漏洞所在,且錯(cuò)誤率較低,實(shí)用性很強(qiáng)[2],被廣泛應(yīng)用于信息安全驗(yàn)證、惡意代碼分析[3]、隱私泄露分析、協(xié)議格式逆向分析[4]等領(lǐng)域[5]。國(guó)內(nèi)近年來的研究成果包括李根博士團(tuán)隊(duì)研發(fā)的Hunter[6]和北大王鐵磊博士研究的TaintScope[7],以及基于類型[8]和基于虛擬化[9]技術(shù)的動(dòng)態(tài)污點(diǎn)分析技術(shù)等。

      目前的動(dòng)態(tài)污點(diǎn)分析平臺(tái)主要存在準(zhǔn)確率與性能兩方面的問題[10],其中準(zhǔn)確率問題主要體現(xiàn)在由于“過污染”(over-tainting)引起的誤報(bào),以及由于“欠污染”(under-tainting)造成的漏報(bào)問題。另外,早期的粗粒度污點(diǎn)分析[11]平臺(tái)在污點(diǎn)標(biāo)記屬性、污點(diǎn)傳播策略及污點(diǎn)檢測(cè)規(guī)則定義過程中存在不夠完善的情況,使得漏洞挖掘效率不高,檢測(cè)結(jié)果不夠準(zhǔn)確。

      針對(duì)上述問題,文中分別在污點(diǎn)分析的三個(gè)階段對(duì)現(xiàn)有問題進(jìn)行改進(jìn)和優(yōu)化。在污點(diǎn)標(biāo)識(shí)過程中擴(kuò)充污點(diǎn)狀態(tài)定義,添加除“污染”和“未污染”外的第三種污點(diǎn)狀態(tài)“間接污染”,細(xì)化污點(diǎn)標(biāo)記過程中定義的污點(diǎn)狀態(tài)屬性;在污點(diǎn)傳播過程中,針對(duì)X86平臺(tái)匯編指令設(shè)計(jì)了較為完善的污點(diǎn)傳播策略,增加“污點(diǎn)清除”傳播狀態(tài)行為實(shí)體,分析造成污點(diǎn)清除的目標(biāo)指令和操作并將其添加入污點(diǎn)傳播策略;在污點(diǎn)檢測(cè)階段,進(jìn)一步擴(kuò)充安全檢測(cè)規(guī)則,將觸發(fā)的安全規(guī)則按照危險(xiǎn)嚴(yán)重性分為漏洞觸發(fā)、危險(xiǎn)操作和安全操作三個(gè)級(jí)別,并根據(jù)不同級(jí)別設(shè)計(jì)了不同的安全響應(yīng)策略?;谏鲜龇椒▽?shí)現(xiàn)了改進(jìn)的細(xì)粒度動(dòng)態(tài)污點(diǎn)分析[12]原型系統(tǒng)ODDTA,并通過實(shí)驗(yàn)對(duì)其進(jìn)行驗(yàn)證。

      1 面向二進(jìn)制漏洞挖掘的動(dòng)態(tài)污點(diǎn)分析系統(tǒng)設(shè)計(jì)

      1.1 系統(tǒng)框架設(shè)計(jì)

      ODDTA的框架結(jié)構(gòu)如圖1所示。

      ODDTA原型系統(tǒng)主要包括信息捕獲、二進(jìn)制動(dòng)態(tài)插樁、污點(diǎn)標(biāo)記、污點(diǎn)傳播、污點(diǎn)檢測(cè)、污點(diǎn)信息存儲(chǔ)及日志生成等模塊。其中信息捕獲模塊主要使用HOOK機(jī)制對(duì)二進(jìn)制目標(biāo)程序的主要輸入函數(shù)進(jìn)行監(jiān)控,獲取目標(biāo)程序的指令流。二進(jìn)制動(dòng)態(tài)插樁模塊負(fù)責(zé)在程序運(yùn)行動(dòng)態(tài)編譯二進(jìn)制代碼時(shí),將插樁代碼置于目標(biāo)程序中,獲取程序運(yùn)行時(shí)的特征數(shù)據(jù),其生成的指令為經(jīng)過二次提升的類匯編指令。污點(diǎn)分析的核心模塊包括污點(diǎn)標(biāo)記、污點(diǎn)傳播和污點(diǎn)檢測(cè)三個(gè)部分,所有細(xì)粒度的污點(diǎn)狀態(tài)信息均以影子內(nèi)存[13]形式存放于內(nèi)存中,在污點(diǎn)分析整個(gè)過程中進(jìn)行維護(hù)和存取。在線分析后產(chǎn)生的安全相關(guān)報(bào)告信息由日志生成模塊生成,用于離線的漏洞檢測(cè)與分析。

      1.2 污點(diǎn)標(biāo)記模塊設(shè)計(jì)

      污點(diǎn)標(biāo)記是將外部引入的數(shù)據(jù)標(biāo)記為污點(diǎn)數(shù)據(jù),并對(duì)其設(shè)置污點(diǎn)標(biāo)簽,其標(biāo)記方式極大影響著污點(diǎn)傳播處理與污點(diǎn)狀態(tài)信息存儲(chǔ)的效率。但在現(xiàn)有的污點(diǎn)分析工具中,因?yàn)槲埸c(diǎn)標(biāo)記定義和設(shè)計(jì)的不夠完善,不能檢測(cè)出某些間接污染的情況,如以下代碼所示程序:

      1 void func(char *source,int length)

      2 {

      3 char buf [10];

      4 strncpy(buf, source,length);

      5 }

      6 void main()

      7 {

      8 char src[256];

      9 scanf(“%s”,src);

      10 intlen=strlen(src);

      11 func (src,len);

      12 }

      變量len的值由系統(tǒng)函數(shù)strlen()得出,并非直接通過賦值或算術(shù)邏輯運(yùn)算得出,若strlen()中的參數(shù)包含污點(diǎn)數(shù)據(jù),則len與污點(diǎn)數(shù)據(jù)相關(guān)。傳統(tǒng)的污點(diǎn)分析只標(biāo)記變量是被“污染的”或“未被污染的”,且在污點(diǎn)傳播過程中,對(duì)“污染的”變量只考慮直接由算術(shù)運(yùn)算指令或數(shù)據(jù)傳送指令等直接傳遞的污點(diǎn)數(shù)據(jù)和污染鏈,所以不會(huì)將變量len標(biāo)識(shí)為“污染的”,這種欠污染的污點(diǎn)標(biāo)記和傳播方式會(huì)導(dǎo)致漏報(bào)。

      對(duì)此,文中提出了第三種污點(diǎn)標(biāo)記狀態(tài)“間接污染”,當(dāng)檢測(cè)到變量由某些參數(shù)包含污點(diǎn)數(shù)據(jù)的函數(shù)間接所得,則標(biāo)記該變量為“間接污染”。采用統(tǒng)一的標(biāo)記模型集中存儲(chǔ)污點(diǎn)信息,對(duì)內(nèi)存中的污點(diǎn)數(shù)據(jù)采用結(jié)構(gòu)表示,其中Addr表示污點(diǎn)引入位置,Length表示污點(diǎn)數(shù)據(jù)大??;寄存器中數(shù)據(jù)采用結(jié)構(gòu)表示,其中REG表示寄存器名,TaintTag表示是否被污染;EFLAGS采用一個(gè)字節(jié)的長(zhǎng)度表示,8位分別代表EFLAGS的主要8個(gè)標(biāo)志位。在程序中,系統(tǒng)將識(shí)別函數(shù)strlen(),判斷其包含參數(shù)為污點(diǎn)數(shù)據(jù),進(jìn)一步將變量len對(duì)應(yīng)指令標(biāo)記為“間接污染”,同時(shí)在污點(diǎn)傳播策略和污點(diǎn)檢測(cè)中增加對(duì)此類污點(diǎn)數(shù)據(jù)的處理。

      1.3 污點(diǎn)傳播模塊設(shè)計(jì)

      污點(diǎn)傳播指根據(jù)二進(jìn)制程序指令的特點(diǎn),為不同類型的指令制定不同的傳播策略,根據(jù)此策略追蹤污點(diǎn)數(shù)據(jù)的運(yùn)行過程。污點(diǎn)傳播分析不僅要關(guān)注污點(diǎn)數(shù)據(jù)的產(chǎn)生與引用位置,更重要的是找出污點(diǎn)傳播路徑與影響范圍[14]。文中的動(dòng)態(tài)污點(diǎn)分析過程即從信息流傳播入手,研究執(zhí)行時(shí)的二進(jìn)制類匯編代碼,對(duì)污點(diǎn)相關(guān)的數(shù)據(jù)流和控制流傳播過程加以分析,制定針對(duì)不同類別指令類型的污點(diǎn)傳播策略,確定污點(diǎn)傳播行為實(shí)體(對(duì)污點(diǎn)屬性的具體操作),并實(shí)時(shí)更新和維護(hù)影子內(nèi)存中的污點(diǎn)狀態(tài)屬性。

      1.3.1 污點(diǎn)傳播指令分析

      分析了X86體系架構(gòu)各類指令的執(zhí)行特性,結(jié)合污點(diǎn)數(shù)據(jù)信息流傳播方式,在動(dòng)態(tài)污點(diǎn)傳播模塊將指令歸納為以下幾類:

      數(shù)據(jù)轉(zhuǎn)移類:包含X86匯編指令中的數(shù)據(jù)傳送指令、算術(shù)指令、位操作指令、標(biāo)志處理指令、串操作指令。數(shù)據(jù)轉(zhuǎn)移類指令包含數(shù)據(jù)信息流傳播,是數(shù)據(jù)流流入、數(shù)據(jù)流流出與參數(shù)地址的作用之集。

      控制跳轉(zhuǎn)類:包含控制信息流傳播,其主要對(duì)象為條件跳轉(zhuǎn)指令,如控制轉(zhuǎn)移指令的Jcc類。在程序運(yùn)行中,運(yùn)行路徑的選擇是由條件跳轉(zhuǎn)指令判斷轉(zhuǎn)移的。

      傳播無關(guān)類:指執(zhí)行不會(huì)引發(fā)數(shù)據(jù)信息流與控制信息流的傳播的無關(guān)指令,例如NOP、HLT、JMP、CALL等。

      1.3.2 污點(diǎn)傳播策略設(shè)計(jì)

      在污點(diǎn)傳播策略設(shè)計(jì)過程中,除了針對(duì)上述幾類指令進(jìn)行分析外,還應(yīng)考慮控制流污點(diǎn)傳播、污點(diǎn)清除行為、間接污染與檢測(cè)盲點(diǎn)[15]等情況下的污點(diǎn)傳播過程。其中檢測(cè)盲點(diǎn)問題是指由于無效用例導(dǎo)致漏洞未被觸發(fā)時(shí)的潛在漏洞情況。如包含潛在緩沖區(qū)溢出漏洞的程序,只有當(dāng)漏洞觸發(fā),且溢出的字符串覆蓋并修改了返回值時(shí)(即改變了數(shù)據(jù),又影響了控制流),傳統(tǒng)的污點(diǎn)分析系統(tǒng)才將其確定為漏洞觸發(fā),而當(dāng)輸入字符串長(zhǎng)度不足以造成緩沖區(qū)溢出,或者已經(jīng)造成溢出但未修改到返回值,則此時(shí)漏洞被忽略,存在檢測(cè)的盲點(diǎn),造成漏報(bào)。污點(diǎn)分析傳播策略如表1所示。

      表1 指令類別與對(duì)應(yīng)的污點(diǎn)傳播策略

      (1)數(shù)據(jù)轉(zhuǎn)移類。

      數(shù)據(jù)轉(zhuǎn)移類指令的傳播行為包括污點(diǎn)添加、污點(diǎn)傳遞和不傳播。針對(duì)包含顯式操作數(shù)的指令,如MOV、ADD等指令,若源操作數(shù)包含污點(diǎn)數(shù)據(jù),則執(zhí)行后源與目的操作數(shù)均被污染。對(duì)包含隱式操作數(shù)(implicit operands)的指令,如指令DIV EBX,其顯式操作數(shù)(explicit operands)只有EBX,但根據(jù)指令的執(zhí)行語義,除數(shù)為EBX,隱含的被除數(shù)為EDX,商保存在EAX中,其余數(shù)保存在EDX中,所以該算術(shù)指令的執(zhí)行同樣引發(fā)數(shù)據(jù)信息流傳播。

      (2)條件跳轉(zhuǎn)類(控制流傳播分析)。

      控制流操縱了程序的運(yùn)行路徑,確定了執(zhí)行流程,其在主方向選擇上間接影響了數(shù)據(jù)流的傳播。為保證污點(diǎn)分析的精確性,將數(shù)據(jù)流與控制流結(jié)合分析,從路徑轉(zhuǎn)移和數(shù)據(jù)傳播兩方面確定污點(diǎn)關(guān)聯(lián)信息。

      在動(dòng)態(tài)污點(diǎn)傳播過程中,一次實(shí)際執(zhí)行對(duì)應(yīng)一條固定的運(yùn)行路徑。文中進(jìn)行的控制流傳播分析基于程序控制流圖(CFG),分析由指令跳轉(zhuǎn)引發(fā)的控制轉(zhuǎn)移過程,研究分支路徑的跳轉(zhuǎn)條件,獲取執(zhí)行路徑的污點(diǎn)約束針對(duì)跳轉(zhuǎn)類指令。在匯編指令中,跳轉(zhuǎn)指令分為直接跳轉(zhuǎn)指令(JMP)和條件跳轉(zhuǎn)指令(JCC)。條件跳轉(zhuǎn)分為兩類,其中多數(shù)以標(biāo)志位為判斷,包括JZ、JS、JC等,也有部分非判斷標(biāo)志位的指令,包括JCXZ、JECXZ等,其以CX、ECX是否為零作為判斷條件。文中提出的控制流分析的主要對(duì)象為標(biāo)志位污點(diǎn)信息。

      (3)傳播無關(guān)類。

      傳播行為僅包含不傳播,無污點(diǎn)信息流操作。

      (4)函數(shù)級(jí)污點(diǎn)傳播分析。

      針對(duì)間接污染和潛在漏洞問題,在指令級(jí)污點(diǎn)分析外提出了函數(shù)級(jí)的污點(diǎn)傳播分析,對(duì)相關(guān)函數(shù)和其對(duì)應(yīng)的指令(已標(biāo)記為“間接污染”)進(jìn)行監(jiān)控,記錄和分析數(shù)據(jù)狀態(tài)信息和數(shù)據(jù)流傳播信息,在污點(diǎn)檢測(cè)模塊誤用檢測(cè)時(shí)進(jìn)行安全規(guī)則匹配,根據(jù)污點(diǎn)檢測(cè)處理方式對(duì)分析結(jié)果進(jìn)行處理。

      (5)污點(diǎn)清除類。

      傳統(tǒng)的污點(diǎn)分析系統(tǒng),在污點(diǎn)傳播階段只考慮污點(diǎn)信息的增加與傳遞,即污點(diǎn)傳播狀態(tài)轉(zhuǎn)換的行為實(shí)體只包括污點(diǎn)添加、污點(diǎn)傳播和不傳播三類,未考慮污點(diǎn)清除的情況,會(huì)導(dǎo)致“過污染”情況產(chǎn)生,造成誤報(bào)。如表1中的示例,指令中將常量賦給變量,或是XOR、SUB、SBB等指令結(jié)果為常量時(shí),此時(shí)原操作數(shù)中包含的污點(diǎn)變量將不應(yīng)再進(jìn)行傳播?;诖?,提出了第四類污點(diǎn)傳播行為實(shí)體,即污點(diǎn)清除,對(duì)符合上述條件的指令執(zhí)行污點(diǎn)清除操作,不再進(jìn)行污點(diǎn)傳播。

      1.4 污點(diǎn)檢測(cè)模塊設(shè)計(jì)

      現(xiàn)有的污點(diǎn)分析平臺(tái),污點(diǎn)檢測(cè)時(shí)一旦發(fā)現(xiàn)污點(diǎn)數(shù)據(jù)違背安全規(guī)則,通常只有一種處理方式,即終止運(yùn)行并記錄相關(guān)信息,當(dāng)違背的安全規(guī)則僅僅只是觸發(fā)了某個(gè)危害較輕的安全風(fēng)險(xiǎn),而非發(fā)現(xiàn)危害較重的某個(gè)漏洞,直接終止運(yùn)行會(huì)造成檢測(cè)效率低下。

      為此,將觸發(fā)的安全規(guī)則按照危險(xiǎn)嚴(yán)重性分為三個(gè)級(jí)別,即“漏洞觸發(fā)”、“潛在危險(xiǎn)”和“安全操作”,根據(jù)不同級(jí)別對(duì)污點(diǎn)數(shù)據(jù)進(jìn)行不同處理。當(dāng)某污點(diǎn)數(shù)據(jù)在污點(diǎn)傳播過程中觸發(fā)漏洞時(shí),則記錄漏洞觸發(fā)相關(guān)信息并終止運(yùn)行;當(dāng)某污點(diǎn)數(shù)據(jù)僅執(zhí)行的操作危害較輕,僅為“潛在危險(xiǎn)”時(shí),則記錄該污點(diǎn)數(shù)據(jù)風(fēng)險(xiǎn)操作的相關(guān)信息并繼續(xù)運(yùn)行;當(dāng)污點(diǎn)數(shù)據(jù)執(zhí)行的操作為“安全操作”,未違反任何安全規(guī)則,則執(zhí)行繼續(xù)。

      2 系統(tǒng)實(shí)現(xiàn)

      2.1 二進(jìn)制動(dòng)態(tài)插樁

      原型系統(tǒng)ODDTA基于二進(jìn)制分析平臺(tái)Pin[16]實(shí)現(xiàn),Pin借鑒了ATOM[17]工具的兩個(gè)概念:Instrumentation Routine(簡(jiǎn)稱IR,插樁例程)和Analysis Routine(簡(jiǎn)稱AR,分析例程)。前者定義插樁的位置,后者定義插樁時(shí)需要執(zhí)行的分析工作。Pin框架提供指令集插樁、軌跡級(jí)插樁和函數(shù)級(jí)插樁等三種插樁粒度。文中選用軌跡級(jí)插樁。

      2.2 污點(diǎn)標(biāo)記模塊實(shí)現(xiàn)

      污點(diǎn)標(biāo)記模塊算法實(shí)現(xiàn)中變量和函數(shù)定義包括:

      INST:匯編指令類型;

      voidSetTaintMark():設(shè)定污點(diǎn)源數(shù)據(jù)標(biāo)記;

      char*GetInstAddr(INST):獲取指令源地址;

      intGetInstLen(INST):獲取引入污點(diǎn)指令長(zhǎng)度;

      char*GetInstDest(INST):獲取指令目的地址;

      SetMEMLabel(char* DestAddr,intcount,TaintDataTaintLabel):設(shè)置內(nèi)存單元污點(diǎn)標(biāo)簽;

      SetREGLabel(char* DestAddr,intcount,TaintDataTaintLabel):設(shè)置寄存器單元污點(diǎn)標(biāo)簽;

      bddAddList(SoueceTaintList,DestAddr,count):將污點(diǎn)信息加入到影子內(nèi)存中。

      其中bdd為影子內(nèi)存中基于規(guī)約有序二元決策圖[18](roBDD)方法設(shè)計(jì)的存儲(chǔ)結(jié)構(gòu),該方法可實(shí)現(xiàn)對(duì)集合運(yùn)算效率的優(yōu)化,具體實(shí)現(xiàn)時(shí)調(diào)用開源的BuDDY庫,支持幾乎所有的BDD運(yùn)算。

      2.3 污點(diǎn)傳播模塊實(shí)現(xiàn)

      污點(diǎn)傳播模塊以執(zhí)行指令為依據(jù),通過分析指令信息獲取當(dāng)前數(shù)據(jù)流和控制流的傳播。算法實(shí)現(xiàn)中主要變量和函數(shù)定義說明如下:

      INSTINFO:指令信息流類型;

      AddrInfo:包含char*格式的地址addr,和污點(diǎn)傳播模式mode;

      AddrInfoGetInstDest(INSTINFO):獲取指令信息流傳播目的地址信息集合;

      intGetAddrCount(AddrInfo):信息流目的地址個(gè)數(shù);

      char**GetRelateAddr(AddrInfo*,int):獲取信息流傳播目的地址的相關(guān)源地址集合;

      GetTaintInfo(char**):通過bdd庫進(jìn)行目標(biāo)目的地址的污點(diǎn)信息計(jì)算;

      voidSetDestTaintInfo(AddrInfo*,int,bdd):設(shè)置目標(biāo)地址污點(diǎn)信息;

      voidAddTaintInfo(AddrInfo*,int,bdd):將污點(diǎn)信息添加至目標(biāo)地址;

      voidClearTaintInfo(AddrInfo*,int):清除目標(biāo)地址污點(diǎn)信息;

      DestAddr[count].mode:三個(gè)取值{in,add,clear}對(duì)應(yīng)污點(diǎn)傳播狀態(tài)的三種轉(zhuǎn)換模式:污點(diǎn)傳播、污點(diǎn)添加和污點(diǎn)清除。污點(diǎn)控制流傳播算法實(shí)現(xiàn)如下:

      1.TaintControlPropagate(INSTINFO inst,bddCurrentCon-

      trolInfo)

      2.char* ControlSource=GetJCCSource(inst);

      3.TaintInfo=GetControlTaintInfo(RelateSource);

      4.AddControlInfo(CurrentControlInfo,TaintInfo);

      char*GetJCCSource(INSTINFO):獲取條件跳轉(zhuǎn)的受控源集合;

      GetControlTaintInfo(char**):通過bdd庫獲取受控源集合污點(diǎn)信息;

      AddControlInfo(bdd,bdd):添加新控制源至當(dāng)前污點(diǎn)控制信息。

      2.4 污點(diǎn)檢測(cè)模塊實(shí)現(xiàn)

      污點(diǎn)檢測(cè)模塊算法實(shí)現(xiàn)中主要包含的函數(shù)如下:

      ModeGetInstMode(INST):獲取指令模式(如MOV_REG32_REG32);

      boolSusceptibleModeMatch(Mode,Mode*):匹配敏感指令模式;

      InstStructGetInstStruct(INST, TaintInfo):獲取指令結(jié)構(gòu);

      boolSusceptibleStructMatch(InstStruct,InstStruct*):匹配敏感指令結(jié)構(gòu);

      voidSensitiveOperate():敏感點(diǎn)操作。

      在實(shí)現(xiàn)污點(diǎn)檢測(cè)時(shí),依據(jù)污點(diǎn)誤用檢測(cè)的規(guī)則,設(shè)定了幾種敏感模式,包括MOV類、JMP類以及敏感函數(shù)對(duì)應(yīng)的指令,當(dāng)當(dāng)前指令為上述指令類型時(shí),則進(jìn)入敏感函數(shù)匹配。當(dāng)系統(tǒng)監(jiān)測(cè)到敏感指令執(zhí)行時(shí),即有可能觸發(fā)安全規(guī)則,進(jìn)入危險(xiǎn)狀態(tài)。

      3 實(shí)驗(yàn)分析

      3.1 測(cè)試環(huán)境

      實(shí)驗(yàn)測(cè)試環(huán)境即為原型系統(tǒng)的開發(fā)環(huán)境,底層硬件為曙光i840-G25和DELLR510服務(wù)器,基于VMware vSphere4.1.0實(shí)現(xiàn)硬件資源虛擬化,虛擬機(jī)虛擬硬件配置為Intel Core2 Duo CPU @3.00 GHz x2/4 G/SATA 20 GB,操作系統(tǒng)為L(zhǎng)inux Ubuntu 12.04(內(nèi)核3.8.0-32-generic)。

      3.2 有效性測(cè)試

      為驗(yàn)證污點(diǎn)分析原型系統(tǒng)漏洞挖掘的有效性,采用自編譯的包含有緩沖區(qū)溢出漏洞的實(shí)例程序作為測(cè)試目標(biāo)程序,該程序關(guān)鍵溢出代碼如下:

      intfunc(char* str)

      {

      char buf[10];

      strcpy(buf,str);

      printf(“%s ”,buf);

      }

      int main(intargc,char** argv)

      {

      char str[50];

      scanf(“%s”,& str);

      if(str[0]!=‘Z’)

      func(str);

      return 0;

      }

      該程序中,執(zhí)行func()中的函數(shù)strcpy時(shí)未對(duì)數(shù)組邊界進(jìn)行檢查,當(dāng)源數(shù)組長(zhǎng)度大于目標(biāo)數(shù)組長(zhǎng)度時(shí),會(huì)發(fā)生緩沖區(qū)溢出。對(duì)該程序進(jìn)行編譯,對(duì)生成的可執(zhí)行文件輸入不同的測(cè)試用例,分別進(jìn)行漏洞檢測(cè)有效性測(cè)試、潛在漏洞測(cè)試以及危險(xiǎn)函數(shù)檢測(cè)。

      3.3 漏洞檢測(cè)

      以目標(biāo)程序test作為ODDTA輸入并執(zhí)行,輸入字符串為“abcdefghijklmnopqrstuvwx”,共24個(gè)字符,則可覆蓋func函數(shù)調(diào)用后的返回地址,此時(shí)緩沖區(qū)漏洞被觸發(fā),程序異常退出。系統(tǒng)終止污點(diǎn)跟蹤,輸出安全分析日志中的相關(guān)信息,如下所示:

      Program:test

      Trace ID: test_55

      Crash location:0x004012b6

      Crash instruction:RET

      Crash case: themem can’t execute

      Detection rule: controlled execute

      Target instruction address:0x0022ff11

      Target address taint:

      0x0022ff11:{22}; 0x0022ff12:{23}

      Taint link:

      3027:004012b6: RET M@0x0022ff11[0x00007877]$4T

      2208: 77c160c1: MOV [EDI],EDX M@0x0022ff0e[0x13f00022] $4 UT R@EDX[0x78777675]$4 T

      ……

      污點(diǎn)傳播過程為:系統(tǒng)對(duì)輸入數(shù)據(jù)進(jìn)行污點(diǎn)標(biāo)記和編號(hào),污點(diǎn)數(shù)據(jù)按照指令執(zhí)行,進(jìn)行數(shù)據(jù)傳輸,當(dāng)源緩沖區(qū)大于目的緩沖區(qū)時(shí),發(fā)生溢出,并覆蓋與緩沖區(qū)相鄰的其他地址空間數(shù)據(jù),當(dāng)函數(shù)執(zhí)行完畢后,此時(shí)返回地址0x0022ff11被覆蓋,程序崩潰。

      3.4 潛在漏洞測(cè)試

      以目標(biāo)程序test作為ODDTA輸入并執(zhí)行,輸入字符串為“abcdefghijkl”,共12個(gè)字符,結(jié)合實(shí)例程序執(zhí)行strcpy時(shí)的棧狀態(tài)可知,此時(shí)發(fā)生了緩沖區(qū)溢出,但并未覆蓋返回地址,并不會(huì)造成程序崩潰。此時(shí),早期的動(dòng)態(tài)污點(diǎn)分析系統(tǒng)并不會(huì)給出存在潛在漏洞的安全警告,在ODDTA原型系統(tǒng)中,由于發(fā)生了外部引入污點(diǎn)數(shù)據(jù)的誤用,此時(shí)在污點(diǎn)檢測(cè)中將對(duì)應(yīng)的指令操作標(biāo)記為“Latent Danger”(潛在危險(xiǎn)),輸出如下信息:

      Program:test

      Detect target risklevel:Latent Danger

      Misuse location:0x004017c0

      Misused mode:execute tainted instruction

      Detail instruction:004012b6:RET M@0x0022ff11[0x000078 77]$4 T

      3.5 可疑點(diǎn)檢測(cè)

      ODDTA原型系統(tǒng)記錄控制流污點(diǎn)信息的傳播過程,對(duì)目標(biāo)程序執(zhí)行進(jìn)行細(xì)粒度污點(diǎn)分析后,可結(jié)合離線日志文件中的軌跡信息對(duì)每條指令進(jìn)行細(xì)粒度分析,同時(shí)可結(jié)合控制流污點(diǎn)信息對(duì)分析出的漏洞可疑點(diǎn)進(jìn)行輔助分析。以目標(biāo)程序test作為原型系統(tǒng)輸入并執(zhí)行,輸入字符串為“abcdef”,共7個(gè)字符,此時(shí)未發(fā)生緩沖區(qū)溢出,不會(huì)觸發(fā)潛在漏洞。運(yùn)行結(jié)束后對(duì)安全日志文件中的軌跡信息進(jìn)行離線分析,發(fā)現(xiàn)當(dāng)前存在脆弱性可疑點(diǎn)的匹配項(xiàng)REP MOVSL ES:[EDI],DS:[ESI] M@0x003e37c0[0x61656c70]$4 UT M@0x0022fef6[0x33323130]$4 T R@ecx[0x00000002]$4 T,判定該位置存在緩沖區(qū)溢出可疑點(diǎn),此時(shí)輸出如下信息:

      Program:test

      Trace ID: test_28

      Suspicious location:184

      Suspicious mode: buffer overflow

      Suspicious address:0x77c1168d

      Suspicious instruction: REPMOVSL ES:[EDI],DS:[ESI]

      M@0x003e37c0[0x61656c70]$4 UT

      M@0x0022fef6[0x33323130]$4 T

      R@ecx[0x00000002]$4 T

      ……

      通過結(jié)合分析污點(diǎn)指令,發(fā)現(xiàn)原因在于在字符轉(zhuǎn)移時(shí),匯編程序會(huì)對(duì)其有效性進(jìn)行判斷,檢測(cè)是否等于0x09,0x0d,0x20等。

      程序結(jié)束時(shí)刻對(duì)應(yīng)的控制流轉(zhuǎn)移指令信息如下:

      ……

      1311:4013e8:CMP 0x5a,AL,0x5a R@AL[0x00000030]$1 T I@0x00000000[0x0000005a]$1

      1312:4013ea:JE J@0x0000000[004013f8]$4 E@0x000000 00[0x0000000e]$4 T

      ……

      該指令中包含的污點(diǎn)變量與char型的Z的ASCII碼90(0x5a)進(jìn)行比較,只有相等情況下才執(zhí)行跳轉(zhuǎn)。

      4 結(jié)束語

      針對(duì)現(xiàn)有動(dòng)態(tài)污點(diǎn)分析系統(tǒng)存在的準(zhǔn)確率方面的問題,提出了基于動(dòng)態(tài)污點(diǎn)分析的二進(jìn)制程序漏洞挖掘與分析技術(shù),從動(dòng)態(tài)污點(diǎn)分析的三個(gè)主要階段逐一對(duì)準(zhǔn)確度問題進(jìn)行改進(jìn),有效解決了“過污染”造成的誤報(bào)以及由于“欠污染”造成的漏報(bào)問題,增加了針對(duì)控制流的污點(diǎn)分析,并基于此方法實(shí)現(xiàn)了原型系統(tǒng)ODDTA。實(shí)驗(yàn)結(jié)果表明,該方法能夠有效提升漏洞挖掘的精準(zhǔn)度和執(zhí)行效率。下一步將結(jié)合符號(hào)執(zhí)行和模糊測(cè)試技術(shù),進(jìn)一步細(xì)化控制流污點(diǎn)分析,實(shí)現(xiàn)測(cè)試路徑的自動(dòng)生成,提高對(duì)目標(biāo)程序的分析效能。

      [1] LAM M S,MARTIN M,LIVSHITS B,et al.Securing web applications with static and dynamic information flow tracking[C]//Proceedings of the 2008 ACM SIGPLAN symposium on partial evaluation and semantics-based program manipulation.New York,NY,USA:ACM,2008:3-12.

      [2] 宋奕青.基于動(dòng)態(tài)二進(jìn)制探測(cè)框架的緩沖區(qū)溢出檢測(cè)研究[D].上海:上海交通大學(xué),2010.

      [3] SHARIF M,LANZI A,GIFFIN J,et al.Automatic reverse engineering of malware emulators[C]//30th IEEE symposium on security and privacy.Washington,DC,USA:IEEE Computer Society,2009:94-109.

      [4] COMPARETTI P M,WONDRACEK G,KRUEGEL C,et al.Prospex:protocol specification extraction[C]//30th IEEE symposium on security and privacy.Washington,DC,USA:IEEE Computer Society,2009:110-125.

      [5] 史大偉,袁天偉.一種粗細(xì)粒度結(jié)合的動(dòng)態(tài)污點(diǎn)分析方法[J].計(jì)算機(jī)工程,2014,40(3):12-17.

      [6] 李 根.基于動(dòng)態(tài)測(cè)試用例生成的二進(jìn)制軟件缺陷自動(dòng)發(fā)掘技術(shù)研究[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)犬學(xué),2010.

      [7] WANG T,WEI T,GU G,et al.TaintScope:a checksum-aware directed fuzzing tool for automatic software vulnerability detection[C]//IEEE symposium on security and privacy.Washington,DC,USA:IEEE Computer Society,2010:497-512.

      [8] 諸葛建偉,陳力波,田 繁,等.基于類型的動(dòng)態(tài)污點(diǎn)分析技術(shù)[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2012,52(10):1320-1328.

      [9] 陳衍鈴,趙 靜.基于虛擬化技術(shù)的動(dòng)態(tài)污點(diǎn)分析[J].計(jì)算機(jī)應(yīng)用,2011,31(9):2367-2372.

      [10] 宋 錚,王永劍,金 波,等.二進(jìn)制程序動(dòng)態(tài)污點(diǎn)分析技術(shù)研究綜述[J].信息網(wǎng)絡(luò)安全,2016(3):77-83.

      [11] KOHLI P.Coarse-grained dynamic taint analysis for defeating control and non-control data attacks[EB/OL].(2017-06-12).https://arxiv.org/abs/0906.4481.

      [12] YIN H,SONG D,EGELE M,et al.Panorama:capturing system-wide information flow for malware detection and analysis[C]//Proceedings of the 14th ACM conference on computer and communications security.New York,NY,USA:ACM,2007:116-127.

      [13] NETHERCOTE N,SEWARD J.How to shadow every byte of memory used by a program[C]//Proceedings of the 3rd international conference on virtual execution environments.New York,NY,USA:ACM,2007:65-74.

      [14] 黃 強(qiáng),曾慶凱.基于信息流策略的污點(diǎn)傳播分析及動(dòng)態(tài)驗(yàn)證[J].軟件學(xué)報(bào),2011,22(9):2036-2048.

      [15] 王 卓.基于符號(hào)執(zhí)行的二進(jìn)制代碼動(dòng)態(tài)污點(diǎn)分析[D].上海:上海交通大學(xué),2011.

      [16] LUK C K,COHN R,MUTH R,et al.Pin:building customized program analysis tools with dynamic instrumentation[J].ACM SIGPLAN Notices,2005,40(6):190-200.

      [17] SRIVASTAVA A,EUSTACE A.ATOM:a system for building customized program analysis tools[J].ACM SIGPLAN Notices,2004,39(4):528-539.

      [18] 王鐵磊,韋 韜,鄒 維.基于roBDD的細(xì)顆粒度動(dòng)態(tài)污點(diǎn)分析[J].北京大學(xué)學(xué)報(bào):自然科學(xué)版,2011,47(6):1003-1008.

      猜你喜歡
      控制流污點(diǎn)漏洞
      漏洞
      基于代碼重寫的動(dòng)態(tài)污點(diǎn)分析
      抵御控制流分析的Python 程序混淆算法
      工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
      電子科技(2021年2期)2021-01-08 02:25:58
      抵御控制流分析的程序混淆算法
      使用Lightroom污點(diǎn)去除工具清理照片中的瑕疵
      三明:“兩票制”堵住加價(jià)漏洞
      漏洞在哪兒
      高鐵急救應(yīng)補(bǔ)齊三漏洞
      我國(guó)“污點(diǎn)證人”刑事責(zé)任豁免制度的構(gòu)建
      江陵县| 顺昌县| 鸡泽县| 通州区| 宜城市| 麦盖提县| 瑞昌市| 锦屏县| 永兴县| 祁连县| 敦煌市| 陕西省| 磐石市| 五华县| 金昌市| 昌黎县| 临沭县| 从江县| 彰武县| 潜山县| 南城县| 惠来县| 江北区| 贺州市| 剑阁县| 江安县| 黑水县| 平塘县| 柞水县| 都匀市| 佛冈县| 徐闻县| 中方县| 天长市| 佳木斯市| 泽州县| 洱源县| 烟台市| 朝阳区| 青川县| 涟源市|