亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法及系統(tǒng)的制作方法

文檔序號(hào):6522719閱讀:197來(lái)源:國(guó)知局
并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法及系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明提出一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法,包括以下步驟:為軟件不變量中的各條指令的動(dòng)態(tài)實(shí)例定義瞬時(shí)Fetter集,其中,軟件不變量是指程序中執(zhí)行順序預(yù)先固定的指令集合;獲取瞬時(shí)Fetter集的包含集和義務(wù)集;將包含集和義務(wù)集進(jìn)行剪枝以獲取剪枝后的結(jié)果,并將剪枝后的結(jié)果存儲(chǔ)在不變量數(shù)據(jù)庫(kù)中;利用檢測(cè)組件檢測(cè)各個(gè)瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的包含集和義務(wù)集的第一瞬時(shí)Fetter集,如果是,則判斷第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告;暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的漏洞的運(yùn)行。本發(fā)明的方法,可以自動(dòng)地檢測(cè)以及防止程序中潛在的共享數(shù)據(jù)類(lèi)漏洞。本發(fā)明還提出一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng)。
【專(zhuān)利說(shuō)明】并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件工程【技術(shù)領(lǐng)域】,尤其涉及一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法及系統(tǒng)。
【背景技術(shù)】
[0002]一般來(lái)說(shuō),關(guān)于數(shù)據(jù)競(jìng)爭(zhēng)類(lèi)型的漏洞的研究可以分為兩大部分,基于鎖的方法(lock-set approach)(如 Eraser)和基于時(shí)間序列的方法(happened-before)(如SigRace)。雖然有關(guān)數(shù)據(jù)競(jìng)爭(zhēng)類(lèi)型的漏洞已經(jīng)得到較為充分的研究,但即使完美解決了所有數(shù)據(jù)競(jìng)爭(zhēng)類(lèi)漏洞也是不夠的。原因在于:1)很大一部分的數(shù)據(jù)競(jìng)爭(zhēng)漏洞并不會(huì)造成什么實(shí)質(zhì)性的后果。即,它們是良性的;2)不存在數(shù)據(jù)競(jìng)爭(zhēng)的原子性違反類(lèi)漏洞并不少見(jiàn);3)絕大多數(shù)的順序性違例類(lèi)漏洞并不能通過(guò)簡(jiǎn)單地將它們包入關(guān)鍵區(qū)之中得到解決。
[0003]由于單一地檢測(cè)數(shù)據(jù)競(jìng)爭(zhēng)類(lèi)漏洞的工具的局限性,關(guān)于如何解決原子性違例類(lèi)漏洞的研究成了一個(gè)熱門(mén)的話題并成為許多研究工作的重心。因而,只有少數(shù)關(guān)于順序性違例類(lèi)漏洞的研究。而且在這些少量的研究中基本上都只能處理自己定義的一個(gè)順序性違例類(lèi)漏洞的子集。舉例來(lái)說(shuō),雖然ConMem中的Con-NULL和DefUse的Local/Remote (LR)Invariants各自處理了一部分,但是“寫(xiě)-寫(xiě)”順序性違例類(lèi)漏洞都不能得到很好的處理。
[0004]此外,漏洞的防治與漏洞的檢測(cè)是一類(lèi)相互補(bǔ)充的方法。這一方法仍存在以下問(wèn)題:1)即使經(jīng)過(guò)了相當(dāng)充分的測(cè)試,仍然不能保證所有的漏洞都已經(jīng)被找到;2)對(duì)一個(gè)已報(bào)告的漏洞的誤解可能導(dǎo)致由修復(fù)用的補(bǔ)丁引入新的漏洞;3)從漏洞被發(fā)現(xiàn)到被修復(fù)之間的時(shí)間間隔太長(zhǎng)。雖然已有大量的改進(jìn)的方法,如PSet, LifeTxes、Pacman、Rcdc和Bulksc。但是它們都需要復(fù)雜的硬件支持,而且大部分無(wú)法處理順序性違例類(lèi)漏洞。
[0005]關(guān)于大量的以塊為單位的執(zhí)行代碼,如內(nèi)存事務(wù)(Transaction Memory)這一相對(duì)成熟的技術(shù),已經(jīng)有很多相關(guān)的方法被提出。這些方法或硬件被用于降低多線程程序的不確定性,從而減少漏洞的發(fā)現(xiàn)幾率和調(diào)試的難度。但是,盡管使用了新型的編程模型,也并沒(méi)有杜絕漏洞的發(fā)生。更重要的是,由于組成一個(gè)順序性違例的兩條指令中的一條比另一條要更加靠近分叉點(diǎn)在基于塊的執(zhí)行方式中是不存在的,因此基于塊的執(zhí)行方式反而提高了順序性違例類(lèi)漏洞的發(fā)生幾率。

【發(fā)明內(nèi)容】

