欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試系統(tǒng)及方法

文檔序號(hào):6585920閱讀:203來源:國(guó)知局
專利名稱:基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試系統(tǒng)及方法
技術(shù)領(lǐng)域
本發(fā)明涉及軟件安全測(cè)試,尤其涉及基于動(dòng)態(tài)污染傳播(Dynamic Taint Propagation)的軟件安全測(cè)試系統(tǒng)及方法。
背景技術(shù)
軟件安全測(cè)試是保證軟件安全性、降低軟件安全風(fēng)險(xiǎn)的重要手段。軟件安全保證 的主要目的是防止黑客或者惡意的內(nèi)部人員對(duì)軟件進(jìn)行攻擊,并保證軟件在受到惡意攻擊 的情況下仍然能夠正常運(yùn)行。由于攻擊者主要是通過對(duì)軟件輸入惡意的數(shù)據(jù)來進(jìn)行攻擊, 因此軟件的安全問題主要來源于外部的輸入數(shù)據(jù)。目前通過對(duì)外部輸入數(shù)據(jù)進(jìn)行安全測(cè)試來實(shí)現(xiàn)軟件安全測(cè)試的技術(shù)主要包括靜 態(tài)的源代碼安全測(cè)試技術(shù)和動(dòng)態(tài)的滲透測(cè)試技術(shù)。靜態(tài)的源代碼安全測(cè)試技術(shù)主要是通過 對(duì)軟件的源代碼進(jìn)行安全掃描,根據(jù)程序中數(shù)據(jù)流、控制流、語義等信息與其特有軟件安全 規(guī)則庫進(jìn)行匹對(duì),從中找出代碼中潛在的安全漏洞。這種技術(shù)可以在編碼階段找出所有可 能存在安全風(fēng)險(xiǎn)的代碼,從而軟件開發(fā)人員可以在早期解決潛在的安全問題。然而,也正因 為如此,這種技術(shù)只適用于早期的代碼開發(fā)階段,而不適用于測(cè)試階段。動(dòng)態(tài)的滲透測(cè)試技術(shù)通過使用自動(dòng)化工具或者人工的方法模擬黑客的輸入,對(duì)軟 件進(jìn)行攻擊性測(cè)試,從中找出運(yùn)行時(shí)刻所存在的安全漏洞。這種技術(shù)的優(yōu)點(diǎn)是測(cè)試真實(shí)有 效,并且一般找出的問題正確且較為嚴(yán)重。但是這種技術(shù)存在的缺點(diǎn)在于,由于模擬的測(cè)試 數(shù)據(jù)只能到達(dá)有限的測(cè)試點(diǎn),所以覆蓋率很低,漏報(bào)率比較高。鑒于上述兩種技術(shù)的缺點(diǎn),近來業(yè)界提出了動(dòng)態(tài)污染傳播的方法。動(dòng)態(tài)污染傳播 的方法主要通過跟蹤外部輸入的數(shù)據(jù)在軟件中的傳播過程和最終執(zhí)行的情況來分析是否 存在安全漏洞以及存在什么類別的漏洞。這種方法不需要任何特殊的攻擊性的測(cè)試數(shù)據(jù)。 它假定由外部輸入的數(shù)據(jù)都是不可信的、污染的數(shù)據(jù),為數(shù)據(jù)打上污染的標(biāo)記。在程序中傳 播的過程中,如果被標(biāo)記的數(shù)據(jù)經(jīng)過了嚴(yán)格的安全驗(yàn)證,則認(rèn)為其不再是污染的,去掉污染 標(biāo)記,否則污染標(biāo)記在整個(gè)傳播過程中都會(huì)被繼承下來。一旦有污染標(biāo)記的數(shù)據(jù)被送到執(zhí) 行代碼中執(zhí)行時(shí),就判斷這里可能存在一個(gè)安全漏洞。最近,全球最大的軟件安全廠商美國(guó)富迪軟件有限公司開發(fā)出一種基于動(dòng)態(tài)污染 傳播的安全測(cè)試產(chǎn)品fortify "Tracer。Fortify Tracer利用動(dòng)態(tài)污染傳播方法的特點(diǎn), 首先進(jìn)行插樁前的準(zhǔn)備,對(duì)軟件的二進(jìn)制代碼進(jìn)行靜態(tài)地分析,找出所有的Source代碼 (Source是污染數(shù)據(jù)的來源,Source代碼則是所有外部數(shù)據(jù)進(jìn)入程序的入口的代碼)、Sink 代碼(Sink是漏洞的引爆點(diǎn),Sink代碼則是所有可能引發(fā)安全漏洞的代碼),建立檢測(cè)機(jī) 制。然后再對(duì)程序進(jìn)行插樁(即對(duì)找出的Source代碼和Sink代碼進(jìn)行鉤子(Hook)操作), 進(jìn)行常規(guī)的功能測(cè)試。Fortify Tracer會(huì)根據(jù)功能測(cè)試自動(dòng)地找出軟件中所有可能因外部 輸入數(shù)據(jù)而造成的安全問題,并根據(jù)漏洞類別清晰地報(bào)告出來。Fortify Tracer的優(yōu)點(diǎn)在于無需特殊的攻擊性測(cè)試數(shù)據(jù),能夠真實(shí)有效地找出系 統(tǒng)中最嚴(yán)重、最關(guān)鍵的安全問題,并且因與功能測(cè)試相結(jié)合而提高了測(cè)試覆蓋率。然而,由于Ratify Tracer僅對(duì)軟件二進(jìn)制代碼進(jìn)行有限數(shù)目插樁點(diǎn)的分析,因此不能實(shí)現(xiàn)對(duì)軟件 所有二進(jìn)制代碼全面的實(shí)時(shí)動(dòng)態(tài)跟蹤。具體而言,fortify Tracer主要存在以下缺點(diǎn)UFortify Tracer在檢查前需要對(duì)軟件的二進(jìn)制代碼進(jìn)行靜態(tài)分析,從而找出 Source代碼和Sink代碼,這是一個(gè)額外的工作量,而且誤報(bào)率和漏報(bào)率嚴(yán)重依賴于其找出 Source代碼和Sink代碼的算法;2、由于fortify Tracer僅對(duì)軟件二進(jìn)制代碼進(jìn)行有限數(shù)目插樁點(diǎn)的分析,而一個(gè) 污點(diǎn)的傳播和終止可能會(huì)在一個(gè)非插樁點(diǎn),因此動(dòng)態(tài)污點(diǎn)傳播會(huì)不完整,從而導(dǎo)致誤報(bào)率 和漏報(bào)率的增加;3、Fortify Tracer不能對(duì)需要指令跟蹤框架支持的安全漏洞進(jìn)行檢測(cè),例如堆緩 沖區(qū)溢出(Heap Buffer Overflow)、棧緩沖區(qū)溢出(Stack Buffer Overflow)、格式化串溢 出(Format String Overflow)、整型溢出(Integer Overflow)、除 O 拒絕服務(wù)(Div Zero)

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種能夠?qū)崿F(xiàn)對(duì)軟件的所有二進(jìn)制指令進(jìn)行 實(shí)時(shí)動(dòng)態(tài)跟蹤的基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試系統(tǒng)及方法。為此,根據(jù)本發(fā)明的第一方面,提供一種基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試系統(tǒng)。 所述系統(tǒng)包括標(biāo)記污染源模塊,用于生成標(biāo)記污染源規(guī)則;檢查器模塊,用于生成檢測(cè)規(guī) 則;自修改代碼模塊,用于利用自修改代碼技術(shù)來動(dòng)態(tài)跟蹤所測(cè)試軟件的每一條二進(jìn)制指 令;RING3虛擬機(jī)模塊,用于利用RING3虛擬機(jī)來解析所測(cè)試軟件的每一條二進(jìn)制指令,分 析指令所攜帶數(shù)據(jù)的流動(dòng)方向,實(shí)現(xiàn)污點(diǎn)傳播,調(diào)用所述標(biāo)記污染源規(guī)則來標(biāo)記污染源,調(diào) 用所述檢測(cè)規(guī)則來檢測(cè)所測(cè)試軟件的每一條二進(jìn)制指令;以及日志模塊,用于輸出有關(guān)違 反所述檢測(cè)規(guī)則的信息。根據(jù)本發(fā)明的第二方面,提供一種基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試方法。所述 軟件安全測(cè)試方法包括下列步驟生成標(biāo)記污染源規(guī)則;生成檢測(cè)規(guī)則;利用自修改代碼 技術(shù)來動(dòng)態(tài)跟蹤所測(cè)試軟件的每一條二進(jìn)制指令;利用RING3虛擬機(jī)來解析所測(cè)試軟件的 每一條二進(jìn)制指令,分析指令所攜帶數(shù)據(jù)的流動(dòng)方向,實(shí)現(xiàn)污點(diǎn)傳播,調(diào)用所述標(biāo)記污染源 規(guī)則來標(biāo)記污染源,調(diào)用所述檢測(cè)規(guī)則來檢測(cè)所測(cè)試軟件的每一條二進(jìn)制指令;以及輸出 有關(guān)違反所述檢測(cè)規(guī)則的信息。


