專利名稱:基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法,屬于系統(tǒng)安全和網(wǎng)絡(luò)安全相關(guān)領(lǐng)域。本 發(fā)明用于對(duì)運(yùn)行時(shí)程序的安全漏洞的動(dòng)態(tài)修復(fù)與防護(hù)。
技術(shù)背景目前的安全漏洞修復(fù)方法可主要分為兩類,程序補(bǔ)丁和二進(jìn)制程序運(yùn)行時(shí)完全監(jiān)控。程 序補(bǔ)丁方法針對(duì)己經(jīng)出現(xiàn)的漏洞,進(jìn)行人工的安全漏洞分析,發(fā)現(xiàn)導(dǎo)致漏洞發(fā)生的源代碼, 重新改寫該部分的代碼,編譯生成新的可執(zhí)行程序后發(fā)布進(jìn)行測(cè)試。程序補(bǔ)丁方法需要依賴 于漏洞程序的源代碼,這在安全領(lǐng)域幾乎是不可能的,除非軟件生產(chǎn)廠商自身的安全修補(bǔ), 這制約著通用安全公司對(duì)該軟件的有效保護(hù)。同時(shí),人工的安全漏洞分析方法,其響應(yīng)速度 慢,還有可能會(huì)導(dǎo)致新的安全漏洞,并且需要反復(fù)大量的測(cè)試才能公布。整個(gè)發(fā)布周期長(zhǎng), 耗費(fèi)的資源龐大,不利于對(duì)蠕蟲等快速攻擊的防護(hù)。二進(jìn)制程序運(yùn)行時(shí)完全監(jiān)控方法能夠有 效地發(fā)現(xiàn)大量的安全漏洞,但鑒于其完全的執(zhí)行監(jiān)控帶來了大量的運(yùn)行負(fù)載,使得不利于在 正常的工作環(huán)境中使用,特別是那些對(duì)性能要求非常高的環(huán)境更是如此,因?yàn)橥耆亩M(jìn)制 程序運(yùn)行監(jiān)控往往回帶來成倍的性能負(fù)載.。因此,當(dāng)前迫切需要一種新的安全漏洞修復(fù)與防護(hù)方法。該方法不需要被監(jiān)控軟件的源 代碼,能夠?qū)Ω鞣N相關(guān)攻擊的防護(hù)具有較低的誤報(bào)率和漏報(bào)率,并且具有快速反應(yīng)的自動(dòng)化 處理能力,很低的運(yùn)行負(fù)載,不會(huì)影響到程序的正常執(zhí)行。 發(fā)明內(nèi)容有鑒于此,本發(fā)明的目的是提供基于高效、快速的安全漏洞補(bǔ)丁方法。該方法建立在二 進(jìn)制程序的選擇性執(zhí)行監(jiān)控之上,對(duì)安全漏洞相關(guān)的惡意攻擊指令進(jìn)行監(jiān)視,滿足安全漏洞 執(zhí)行補(bǔ)丁的要求,使得漏洞程序的執(zhí)行不會(huì)違反安全行為規(guī)則,限制惡意攻擊的執(zhí)行,并能 保證漏洞程序在惡意攻擊下的正常執(zhí)行。為了達(dá)到上述目的,本發(fā)明提供了一種基于漏洞特征的動(dòng)態(tài)執(zhí)行.補(bǔ)丁方法,其特征在于: 該方法包括了下述組成部件-惡意攻擊檢測(cè)部件采用基于數(shù)據(jù)流分析的惡意攻擊檢測(cè)方法,包括數(shù)據(jù)標(biāo)記模塊,數(shù) 據(jù)追蹤模塊和誤用檢測(cè)模塊。數(shù)據(jù)標(biāo)記模塊記錄所有外來的輸入為感染數(shù)據(jù),數(shù)據(jù)追蹤模塊 標(biāo)記對(duì)感染數(shù)據(jù)進(jìn)行操作的數(shù)據(jù)移動(dòng)指令和數(shù)據(jù)算術(shù)指令,誤用檢測(cè)模塊判斷被感染數(shù)據(jù)的 使用是否違反安全規(guī)則與配置,最后收集并分析與安全漏洞相關(guān)的信息。
執(zhí)行補(bǔ)丁生成部件基于數(shù)據(jù)流分析得到的信息,提取出針對(duì)安全漏洞的感染數(shù)據(jù)傳播 指令和感染數(shù)據(jù)誤用指令。感染數(shù)據(jù)傳播指令記錄從攻擊源開始對(duì)惡意攻擊數(shù)據(jù)的所有操作 行為,而感染數(shù)據(jù)誤用指令則記錄了針對(duì)使用感染數(shù)據(jù)所觸發(fā)的違反安全規(guī)則的指令。虛擬執(zhí)行監(jiān)控部件采用基于代碼切片的虛擬執(zhí)行方法,包括反匯編模塊,基本塊生成 模塊,基木塊緩存模塊,基本塊預(yù)處理模塊,虛擬執(zhí)行模塊和執(zhí)行監(jiān)控模塊。反匯編模塊獲 取二進(jìn)制代碼流的匯編指令,虛擬執(zhí)行模塊執(zhí)行生成的基本塊代碼,執(zhí)行監(jiān)控模塊監(jiān)視與安 全漏洞執(zhí)行補(bǔ)丁相關(guān)的運(yùn)行指令和內(nèi)存訪問情況,并采取相應(yīng)的防護(hù)措施。為了達(dá)到上述目的,本發(fā)明還提供了一種基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法,其特征在 于該方法包括了下述操作步驟歩驟(l),虛擬執(zhí)行監(jiān)控部件啟動(dòng)具有安全漏洞的程序;歩驟(2),外部輸入針對(duì)安全漏洞的樣本攻擊代碼;歩驟(3),惡意攻擊檢測(cè)部件發(fā)現(xiàn)并記錄攻擊代碼在本地的執(zhí)行路徑; 步驟(4),執(zhí)行補(bǔ)丁生成部件根據(jù)執(zhí)行路徑信息產(chǎn)生安全漏洞的執(zhí)行補(bǔ)?。?步驟.(5),將執(zhí)行補(bǔ)丁發(fā)送到虛擬執(zhí)行監(jiān)控部件; 歩驟(6),虛擬執(zhí)行監(jiān)控部件修復(fù)該安全漏洞。總之,本發(fā)明方法的優(yōu)點(diǎn)簡(jiǎn)述如下 一種新的安全漏洞修復(fù)與防護(hù)方法。該方法不需要 被監(jiān)控軟件的源代碼,能夠?qū)Ω鞣N相關(guān)攻擊的防護(hù)具有較低的誤報(bào)率和漏報(bào)率,并且具有快 速反應(yīng)的自動(dòng)化處理能力,很低的運(yùn)行負(fù)載,不會(huì)影響到程序的正常執(zhí)行。
圖1是本發(fā)明用于基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法的流程圖。 圖2是本發(fā)明用于基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法的總體結(jié)構(gòu)框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì) 描述。參見圖1,虛擬執(zhí)行監(jiān)控部件啟動(dòng)被監(jiān)視的二進(jìn)制程序,利用反匯編模塊得到目標(biāo)二進(jìn) 制代碼流的匯編指令。根據(jù)指令的類型將其劃分成不包含有控制轉(zhuǎn)移類指令的基本塊。然后, 虛擬執(zhí)行部件在可控制的范圍內(nèi)執(zhí)行基本塊的指令,最終使得目標(biāo)二進(jìn)制程序所有指令的執(zhí) 行都是在虛擬執(zhí)行監(jiān)控部件的控制下完成的。外部輸入針對(duì)安全漏洞的樣本攻擊代碼,攻擊 代碼將攻擊數(shù)據(jù)發(fā)送到該二進(jìn)制程序。'惡意攻擊檢測(cè)部件發(fā)現(xiàn)并記錄攻擊代碼在本地的執(zhí)行路徑。這其中包含了當(dāng)惡意攻擊樣 本程序?qū)阂夤魯?shù)據(jù)發(fā)送到目標(biāo)二進(jìn)制程序的位置,也就是惡意攻擊數(shù)據(jù)來源位置的定位, 這些都是在惡意攻擊檢測(cè)部件的數(shù)據(jù)標(biāo)記模塊完成的。在隨后的針對(duì)感染數(shù)據(jù)的數(shù)據(jù)移動(dòng)指 令和數(shù)據(jù)算術(shù)指令操作,都由數(shù)據(jù)追蹤模塊完成,這就保持了感染數(shù)據(jù)在目標(biāo)二進(jìn)制程序中 的流程順序和位置,并記錄下所有的相關(guān)信息,以便后期執(zhí)行補(bǔ)丁生成部件利用。當(dāng)感染數(shù) 據(jù)的錯(cuò)誤使用違反了默認(rèn)的安全規(guī)則時(shí),誤用檢測(cè)模塊將發(fā)現(xiàn)該情況,并阻止非法行為的執(zhí) 行。同時(shí),整個(gè)惡意攻擊的數(shù)據(jù)流記錄過程全部完成,生成完全的攻擊執(zhí)行路徑信息。執(zhí)行補(bǔ)丁生成部件根據(jù)執(zhí)行路徑信息產(chǎn)生安全漏洞的執(zhí)行補(bǔ)丁,其中主要包括由數(shù)據(jù)追 蹤模塊記錄的數(shù)據(jù)移動(dòng)指令和數(shù)據(jù)算術(shù)指令,以及最終觸發(fā)安全規(guī)則的危險(xiǎn)行為指令。將執(zhí) 行補(bǔ)丁發(fā)送到虛擬執(zhí)行監(jiān)控部件,虛擬執(zhí)行監(jiān)控部件修復(fù)該安全漏洞。在隨后的執(zhí)行過程中, 如果有新的針對(duì)該漏洞的惡意攻擊發(fā)送,由于其滿足相同的指令路徑而滿足執(zhí)行補(bǔ)丁的描述, 虛擬執(zhí)行監(jiān)控部件將發(fā)現(xiàn)該行為,進(jìn)而采取相應(yīng)措施來阻止惡意攻擊的執(zhí)行。圖2為基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法的總體結(jié)構(gòu)框架。下面將結(jié)合附圖2,具體介 紹本發(fā)明的各個(gè)組成部件 惡意攻擊檢測(cè)部件惡意攻擊檢測(cè)部件的結(jié)構(gòu)組成包括數(shù)據(jù)標(biāo)記模塊,數(shù)據(jù)追蹤模塊和誤用檢測(cè)模塊。當(dāng) 有外部輸入數(shù)據(jù)時(shí),數(shù)據(jù)標(biāo)記模塊記錄所有外來的輸入為感染數(shù)據(jù),并生成感染數(shù)據(jù)結(jié)構(gòu)。 山數(shù)據(jù)追蹤模塊標(biāo)記傳播的被感染數(shù)據(jù),其中包括對(duì)感染數(shù)據(jù)進(jìn)行操作的數(shù)據(jù)移動(dòng)指令和數(shù) 據(jù)算術(shù)指令。誤用檢測(cè)模塊判斷被感染數(shù)據(jù)的使用是否違反安全規(guī)則與配置,最后收集并分 析與安全漏洞相關(guān)的信息。數(shù)據(jù)標(biāo)記模塊將任何來自不安全源頭的輸入數(shù)據(jù)標(biāo)記為被感染數(shù)據(jù)。默認(rèn)認(rèn)為來自網(wǎng)絡(luò) 套接字的輸入是不安全的,因?yàn)閷?duì)大多數(shù)程序來講網(wǎng)絡(luò)是最有可能導(dǎo)致攻擊的因素。作為擴(kuò) 展,也可以將其它不安全的源頭輸入標(biāo)記為被感染數(shù)據(jù),如從某些文件或是輸入設(shè)備輸入的 數(shù)據(jù)。采用影子內(nèi)存技術(shù)對(duì)感染數(shù)據(jù)進(jìn)行標(biāo)記。影子內(nèi)存技術(shù)就是一個(gè)內(nèi)存地址到另一個(gè)內(nèi) 存地址的映射,也就是使用另一個(gè)內(nèi)存地址來標(biāo)記感染數(shù)據(jù)的內(nèi)存地址,而這兩個(gè)內(nèi)存地址 是--一對(duì)應(yīng)的。.寄存器、堆棧都有對(duì)應(yīng)的4字節(jié)影子內(nèi)存,如果該地址是感染的話,那么影 子內(nèi)存將存放一個(gè)感染數(shù)據(jù)結(jié)構(gòu)的指針;如果該地址未被感染,那么影子內(nèi)存將是空指針。 使用類似頁表的結(jié)構(gòu)來保證影子內(nèi)存不會(huì)占用多大空間。這里有提到了感染數(shù)據(jù)結(jié)構(gòu),這不 是感染數(shù)據(jù)本身,而是用于記錄感染數(shù)據(jù)相關(guān)情況的一個(gè)結(jié)構(gòu)體。根據(jù)默認(rèn)的規(guī)則,將檢查 每個(gè)系統(tǒng)調(diào)用的參數(shù)和結(jié)果,也檢査被系統(tǒng)調(diào)用覆蓋的內(nèi)存是否應(yīng)該被標(biāo)記為感染。當(dāng)內(nèi)存 被感染,就生成一個(gè)感染數(shù)據(jù)結(jié)構(gòu),可以記錄下系統(tǒng)調(diào)用數(shù)目、當(dāng)前堆棧的映射和被覆蓋數(shù) 據(jù)的副本。而影子內(nèi)存的地址將保存該結(jié)構(gòu)體的指針。這個(gè)結(jié)構(gòu)體保存的信息以后可以用于 溢出分析、特征碼生成等。如果只是簡(jiǎn)單的標(biāo)記,可以不用生成這個(gè)感染數(shù)據(jù)結(jié)構(gòu),影子內(nèi) 存可以簡(jiǎn)單的存儲(chǔ)一位信息來記錄對(duì)應(yīng)的內(nèi)存是否感染即可。數(shù)據(jù)追蹤模塊為了跟蹤被感染數(shù)據(jù)的傳播,在每個(gè)數(shù)據(jù)移動(dòng)指令或是算術(shù)指令執(zhí)行前作 監(jiān)控,當(dāng)指令的結(jié)果被其中一個(gè)操作數(shù)感染后,會(huì)把結(jié)果的影子內(nèi)存設(shè)置為一個(gè)指針,指向 源被感染操作數(shù)指向的數(shù)據(jù)結(jié)構(gòu)。更佳的,可以新建一個(gè)被感染數(shù)據(jù)結(jié)構(gòu),記錄下相關(guān)的指 令信息,并且指向先前的被感染數(shù)據(jù)結(jié)構(gòu)。當(dāng)檢測(cè)出一個(gè)攻擊,可以根據(jù)這個(gè)被感染數(shù)據(jù)結(jié) 構(gòu)鏈,來檢查被感染數(shù)據(jù)是如何在內(nèi)存中傳播的。當(dāng)然,也可以簡(jiǎn)單的在結(jié)果的影子內(nèi)存標(biāo) 記下是否感染即可,這對(duì)于攻擊的檢測(cè)沒有任何影響,但這將不能為溢出分析提供更多有用 的信息。誤用檢測(cè)模塊正確的標(biāo)記感染數(shù)據(jù),并實(shí)時(shí)的跟蹤感染數(shù)據(jù)的傳播,就能對(duì)攻擊行為進(jìn) 行檢測(cè)。檢查被感染數(shù)據(jù)是否如規(guī)則所定義的被非法使用。默認(rèn)規(guī)則包含對(duì)格式化字符串攻 擊、改變跳轉(zhuǎn)對(duì)象攻擊(如返回地址、函數(shù)指針、函數(shù)指針偏移)的檢測(cè)。當(dāng)檢測(cè)到被感染數(shù) 據(jù)被非法使用,提示可能有攻擊發(fā)生,并調(diào)用漏洞分析部件進(jìn)一歩分析。所述誤用檢測(cè)模塊 的檢測(cè)對(duì)象包括跳轉(zhuǎn)地址、格式化字符串使用、系統(tǒng)調(diào)用參數(shù)等。默認(rèn)將檢查被感染數(shù)據(jù) 是否用于跳轉(zhuǎn)對(duì)象,如返回地址、函數(shù)指針、函數(shù)指針偏移。攻擊者試圖覆蓋這些對(duì)象,使 程序控制流要么轉(zhuǎn)向攻擊者的代碼,要么轉(zhuǎn)到程序的另一個(gè)地方。在每個(gè)控制流轉(zhuǎn)移指令執(zhí) 行前進(jìn)行監(jiān)控,保證跳轉(zhuǎn)對(duì)象不是感染數(shù)據(jù)所在的內(nèi)存地址。默認(rèn)也檢測(cè)感染數(shù)據(jù)是否用于 標(biāo)準(zhǔn)函數(shù)的格式化字符串參數(shù)。攻擊者提供惡意的格式化字符串使程序泄露數(shù)據(jù),或者讓攻 擊者在選定的內(nèi)存寫入選定的值??梢詸z測(cè)被感染數(shù)據(jù)在任何時(shí)候用于格式化字符串,甚至 不包含惡意格式化的情形,這樣可以發(fā)現(xiàn)先前沒有注意到的格式字符串化漏洞。同時(shí),可以 檢測(cè)特殊系統(tǒng)調(diào)用的指定參數(shù)是否被感染,這可以用于檢測(cè)某類攻擊,被覆蓋的數(shù)據(jù)以后用 于系統(tǒng)調(diào)用的參數(shù)。 執(zhí)行補(bǔ)丁生成部件執(zhí)行補(bǔ)丁生成部件的內(nèi)容組成包括感染數(shù)據(jù)傳播指令和感染數(shù)據(jù)誤用指令。利用惡意 攻擊檢測(cè)部件得到的安全漏洞執(zhí)行路徑信息,反向從安全漏洞觸發(fā)點(diǎn)回溯到攻擊的來源。執(zhí) 行補(bǔ)丁中就包含了兩類指令感染數(shù)據(jù)傳播指令和感染數(shù)據(jù)誤用指令。將執(zhí)行補(bǔ)丁中的所有 指令轉(zhuǎn)換為內(nèi)存空間地址,將得到在執(zhí)行過程中需要監(jiān)視的動(dòng)態(tài)內(nèi)存位置。生成的執(zhí)行補(bǔ)丁 將發(fā)送到虛擬執(zhí)行監(jiān)控部件,作為發(fā)現(xiàn)并修改該安全漏洞的規(guī)則。其中,感染數(shù)據(jù)傳播指令 包括數(shù)據(jù)移動(dòng)指令,數(shù)據(jù)算術(shù)指令等。 基本塊生成模塊虛擬執(zhí)行監(jiān)控部件在目標(biāo)代碼流上采用特殊體系的反匯編部件,每次分析一條指令,并 創(chuàng)建相應(yīng)的基本塊。 每個(gè)基本塊以系統(tǒng)指定的特殊指令集結(jié)束,稱為基本塊結(jié)束標(biāo)志,然后由它將控制權(quán)轉(zhuǎn) 移到虛擬執(zhí)行監(jiān)控部件?;緣K結(jié)束標(biāo)志確保被分析的目標(biāo)代碼流始終處于虛擬執(zhí)行系統(tǒng)的 控制之下。當(dāng)一個(gè)基本塊執(zhí)行時(shí),通過基本塊的結(jié)束標(biāo)志在其執(zhí)行完時(shí)獲得控制權(quán),決定創(chuàng) 建新基本塊的目標(biāo)內(nèi)存起始地址,動(dòng)態(tài)創(chuàng)建一個(gè)相應(yīng)的新基本塊,并重新執(zhí)行新建的基本塊。在沒有虛擬執(zhí)行系統(tǒng)的控制下,目標(biāo)代碼流的執(zhí)行將按照其原始正常的執(zhí)行方式運(yùn)行?;緣K生成模塊針對(duì)控制流轉(zhuǎn)換指令采取了特殊處理,以支持自變異/自校驗(yàn)代碼和其它任何形式的迷惑代碼。它不必重編譯目標(biāo)代碼指令流就能很好的工作,完全支持在用戶和內(nèi)核模式下的多線程監(jiān)控,允許根據(jù)需要調(diào)節(jié)細(xì)粒度分析級(jí)別。基本塊結(jié)束標(biāo)志是虛擬執(zhí)行系統(tǒng)終止每個(gè)基本塊的特殊代碼結(jié)構(gòu),它可被抽象成僅有一個(gè)參數(shù)的函數(shù)。該參數(shù)是指向基本塊結(jié)束標(biāo)志的索引,它允許虛擬執(zhí)行系統(tǒng)獲取監(jiān)控代碼流的運(yùn)行時(shí)信息,包含創(chuàng)建新塊需要的目標(biāo)代碼地址。 一個(gè)基本塊結(jié)束標(biāo)志替換終止基本塊控制流的條件或非條件轉(zhuǎn)換指令。在某些情況下,由于達(dá)到預(yù)定的非控制流轉(zhuǎn)換指令數(shù),終止創(chuàng)建基本塊?;緣K預(yù)處理模塊一個(gè)基本塊中可能包含了一條指令,它將控制轉(zhuǎn)移到一個(gè)標(biāo)準(zhǔn)執(zhí)行語義處的代碼流,如 系統(tǒng)調(diào)用、標(biāo)準(zhǔn)庫函數(shù)。局部執(zhí)行這類標(biāo)準(zhǔn)代碼流將導(dǎo)致更多的運(yùn)行延遲,并且在絕大多數(shù) 環(huán)境下運(yùn)行效率是不允許的。虛擬執(zhí)行監(jiān)控部件能夠動(dòng)態(tài)識(shí)別這類標(biāo)準(zhǔn)代碼流,并將它們從代碼切片處理中排除掉, 因此將免去因執(zhí)行一個(gè)操作系統(tǒng)調(diào)用或標(biāo)準(zhǔn)函數(shù)代碼而帶來的延遲。該技術(shù)稱之為標(biāo)準(zhǔn)代碼 忽略。標(biāo)準(zhǔn)代碼忽略技術(shù)同樣能夠用來排除那些在代碼切片過程中,已經(jīng)被分析過的代碼流 部分,以此提高運(yùn)行效率。虛擬執(zhí)行監(jiān)控部件基本塊的執(zhí)行涉及到進(jìn)入/離開虛擬執(zhí)行系統(tǒng)的控制權(quán)轉(zhuǎn)移。這些轉(zhuǎn)移 將導(dǎo)致因系統(tǒng)對(duì)處理器寄存器狀態(tài)的保存和恢復(fù)帶來的延遲。這種情況在代碼流循環(huán)執(zhí)行過 程中特別明顯,因?yàn)槊看窝h(huán)都將調(diào)用虛擬執(zhí)行監(jiān)控部件。系統(tǒng)基本塊組合技術(shù)可以減少因 代碼切片引起的延遲。該技術(shù)將一組基本塊組合成一個(gè)基本塊,避免對(duì)虛擬執(zhí)行監(jiān)控部件的 多次控制轉(zhuǎn)移?;緣K組合技術(shù)是一個(gè)強(qiáng)大的處理機(jī)制,它將產(chǎn)生類似于原始代碼流的基本塊,同時(shí)可 以確保虛擬執(zhí)行監(jiān)控部件對(duì)執(zhí)行代碼流的完全控制,并達(dá)到最小的運(yùn)行延遲。通過用戶定義 的回調(diào)函數(shù)實(shí)現(xiàn)基本塊組合技術(shù),該函數(shù)選擇需要的基本塊進(jìn)行基本塊組合。 虛擬執(zhí)行模塊局部執(zhí)行開始于一個(gè)用戶定義的目標(biāo)代碼流起始點(diǎn),在此稱之為觸發(fā)點(diǎn)。觸發(fā)點(diǎn)是一個(gè)
需要進(jìn)行細(xì)粒度分析的內(nèi)存地址,通常為操作系統(tǒng)調(diào)用或庫函數(shù)地址。虛擬執(zhí)行監(jiān)控部件中 的觸發(fā)點(diǎn)通過動(dòng)態(tài)監(jiān)控部件來定義。只要執(zhí)行到一個(gè)觸發(fā)點(diǎn),就將調(diào)用虛擬執(zhí)行監(jiān)控部件進(jìn) 行細(xì)粒度分析,直到遇到一個(gè)釋放點(diǎn)。釋放點(diǎn)是在目標(biāo)代碼流中,虛擬執(zhí)行監(jiān)控部件放棄監(jiān) 控并讓其代碼流返回到正常執(zhí)行的內(nèi)存地址。觸發(fā)點(diǎn)和對(duì)應(yīng)的釋放點(diǎn)確定了在虛擬執(zhí)行監(jiān)控部件下對(duì)目標(biāo)代碼流細(xì)粒度分析的范圍,同時(shí)也讓其它的代碼流正常執(zhí)行,稱之為選擇性隔 離執(zhí)行。在虛擬執(zhí)行監(jiān)控部件下,可以對(duì)目標(biāo)代碼流指定多個(gè)重疊或非重疊的觸發(fā)點(diǎn)和釋放 點(diǎn)。構(gòu)架系統(tǒng)支持觸發(fā)點(diǎn)和釋放點(diǎn)的嵌套,允許釋放點(diǎn)為無限數(shù)量。在這種情況下,包含目 標(biāo)代碼流的整個(gè)線程都在虛擬執(zhí)行監(jiān)控部件的監(jiān)控下運(yùn)行,直到線程終止或者監(jiān)控系統(tǒng)停止 局部執(zhí)行。虛擬執(zhí)行監(jiān)控部件在忽略目標(biāo)代碼流執(zhí)行優(yōu)先級(jí)的情況下,以無優(yōu)先權(quán)模式運(yùn)行單獨(dú)的 基本塊。這將確保虛擬執(zhí)行監(jiān)控部件對(duì)執(zhí)行的指令有完全的控制權(quán)。虛擬執(zhí)行系統(tǒng)可以監(jiān)視 任何對(duì)指定內(nèi)存區(qū)域的訪問操作系統(tǒng)內(nèi)核、資源和動(dòng)態(tài)鏈接庫等。虛擬執(zhí)行監(jiān)控部件采用 虛擬內(nèi)存機(jī)制,,并結(jié)合內(nèi)存頁屬性處理技術(shù)來監(jiān)控內(nèi)存訪問。在虛擬執(zhí)行監(jiān)控部件中不使用任何特定的操作系統(tǒng)函數(shù)。虛擬執(zhí)行系統(tǒng)使用的反匯編部 件是完全重用的。構(gòu)架系統(tǒng)為每個(gè)線程維持了一個(gè)針對(duì)基本塊結(jié)束標(biāo)志的參數(shù)信息塊,它不 會(huì)破壞執(zhí)行堆棧,這些特性使得虛擬執(zhí)行系統(tǒng)支持多線程環(huán)境。無論基本塊結(jié)束標(biāo)志是否存 在,執(zhí)行線程的寄存器看起來都是沒有差異的。基本塊結(jié)束標(biāo)志支持進(jìn)程或操作系統(tǒng)內(nèi)核的 自動(dòng)線程監(jiān)視,這是一個(gè)自動(dòng)將目標(biāo)進(jìn)程中代碼流切片的特性。因此,通過將指定進(jìn)程創(chuàng)建 API作為初始觸發(fā)點(diǎn),允許虛擬執(zhí)行系統(tǒng)在每個(gè)父進(jìn)程下的新線程或新進(jìn)程處,自動(dòng)插入觸發(fā) 點(diǎn),整個(gè)進(jìn)程環(huán)境都能在基本塊結(jié)束標(biāo)志的控制下運(yùn)行。執(zhí)行監(jiān)控模塊接受來自本地或遠(yuǎn)程主機(jī)的執(zhí)行補(bǔ)丁,然后將該執(zhí)行補(bǔ)丁添加到執(zhí)行監(jiān)控 模塊的規(guī)則庫里面,以此監(jiān)視與安全漏洞執(zhí)行補(bǔ)丁相關(guān)的運(yùn)行指令和內(nèi)存訪問情況,并采取 相應(yīng)的防護(hù)措施。
權(quán)利要求
1、基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法,其特征在于包括如下組成部件惡意攻擊檢測(cè)部件采用基于數(shù)據(jù)流分析的惡意攻擊檢測(cè)方法,包括數(shù)據(jù)標(biāo)記模塊,數(shù)據(jù)追蹤模塊和誤用檢測(cè)模塊。數(shù)據(jù)標(biāo)記模塊記錄所有外來的輸入為感染數(shù)據(jù),數(shù)據(jù)追蹤模塊標(biāo)記對(duì)感染數(shù)據(jù)進(jìn)行操作的數(shù)據(jù)移動(dòng)指令和數(shù)據(jù)算術(shù)指令,誤用檢測(cè)模塊判斷被感染數(shù)據(jù)的使用是否違反安全規(guī)則與配置,最后收集并分析與安全漏洞相關(guān)的信息。執(zhí)行補(bǔ)丁生成部件基于數(shù)據(jù)流分析得到的信息,提取出針對(duì)安全漏洞的感染數(shù)據(jù)傳播指令和感染數(shù)據(jù)誤用指令。感染數(shù)據(jù)傳播指令記錄從攻擊源開始對(duì)惡意攻擊數(shù)據(jù)的所有操作行為,而感染數(shù)據(jù)誤用指令則記錄了針對(duì)使用感染數(shù)據(jù)所觸發(fā)的違反安全規(guī)則的指令。虛擬執(zhí)行監(jiān)控部件采用基于代碼切片的虛擬執(zhí)行方法,包括反匯編模塊,基本塊生成模塊,基本塊緩存模塊,基本塊預(yù)處理模塊,虛擬執(zhí)行模塊和執(zhí)行監(jiān)控模塊。反匯編模塊獲取二進(jìn)制代碼流的匯編指令,虛擬執(zhí)行模塊執(zhí)行生成的基本塊代碼,執(zhí)行監(jiān)控模塊監(jiān)視與安全漏洞執(zhí)行補(bǔ)丁相關(guān)的運(yùn)行指令和內(nèi)存訪問情況,并采取相應(yīng)的防護(hù)措施。
2、 根據(jù)權(quán)利要求1所述的基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法,其特征在于所述惡意攻 擊檢測(cè)部件的結(jié)構(gòu)組成包括數(shù)據(jù)標(biāo)記模塊,數(shù)據(jù)追蹤模塊和誤用檢測(cè)模塊。當(dāng)有外部輸入 數(shù)據(jù)時(shí),數(shù)據(jù)標(biāo)記模塊記錄所有外來的輸入為感染數(shù)據(jù),并生成感染數(shù)據(jù)結(jié)構(gòu)。由數(shù)據(jù)追蹤 模塊標(biāo)記傳播的被感染數(shù)據(jù),其中包括對(duì)感染數(shù)據(jù)進(jìn)行操作的數(shù)據(jù)移動(dòng)指令和數(shù)據(jù)算術(shù)指令。 誤用檢測(cè)模塊判斷被感染數(shù)據(jù)的使用是否違反安全規(guī)則與配置,最后收集并分析與安全漏洞 相關(guān)的信息。
3、 根據(jù)權(quán)利要求1所述的基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法,其特征在于所述執(zhí)行補(bǔ) 丁生成部件的內(nèi)容組成包括感染數(shù)據(jù)傳播指令和感染數(shù)據(jù)誤用指令。利用惡意攻擊檢測(cè)部 件得到的安全漏洞執(zhí)行路徑信息,反向從安全漏洞觸發(fā)點(diǎn)回溯到攻擊的來源。執(zhí)行補(bǔ)丁中就 包含了兩類指令感染數(shù)據(jù)傳播指令和感染數(shù)據(jù)誤用指令。將執(zhí)行補(bǔ)丁中的所有指令轉(zhuǎn)換為 內(nèi)存空間地址,將得到在執(zhí)行過程中需要監(jiān)視的動(dòng)態(tài)內(nèi)存位置。生成的執(zhí)行補(bǔ)丁將發(fā)送到虛 擬執(zhí)行監(jiān)控部件,作為發(fā)現(xiàn)并修改該安全漏洞的規(guī)則。
4、 根據(jù)權(quán)利要求1所述的基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法,其特征在于所述虛擬執(zhí)行監(jiān)控部件的結(jié)構(gòu)組成包括反匯編模塊,基本塊生成模塊,基本塊緩存模塊,基本塊預(yù)處理模塊,虛擬執(zhí)行模塊和執(zhí)行監(jiān)控模塊。虛擬執(zhí)行監(jiān)控部件獲取目標(biāo)二進(jìn)制程序的代碼流,由反匯編模塊生成對(duì)應(yīng)的匯編代碼,逐條分析得到的匯編指令。當(dāng)遇到控制轉(zhuǎn)移指令,或基本塊的累計(jì)指令數(shù)目超出用戶定義的范圍時(shí),'設(shè)置為該基本塊的結(jié)束。反匯編模塊用于動(dòng)態(tài)構(gòu)建與目標(biāo)代碼流相一致的虛擬執(zhí)行基本塊。針對(duì)反匯編模塊生成的不包含控制轉(zhuǎn)移指令的基本塊,為提高運(yùn)行效率進(jìn)行相應(yīng)的執(zhí)行預(yù)處理,并將基本塊存放于內(nèi)部的執(zhí)行緩存內(nèi),最終虛擬執(zhí)行基本塊中的每條指令。執(zhí)行監(jiān)控模塊監(jiān)視與安全漏洞執(zhí)行補(bǔ)丁相關(guān)的運(yùn)行指令和 內(nèi)存訪問情況,包括感染數(shù)據(jù)傳播指令和感染數(shù)據(jù)誤用指令,并采取相應(yīng)的防護(hù)措施。由于 安全漏洞執(zhí)行補(bǔ)丁僅僅包含了很少量的程序指令,這使得對(duì)目標(biāo)程序的安全監(jiān)控只需要很好 的丌銷,大大提高了運(yùn)行的效率和速度。
5、根據(jù)權(quán)利要求1所述的基于漏洞特征的動(dòng)態(tài)執(zhí)行補(bǔ)丁方法,其特征在于歩驟(l),虛擬執(zhí)行監(jiān)控部件啟動(dòng)具有安全漏洞的程序;歩驟(2),外部輸入針對(duì)安全漏洞的樣本攻擊代碼;歩驟(3),惡意攻擊檢測(cè)部件發(fā)現(xiàn)并記錄攻擊代碼在本地的執(zhí)行路徑; 歩驟(4),執(zhí)行補(bǔ)丁生成部件根據(jù)執(zhí)行路徑信息產(chǎn)生安全漏洞的執(zhí)行補(bǔ)丁; 歩驟(5),將執(zhí)行補(bǔ)丁發(fā)送到虛擬執(zhí)行監(jiān)控部件; 歩驟(6),虛擬執(zhí)行監(jiān)控部件修復(fù)該安全漏洞。
全文摘要
本發(fā)明涉及計(jì)算機(jī)安全漏洞的修復(fù)方法。該修復(fù)系統(tǒng)由惡意攻擊檢測(cè)部件、執(zhí)行補(bǔ)丁生成部件和虛擬執(zhí)行監(jiān)控部件組成。該方法是由虛擬執(zhí)行監(jiān)控部件啟動(dòng)被監(jiān)控程序,輸入針對(duì)安全漏洞的樣本攻擊代碼,惡意攻擊檢測(cè)部件發(fā)現(xiàn)并記錄攻擊代碼在本地的執(zhí)行路徑,執(zhí)行補(bǔ)丁生成部件基于執(zhí)行路徑信息產(chǎn)生安全漏洞的執(zhí)行補(bǔ)丁,并發(fā)送給虛擬執(zhí)行監(jiān)控部件,修復(fù)該安全漏洞。本發(fā)明適用于程序運(yùn)行時(shí)安全漏洞的修復(fù)與防護(hù),由此阻止惡意攻擊行為,并保證漏洞程序的正常執(zhí)行。具有不需要源代碼的特點(diǎn),很小的誤報(bào)率和漏報(bào)率,執(zhí)行速度快,并且不需要人工的干預(yù)就能自動(dòng)完成。
文檔編號(hào)G06F21/00GK101154257SQ20071004975
公開日2008年4月2日 申請(qǐng)日期2007年8月14日 優(yōu)先權(quán)日2007年8月14日
發(fā)明者何子昂, 余盛季, 躍 曹, 李毅超, 覃麗芳 申請(qǐng)人:電子科技大學(xué)