[0006]本發(fā)明旨在至少解決上述技術(shù)問(wèn)題之一。
[0007]為此,本發(fā)明的第一個(gè)目的在于提出一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法。該方法可以自動(dòng)地檢測(cè)以及防止程序中潛在的共享數(shù)據(jù)類(lèi)漏洞。
[0008]本發(fā)明的第二個(gè)目的在于提出一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng)。
[0009]為了實(shí)現(xiàn)上述目的,本發(fā)明第一方面實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法包括以下步驟:為軟件不變量中的各條指令的動(dòng)態(tài)實(shí)例定義瞬時(shí)Fetter集,其中,軟件不變量是指程序中執(zhí)行順序預(yù)先固定的指令集合;獲取所述瞬時(shí)Fetter集的包含集和義務(wù)集;將所述包含集和義務(wù)集進(jìn)行剪枝以獲取剪枝后的結(jié)果,并將所述剪枝后的結(jié)果存儲(chǔ)在不變量數(shù)據(jù)庫(kù)中;利用檢測(cè)組件檢測(cè)各個(gè)所述瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的所述包含集和義務(wù)集的第一瞬時(shí)Fetter集,如果是,則判斷所述第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告;暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的所述漏洞的運(yùn)行。
[0010]根據(jù)本發(fā)明實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法,可以自動(dòng)地檢測(cè)以及防止程序中潛在的共享數(shù)據(jù)類(lèi)漏洞,無(wú)需開(kāi)發(fā)者手工注釋?zhuān)覒?yīng)用范圍廣。
[0011]在一些示例中,所述瞬時(shí)Fetter集具體是指:在所有先于所述指令執(zhí)行的指令中,與所述指令相鄰且與所述指令訪問(wèn)了同一內(nèi)存的指令集合。
[0012]在一些示例中,所述包含集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的并集;所述義務(wù)集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的交集。
[0013]在一些示例中,所述暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的所述漏洞的運(yùn)行,當(dāng)暫停時(shí)間達(dá)到預(yù)設(shè)時(shí)間閾值或暫停次數(shù)達(dá)到預(yù)設(shè)次數(shù)閾值時(shí),暫停狀態(tài)解除。
[0014]在一些示例中,還包括:判斷觸發(fā)集是否包含于所述義務(wù)集,如果否,則暫停當(dāng)前運(yùn)行的線程,并生成違例報(bào)告,其中,所述觸發(fā)集是所述義務(wù)集的鏡像集合。
[0015]本發(fā)明第二方面實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng),包括:提取模塊,用于計(jì)算瞬時(shí)Fetter集的包含集和義務(wù)集,并不斷更新所述包含集和義務(wù)集;剪枝模塊,用于去除所述包含集和義務(wù)集中置信度低的部分,以獲取剪枝后的結(jié)果;檢測(cè)模塊,用于利用檢測(cè)組件檢測(cè)各個(gè)所述瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的所述包含集和義務(wù)集的所述第一瞬時(shí)Fetter集,如果是,則判斷所述第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告;防治模塊,用于暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的所述漏洞的運(yùn)行;發(fā)掘模塊,用于發(fā)掘多線程運(yùn)行指令中隱藏的漏洞。
[0016]根據(jù)本發(fā)明實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng),可以自動(dòng)地檢測(cè)以及防止程序中潛在的共享數(shù)據(jù)類(lèi)漏洞,無(wú)需開(kāi)發(fā)者手工注釋?zhuān)覒?yīng)用范圍廣。
[0017]在一些示例中,所述瞬時(shí)Fetter集具體是指:在所有先于所述指令執(zhí)行的指令中,與所述指令相鄰且與所述指令訪問(wèn)了同一內(nèi)存的指令集合。
[0018]在一些示例中,所述瞬時(shí)Fetter集的包含集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的并集;所述瞬時(shí)Fetter集的義務(wù)集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的交集。
[0019]在一些示例中,所述防治模塊還用于,當(dāng)暫停時(shí)間達(dá)到預(yù)設(shè)時(shí)間閾值或暫停次數(shù)達(dá)到預(yù)設(shè)次數(shù)閾值時(shí),暫停狀態(tài)解除。
[0020]在一些示例中,所述發(fā)掘模塊還用于,判斷觸發(fā)集是否包含于所述義務(wù)集,如果否,則暫停當(dāng)前運(yùn)行的線程,并向生成違例報(bào)告,其中,所述觸發(fā)集是所述義務(wù)集的鏡像集

口 o
[0021]本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
【專(zhuān)利附圖】