通過結(jié)合附圖來閱讀后面的具體實(shí)施方式
,可以更好地理解本發(fā)明的特征和優(yōu) 點(diǎn),其中在附圖中用相同的附圖標(biāo)記表示相同或相似的元件。在附圖中圖1是示出根據(jù)本發(fā)明一個(gè)實(shí)施例的基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試系統(tǒng)的 框圖;圖2是示出根據(jù)本發(fā)明一個(gè)實(shí)施例的基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試方法的 流程圖。圖3示出所測(cè)試軟件和軟件安全測(cè)試系統(tǒng)的關(guān)系;以及圖4示出根據(jù)本發(fā)明的實(shí)施例對(duì)外部污染源的標(biāo)記。
具體實(shí)施例方式下面將結(jié)合附圖詳細(xì)說明本發(fā)明的各個(gè)實(shí)施例。參考圖1,其中示出根據(jù)本發(fā)明一個(gè)實(shí)施例的基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試 系統(tǒng)100的框圖。請(qǐng)注意,在整個(gè)說明書和權(quán)利要求書中,“應(yīng)用程序”和“軟件”表示相同 的含義,并且能夠互換地進(jìn)行使用。在本發(fā)明的實(shí)施例中,所述軟件安全測(cè)試系統(tǒng)100運(yùn)行 在Windows操作系統(tǒng)中。然而,作為一種通用的軟件安全測(cè)試系統(tǒng),所述軟件安全測(cè)試系統(tǒng) 100能夠運(yùn)行在任何操作系統(tǒng)中。所述軟件安全測(cè)試系統(tǒng)100包括自修改代碼模塊104、RING3虛擬機(jī)模塊106、標(biāo) 記污染源模塊108、檢查器模塊110、日志模塊112,其中自修改代碼模塊104和RING3虛擬 機(jī)模塊106 —起構(gòu)成指令跟蹤框架102以便實(shí)現(xiàn)對(duì)所測(cè)試軟件的每一條指令進(jìn)行實(shí)時(shí)動(dòng)態(tài) 跟蹤和分析。標(biāo)記污染源模塊108生成標(biāo)記污染源規(guī)則。檢查器模塊110生成檢測(cè)規(guī)則。自修 改代碼模塊104利用自修改代碼技術(shù)來動(dòng)態(tài)跟蹤所測(cè)試軟件的每一條二進(jìn)制指令。RING3 虛擬機(jī)模塊106利用RING3虛擬機(jī)來解析所測(cè)試軟件的每一條二進(jìn)制指令,分析指令所攜 帶數(shù)據(jù)的流動(dòng)方向,實(shí)現(xiàn)污點(diǎn)傳播,調(diào)用所述標(biāo)記污染源規(guī)則來標(biāo)記污染源,調(diào)用所述檢測(cè) 規(guī)則來檢測(cè)所測(cè)試軟件的每一條二進(jìn)制指令。日志模塊112輸出有關(guān)違反所述檢測(cè)規(guī)則的 fn息圖2示出根據(jù)本發(fā)明一個(gè)實(shí)施例的基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試方法200的 流程圖。下面結(jié)合圖1的軟件安全測(cè)試系統(tǒng)100來詳細(xì)說明圖2的軟件安全測(cè)試方法200 的流程圖。在步驟202中,標(biāo)記污染源模塊108生成標(biāo)記污染源規(guī)則。在本發(fā)明的實(shí)施例中, 標(biāo)記污染源模塊108把所測(cè)試軟件的一切外部輸入數(shù)據(jù)都看作是污染源,包括但不限于 從網(wǎng)絡(luò)套接字讀數(shù)據(jù),從文件讀數(shù)據(jù),從環(huán)境變量讀數(shù)據(jù),等等。通常,標(biāo)記污染源模塊108 通過對(duì)外部的污染數(shù)據(jù)進(jìn)行建模來生成標(biāo)記污染源規(guī)則。例如,標(biāo)記污染源模塊108通過 函數(shù)recv (SOCKET s,char*buf,int len, int flags)來生成下述標(biāo)記污染源規(guī)則把開始 地址為buf、長(zhǎng)度為Ien的數(shù)據(jù)標(biāo)記為污染數(shù)據(jù)。在步驟204中,檢查器模塊110生成檢測(cè)規(guī)則。通過所述檢測(cè)規(guī)則能夠檢測(cè)所測(cè) 試軟件當(dāng)前執(zhí)行的二進(jìn)制指令是否存在安全風(fēng)險(xiǎn)。檢查器模塊110生成的檢測(cè)規(guī)則主要分 為兩種,一種是函數(shù)級(jí)別的檢測(cè)規(guī)則,一種是指令級(jí)別的檢測(cè)規(guī)則。下面給出檢測(cè)規(guī)則的一 些例子。1)內(nèi)存分配檢測(cè)規(guī)則(函數(shù)級(jí)別)內(nèi)存分配函數(shù)包括但不限于=Malloc, RtAlIocateHeap、HeapAlIoc、CalIoc、 VirtualAlloc,LocalAlloCo在這個(gè)檢測(cè)規(guī)則中,如果這些內(nèi)存分配函數(shù)的要分配大小的參 數(shù)為污染的,則就說明存在安全風(fēng)險(xiǎn),需要報(bào)警,以便提醒審計(jì)人員進(jìn)行進(jìn)一步確認(rèn)。下面給出用偽代碼表示的例子Len = get_int_from_net ();Len+ = 1 ;Char氺buf = mal Ioc (Len);
5
在上面的例子中,長(zhǎng)度大小Len是從網(wǎng)絡(luò)污染源中獲得的,因此Len被標(biāo)記為污染 的。在執(zhí)行Len+= 1時(shí),Len仍然為污染的。在調(diào)用內(nèi)存分配函數(shù)Malloc時(shí),把污染的長(zhǎng) 度大小Len作為參數(shù)傳入該函數(shù),因此在這種情況下就存在安全風(fēng)險(xiǎn),從而需要報(bào)警。2)格式化串溢出檢測(cè)規(guī)則(函數(shù)級(jí)別)有格式化串溢出問題的函數(shù)包括但不限于printf、fprintf、sprintf、snprintf。 在這個(gè)檢測(cè)規(guī)則中,如果這些函數(shù)的格式化串為污染的,就表明潛在的格式化串安全有問 題,因此需要報(bào)警,提醒審計(jì)人員進(jìn)行進(jìn)一步確認(rèn)。下面給出用偽代碼表示的例子printf (get_buf_from_net ());在上面的例子中,該偽代碼首先從網(wǎng)絡(luò)中得到一個(gè)數(shù)據(jù),該數(shù)據(jù)被標(biāo)記為污染的。 然后該偽代碼又把該數(shù)據(jù)直接作為格式化串傳入Printf函數(shù),因此在這種情況下就存在 安全風(fēng)險(xiǎn),從而需要報(bào)警下面給出用偽代碼表示的另一例子printf ( "% s% η")上述偽代碼確實(shí)表示一個(gè)有問題的格式化串,但是由于參數(shù)不為污染的,所以不 會(huì)構(gòu)成可利用的安全漏洞,因此在檢測(cè)規(guī)則中會(huì)忽略這種情況。 3) rep movs檢測(cè)規(guī)則(指令級(jí)別) memcpy函數(shù)有時(shí)會(huì)被編譯器優(yōu)化成內(nèi)聯(lián)的匯編代碼。例如memcpy(dst, src,len)
.text:73ACBB9Amo νecx, eax ;ecx is len
.text:73ACBB9Cmo νesi, [ebp+arg—src]
.text:73ACBB9Emo νedi, [ebp+arg—dst]
.text:73ACBBA1shrecx, 2
.text:73ACBBA4repmovsd在這個(gè)檢測(cè)規(guī)則中,當(dāng)碰到r印movs指令時(shí),需要檢查ecx寄存器。如果ecx寄 存器的狀態(tài)為污染的,即表示拷貝數(shù)據(jù)的長(zhǎng)度是攻擊者可以控制的,則說明存在安全風(fēng)險(xiǎn), 需要報(bào)警,以便提醒審計(jì)人員進(jìn)行進(jìn)一步確認(rèn)。下面給出用偽代碼表示的例子memcpy(dst, src, get_int_from_net());在上面的例子中,該偽代碼從網(wǎng)絡(luò)中得到一個(gè)整型數(shù)據(jù),該整型數(shù)據(jù)被標(biāo)記為污 染的,并傳入ecx作為長(zhǎng)度進(jìn)行拷貝。如果在檢測(cè)!·印movsd時(shí)發(fā)現(xiàn)ecx是感染的,則說明 存在安全風(fēng)險(xiǎn),需要報(bào)警。4)有符號(hào)整型擴(kuò)展檢測(cè)規(guī)則(指令級(jí)別)有符號(hào)整型的符號(hào)擴(kuò)展問題會(huì)導(dǎo)致其他安全問題,例如數(shù)組越界、整型溢出等等。 在這個(gè)檢測(cè)規(guī)則中,如果檢查到一個(gè)感染的char類型向有符號(hào)的比它位寬的整型(例如 int)轉(zhuǎn)化時(shí),則就說明存在安全風(fēng)險(xiǎn),需要報(bào)警,以便提醒審計(jì)人員進(jìn)行進(jìn)一步確認(rèn)。下面給出用偽代碼表示的例子Int a ;char氺buf = Get_buf_from_net ();
a = buf
;// 符號(hào)擴(kuò)展在上面的例子中,該偽代碼從網(wǎng)絡(luò)得到數(shù)據(jù)把地址賦值給buf (char*類型),buf 數(shù)據(jù)為污染的,buf
也為污染的,感染的char類型向有符號(hào)的int轉(zhuǎn)化,因此就說明存 在安全風(fēng)險(xiǎn),需要報(bào)警。另外,從匯編代碼來看為如下匯編代碼movsx ecx,byte ptr ss [esp+0x4]
5)除0檢測(cè)規(guī)則(指令級(jí)別)在這個(gè)檢測(cè)規(guī)則中,在檢測(cè)idiv/div指令時(shí)判斷除數(shù)是否為污染的。如果是的 話,則說明存在安全風(fēng)險(xiǎn),需要報(bào)警,提醒審計(jì)人員進(jìn)行進(jìn)一步確認(rèn)。下面給出用偽代碼表示的例子Int a ;a/ = get_int_from_net ();在上面的例子中,該偽代碼為a除以一個(gè)從網(wǎng)絡(luò)中獲得的整數(shù)。如果該除數(shù)為污 染的,則說明存在安全風(fēng)險(xiǎn),需要報(bào)警。另外,從匯編代碼來看為如下匯編代碼Idiv/div eax, ecx6)整型上溢檢測(cè)規(guī)則(指令級(jí)別)整型上溢也可導(dǎo)致安全問題。在這個(gè)檢測(cè)規(guī)則中檢測(cè)乘法指令的操作數(shù)1和操作 數(shù)2。如果任一操作數(shù)為污染的,則就說明存在安全風(fēng)險(xiǎn),需要報(bào)警,以便提醒審計(jì)人員進(jìn)行 進(jìn)一步確認(rèn)。下面給出用偽代碼表示的例子Int a ;a* = get_int_from_net ();在上面的例子中,該偽代碼為a乘以一個(gè)從網(wǎng)絡(luò)中獲得的整數(shù),在這種情況下就 說明存在安全風(fēng)險(xiǎn),需要報(bào)警。另外,從匯編代碼來看為如下匯編代碼Imul/mul edi, [ebp+arg_8]注意,乘法有時(shí)也用Iea指令lea ecx, dword ptr ds [eax氺8]此外,檢查器模塊110還提供用戶自定義的函數(shù)級(jí)別的檢測(cè)規(guī)則接口。例如對(duì) 于memcpy(void*dst,void*src,unsigned int len),用戶可定義如下規(guī)貝Ij進(jìn)行檢測(cè)如果 memcpy函數(shù)的第三個(gè)參數(shù)為污染的,則就說明存在安全風(fēng)險(xiǎn),需要報(bào)警。其他用戶需要檢測(cè) 的函數(shù)可自行添加。繼續(xù)參考圖2,在步驟206中,自修改代碼模塊104利用自修改代碼技術(shù)來動(dòng)態(tài)跟 蹤所測(cè)試軟件的每一條二進(jìn)制指令。自修改代碼技術(shù)通過自我修改代碼來使應(yīng)用程序在運(yùn) 行時(shí)自我修改,該技術(shù)在本發(fā)明的實(shí)施例中具體實(shí)現(xiàn)如下假設(shè)當(dāng)前執(zhí)行的指令地址為X,則用“ jmp 0Ur_handler ”指令重寫下一條指令。在 our_handler函數(shù)中執(zhí)行如下操作1)切換到一個(gè)臨時(shí)的堆棧,使用pusha+pushf保存寄存器信息;2)恢復(fù)被覆蓋的指令;3)其他要執(zhí)行的代碼;4)計(jì)算當(dāng)前指令的下一條指令的地址,假設(shè)這個(gè)地址為Y ;
5)使用“ jmp ourjmndler”重寫地址Y的指令,恢復(fù)保存的寄存器信息,返回到下 一條指令執(zhí)行。在步驟208中,RING3虛擬機(jī)模塊106利用RING3虛擬機(jī)來解析所測(cè)試軟件的每 一條二進(jìn)制指令,分析指令所攜帶數(shù)據(jù)的流動(dòng)方向,實(shí)現(xiàn)污點(diǎn)傳播,調(diào)用所述標(biāo)記污染源規(guī) 則來標(biāo)記污染源,調(diào)用所述檢測(cè)規(guī)則來檢測(cè)所測(cè)試軟件的每一條二進(jìn)制指令。在本發(fā)明的實(shí)施例中,RING3虛擬機(jī)模塊106是一種RING3虛擬機(jī),用來模擬中央 處理單元(CPU)、浮點(diǎn)運(yùn)算單元(FPU)。一般的虛擬機(jī)需要模擬全部的硬件設(shè)備,包括CPU、 FPU、存儲(chǔ)器、硬盤、基本輸入/輸出系統(tǒng)(BIOS)、可編程中斷控制器(PIC)、直接存儲(chǔ)器存取 (DMA)、光盤、網(wǎng)絡(luò)、高級(jí)配置與電源接口(ACPI)等等。而且,一般的虛擬機(jī)需要先把操作 系統(tǒng)跑起來,應(yīng)用程序是跑在虛擬機(jī)模擬出來的操作系統(tǒng)里。此類虛擬機(jī)軟件有VMWARE、 Virtual PC。本發(fā)明的實(shí)施例中的上述軟件安全測(cè)試系統(tǒng)100和所測(cè)試軟件跑在同一進(jìn)程空 間。因此,作為上述軟件安全測(cè)試系統(tǒng)的組成部分的RING3虛擬機(jī)模塊106也和所測(cè)試軟 件在同一進(jìn)程空間。因此,RING3虛擬機(jī)模塊106可以利用所測(cè)試軟件本身的一些資源,盡 可能少地模擬硬件設(shè)備。從這個(gè)角度來講,該RING3虛擬機(jī)模塊106只需要模擬出CPU、FPU 就行了。圖3示出所測(cè)試軟件和軟件安全測(cè)試系統(tǒng)100的關(guān)系,其中軟件安全測(cè)試系統(tǒng)100 是在所測(cè)試軟件中,二者都在應(yīng)用層,即RING3層。在自修改代碼模塊104每完成所測(cè)試軟件的一條二進(jìn)制指令動(dòng)態(tài)跟蹤過程之后, RING3虛擬機(jī)模塊106接著就進(jìn)行指令的解析。假如當(dāng)前執(zhí)行的指令是89473C,則RING3 虛擬機(jī)模塊106將該指令識(shí)別為m0V[edi+3Ch],eax0于是可以得出的結(jié)論是將eax的值 放到[edi+3Ch]中去。這樣就進(jìn)行了一次指令解析。RING3虛擬機(jī)模塊106解析完指令 后要分析指令所攜帶數(shù)據(jù)的流動(dòng)方向。假如此時(shí)的edi為0x800000,eax為0x41414141, 那么就知道要把0x80003C這個(gè)地址的內(nèi)容設(shè)置為0x41414141。假設(shè)eax為污染的,則將 0x80003C的內(nèi)存地址標(biāo)記為污染,從而實(shí)現(xiàn)了一次污點(diǎn)數(shù)據(jù)的傳播。然后RING3虛擬機(jī)模 塊106調(diào)用標(biāo)記污染源模塊108所生成的標(biāo)記污染源規(guī)則進(jìn)行污染源的標(biāo)記。例如,針對(duì) 前述的recv函數(shù),RING3虛擬機(jī)模塊106在碰到調(diào)用該recv函數(shù)的指令時(shí)會(huì)調(diào)用該recv 函數(shù)所生成的標(biāo)記污染源規(guī)則,從而完成一次污染源的標(biāo)記。圖4示意性地示出根據(jù)本發(fā) 明的實(shí)施例對(duì)外部污染源的標(biāo)記。同時(shí),RING3虛擬機(jī)模塊106還調(diào)用檢查器模塊110所 生成的檢測(cè)規(guī)則來檢測(cè)每一條指令是否違反檢測(cè)規(guī)則。通常調(diào)用指令級(jí)別的檢測(cè)規(guī)則檢測(cè) 每一條指令。當(dāng)碰到函數(shù)調(diào)用的指令時(shí),則調(diào)用函數(shù)級(jí)別的檢測(cè)規(guī)則。在步驟210中,在檢測(cè)規(guī)則被違反時(shí)日志模塊112輸出有關(guān)違反所述檢測(cè)規(guī)則的 信息,例如產(chǎn)生日志,記錄日志,生成報(bào)告,進(jìn)行報(bào)警,以供測(cè)試人員進(jìn)一步分析。本發(fā)明在指令跟蹤框架的支持下,能夠全面地跟蹤污染傳播過程,大大提高污染 傳播的準(zhǔn)確性,從而提高軟件的檢測(cè)率,減小誤報(bào)率和漏報(bào)率。而且,在指令跟蹤框架的支 持下,本發(fā)明還能大大提高軟件檢測(cè)漏洞類型,例如能夠檢測(cè)指令級(jí)別漏洞和函數(shù)級(jí)別漏 洞。本發(fā)明的技術(shù)方案當(dāng)前至少支持檢測(cè)以下安全漏洞堆緩沖區(qū)溢出、棧緩沖區(qū)溢出、 格式化串溢出、整型溢出、除0拒絕服務(wù)、命令注入(Command Ejection)、SQL注入(SQL Ejection)、路徑操縱(Path Manipulation)等等。當(dāng)然,本發(fā)明的技術(shù)方案不限于支持檢 測(cè)上述安全漏洞,因?yàn)榭梢酝ㄟ^建模,再建立檢測(cè)規(guī)則來檢測(cè)其他安全漏洞。
以上參考附圖示出并描述了本發(fā)明的實(shí)施例,但是本發(fā)明不限于此。顯然,本領(lǐng)域 的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種修改、變型和替換而不脫離本發(fā)明的精神范圍。因此, 只要本發(fā)明的這些修改、變型和替換屬于本發(fā)明的權(quán)利要求書及其等同技術(shù)方案的范圍之 內(nèi),則本發(fā)明也意圖包含這些修改、變型和替換。
權(quán)利要求
1.一種基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試系統(tǒng),其特征在于包括 標(biāo)記污染源模塊(108),用于生成標(biāo)記污染源規(guī)則;檢查器模塊(110),用于生成檢測(cè)規(guī)則;自修改代碼模塊(104),用于利用自修改代碼技術(shù)來動(dòng)態(tài)跟蹤所測(cè)試軟件的每一條二 進(jìn)制指令;RING3虛擬機(jī)模塊(106),用于利用RING3虛擬機(jī)來解析所測(cè)試軟件的每一條二進(jìn)制指 令,分析指令所攜帶數(shù)據(jù)的流動(dòng)方向,實(shí)現(xiàn)污點(diǎn)傳播,調(diào)用所述標(biāo)記污染源規(guī)則來標(biāo)記污染 源,調(diào)用所述檢測(cè)規(guī)則來檢測(cè)所測(cè)試軟件的每一條二進(jìn)制指令;以及 日志模塊(112),用于輸出有關(guān)違反所述檢測(cè)規(guī)則的信息。
2.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試系統(tǒng),其特征在于所述檢測(cè)規(guī)則是指令級(jí)別的。
3.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試系統(tǒng),其特征在于所述檢測(cè)規(guī)則是函數(shù)級(jí)別的。
4.根據(jù)權(quán)利要求1所述的軟件安全測(cè)試系統(tǒng),其特征在于所述污染源是所測(cè)試軟件 的外部輸入數(shù)據(jù),所述外部輸入數(shù)據(jù)包括來自網(wǎng)絡(luò)套接字的數(shù)據(jù)、來自文件的數(shù)據(jù)、來自環(huán) 境變量的數(shù)據(jù)。
5.一種基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試方法,其特征在于包括以下步驟 生成標(biāo)記污染源規(guī)則O02);生成檢測(cè)規(guī)則O04);利用自修改代碼技術(shù)來動(dòng)態(tài)跟蹤所測(cè)試軟件的每一條二進(jìn)制指令O06); 利用RING3虛擬機(jī)來解析所測(cè)試軟件的每一條二進(jìn)制指令,分析指令所攜帶數(shù)據(jù)的流 動(dòng)方向,實(shí)現(xiàn)污點(diǎn)傳播,調(diào)用所述標(biāo)記污染源規(guī)則來標(biāo)記污染源,調(diào)用所述檢測(cè)規(guī)則來檢測(cè) 所測(cè)試軟件的每一條二進(jìn)制指令O08);以及 輸出有關(guān)違反所述檢測(cè)規(guī)則的信息010)。
6.根據(jù)權(quán)利要求5所述的軟件安全測(cè)試方法,其特征在于所述檢測(cè)規(guī)則是指令級(jí)別的。
7.根據(jù)權(quán)利要求5所述的軟件安全測(cè)試方法,其特征在于所述檢測(cè)規(guī)則是函數(shù)級(jí)別的。
8.根據(jù)權(quán)利要求5所述的軟件安全測(cè)試方法,其特征在于所述污染源是所測(cè)試軟件 的外部輸入數(shù)據(jù),所述外部輸入數(shù)據(jù)包括來自網(wǎng)絡(luò)套接字的數(shù)據(jù)、來自文件的數(shù)據(jù)、來自環(huán) 境變量的數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種基于動(dòng)態(tài)污染傳播的軟件安全測(cè)試系統(tǒng)及方法。所述系統(tǒng)包括標(biāo)記污染源模塊(108),用于生成標(biāo)記污染源規(guī)則;檢查器模塊(110),用于生成檢測(cè)規(guī)則;自修改代碼模塊(104),用于利用自修改代碼技術(shù)來動(dòng)態(tài)跟蹤所測(cè)試軟件的每一條二進(jìn)制指令;RING3虛擬機(jī)模塊(106),用于利用RING3虛擬機(jī)來解析所測(cè)試軟件的每一條二進(jìn)制指令,分析指令所攜帶數(shù)據(jù)的流動(dòng)方向,實(shí)現(xiàn)污點(diǎn)傳播,調(diào)用所述標(biāo)記污染源規(guī)則來標(biāo)記污染源,調(diào)用所述檢測(cè)規(guī)則來檢測(cè)所測(cè)試軟件的每一條二進(jìn)制指令;以及日志模塊(112),用于輸出有關(guān)違反檢測(cè)規(guī)則的信息。本發(fā)明能夠提高軟件的檢測(cè)率,減小誤報(bào)率和漏報(bào)率。
文檔編號(hào)G06F11/36GK102081719SQ20091025281
公開日2011年6月1日 申請(qǐng)日期2009年12月1日 優(yōu)先權(quán)日2009年12月1日
發(fā)明者王偉 申請(qǐng)人:王偉
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
扶余县| 长岭县| 茌平县| 海兴县| 清新县| 安岳县| 大悟县| 济阳县| 五大连池市| 桓台县| 哈尔滨市| 青州市| 三江| 泰和县| 苗栗市| 额尔古纳市| 常宁市| 收藏| 奈曼旗| 烟台市| 德令哈市| 阿勒泰市| 大丰市| 盱眙县| 扶绥县| 海安县| 花莲县| 连平县| 长白| 安康市| 贺兰县| 甘肃省| 阳谷县| 曲水县| 房山区| 离岛区| 都匀市| 桦川县| 平潭县| 定州市| 儋州市|