專利名稱:一種計(jì)算機(jī)軟件漏洞利用的捕獲方法及系統(tǒng)的制作方法
一種計(jì)算機(jī)軟件漏洞利用的捕獲方法及系統(tǒng)所屬技術(shù)領(lǐng)域
本發(fā)明屬于互聯(lián)網(wǎng)安全技術(shù)領(lǐng)域,具體涉及一種對計(jì)算機(jī)軟件漏洞利用進(jìn)行捕獲的方法及系統(tǒng)。
背景技術(shù):
隨著網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的快速發(fā)展,計(jì)算機(jī)和計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)成為各行各業(yè)的關(guān)鍵技術(shù)之一。與此同時(shí),廣泛存在的計(jì)算機(jī)軟件漏洞成為一個(gè)巨大的威脅。一個(gè)漏洞利用(Vulnerability Exploit),指一段數(shù)據(jù)或者程序,可以使被利用的存在漏洞的軟件完成攻擊者預(yù)先指定的惡意功能,例如使存在漏洞的計(jì)算機(jī)軟件終止,或者使其成為一個(gè)木馬后門等。目前,漏洞利用已經(jīng)成為了一種戰(zhàn)略資源。各國都成立了自己的漏洞庫,比較著名的有美國國家漏洞數(shù)據(jù)庫(National Vulnerability Database),中國國家信息安全漏洞庫(China NationalVulnerability Database of Information Security),國家信息安全漏洞共享平臺(tái),(China NationalVulnerability Database),以及國際著名漏洞庫 CVE(Common Vulnerabilities&Exposures)。這些漏洞庫中收錄了數(shù)萬種漏洞以及它們的利用(Exploit)。
計(jì)算機(jī)軟件漏洞利用和計(jì)算機(jī)軟件漏洞是緊密關(guān)系的,每一個(gè)軟件漏洞利用都對應(yīng)至少一個(gè)軟件漏洞,而一個(gè)軟件漏洞不一定有其利用。換句話說,一個(gè)軟件漏洞是不一定可以被利用的。于是,軟件漏洞發(fā)掘是一種可能獲得軟件漏洞利用的方法。軟件漏洞發(fā)掘已經(jīng)成為了計(jì)算機(jī)安全的研究熱點(diǎn)之一,從分類上可以將其分為靜態(tài)分析、動(dòng)態(tài)分析以及混合分析三類。這些方法可以發(fā)掘出前人不知道的漏洞,也被成為零日漏洞(Oday Vulnerability)。零日漏洞的價(jià)值非常高。退而求其次,在互聯(lián)網(wǎng)上捕獲他人攻擊使用的漏洞利用,亦可獲得漏洞利用。如果在一個(gè)打滿最新補(bǔ)丁的計(jì)算機(jī)上捕獲了一個(gè)攻擊者的漏洞利用,那么就意味著捕獲到了一個(gè)即日的漏洞利用(lday Vulnerability Exploit)。這類漏洞利用有多種用途,例如用來加固計(jì)算機(jī)系統(tǒng)的防御功能,也可再次用于戰(zhàn)略用途等。 于是計(jì)算機(jī)軟件利用捕獲也成為了一項(xiàng)很關(guān)鍵的技術(shù)。使用計(jì)算機(jī)軟件利用捕獲技術(shù),可以“守株待兔”地得到漏洞利用。
漏洞利用捕獲系統(tǒng)是這樣一類系統(tǒng)它由一臺(tái)或若干臺(tái)計(jì)算機(jī)(通常是虛擬機(jī)) 組成,這些計(jì)算機(jī)被接入到互聯(lián)網(wǎng),等待被惡意代碼攻擊,并實(shí)時(shí)記錄下攻擊行為并生成一個(gè)“簽名”,這個(gè)“簽名”可以用來識(shí)別或代表一個(gè)漏洞利用。同時(shí),簽名被存儲(chǔ)下來,用于之后的分析等。
目前已有的軟件漏洞利用捕獲技術(shù)都是基于軟件虛擬機(jī)(Software Virtual Machine),它們可以明確地分為兩類使用污點(diǎn)分析(Taint analysis)的漏洞利用分析, 和用來改進(jìn)計(jì)算機(jī)網(wǎng)絡(luò)入侵檢測系統(tǒng)的網(wǎng)絡(luò)報(bào)文提取系統(tǒng)。第一類技術(shù)以BitBlaze為代表,可見文章“A NewApproach to Computer Security via Binary Analysis, Dawn Song, et al,In Proceedings of the 4thInternational Conference on Information Systems Security, December 2008”。這類技術(shù)的特點(diǎn)是,利用污點(diǎn)傳播原理,從漏洞觸發(fā)點(diǎn)精確回溯到程序輸入中,獲得漏洞利用的全過程,幫助重建漏洞利用。并用形式化的方法生成指紋。這類技術(shù)的不足是,時(shí)間代價(jià)過于龐大,根本無法用于實(shí)際分析,動(dòng)輒一個(gè)漏洞分析就要幾天甚至幾周。一個(gè)具體利用該原理的已經(jīng)投入實(shí)用的漏洞利用捕獲系統(tǒng)是Argos。 第二類方法的代表是在文章“Detecting Targeted Attacks UsingShadow Honeypots, KG Anagnostakis, et al, SSYM' 05 Proceedings of the 14th conference onUSENIX Security Symposium”中被提出的。這類方法使用軟件虛擬機(jī),將軟件漏洞觸發(fā)和當(dāng)時(shí)的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文相關(guān)聯(lián),識(shí)別出哪些網(wǎng)絡(luò)數(shù)據(jù)報(bào)文會(huì)觸發(fā)軟件漏洞,并在計(jì)算機(jī)網(wǎng)絡(luò)的入侵檢測系統(tǒng)中添加這些網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的特征作為指紋,從而使這種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文被過濾掉,不會(huì)再次觸發(fā)計(jì)算機(jī)上的軟件漏洞。該方法的優(yōu)點(diǎn)是可以在一定程度上抵御該漏洞利用的再次利用。缺點(diǎn)是無法獲知該漏洞的詳細(xì)利用原理,并且無法抵御可能存在的變形多態(tài)代碼攻擊。此外,這兩項(xiàng)技術(shù)的共同缺點(diǎn)是,均使用了軟件虛擬機(jī),很容易被攻擊者檢測出,從而不表現(xiàn)出惡意行為,讓這兩種技術(shù)均失效。
硬件虛擬機(jī)技術(shù)是不同于軟件虛擬機(jī)技術(shù)的另一種虛擬機(jī)技術(shù)。使用硬件虛擬機(jī)技術(shù),需要CPU的硬件支持,例如htel公司的htel VT技術(shù)和AMD公司的SVM技術(shù);同時(shí), 還需要在虛擬機(jī)的宿主操作系統(tǒng)上做一些修改,例如增加內(nèi)核模塊,來建立、運(yùn)行和管理硬件虛擬機(jī)。硬件虛擬機(jī)采用真實(shí)執(zhí)行技術(shù),取代了軟件虛擬機(jī)中的指令模擬或者動(dòng)態(tài)翻譯, 在運(yùn)行速度和模擬真實(shí)性上都有巨大的提升。發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)中的問題,提供一種計(jì)算機(jī)軟件漏洞利用的捕獲方法及系統(tǒng),利用在互聯(lián)網(wǎng)上布置的硬件虛擬機(jī)進(jìn)行監(jiān)控,同時(shí)對已經(jīng)攻擊成功或者表現(xiàn)出明顯攻擊特征但未成功的漏洞利用進(jìn)行捕獲,并存儲(chǔ)到數(shù)據(jù)庫中。
為了達(dá)到上述目的,本發(fā)明采用如下技術(shù)方案
一種計(jì)算機(jī)軟件漏洞利用的捕獲方法,其步驟包括
1)在硬件虛擬機(jī)內(nèi)啟動(dòng)待監(jiān)視進(jìn)程;
2)獲得所述進(jìn)程的執(zhí)行序列,并實(shí)時(shí)提取和記錄所述執(zhí)行序列的特征;
3)判定是否存在軟件漏洞利用攻擊或潛在的軟件漏洞利用攻擊,若存在,將所述漏洞利用攻擊觸發(fā)時(shí)記錄的所述執(zhí)行序列的特征作為簽名存儲(chǔ)到數(shù)據(jù)庫中;
4)將所述簽名和所述數(shù)據(jù)庫中已有的簽名進(jìn)行比對,判斷所述軟件漏洞利用攻擊是否為新捕獲的軟件漏洞利用攻擊。
步驟2、所述的執(zhí)行序列是指虛擬機(jī)內(nèi)部受監(jiān)視進(jìn)程中的一個(gè)線程執(zhí)行的指令序列;所述執(zhí)行序列的特征是一個(gè)所述執(zhí)行序列的子序列,由所述執(zhí)行序列中符合下述條件的指令組成在所述執(zhí)行序列中,這條指令與其緊挨著執(zhí)行的下一條指令的EIP值之差 ^ 16。
步驟幻所述的判定,其規(guī)則是如果受監(jiān)視進(jìn)程執(zhí)行了所有當(dāng)時(shí)裝載的可執(zhí)行模塊之外的代碼,則認(rèn)為是攻擊成功并存在一個(gè)軟件漏洞利用攻擊;如果受監(jiān)視進(jìn)程觸發(fā)了系統(tǒng)的崩潰代碼,則認(rèn)為是攻擊成功并存在一個(gè)潛在的漏洞利用攻擊。
一種軟件漏洞利用的捕獲系統(tǒng),適用于上述方法,包括至少一臺(tái)連接互聯(lián)網(wǎng)的宿主計(jì)算機(jī)和一數(shù)據(jù)庫系統(tǒng);
所述宿主計(jì)算機(jī)內(nèi)安裝
至少一個(gè)硬件虛擬機(jī),其內(nèi)運(yùn)行待監(jiān)視進(jìn)程,
控制器,用于控制捕獲軟件漏洞利用的程序,
記錄器,用于獲得所述待監(jiān)視進(jìn)程的執(zhí)行序列,并實(shí)時(shí)提取和記錄所述執(zhí)行序列的特征,以及
分析器,用于判定是否存在軟件漏洞利用攻擊;
所述數(shù)據(jù)庫系統(tǒng)用于保存簽名文件。
進(jìn)一步地,所述硬件虛擬機(jī)上運(yùn)行Windows操作系統(tǒng)。
進(jìn)一步地,所述系統(tǒng)根據(jù)一預(yù)設(shè)時(shí)間間隔,定時(shí)重啟和回滾所述硬件虛擬機(jī);所述時(shí)間間隔可為30分鐘,在30分鐘內(nèi)每分鐘判斷一次是否捕獲軟件漏洞利用攻擊,在30分鐘到時(shí)之后強(qiáng)制回滾虛擬機(jī)。
進(jìn)一步地,所述系統(tǒng)在捕獲到漏洞利用之后回滾所述硬件虛擬機(jī)。
進(jìn)一步地,所述數(shù)據(jù)庫系統(tǒng)安裝于所述宿主計(jì)算機(jī)內(nèi)或所述宿主計(jì)算機(jī)外。
本發(fā)明使用硬件虛擬機(jī)作為受監(jiān)視虛擬機(jī),并采用軟件漏洞利用的捕獲方法來收集軟件漏洞利用對應(yīng)的軟件執(zhí)行序列特征,并存儲(chǔ)到數(shù)據(jù)庫中。該執(zhí)行序列特征可以相當(dāng)準(zhǔn)確的反映程序某線程的執(zhí)行軌跡,也可以很精確的刻畫一個(gè)在一個(gè)軟件漏洞利用下,程序的執(zhí)行軌跡。本方法即用這樣的執(zhí)行序列特征來作為指紋刻畫軟件漏洞利用,將其作為本漏洞利用捕獲方法所捕獲的漏洞利用特征。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和積極效果如下
1)具有非常高的運(yùn)行速度,與傳統(tǒng)的軟件虛擬機(jī)的漏洞利用捕獲相比,本發(fā)明可以在記錄軟件執(zhí)行路徑的同時(shí)與攻擊者進(jìn)行交互,從而獲得更多的被攻擊機(jī)會(huì),提高整個(gè)分析系統(tǒng)效率,這是傳統(tǒng)的軟件虛擬機(jī)漏洞利用捕獲所無法做到的;
2)具有更高的隱蔽性攻擊者更難以檢測出這是一臺(tái)虛擬機(jī)而不是真實(shí)機(jī),從而也能更多的獲得被攻擊機(jī)會(huì);
3)具有更高的捕獲效率使用精確的軟件執(zhí)行序列特征作為指紋,在不丟失精確性的前提下極高的提升了捕獲效率,支持監(jiān)視更多、更龐大的軟件,甚至操作系統(tǒng);
4)能夠兼容更多的受監(jiān)視軟件因?yàn)橐延性S多軟件可以識(shí)別自身是否運(yùn)行在軟件虛擬機(jī)中,而無法檢測到硬件虛擬機(jī)的存在。
圖1為本發(fā)明實(shí)施例的計(jì)算機(jī)軟件漏洞利用的捕獲方法的流程圖。
圖2為本發(fā)明實(shí)施例的指令執(zhí)行序列特征提取示意圖。
圖3為本發(fā)明實(shí)施例的計(jì)算機(jī)軟件漏洞利用的捕獲系統(tǒng)的拓?fù)浣Y(jié)構(gòu)示意圖,其中1.互聯(lián)網(wǎng);2.宿主計(jì)算機(jī);3.硬件層;4.虛擬機(jī)控制器;5.硬件虛擬機(jī);6.分析器; 7.記錄器;8.數(shù)據(jù)庫系統(tǒng)。
圖4為應(yīng)用本發(fā)明實(shí)施例中計(jì)算機(jī)軟件漏洞利用的捕獲系統(tǒng)捕獲漏洞利用的腳本流程圖。
具體實(shí)施方式
下面通過實(shí)施例并結(jié)合附圖,對本發(fā)明做詳細(xì)的說明。
本發(fā)明一實(shí)施例的計(jì)算機(jī)軟件漏洞利用的捕獲方法,其步驟包括
1)在硬件虛擬機(jī)內(nèi)啟動(dòng)待監(jiān)視進(jìn)程;
2)獲得所述進(jìn)程的執(zhí)行序列,并實(shí)時(shí)提取和記錄所述執(zhí)行序列的特征;
3)判定是否存在軟件漏洞利用攻擊或潛在的軟件漏洞利用攻擊,若存在,將所述漏洞利用攻擊觸發(fā)時(shí)記錄的所述執(zhí)行序列的特征作為簽名存儲(chǔ)到數(shù)據(jù)庫中;
4)將所述簽名和所述數(shù)據(jù)庫中已有的簽名進(jìn)行比對,判斷所述軟件漏洞利用攻擊是否為新捕獲的軟件漏洞利用攻擊。
上述步驟2、中,一個(gè)執(zhí)行序列是指虛擬機(jī)內(nèi)部受監(jiān)視進(jìn)程中一個(gè)線程執(zhí)行的指令序列。執(zhí)行序列的特征是一個(gè)執(zhí)行序列的子序列,由原執(zhí)行序列中符合下述條件的指令 (跳轉(zhuǎn)語句Jmp,ret, sysenter等)組成在原始執(zhí)行序列中,這條指令與其緊挨著執(zhí)行的下一條指令的指令指針寄存器(EIP)值之差彡16。由于intel x86體系結(jié)構(gòu)中,常用的最長指令為15字節(jié),所以如果相鄰兩條指令跨越了 16字節(jié)或以上就意味著發(fā)生了一次跳轉(zhuǎn)。 因此16字節(jié)的跨度可以截取到絕大部分跳轉(zhuǎn)(局部小跳轉(zhuǎn)截獲不到,不過這樣的情況非常少)。這樣定義的執(zhí)行序列特征可以相當(dāng)準(zhǔn)確的反映程序某線程的執(zhí)行軌跡,也可以很精確的刻畫一個(gè)在一個(gè)軟件漏洞利用下,程序的執(zhí)行軌跡。本方法即用這樣的執(zhí)行序列特征來作為指紋刻畫軟件漏洞利用。
上述步驟3)中,判定漏洞利用和潛在漏洞利用攻擊的規(guī)則是如果受監(jiān)視進(jìn)程執(zhí)行了在所有當(dāng)時(shí)裝載的可執(zhí)行模塊(exe,dll等)之外的代碼,則認(rèn)為是攻擊成功,存在一個(gè)軟件漏洞利用攻擊;如果受監(jiān)視進(jìn)程觸發(fā)了系統(tǒng)的崩潰代碼,則認(rèn)為是攻擊成功并存在一個(gè)潛在的漏洞利用攻擊。
結(jié)合步驟2、和步驟幻,即可記錄下在發(fā)生軟件漏洞利用攻擊時(shí)程序的執(zhí)行序列特征。這個(gè)特征就作為本漏洞利用捕獲方法所捕獲的漏洞利用特征。
圖1是上述實(shí)施例的計(jì)算機(jī)軟件漏洞利用捕獲方法的具體流程圖。該方法使用硬件虛擬機(jī)提供的編程接口,該接口可以在虛擬機(jī)每次執(zhí)行虛擬機(jī)內(nèi)部指令時(shí)額外執(zhí)行虛擬機(jī)控制器的一些代碼。本發(fā)明的的漏洞利用的捕獲方法即附加在虛擬機(jī)控制器的這一部分代碼中。該方法的漏洞利用捕獲程序在每次指令執(zhí)行消息來臨時(shí)執(zhí)行一次。
虛擬機(jī)提供的接口包括現(xiàn)在執(zhí)行指令的處理器上下文信息,以及解析后的當(dāng)前進(jìn)程ID和線程ID??赡苄枰奶摂M機(jī)來增加獲得當(dāng)前進(jìn)程ID和線程ID的功能,其方法是使用虛擬機(jī)提供的接口讀取虛擬機(jī)內(nèi)部CPU的FS段寄存器,F(xiàn)S段寄存器指向的是線程控制塊,線程控制塊的0x20和OxM偏移位置存儲(chǔ)的就是當(dāng)前線程的PID和TID。然后通過虛擬機(jī)提供的讀取虛擬機(jī)內(nèi)存特定位置值的函數(shù),讀取這兩個(gè)位置的值,然后返回給調(diào)用者ο
下面對圖1所示的流程進(jìn)行詳細(xì)的描述
第一步,判斷是否為新創(chuàng)建的進(jìn)程。如果是則初始化一個(gè)新的進(jìn)程記錄結(jié)構(gòu);否則找出已有的進(jìn)程記錄結(jié)構(gòu)。該進(jìn)程記錄結(jié)構(gòu)記錄了此進(jìn)程的進(jìn)程號、此進(jìn)程每個(gè)線程的執(zhí)行序列特征(初始化為空)、以及該進(jìn)程的模塊列表(初始化為空)。
第二步,判斷是否為一個(gè)新線程。如果是新線程,則像當(dāng)前進(jìn)程記錄結(jié)構(gòu)中插入一個(gè)新的線程記錄結(jié)構(gòu);否則直接使用已有的線程記錄結(jié)構(gòu)。該線程記錄結(jié)構(gòu)記錄當(dāng)前的線程號、當(dāng)前線程隸屬于哪個(gè)進(jìn)程、以及當(dāng)前線程的執(zhí)行序列特征。
第三步,判斷是否為線程ID重用。如果是重用,則需清空此線程對應(yīng)的記錄結(jié)構(gòu), 重新開始記錄。如果不是重用,則不用做任何動(dòng)作;否則需要更新當(dāng)前線程記錄結(jié)構(gòu)中的進(jìn)程號為新此時(shí)的進(jìn)程號。
第四步,判斷是否發(fā)生了漏洞利用攻擊,即EIP值是否落在可執(zhí)行模塊內(nèi)。如果沒有落在可執(zhí)行模塊內(nèi),則可能加載了新的可執(zhí)行模塊。于是此時(shí)就利用虛擬機(jī)提供的接口, 重新獲取可執(zhí)行模塊信息,并再次判斷是否EIP落在可執(zhí)行模塊內(nèi)。如果還是否,那么證明已經(jīng)觸犯了上述關(guān)于漏洞利用判定的規(guī)則,即可報(bào)漏洞利用被檢測到并記錄進(jìn)入數(shù)據(jù)庫, 同時(shí)終止虛擬機(jī),等待回滾和下一次的漏洞利用捕獲。另一方面,如果發(fā)現(xiàn)EIP落在了可執(zhí)行模塊內(nèi),則說明剛才發(fā)生了模塊裝載,此時(shí)更新模塊信息即可。
第五步,建立執(zhí)行序列特征,即判斷是否發(fā)生了跳轉(zhuǎn)(EIP之差大于等于16)。如果是,則將語句信息附加到線程記錄結(jié)構(gòu)的末尾,作為執(zhí)行序列特征的一個(gè)點(diǎn);如果沒有發(fā)生跳轉(zhuǎn),則直接更新當(dāng)前線程記錄結(jié)構(gòu)的最后一條指令為此條指令,方便下次判斷(這樣做的好處是,不用額外設(shè)置一個(gè)地方存儲(chǔ)當(dāng)前尚未決定是不是跳轉(zhuǎn)的語句,直接利用最后一條的空間作為臨時(shí)空間)。圖2為該實(shí)施例中的生成指令執(zhí)行序列特征的示意圖。其中圖2左側(cè)一列代表原始執(zhí)行序列,中間一列是通過上述的判定方法,找出的執(zhí)行序列特征, 右側(cè)一列是將執(zhí)行序列特征抽取出來之后得出的完整的指令執(zhí)行序列特征。
上述步驟都結(jié)束之后,即可將控制權(quán)轉(zhuǎn)移給虛擬機(jī)控制器,繼續(xù)執(zhí)行虛擬機(jī)。
每進(jìn)行一次這樣的循環(huán),虛擬機(jī)內(nèi)的待分析進(jìn)程就執(zhí)行一條機(jī)器指令。虛擬機(jī)并不會(huì)在所有指令上都觸發(fā)這樣的分析機(jī)制,只在待分析進(jìn)程正在被CPU執(zhí)行時(shí)才會(huì)觸發(fā), 這是由虛擬機(jī)自己的機(jī)制可以保證的。
在上述實(shí)施例中,讀取待分析進(jìn)程的可執(zhí)行模塊的功能可通過下面方法實(shí)現(xiàn)
首先從虛擬機(jī)的FS寄存器中讀出FS寄存器的值,在此假設(shè)為fs_base,其指向的內(nèi)存的0x30偏移處為指向進(jìn)程控制塊(PEB)的指針,其結(jié)構(gòu)可參見Windows Internals第五版。用虛擬機(jī)提供的功能,讀出此指針的值,設(shè)為PPEB。用pPEB加上0x0c,即可得到指向LDR鏈表的指針。再用虛擬機(jī)提供的函數(shù)讀出這個(gè)位置的值,得到指向LDR鏈表的指針, 設(shè)為PLDR。這時(shí)pLDR指向的就是一個(gè)模塊信息鏈表的一個(gè)元素,其0x10,0x18,0U8偏移處存儲(chǔ)的是模塊基地址、模塊大小、和模塊名字指針。用虛擬機(jī)提供的函數(shù)分別讀出這三個(gè)位置的值,即可得到模塊的這幾個(gè)信息,保存在當(dāng)前進(jìn)程的進(jìn)程信息塊中。在PLDR的位置是一個(gè)前向鏈表結(jié)構(gòu),直接讀取PLDR的值就可以獲得這個(gè)鏈表的下一項(xiàng),然后重復(fù)這個(gè)過程直到PLDR指針為NULL,即可得到所有的可執(zhí)行模塊信息。
圖3是本發(fā)明一個(gè)實(shí)施例的計(jì)算機(jī)軟件漏洞利用的捕獲系統(tǒng)的拓?fù)浣Y(jié)構(gòu)示意圖。 在該軟件漏洞利用捕獲系統(tǒng)中,存在著一個(gè)或多個(gè)連接互聯(lián)網(wǎng)1的宿主計(jì)算機(jī)2。每個(gè)宿主計(jì)算機(jī)2獨(dú)立工作,是獨(dú)立的個(gè)體。宿主計(jì)算機(jī)2最底層是硬件層3,其上是虛擬機(jī)控制器 4,即虛擬機(jī)軟件,負(fù)責(zé)在開始分析之后,觸發(fā)上述的分析機(jī)制。在虛擬機(jī)控制器之上運(yùn)行著一個(gè)或多個(gè)硬件虛擬機(jī)5,以同時(shí)抓取多個(gè)軟件漏洞利用;以及分析器6和記錄器7,與虛擬機(jī)控制器4之間交互來捕獲漏洞利用。同時(shí),在宿主計(jì)算機(jī)內(nèi)運(yùn)行著數(shù)據(jù)庫系統(tǒng)8,負(fù)責(zé)保存生成的簽名文件。在其它實(shí)施例中,數(shù)據(jù)庫系統(tǒng)8也可以在宿主計(jì)算機(jī)2之外,本發(fā)明并不限于此。上述漏洞利用捕獲系統(tǒng)可以根據(jù)提前設(shè)定的時(shí)間間隔,定時(shí)重啟、回滾虛擬機(jī);也可在捕捉到漏洞利用之后,迅速回滾虛擬機(jī),以方便再次捕捉。
下面以一臺(tái)宿主計(jì)算機(jī)上的一臺(tái)硬件虛擬機(jī)為例,詳細(xì)描述捕獲漏洞利用的過程。
首先,在硬件虛擬機(jī)中運(yùn)行待分析軟件,等待分析軟件持續(xù)在虛擬機(jī)中正常運(yùn)行時(shí),用虛擬機(jī)提供的快照功能保存虛擬機(jī)快照。
然后,執(zhí)行漏洞利用捕獲系統(tǒng)的腳本,其流程如圖4所示。第一步,用回滾的方式, 初始化一個(gè)硬件虛擬機(jī)。這個(gè)硬件虛擬機(jī)狀態(tài)是被提前設(shè)置好的,設(shè)置過程就是在宿主計(jì)算機(jī)上安裝操作系統(tǒng),然后配置待分析環(huán)境,最后運(yùn)行分析程序。在待分析程序進(jìn)入待分析狀態(tài)時(shí),保存虛擬機(jī)狀態(tài)快照。第二步,打開記錄器和分析器,通過虛擬機(jī)管理層,監(jiān)視虛擬機(jī)中待分析程序的執(zhí)行。此記錄器和分析器即實(shí)現(xiàn)了本發(fā)明中的漏洞利用捕獲方法。其中, 記錄器用于記錄執(zhí)行序列的特征,分析器用于判定是否存在漏洞攻擊。然后進(jìn)入一個(gè)時(shí)間判斷循環(huán)。在30分鐘內(nèi)每分鐘判斷一次是不是已經(jīng)有漏洞利用被發(fā)現(xiàn),如果已發(fā)現(xiàn),則證明系統(tǒng)捕捉成功,則可恢復(fù)到初始狀態(tài),繼續(xù)捕捉下一個(gè)漏洞利用。如果否,則再讓虛擬機(jī)持續(xù)運(yùn)行一分鐘。30分鐘到時(shí)之后強(qiáng)制回滾虛擬機(jī),保證虛擬機(jī)運(yùn)行的穩(wěn)定性。
上述實(shí)施例僅是為了說明本發(fā)明的技術(shù)原理,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的同等變化與修改,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種計(jì)算機(jī)軟件漏洞利用的捕獲方法,其步驟包括1)在硬件虛擬機(jī)內(nèi)啟動(dòng)待監(jiān)視進(jìn)程;2)獲得所述進(jìn)程的執(zhí)行序列,并實(shí)時(shí)提取和記錄所述執(zhí)行序列的特征;3)判定是否存在軟件漏洞利用攻擊或潛在的軟件漏洞利用攻擊,若存在,將該漏洞利用攻擊觸發(fā)時(shí)記錄的所述執(zhí)行序列的特征作為簽名存儲(chǔ)到數(shù)據(jù)庫中;4)將所述簽名和所述數(shù)據(jù)庫中已有的簽名進(jìn)行比對,判斷所述軟件漏洞利用攻擊是否為新捕獲的軟件漏洞利用攻擊。
2.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行序列是指虛擬機(jī)內(nèi)部受監(jiān)視進(jìn)程中的一個(gè)線程執(zhí)行的指令序列;所述執(zhí)行序列的特征是一個(gè)所述執(zhí)行序列的子序列,由符合下述條件的指令組成在所述執(zhí)行序列中,這條指令與其下一條指令的EIP值之差> 16。
3.如權(quán)利要求1所述的方法,其特征在于,步驟3)所述判定的規(guī)則是如果受監(jiān)視進(jìn)程執(zhí)行了當(dāng)時(shí)裝載的可執(zhí)行模塊之外的代碼,則認(rèn)為是攻擊成功并存在一軟件漏洞利用攻擊;如果受監(jiān)視進(jìn)程觸發(fā)了系統(tǒng)的崩潰代碼,則認(rèn)為是攻擊成功并存在一潛在的軟件漏洞利用攻擊。
4.如權(quán)利要求1所述的方法,其特征在于,所述方法使用所述硬件虛擬機(jī)提供的編程接口,包括執(zhí)行指令的處理器上下文信息,以及解析后的進(jìn)程ID和線程ID。
5.一種采用如權(quán)利要求1所述方法的軟件漏洞利用的捕獲系統(tǒng),包括至少一臺(tái)連接互聯(lián)網(wǎng)的宿主計(jì)算機(jī)和一數(shù)據(jù)庫系統(tǒng);所述宿主計(jì)算機(jī)內(nèi)安裝至少一個(gè)硬件虛擬機(jī),所述硬件虛擬機(jī)內(nèi)運(yùn)行待監(jiān)視進(jìn)程,控制器,用于控制捕獲軟件漏洞利用的程序,記錄器,用于獲得所述待監(jiān)視進(jìn)程的執(zhí)行序列,并實(shí)時(shí)提取和記錄所述執(zhí)行序列的特征,以及分析器,用于判定是否存在軟件漏洞利用攻擊;所述數(shù)據(jù)庫系統(tǒng)用于保存生成的簽名文件。
6.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述硬件虛擬機(jī)上運(yùn)行Windows操作系統(tǒng)。
7.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述系統(tǒng)根據(jù)一預(yù)設(shè)時(shí)間間隔,定時(shí)重啟和回滾所述硬件虛擬機(jī)。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述時(shí)間間隔為30分鐘。
9.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述系統(tǒng)在捕獲到漏洞利用之后回滾所述硬件虛擬機(jī)。
10.如權(quán)利要求5所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫系統(tǒng)安裝于所述宿主計(jì)算機(jī)內(nèi)或所述宿主計(jì)算機(jī)外。
全文摘要
本發(fā)明提供一種計(jì)算機(jī)軟件漏洞利用的捕獲方法及系統(tǒng)。該方法利用在互聯(lián)網(wǎng)上布置的硬件虛擬機(jī)進(jìn)行監(jiān)控,同時(shí)對已經(jīng)攻擊成功或者表現(xiàn)出明顯攻擊特征但未成功的漏洞利用進(jìn)行捕獲,并存儲(chǔ)到數(shù)據(jù)庫中。該系統(tǒng)適用于上述方法,包括至少一臺(tái)連接互聯(lián)網(wǎng)的宿主計(jì)算機(jī)和一數(shù)據(jù)庫系統(tǒng),所述宿主計(jì)算機(jī)內(nèi)安裝至少一個(gè)硬件虛擬機(jī)、控制器、記錄器和分析器。本發(fā)明的漏洞利用的捕獲方法及系統(tǒng),具有運(yùn)行速度快、隱蔽性好和捕獲效率高的優(yōu)點(diǎn)。
文檔編號G06F21/00GK102521542SQ20111042805
公開日2012年6月27日 申請日期2011年12月19日 優(yōu)先權(quán)日2011年12月19日
發(fā)明者丁羽, 張超, 戴帥夫, 韋韜 申請人:北京大學(xué)