【附圖說(shuō)明】
[0022]本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中,[0023]圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法的流程圖;
[0024]圖2是本發(fā)明一個(gè)實(shí)施例的具體運(yùn)行過(guò)程示意圖;和
[0025]圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0026]下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類(lèi)似的標(biāo)號(hào)表示相同或類(lèi)似的元件或具有相同或類(lèi)似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。相反,本發(fā)明的實(shí)施例包括落入所附加權(quán)利要求書(shū)的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
[0027]在本發(fā)明的描述中,需要理解的是,術(shù)語(yǔ)“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性。在本發(fā)明的描述中,需要說(shuō)明的是,除非另有明確的規(guī)定和限定,術(shù)語(yǔ)“相連”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機(jī)械連接,也可以是電連接;可以是直接相連,也可以通過(guò)中間媒介間接相連。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以根據(jù)具體情況理解上述術(shù)語(yǔ)在本發(fā)明中的具體含義。此外,在本發(fā)明的描述中,除非另有說(shuō)明,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上。
[0028]流程圖中或在此以其他方式描述的任何過(guò)程或方法描述可以被理解為,表示包括一個(gè)或多個(gè)用于實(shí)現(xiàn)特定邏輯功能或過(guò)程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu) 選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時(shí)的方式或按相反的順序來(lái)執(zhí)行功能,這應(yīng)被本發(fā)明的實(shí)施例所屬【技術(shù)領(lǐng)域】的技術(shù)人員所理解。
[0029]下面參考附圖描述根據(jù)本發(fā)明實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法及系統(tǒng)。
[0030]本發(fā)明提出的一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法,包括以下步驟:為軟件不變量中的各條指令的動(dòng)態(tài)實(shí)例定義瞬時(shí)Fetter集;獲取瞬時(shí)Fetter集的包含集和義務(wù)集;將包含集和義務(wù)集進(jìn)行剪枝以獲取剪枝后的結(jié)果,并將剪枝后的結(jié)果存儲(chǔ)在不變量數(shù)據(jù)庫(kù)中;利用檢測(cè)組件檢測(cè)各個(gè)瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的包含集和義務(wù)集的第一瞬時(shí)Fetter集,如果是,則判斷所述第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告;暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的漏洞的運(yùn)行。
[0031]圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法的流程圖,圖2是本發(fā)明一個(gè)實(shí)施例的具體運(yùn)行過(guò)程示意圖。
[0032]結(jié)合圖1和圖2,并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法的具體實(shí)現(xiàn)過(guò)程如下:
[0033]步驟SlOl:為軟件不變量中的各條指令的動(dòng)態(tài)實(shí)例定義瞬時(shí)Fetter集。其中,軟件不變量是指程序中執(zhí)行順序預(yù)先固定的指令集合。
[0034]具體地,為軟件不變量中的各條指令的動(dòng)態(tài)實(shí)例(Dynamic instance of a staticinstruction)〗定義一個(gè)瞬時(shí)Fetter集,即CFS (I)。數(shù)學(xué)上CFS (I)是一個(gè)指令的集合,由所有先于I執(zhí)行的指令中,與I相鄰且與I訪問(wèn)了同一內(nèi)存的指令構(gòu)成。如果這種指令的數(shù)量為零,則標(biāo)記為NUL。例如,線程I中的指令I(lǐng)l被稱(chēng)為與線程2中的指令12相鄰,當(dāng)且僅當(dāng)在Il和12的執(zhí)行之間線程I沒(méi)有運(yùn)行任何訪問(wèn)同一片內(nèi)存的指令。
[0035]步驟S102:獲取瞬時(shí)Fetter集的包含集和義務(wù)集。
[0036]具體地,某條指令I(lǐng)的包含集(Belonging Invariants Set),即BIS (I),是一個(gè)指令的集合,描述這條指令能否被包含于另一條指令的CFS中。它的值等于這條指令的所有動(dòng)態(tài)實(shí)例CFS的并集。如果所有的指令都可以屬于I的CFS,BIS (I)被標(biāo)記為ALL。
[0037]某條指令I(lǐng)的義務(wù)集(Enforcing Invariants Set),即EIS (I),用來(lái)描述這條指令是否必須被包含于另一條指令的CFS中。在數(shù)學(xué)上,它是指這條指令所有動(dòng)態(tài)實(shí)例的CFS的交集。
[0038]在實(shí)際運(yùn)行中,為了在沒(méi)有任何人力標(biāo)注介入的條件下自動(dòng)的獲取FI (FetterInvariants),即瞬時(shí)Fetter集的包含集BIS和義務(wù)集EIS的總和,需要一定數(shù)量的正確運(yùn)行的動(dòng)態(tài)實(shí)例。對(duì)于多線程程序而言,由于多線程程序運(yùn)行的不確定性,甚至對(duì)于同一輸入數(shù)據(jù)的多次運(yùn)行,也了可以被認(rèn)為是不同的運(yùn)行的動(dòng)態(tài)實(shí)例,因此獲取大量的運(yùn)行的動(dòng)態(tài)實(shí)例是比較容易的。常用的系統(tǒng)測(cè)試工具,如CHESS和CTrigge,可以用來(lái)發(fā)掘盡可能全面的運(yùn)行動(dòng)態(tài)實(shí)例。
[0039]在實(shí)現(xiàn)上,通過(guò)跟蹤程序的執(zhí)行來(lái)獲取指令之間順序關(guān)系。具體地,在程序的運(yùn)行期間,提取組件會(huì)為每一組〈線程ID,內(nèi)存地址 > 記錄最后一條執(zhí)行的指令。這個(gè)線程對(duì)此片內(nèi)存的每一次操作都會(huì)更新這個(gè)記錄。通過(guò)這些記錄,可以動(dòng)態(tài)的獲取指令I(lǐng)的動(dòng)態(tài)實(shí)例對(duì)應(yīng)的CFS (I)。得到CFS (I)之后,進(jìn)行如下操作:
[0040](I)初始化 FI,即 BIS(I)和 EIS (I)。
[0041]具體地,將BIS(I)和EIS(I)分別初始化為0和ALL。
[0042](2)更新FI,具體的操作如下所示:
[0043]BIS(I) — BIS(I) U CFS(I)
[0044]EIS(I) — EIS(I) H CFS(I)
[0045]其中,等式右側(cè)的BIS(I)和EIS(I)是指令I(lǐng)的當(dāng)前動(dòng)態(tài)實(shí)例執(zhí)行前獲取到的FI。
[0046](3)經(jīng)過(guò)上述的學(xué)習(xí)訓(xùn)練后,每條指令I(lǐng)學(xué)習(xí)到的FI會(huì)被存放起來(lái)等待剪枝。
[0047]特別地,在具體地執(zhí)行過(guò)程中,需要?jiǎng)討B(tài)的維護(hù)recorder變量來(lái)記錄當(dāng)前內(nèi)存的訪問(wèn)情況。
[0048]步驟S103:將包含集和義務(wù)集進(jìn)行剪枝以獲取剪枝后的結(jié)果,并將剪枝后的結(jié)果存儲(chǔ)在不變量數(shù)據(jù)庫(kù)中。
[0049]由于多線程程序的復(fù)雜性,訓(xùn)練階段的測(cè)試可能是不充分的。即,測(cè)試樣例可能不能覆蓋所有可能的運(yùn)行路徑。因此,為了解決不充分訓(xùn)練可能帶來(lái)的問(wèn)題,待上述步驟S102的程序執(zhí)行完畢后,提取組件將負(fù)責(zé)進(jìn)行剪枝操作,去除FI中置信度不高的部分,剩下的部分即剪枝后的結(jié)果。將剪枝后的結(jié)果存放于不變量數(shù)據(jù)庫(kù)中,等待后續(xù)的操作。
[0050]具體地,剪枝的實(shí)現(xiàn)過(guò)程如下:
[0051 ] ( I)剪去出現(xiàn)幾率低的軟件不變量。
[0052]一般地,用于學(xué)習(xí)訓(xùn)練用的正確運(yùn)行的動(dòng)態(tài)實(shí)例的數(shù)量至少為10次。因此,可以認(rèn)為,在所有的訓(xùn)練實(shí)例中只出現(xiàn)了一次的不變量的置信度(出現(xiàn)的可能性)是很低的。因此,這些不變量會(huì)從EIS中去除。同樣地,如果BIS中相當(dāng)比例不變量的置信度都不高,就將這條指令的BIS被標(biāo)成ALL。如前所述,ALL表示所有的指令都屬于這條指令的CFS。如果一條指令對(duì)應(yīng)的FI中EIS為空且BIS為ALL,這條指令則可以省略,以節(jié)省內(nèi)存空間。
[0053]具體地,需要依次訪問(wèn)所有獲得的EIS和BIS對(duì),使用一個(gè)map數(shù)據(jù)結(jié)構(gòu)對(duì)這些EIS和BIS對(duì)進(jìn)行計(jì)數(shù)。然后遍歷這個(gè)map,將只出現(xiàn)過(guò)一次的EIS和BIS對(duì)標(biāo)記為不充分,并將其從EIS中去除。最后檢查所有的BIS,計(jì)算其中不充分的指令所占的比例,如果這一比例高于事先設(shè)定的某一閾值,則將其標(biāo)記為ALL。
[0054](2)剪去過(guò)于受歡迎的指令。
[0055]在經(jīng)常被調(diào)用的小函數(shù)中的指令擁有大量的BIS,此時(shí)可以將這些BIS標(biāo)為ALL。
[0056]同樣的,還有處于動(dòng)態(tài)鏈接庫(kù)中的指令,他們的PC數(shù)會(huì)隨著裝載時(shí)的條件而變化,從而獲得很大的BIS。此時(shí),只需檢查所有的BIS,計(jì)算其大小,如果大于預(yù)設(shè)閾值(一般設(shè)為5),則將其標(biāo)記為ALL。
[0057](3)剪去不訪問(wèn)共享變量的指令。
[0058]由于本發(fā)明實(shí)施例的方法處理的是共享數(shù)據(jù)類(lèi)的漏洞,因此將去除不訪問(wèn)共享變量的指令。具體地,不訪問(wèn)共享變量的指令可以通過(guò)程序執(zhí)行過(guò)程中動(dòng)態(tài)維護(hù)的recorder變量獲得,將這些指令從EIS和BIS中刪除即可。
[0059]經(jīng)過(guò)上述剪枝的FI將被存放于不變量數(shù)據(jù)庫(kù)中。
[0060]步驟S104:利用檢測(cè)組件檢測(cè)各個(gè)瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的所述包含集和義務(wù)集的第一瞬時(shí)Fetter集,如果是,則判斷所述第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告。
[0061]具體實(shí)現(xiàn)過(guò)程如下:
[0062](I)從不變量數(shù)據(jù)庫(kù)中讀取FI,即BIS和EIS,并對(duì)其進(jìn)行初始化。
[0063](2)檢測(cè)組件通過(guò)維護(hù)特定的域來(lái)動(dòng)態(tài)的計(jì)算每一條指令I(lǐng)動(dòng)態(tài)實(shí)例的CFS (I),并與相應(yīng)的FI進(jìn)行比較。對(duì)于每一條指令,如果監(jiān)測(cè)到運(yùn)行的動(dòng)態(tài)實(shí)例的特性不滿足其對(duì)應(yīng)的FI,則判斷發(fā)生違例,檢測(cè)組件生成違例報(bào)告并發(fā)送給開(kāi)發(fā)者,用于更進(jìn)一步的分析。其中,違例指在運(yùn)行當(dāng)中,不滿足下列條件的狀況:EIS(I) g CFS(I) g BIS(I).[0064]特別地,為了節(jié)省內(nèi)存和時(shí)間,這一操作只對(duì)訪問(wèn)共享變量的指令執(zhí)行。
[0065]另外,檢測(cè)階段也可以用于進(jìn)一步去掉不充分的不變量。經(jīng)分析,造成違例的原因并不是漏洞的那部分違例可以從FI中刪除。即,當(dāng)開(kāi)發(fā)者根據(jù)報(bào)告與對(duì)程序的分析做出當(dāng)前違例并不是漏洞的斷定后,通過(guò)執(zhí)行與步驟S103中的“剪去出現(xiàn)幾率低的不變量”類(lèi)似的方法將這一指令從不變量數(shù)據(jù)庫(kù)中將其剔除。這樣,之后再出現(xiàn)同樣的指令交錯(cuò)時(shí),將不會(huì)再產(chǎn)生疑似漏洞的違例報(bào)告。
[0066]步驟S105:暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的漏洞的運(yùn)行。
[0067]在上述步驟S104檢測(cè)到違例的基礎(chǔ)上,直接通過(guò)暫停當(dāng)前線程來(lái)解決這一違例的方法來(lái)防治漏洞的發(fā)生。特別地,為了阻止違例的發(fā)生,檢測(cè)違例的步驟是先于指令的實(shí)際執(zhí)行之前進(jìn)行。
[0068]具體地,通過(guò)只允許部分經(jīng)過(guò)測(cè)試的線程間指令交錯(cuò)的運(yùn)行,可以在漏洞實(shí)際暴露之前檢測(cè)到潛在的漏洞,通過(guò)暫停當(dāng)前執(zhí)行的線程直到其它線程的運(yùn)行解決了這一違例的方法來(lái)阻止漏洞的運(yùn)行。在當(dāng)前線程暫停的過(guò)程中,如果其它線程訪問(wèn)了同一片內(nèi)存,當(dāng)前線程的CFS會(huì)被重新計(jì)算并再一次檢測(cè),如果成功就解除暫停狀態(tài)。在程序運(yùn)行過(guò)程中,依然需要?jiǎng)討B(tài)的維護(hù)recorder變量用以記錄當(dāng)前內(nèi)存的訪問(wèn)情況。[0069]不可否認(rèn)的是,并不是所有的FI違例都可以通過(guò)暫停的辦法來(lái)解決。由于學(xué)習(xí)訓(xùn)練可能是不充分的,唯一合適的指令交錯(cuò)有可能并未在訓(xùn)練學(xué)習(xí)FI的階段出現(xiàn),因而也就無(wú)法被學(xué)習(xí)到。為了保證程序不會(huì)因此出現(xiàn)無(wú)限的死鎖,需要根據(jù)程序的具體情況設(shè)置一個(gè)合理的閾值值。當(dāng)暫停時(shí)間達(dá)到預(yù)設(shè)時(shí)間閾值或暫停次數(shù)達(dá)到預(yù)設(shè)次數(shù)閾值時(shí),暫停狀態(tài)解除。并向開(kāi)發(fā)者報(bào)告這一違例無(wú)法解決。經(jīng)開(kāi)發(fā)者析后,如果造成這一狀況的原因并非漏洞,可以通過(guò)對(duì)FI打補(bǔ)丁的辦法來(lái)放松限制,允許這一指令交錯(cuò)在今后的執(zhí)行。補(bǔ)丁的具體方法也與步驟S103中的“剪去出現(xiàn)幾率低的不變量”的方法類(lèi)似。
[0070]優(yōu)選地,在軟件的實(shí)際運(yùn)行環(huán)節(jié),步驟S105在步驟S104講述的檢測(cè)違例的基礎(chǔ)上,可以作為一種獨(dú)立的防治模式,直接通過(guò)暫停當(dāng)前線程來(lái)解決這一違例的方法來(lái)防治漏洞的發(fā)生,而不需向開(kāi)發(fā)者發(fā)送違例報(bào)告。
[0071]進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,還給出了一種檢測(cè)在普通的運(yùn)行環(huán)境中,暴露多線程漏洞的方法。即:判斷觸發(fā)集是否包含義務(wù)集,如果否,則暫停當(dāng)前運(yùn)行的線程,并生成違例報(bào)告。其中,觸發(fā)集是義務(wù)集的鏡像集合。
[0072]在實(shí)際的運(yùn)行過(guò)程中,單純地通過(guò)前述的步驟去檢測(cè)那些極少出現(xiàn)的漏洞是不太現(xiàn)實(shí)的。在本發(fā)明的一個(gè)實(shí)施例中,根據(jù)FI的定義,如果指令I(lǐng)l屬于指令12的EIS,表示在所有正確運(yùn)行的動(dòng)態(tài)實(shí)例中Il都在12之前執(zhí)行。反之,可能是隱藏的漏洞。
[0073]為了檢測(cè)這樣的性質(zhì),本發(fā)明實(shí)施例的用于發(fā)掘潛在漏洞的方法的實(shí)現(xiàn)步驟如下:
[0074](I)為各個(gè)指令I(lǐng)定義一個(gè)對(duì)應(yīng)的觸發(fā)集Trigger Set (TS (I))。
[0075]數(shù)學(xué)上,TS是E IS的鏡像指令的集合。即,Il屬于12的TS,當(dāng)且僅當(dāng)12屬于Il的 EIS。
[0076](2)從不變量數(shù)據(jù)庫(kù)讀取EIS,并初始化。
[0077](3)動(dòng)態(tài)地計(jì)算各個(gè)指令I(lǐng)的CSF (I)后,判斷下式是否成立:
[0078]TS(I) c EIS(I)
[0079]如果TS(I) £ EIS(I),則當(dāng)前線程將被暫停。這一規(guī)則將會(huì)被持續(xù)測(cè)試,直到條件得
到滿足或達(dá)到相應(yīng)的閾值(應(yīng)當(dāng)設(shè)置得比步驟S105相對(duì)長(zhǎng)一些)。
[0080]由于TS是EIS的反射,EIS所暗含的指令預(yù)定的執(zhí)行順序,在正確的指令交錯(cuò)之中一定會(huì)發(fā)生關(guān)于TS的違例。從而,當(dāng)前線程被發(fā)掘組件暫停,進(jìn)一步加大了兩指令運(yùn)行順序翻轉(zhuǎn)的幾率。但是,如果順序是被代碼使用信號(hào)量之類(lèi)的順序性同步原語(yǔ)保證了的,這一違例會(huì)被持續(xù),直至達(dá)到閾值。
[0081]根據(jù)本發(fā)明實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法,可以自動(dòng)地檢測(cè)以及防止程序中潛在的共享數(shù)據(jù)類(lèi)漏洞,無(wú)需開(kāi)發(fā)者手工注釋?zhuān)覒?yīng)用范圍廣。
[0082]本發(fā)明另一方面的實(shí)施例提出了一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng),如圖3所示,包括:提取模塊100、剪枝模塊200、檢測(cè)模塊300、防治模塊400和發(fā)掘模塊500。
[0083]其中,提取模塊100用于獲取瞬時(shí)Fetter集的包含集和義務(wù)集,并不斷更新包含集和義務(wù)集。剪枝模塊200用于去除包含集和義務(wù)集中置信度低的部分,以獲取剪枝后的結(jié)果。檢測(cè)模塊300用于利用檢測(cè)組件檢測(cè)各個(gè)瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的包含集和義務(wù)集的第一瞬時(shí)Fetter集,如果是,則判斷第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告。防治模塊400用于暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的漏洞的運(yùn)行。發(fā)掘模塊500用于發(fā)掘多線程運(yùn)行指令中隱藏的漏洞。
[0084]具體地,首先為軟件不變量中的各條指令的動(dòng)態(tài)實(shí)例(Dynamic instance of astatic instruction)〗定義一個(gè)瞬時(shí)Fetter集,即CFS (I),其中,軟件不變量是指程序中執(zhí)行順序預(yù)先固定的指令集合。數(shù)學(xué)上CFS (I)是一個(gè)指令的集合,由所有先于I執(zhí)行的指令中,與I相鄰且與I訪問(wèn)了同一內(nèi)存的指令構(gòu)成。如果這種指令的數(shù)量為零,則標(biāo)記為NUL0例如,線程I中的指令I(lǐng)l被稱(chēng)為與線程2中的指令12相鄰,當(dāng)且僅當(dāng)在Il和12的執(zhí)行之間線程I沒(méi)有運(yùn)行任何訪問(wèn)同一片內(nèi)存的指令。
[0085]在提取模塊100中,獲取瞬時(shí)Fetter集的包含集和義務(wù)集,并不斷更新包含集和義務(wù)集。具體地,某條指令I(lǐng)的包含集(Belonging Invariants Set),即BIS (I),是一個(gè)指令的集合,描述這條指令能否被包含于另一條指令的CFS中。它的值等于這條指令的所有動(dòng)態(tài)實(shí)例CFS的并集。如果所有的指令都可以屬于I的CFS,BIS (I)被標(biāo)記為ALL。
[0086]某條指令I(lǐng)的義務(wù)集(Enforcing Invariants Set),即EIS (I),用來(lái)描述這條指令是否必須被包含于另一條指令的CFS中。在數(shù)學(xué)上,它是指這條指令所有動(dòng)態(tài)實(shí)例的CFS的交集。
[0087]在實(shí)際運(yùn)行中,為了在沒(méi)有任何人力標(biāo)注介入的條件下自動(dòng)的獲取FI (FetterInvariants),即瞬時(shí)Fetter集的包含集BIS和義務(wù)集EIS的總和,需要一定數(shù)量的正確運(yùn)行的動(dòng)態(tài)實(shí)例。對(duì)于多線程程序而言,由于多線程程序運(yùn)行的不確定性,甚至對(duì)于同一輸入數(shù)據(jù)的多次運(yùn)行,也了可以被認(rèn)為是不同的運(yùn)行的動(dòng)態(tài)實(shí)例,因此獲取大量的運(yùn)行的動(dòng)態(tài)實(shí)例是比較容易的。常用的系統(tǒng)測(cè)試工具,如CHESS和CTrigge,可以用來(lái)發(fā)掘盡可能全面的運(yùn)行動(dòng)態(tài)實(shí)例。
[0088]在實(shí)現(xiàn)上,通過(guò)跟蹤程序的執(zhí)行來(lái)獲取指令之間順序關(guān)系。具體地,在程序的運(yùn)行期間,提取組件會(huì)為每一組〈線程ID,內(nèi)存地址 > 記錄最后一條執(zhí)行的指令。這個(gè)線程對(duì)此片內(nèi)存的每一次操作都會(huì)更新這個(gè)記錄。通過(guò)這些記錄,可以動(dòng)態(tài)的獲取指令I(lǐng)的動(dòng)態(tài)實(shí)例對(duì)應(yīng)的CFS (I)。得到CFS (I)之后,`進(jìn)行如下操作:
[0089](I)初始化 FI,即 BIS(I)和 EIS (I)。
[0090]具體地,將BIS⑴和EIS⑴分別初始化為0和ALL。
[0091](2)更新FI,具體的操作如下所示:
[0092]BIS(I) — BIS(I) U CFS(I)
[0093]EIS(I) — EIS(I) H CFS(I)
[0094]其中,等式右側(cè)的BIS(I)和EIS(I)是指令I(lǐng)的當(dāng)前動(dòng)態(tài)實(shí)例執(zhí)行前獲取到的FI。
[0095](3)經(jīng)過(guò)上述的學(xué)習(xí)訓(xùn)練后,每條指令I(lǐng)學(xué)習(xí)到的FI會(huì)被存放起來(lái)等待剪枝。
[0096]特別地,在具體地執(zhí)行過(guò)程中,需要?jiǎng)討B(tài)的維護(hù)recorder變量來(lái)記錄當(dāng)前內(nèi)存的訪問(wèn)情況。
[0097]在剪枝模塊200中,由于多線程程序的復(fù)雜性,訓(xùn)練階段的測(cè)試可能是不充分的。即,測(cè)試樣例可能不能覆蓋到所有可能的運(yùn)行路徑。因此,為了解決不充分訓(xùn)練可能帶來(lái)的問(wèn)題,待上述提取模塊100中的程序執(zhí)行完畢后,提取組件將負(fù)責(zé)進(jìn)行剪枝操作,去除FI中置信度不高的部分,剩下的部分即剪枝后的結(jié)果。將剪枝后的結(jié)果存放于不變量數(shù)據(jù)庫(kù)中,等待后續(xù)的操作。[0098]具體地,剪枝的實(shí)現(xiàn)過(guò)程如下:
[0099](I)剪去出現(xiàn)幾率低的軟件不變量。
[0100]一般地,用于學(xué)習(xí)訓(xùn)練用的正確運(yùn)行的動(dòng)態(tài)實(shí)例的數(shù)量至少為10次。因此,可以認(rèn)為,在所有的訓(xùn)練實(shí)例中只出現(xiàn)了一次的不變量的置信度(出現(xiàn)的可能性)是很低的。因此,這些不變量會(huì)從EIS中去除。同樣地,如果BIS中相當(dāng)比例不變量的置信度都不高,就將這條指令的BIS被標(biāo)成ALL。如前所述,ALL表示所有的指令都屬于這條指令的CFS。如果一條指令對(duì)應(yīng)的FI中EIS為空且BIS為ALL,這條指令則可以省略,以節(jié)省內(nèi)存空間。
[0101]具體地,需要依次訪問(wèn)所有獲得的EIS和BIS對(duì),使用一個(gè)map數(shù)據(jù)結(jié)構(gòu)對(duì)這些EIS和BIS對(duì)進(jìn)行計(jì)數(shù)。然后遍歷這個(gè)map,將只出現(xiàn)過(guò)一次的EIS和BIS對(duì)標(biāo)記為不充分,并將其從EIS中去除。最后檢查所有的BIS,計(jì)算其中不充分的指令所占的比例,如果這一比例高于事先設(shè)定的某一閾值,則將其標(biāo)記為ALL。
[0102](2)剪去過(guò)于受歡迎的指令。
[0103]在經(jīng)常被調(diào)用的小函數(shù)中的指令擁有大量的BIS,此時(shí)可以將這些BIS標(biāo)為ALL。
[0104]同樣地,還有處于動(dòng)態(tài)鏈接庫(kù)中的指令,他們的PC數(shù)會(huì)隨著裝載時(shí)的條件而變化,從而獲得很大的BIS。此時(shí),只需檢查所有的BIS,計(jì)算其大小,如果大于預(yù)設(shè)閾值(一般設(shè)為5),則將其標(biāo)記為ALL。
[0105](3)剪去不訪問(wèn)共享變量的指令。
[0106]由于本發(fā)明實(shí)施例的方法處理的是共享數(shù)據(jù)類(lèi)的漏洞,因此將去除不訪問(wèn)共享變量的指令。具體地,不訪問(wèn)共享變量的指令可以通過(guò)程序執(zhí)行過(guò)程中動(dòng)態(tài)維護(hù)的recorder變量獲得,將這些指令從EIS和BIS中刪除即可。
[0107]經(jīng)過(guò)上述剪枝的FI將被存放于不變量數(shù)據(jù)庫(kù)中。
[0108]在檢測(cè)模塊300中,利用檢測(cè)組件檢測(cè)各個(gè)瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的包含集和義務(wù)集的第一瞬時(shí)Fetter集,如果是,則判斷第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告。
[0109]具體實(shí)現(xiàn)過(guò)程如下:
[0110](I)從不變量數(shù)據(jù)庫(kù)中讀取FI,即BIS和EIS,并對(duì)其進(jìn)行初始化。
[0111](2)檢測(cè)組件通過(guò)維護(hù)特定的域來(lái)`動(dòng)態(tài)的計(jì)算每一條指令I(lǐng)動(dòng)態(tài)實(shí)例的CFS (I),并與相應(yīng)的FI進(jìn)行比較。對(duì)于每一條指令,如果監(jiān)測(cè)到運(yùn)行的動(dòng)態(tài)實(shí)例的特性不滿足其對(duì)應(yīng)的FI,則判斷發(fā)生違例,檢測(cè)組件生成違例報(bào)告并發(fā)送給開(kāi)發(fā)者,用于更進(jìn)一步的分析。其中,違例指在運(yùn)行當(dāng)中,不滿足下列條件的狀況:EIS(I) g CFS(I) !Ξ BIS(I)。
[0112]特別地,為了節(jié)省內(nèi)存和時(shí)間,這一操作只對(duì)訪問(wèn)共享變量的指令執(zhí)行。另外,檢測(cè)模塊300也可以用于進(jìn)一步去掉不充分的不變量。經(jīng)分析,造成違例的原因并不是漏洞的那部分違例可以從FI中刪除。即,當(dāng)開(kāi)發(fā)者根據(jù)報(bào)告與對(duì)程序的分析做出當(dāng)前違例并不是漏洞的斷定后,通過(guò)執(zhí)行與剪枝模塊200中的“剪去出現(xiàn)幾率低的不變量”類(lèi)似的方法將這一指令從不變量數(shù)據(jù)庫(kù)中將其剔除。這樣,之后再出現(xiàn)同樣的指令交錯(cuò)時(shí),將不會(huì)再產(chǎn)生疑似漏洞的違例報(bào)告。
[0113]防治模塊400用于暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的漏洞的運(yùn)行。具體地,通過(guò)只允許部分經(jīng)過(guò)測(cè)試的線程間指令交錯(cuò)的運(yùn)行,可以在漏洞實(shí)際暴露之前檢測(cè)到潛在的漏洞,通過(guò)暫停當(dāng)前執(zhí)行的線程直到其它線程的運(yùn)行解決了這一違例的方法來(lái)阻止漏洞的運(yùn)行。在當(dāng)前線程暫停的過(guò)程中,如果其它線程訪問(wèn)了同一片內(nèi)存,當(dāng)前線程的CFS會(huì)被重新計(jì)算并再一次檢測(cè),如果成功就解除暫停狀態(tài)。在程序運(yùn)行過(guò)程中,依然需要?jiǎng)討B(tài)的維護(hù)recorder變量用以記錄當(dāng)前內(nèi)存的訪問(wèn)情況。
[0114]不可否認(rèn)的是,并不是所有的FI違例都可以通過(guò)暫停的辦法來(lái)解決。由于學(xué)習(xí)訓(xùn)練可能是不充分的,唯一合適的指令交錯(cuò)有可能并未在訓(xùn)練學(xué)習(xí)FI的階段出現(xiàn),因而也就無(wú)法被學(xué)習(xí)到。為了保證程序不會(huì)因此無(wú)限的死鎖,需要根據(jù)程序的具體情況設(shè)置一個(gè)合理的閾值。當(dāng)暫停時(shí)間達(dá)到預(yù)設(shè)時(shí)間閾值或暫停次數(shù)達(dá)到預(yù)設(shè)次數(shù)閾值時(shí),暫停狀態(tài)解除。并向開(kāi)發(fā)者報(bào)告這一違例無(wú)法解決。經(jīng)開(kāi)發(fā)者分析后,如果造成這一狀況的原因并非漏洞,可以通過(guò)對(duì)FI打補(bǔ)丁的辦法來(lái)放松限制,允許這一指令交錯(cuò)在今后的執(zhí)行。補(bǔ)丁的具體方法也與剪枝模塊200中的“剪去出現(xiàn)幾率低的不變量”的方法類(lèi)似。
[0115]優(yōu)選地,在軟件的實(shí)際運(yùn)行環(huán)節(jié),防治模塊400與檢測(cè)模塊300是可以相互獨(dú)立運(yùn)行的兩個(gè)模塊。但是,防治模塊400中的違例的檢測(cè)部分與檢測(cè)模塊300中的檢測(cè)方法相同。不同的是,為了阻止違例的發(fā)生,檢測(cè)違例的步驟是先于指令的實(shí)際執(zhí)行之前進(jìn)行且不需向開(kāi)發(fā)者發(fā)送違例報(bào)告。
[0116]在發(fā)掘模塊500中,給出了一種檢測(cè)在普通的運(yùn)行環(huán)境中,暴露多線程漏洞的方法。即:判斷觸發(fā)集是否包含義務(wù)集,如果否,則暫停當(dāng)前運(yùn)行的線程,并生成違例報(bào)告。其中,觸發(fā)集是義務(wù)集的鏡像集合。
[0117]在實(shí)際的運(yùn)行過(guò)程中,單純地通過(guò)前述的系統(tǒng)模塊去檢測(cè)那些極少出現(xiàn)的漏洞是不太現(xiàn)實(shí)的。在本發(fā)明的一個(gè)實(shí)施例中,根據(jù)FI的定義,如果指令I(lǐng)l屬于指令12的EIS,表示在所有正確運(yùn)行 的動(dòng)態(tài)實(shí)例中Il都在12之前執(zhí)行。反之,可能是隱藏的漏洞。
[0118]為了檢測(cè)這樣的性質(zhì),本發(fā)明實(shí)施例的用于發(fā)掘潛在漏洞的發(fā)掘模塊500的主要功能步驟如下:
[0119](I)為各個(gè)指令I(lǐng)定義一個(gè)對(duì)應(yīng)的觸發(fā)集Trigger Set (TS (I))。
[0120]數(shù)學(xué)上,TS是EIS的鏡像指令的集合。即,Il屬于12的TS,當(dāng)且僅當(dāng)12屬于Il的 EIS。
[0121](2)從不變量數(shù)據(jù)庫(kù)讀取EIS,并初始化。
[0122](3)動(dòng)態(tài)地計(jì)算各個(gè)指令I(lǐng)的CSF (I)后,判斷下式是否成立:
[0123]TS(I)CzEIS(I)
[0124]如果TS(I) ^ EIS(I),則當(dāng)前線程將被暫停。這一規(guī)則將會(huì)被持續(xù)測(cè)試,直到條件得
到滿足或達(dá)到相應(yīng)的閾值(應(yīng)當(dāng)設(shè)置得比防治模塊400中相對(duì)長(zhǎng)一些)。
[0125]由于TS是EIS的反射,EIS所暗含的指令預(yù)定的執(zhí)行順序,在正確的指令交錯(cuò)之中一定會(huì)發(fā)生關(guān)于TS的違例。從而,當(dāng)前線程被發(fā)掘組件暫停,進(jìn)一步加大了兩指令運(yùn)行順序翻轉(zhuǎn)的幾率。但是,如果順序是被代碼使用信號(hào)量之類(lèi)的順序性同步原語(yǔ)保證了的,這一違例會(huì)被持續(xù),直至達(dá)到閾值。
[0126]優(yōu)選地,在實(shí)際實(shí)現(xiàn)過(guò)程中,在本發(fā)明實(shí)施例中使用Intel的指令監(jiān)視工具PIN實(shí)現(xiàn)了整個(gè)并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng)。
[0127]根據(jù)本發(fā)明實(shí)施例的并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng),可以自動(dòng)地檢測(cè)以及防止程序中潛在的共享數(shù)據(jù)類(lèi)漏洞,無(wú)需開(kāi)發(fā)者手工注釋?zhuān)覒?yīng)用范圍廣。[0128]在本說(shuō)明書(shū)的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書(shū)中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
[0129]盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。
【權(quán)利要求】
1.一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)方法,其特征在于,包括以下步驟: 為軟件不變量中的各條指令的動(dòng)態(tài)實(shí)例定義瞬時(shí)Fetter集,其中,軟件不變量是指程序中執(zhí)行順序預(yù)先固定的指令集合; 獲取所述瞬時(shí)Fetter集的包含集和義務(wù)集; 將所述包含集和義務(wù)集進(jìn)行剪枝以獲取剪枝后的結(jié)果,并將所述剪枝后的結(jié)果存儲(chǔ)在不變量數(shù)據(jù)庫(kù)中; 利用檢測(cè)組件檢測(cè)各個(gè)所述瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的所述包含集和義務(wù)集的第一瞬時(shí)Fetter集,如果是,則判斷所述第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告;以及 暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的所述漏洞的運(yùn)行。
2.如權(quán)利要求1所述的方法,其特征在于,所述瞬時(shí)Fetter集具體是指:在所有先于所述指令執(zhí)行的指令中,與所述指令相鄰且與所述指令訪問(wèn)了同一內(nèi)存的指令集合。
3.如利要求I所述的方法,其特征在于,所述包含集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的并集; 所述義務(wù)集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的交集。
4.如權(quán)利要求1所述的方法,其特征在于,所述暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的所述漏洞的運(yùn)行,當(dāng)暫停時(shí)間達(dá)到預(yù)設(shè)時(shí)間閾值或暫停次數(shù)達(dá)到預(yù)設(shè)次數(shù)閾值時(shí),暫停狀態(tài)解除。
5.如權(quán)利要求1所述的方法,其特征在于,還包括:判斷觸發(fā)集是否包含于所述義務(wù)集,如果否,則暫 停當(dāng)前運(yùn)行的線程,并生成違例報(bào)告,其中,所述觸發(fā)集是所述義務(wù)集的鏡像集合。
6.一種并行程序共享數(shù)據(jù)類(lèi)漏洞的檢測(cè)系統(tǒng),其特征在于,包括: 提取模塊,用于計(jì)算瞬時(shí)Fetter集的包含集和義務(wù)集,并不斷更新所述包含集和義務(wù)集; 剪枝模塊,用于去除所述包含集和義務(wù)集中置信度低的部分,以獲取剪枝后的結(jié)果; 檢測(cè)模塊,用于利用檢測(cè)組件檢測(cè)各個(gè)所述瞬時(shí)Fetter集是否出現(xiàn)不滿足對(duì)應(yīng)的所述包含集和義務(wù)集的所述第一瞬時(shí)Fetter集,如果是,則判斷所述第一瞬時(shí)Fetter集包含漏洞,檢測(cè)組件生成違例報(bào)告; 防治模塊,用于暫停當(dāng)前運(yùn)行的線程以阻止檢測(cè)到的所述漏洞的運(yùn)行; 發(fā)掘模塊,用于發(fā)掘多線程運(yùn)行指令中隱藏的漏洞。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述瞬時(shí)Fetter集具體是指:在所有先于所述指令執(zhí)行的指令中,與所述指令相鄰且與所述指令訪問(wèn)了同一內(nèi)存的指令集合。
8.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述瞬時(shí)Fetter集的包含集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的并集; 所述瞬時(shí)Fetter集的義務(wù)集是指所述指令的所有動(dòng)態(tài)實(shí)例的所述瞬時(shí)Fetter集的交集。
9.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述防治模塊還用于,當(dāng)暫停時(shí)間達(dá)到預(yù)設(shè)時(shí)間閾值或暫停次數(shù)達(dá)到預(yù)設(shè)次數(shù)閾值時(shí),暫停狀態(tài)解除。
10.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述發(fā)掘模塊還用于,判斷觸發(fā)集是否包含于所述義務(wù)集,如果否,則暫停當(dāng)前運(yùn)行的線程,并向生成違例報(bào)告,其中,所述觸發(fā)集是所述義務(wù)集的鏡像集合 。
【文檔編號(hào)】G06F21/57GK103679038SQ201310659010
【公開(kāi)日】2014年3月26日 申請(qǐng)日期:2013年12月6日 優(yōu)先權(quán)日:2013年12月6日
【發(fā)明者】武永衛(wèi), 陳康, 鄭緯民, 章明星 申請(qǐng)人:清華大學(xué)
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1