專利名稱:漏洞檢測方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種漏洞檢測方法及裝置。
背景技術(shù):
現(xiàn)有對文檔類漏洞的檢測及解決方案主要是利用殺毒軟件進行查殺,通常殺毒軟 件主要采用的是病毒樣本特征比對的技術(shù),通過獲取病毒樣本來完善病毒特征庫的覆蓋范 圍,采用靜態(tài)分析技術(shù)將病毒文件與病毒樣本庫規(guī)則匹配。首先,這種解決方案具有一定的滯后性,必須是病毒大范圍傳播以后才可以獲得 樣本。對于小范圍傳播、變種、未公開的漏洞(ODAY)則不具備快速收集的條件,這樣就無法 查殺具有上述漏洞的惡意文檔。另外靜態(tài)分析技術(shù)主要依賴于有經(jīng)驗的分析人員花費大量時間去進行反匯編調(diào) 試,跟蹤分析文檔是否包含惡意代碼的攻擊行為,一旦攻擊者在文檔中加入了大量的花指 令、反調(diào)試技術(shù)會導致分析單個文件的時間大大延長。而且靜態(tài)漏洞分析方法依賴于個人 經(jīng)驗,缺少規(guī)范化的機制和流程,所以有非常大的偶然性。并且有可能出現(xiàn)無法分析或者分 析結(jié)果錯誤等問題。綜上所述可以看出,采用現(xiàn)有技術(shù)中的漏洞檢測方法的漏洞分析結(jié)果的準確度較 低,且該方法的使用范圍較小。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種漏洞檢測方法及裝置,以解決現(xiàn)有技術(shù)中的漏洞檢測 結(jié)果的準確度較低,且使用范圍較小問題。其具體方案如下一種漏洞檢測方法,包括選取輸入的文檔數(shù)據(jù);檢測選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼shellcode ;當所述選取的文檔數(shù)據(jù)中具有shellcode時,在預先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行 所述shellcode中的指令;當執(zhí)行所述shellcode中的指令過程中對內(nèi)存進行讀寫操作時,判斷被讀取內(nèi)存 是否滿足預設(shè)內(nèi)存規(guī)則;當所述被讀取內(nèi)存滿足預設(shè)內(nèi)存規(guī)則時,則判定存在漏洞。優(yōu)選的,還包括顯示所述漏洞的信息。優(yōu)選的,還包括替換所述shellcode。優(yōu)選的,所述選取輸入文檔數(shù)據(jù)的過程包括設(shè)定滑動窗口的起始位置為文檔數(shù)據(jù)的起始位置;按照預設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。優(yōu)選的,還包括
判斷所述窗口范圍的末位是否為文檔數(shù)據(jù)的末位,若是,則結(jié)束,若否,則更新 所述滑動窗口的起始位置,執(zhí)行檢測所述被選取的數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode 的過程。優(yōu)選的,所述檢測所述被選取的數(shù)據(jù)中是否具有shellcode的過程包括反匯編所述被選取的數(shù)據(jù);判斷所述反匯編結(jié)果與預先設(shè)定的指令規(guī)則是否匹配,若匹配,則所述被選取數(shù) 據(jù)中具有shellcode,若不匹配,則所述被選取數(shù)據(jù)中不具有shellcode。優(yōu)選的,所述預設(shè)內(nèi)存規(guī)則包括內(nèi)存的地址、長度、匹配次數(shù)和依賴規(guī)則鏈表中 的任意一項或多項的組合。優(yōu)選的,所述內(nèi)存規(guī)則按照樹形結(jié)構(gòu)進行存儲匹配。一種漏洞檢測裝置,包括數(shù)據(jù)選取單元,用于選取輸入的文檔數(shù)據(jù);指令過濾單元,用于檢測所述選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode ;虛擬執(zhí)行單元,用于當所述選取的數(shù)據(jù)中具有shellcode時,在預先設(shè)定的虛擬 CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;內(nèi)存監(jiān)視單元,用于監(jiān)視所述執(zhí)行所述shellcode中的指令過程中是否對內(nèi)存進 行讀寫操作;規(guī)則匹配單元,用于當執(zhí)行所述shellcode過程中對內(nèi)存進行讀寫操作時,判斷 被讀取內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則;漏洞判定單元,用于當所述被讀取內(nèi)存滿足預設(shè)內(nèi)存規(guī)則時,則判定存在漏洞。優(yōu)選的,還包括漏洞信息顯示單元,用于顯示所述漏洞的信息。優(yōu)選的,還包括替換單元,用于替換所述shellcode。優(yōu)選的,所述數(shù)據(jù)選取單元包括起始位置設(shè)定單元,用于設(shè)定滑動窗口的起始位置為文檔數(shù)據(jù)的起始位置;選取單元,用于按照預設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。優(yōu)選的,所述指令過濾單元包括反匯編單元,用于反匯編所述被選取的數(shù)據(jù);指令規(guī)則匹配單元,用于將所述反匯編結(jié)果與預先設(shè)定的指令規(guī)則進行匹配,若 所述反匯編結(jié)果與預先設(shè)定的指令規(guī)則匹配,則所述被選取數(shù)據(jù)中具有shellcode,若不匹 配,則所述被選取數(shù)據(jù)中不具有shellcode。從上述的技術(shù)方案可以看出,本發(fā)明實施例公開的一種漏洞檢測方法,通過在 虛擬環(huán)境下檢測接收的數(shù)據(jù)是否具有利用特定漏洞的代碼shellcode,并對檢測到的 shellcode進行模擬運行,看其運行過程中是否具有與預設(shè)內(nèi)存規(guī)則相匹配的內(nèi)存操作,以 判定是否存在漏洞。從而提高檢測漏洞的完全性,提高了檢測精度,并進一步擴大了應(yīng)用范 圍。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例公開的漏洞檢測方法流程圖;圖2為本發(fā)明實施例公開的內(nèi)存規(guī)則樹形結(jié)構(gòu)示意圖;圖3為本發(fā)明實施例公開的又一漏洞檢測方法流程圖;圖4為本發(fā)明實施例公開的又一漏洞檢測方法流程圖;圖5為本發(fā)明公開的漏洞檢測裝置結(jié)構(gòu)示意圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。本發(fā)明公開了一種漏洞檢測方法,采用在虛擬環(huán)境下檢測接收的數(shù)據(jù)是否具有利 用特定漏洞的代碼shellcode,并對檢測到的shellcode進行模擬運行,看其運行過程中是 否具有與預設(shè)內(nèi)存規(guī)則相匹配的內(nèi)存操作,以判定是否存在漏洞的方法,其具體實現(xiàn)方式 如下所述本發(fā)明實施例公開的一種漏洞檢測方法的流程如圖1所示,包括步驟S11、選取輸入的文檔數(shù)據(jù);從輸入的文檔數(shù)據(jù)中選擇進行檢測的數(shù)據(jù),具體的選取形式可以為利用滑動窗口 操作選取,也可以利用指針進行選取。指針選取形式只適應(yīng)于C或C++之類的語言格式的 數(shù)據(jù),而滑動窗口的形式可以適應(yīng)任何語言格式的數(shù)據(jù)。步驟S12、檢測所述文檔數(shù)據(jù)是否具有shellcode,若是,則執(zhí)行步驟S13,若否,則 結(jié)束;本步驟中可以利用shellcode所具有的一些通用特征來判斷數(shù)據(jù)中是否具有 shellcode,例如,很多的shellcode都帶有循環(huán)自解密指令,則可以通過判斷數(shù)據(jù)中是否 具有循環(huán)自解密指令來判斷是否具有shellcode。例如mo ν ecx, 0x5Cmov esi,0x00401000—continue xor byte ptr [esi+ecx-1],0x01loop_continue上述示例指令是對地址為0x00401000,長度為0x5C的代碼段,按照每字節(jié)與1進
行異或運算。根據(jù)類似的指令,只需要提供相應(yīng)的指令規(guī)則,即可靈活匹配,例如檢測循環(huán)對內(nèi) 存進行異或?qū)懖僮饕?guī)則,其具體的程序如下所示Start (code)While (short)
{exists (xor (varl, var2))}End (code)在上述規(guī)則中,變量varl和var2可以是Mem、Reg、Imm和Any中的一種,其中Mem:表示內(nèi)存操作數(shù)Reg 表示寄存器操作數(shù)Imm:表示立即數(shù)操作數(shù)Any 表示任意類型Exists 為指令存在檢測函數(shù)上述規(guī)則表示匹配一個由短跳轉(zhuǎn)指令產(chǎn)生的一個循環(huán),當在數(shù)據(jù)中的循環(huán)體中發(fā) 現(xiàn)一條xor指令時,則規(guī)則匹配成功,說明數(shù)據(jù)具有shellcode。步驟S13、在預先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;本步驟通過虛擬機來實現(xiàn),通過虛擬機內(nèi)的虛擬CPU實現(xiàn)對指令的模擬執(zhí)行,并 通過虛擬環(huán)境,提供對指令執(zhí)行的環(huán)境支撐。例如,很多shellcode需要獲取PEB (Process Enviroment Block,進程環(huán)境塊)和kernel32. dll的基地址,再獲得一些重要的 API (Application Programming Interface,應(yīng)用程序編程接口)函數(shù)。當指令對kernel32. dl 1的基地址進行訪問的時候,就會被檢測到。步驟S14、判斷執(zhí)行所述shellcode中的指令過程中是否對內(nèi)存進行讀寫操作,若 是,則執(zhí)行步驟S15,若否,則結(jié)束;步驟S15、判斷被讀取內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則,若是,則執(zhí)行步驟S16,若否, 則結(jié)束;所述預設(shè)內(nèi)存規(guī)則可以包括內(nèi)存的地址、長度、匹配次數(shù)和依賴規(guī)則鏈表中的任 意一項或多項的組合。例如,當被讀取的內(nèi)存的地址與預設(shè)內(nèi)存規(guī)則中的內(nèi)存地址相同時, 說明指令執(zhí)行過程中對預先設(shè)定的內(nèi)存地址的內(nèi)存進行了讀取操作,則此shellcode為惡 意代碼,文檔中存在漏洞。內(nèi)存規(guī)則的結(jié)構(gòu)如下Monitor: memory (Address, Length, Operation, Count, DependRule)Address:內(nèi)存地址Length 長度Operation 讀取或?qū)懭隒ount:匹配次數(shù)DependRule 依賴規(guī)則在匹配規(guī)則的過程中,由于shellcode自解密的過程中會對一段連續(xù)內(nèi)存進行寫 操作,所以需要不斷的執(zhí)行循環(huán)操作,因此其與內(nèi)存規(guī)則的匹配次數(shù)也會不斷的改變,可以 根據(jù)此情況,設(shè)定當匹配次數(shù)為某一特定值時,滿足匹配次數(shù)的內(nèi)存規(guī)則,其具體的數(shù)值可 以靈活的設(shè)置。同樣可以通過設(shè)置更多的依賴規(guī)則,來達到縮小目標范圍的效果,使其更精 確的匹配shellcode,降低誤報率。本實施例中的內(nèi)存規(guī)則可以采用樹形結(jié)構(gòu)排列,其結(jié)構(gòu)示意圖如圖2所示,該結(jié)
7構(gòu)中Root為根節(jié)點,每個節(jié)點包含左子樹L和右子樹R,左子樹的規(guī)則依賴于父子樹的規(guī) 則,而右子樹的規(guī)則不依賴父子樹的規(guī)則。進行內(nèi)存規(guī)則匹配的時候,遍歷整個樹,根據(jù)依 賴關(guān)系,即可判斷是否符合內(nèi)存規(guī)則條件。步驟S16、判定存在漏洞。當內(nèi)存規(guī)則被匹配時,表示文檔中存在可執(zhí)行的惡意shellcode,即文檔中存在漏 洞,反之則文檔是安全的。本實施例公開的種漏洞檢測方法對接收的文檔中的數(shù)據(jù)進行檢測,以實現(xiàn)判斷其 是否具有漏洞的目的,其檢測原則為與shellcode對應(yīng)的內(nèi)存匹配原則,從而使得該檢測 方法可以適用于任何一種shellcode,可以對新的、未知的新shellcode具有相同的檢測能 力。對于大量shellcode樣本的的分析具有通用性,提高了檢測精度,擴大了適用范圍。本發(fā)明實施例公開的又一漏洞檢測方法流程如圖3所示,包括步驟S31、選取輸入的文檔數(shù)據(jù);步驟S32、檢測選取的文檔數(shù)據(jù)中是否具shellcode,若是,則執(zhí)行步驟S33,若否, 則結(jié)束;步驟S33、在預先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;步驟S34、判斷執(zhí)行所述shellcode中的指令過程中是否對內(nèi)存進行讀寫操作,若 是,則執(zhí)行步驟S35,若否,則結(jié)束;步驟S35、判斷被讀取內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則,若是,則執(zhí)行步驟S36,若否, 則結(jié)束;步驟S36、判定存在漏洞;步驟S37、顯示所述漏洞的信息;將所述漏洞信息進行顯示,以便于對漏洞進行分析。步驟S38、替換所述 shellcode。通過檢測獲得內(nèi)存地址Address,與之對應(yīng)的文件偏移地址Offset,shellcode長 度Length等信息,然后將Offset到Offset+Length這段內(nèi)容用新的shellcode填充,即可 達到替換shellcode內(nèi)容。根據(jù)填充的內(nèi)容不同,替換后shellcode可以實現(xiàn)恢復文檔的 正常功能。本發(fā)明實施例公開的又一漏洞檢測流程如圖4所示,包括步驟S41、設(shè)定滑動窗口的起始位置為文檔數(shù)據(jù)的起始位置;步驟S42、按照預設(shè)窗口范圍依次選取所述文檔數(shù)據(jù);具體的窗口范圍可以根據(jù)實際情況設(shè)定,可以為lk,也可以為2k。選取的范圍越 大,檢測的時間就越短,檢測速度就越快。選取的范圍越小,檢測的精度就越高,可以根據(jù)具 體應(yīng)用場景進行設(shè)定。步驟S43、反匯編所述被選取的數(shù)據(jù);將被選取的數(shù)據(jù)反匯編為匯編語言格式的數(shù)據(jù)。步驟S44、判斷所述反匯編結(jié)果與預先設(shè)定的指令規(guī)則是否匹配,若匹配,則執(zhí)行 步驟S45a,若不匹配,則執(zhí)行步驟S45b ;本步驟中的預先設(shè)定的指令規(guī)則為,數(shù)據(jù)的循環(huán)體具有xor指令。步驟S45a、判定所述被選取數(shù)據(jù)中具有shellcode,執(zhí)行步驟S46a ;
步驟S45b、判斷所述窗口范圍的末位是否為文檔數(shù)據(jù)的末位,若否,則執(zhí)行步驟 S46b,若是,則結(jié)束;步驟S46a、在預先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的當前待執(zhí)行指 令,執(zhí)行步驟S47;Shellcode中可能會包含多個執(zhí)行指令,分別對這些指令進行模擬執(zhí)行。步驟S46b、更新所述滑動窗口的起始位置,返回執(zhí)行步驟S42 ;步驟S47、判斷執(zhí)行所述當前待執(zhí)行指令過程中是否對內(nèi)存進行讀寫操作,若是則 執(zhí)行步驟S48a,若否,則執(zhí)行步驟S48b ;步驟S48a、判斷所述被讀取內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則,若是,則執(zhí)行步驟S49a, 若否,則返回執(zhí)行步驟S48b;本實施例中所述的預設(shè)內(nèi)存規(guī)則的判斷過程為依次判斷被操作內(nèi)存的地址、長 度、匹配次數(shù)和依賴規(guī)則鏈表的數(shù)據(jù)是否與預先設(shè)定的內(nèi)存規(guī)則相匹配,雖然匹配規(guī)則的 內(nèi)容較多,檢測時間較長,但是會大大提高檢測精度,避免漏檢的情況出現(xiàn)。步驟S48b、判斷當前待執(zhí)行指令是否為選取數(shù)據(jù)中的shellcode內(nèi)的最后一條指 令,若否,則執(zhí)行步驟S49b,若是,則返回執(zhí)行步驟S45b ;步驟S49a、判定存在漏洞;步驟S49b、選取下一條指令作為當前待執(zhí)行指令,返回步驟S46a ;步驟S410、顯示所述漏洞的信息;將所述漏洞信息進行顯示,以便于對漏洞進行分析。本實施例中同樣也可增加替換shellcode的過程。本實施例公開的漏洞檢測方法中,采用利用窗口選取被檢測數(shù)據(jù)的方式,利用循 環(huán)選取的步驟實現(xiàn)對被檢測數(shù)據(jù)的選取及檢測,簡化了處理流程,提高了處理效率。本發(fā)明進一步公開了一種漏洞檢測裝置,其結(jié)構(gòu)如圖5所示,包括數(shù)據(jù)選取單元 51、指令過濾單元52、虛擬執(zhí)行單元53、內(nèi)存監(jiān)視單元54、規(guī)則匹配單元55和漏洞判定單元 56,其中數(shù)據(jù)選取單元51用于選取輸入的文檔數(shù)據(jù);指令過濾單元52用于檢測選取的文 檔數(shù)據(jù)中是否具有利用特定漏洞的代碼shellcode ;虛擬執(zhí)行單元53用于當所述數(shù)據(jù)中具 有she 11 code時,在預先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;內(nèi)存監(jiān)視單 元54用于監(jiān)視所述執(zhí)行所述shellcode中的指令過程中是否對內(nèi)存進行讀寫操作;規(guī)則匹 配單元55用于當執(zhí)行所述shellcode中的指令過程中對內(nèi)存進行讀寫操作時,判斷被讀取 內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則;漏洞判定單元56用于當所述被讀取內(nèi)存滿足預設(shè)內(nèi)存規(guī)則 時,則判定存在漏洞。進一步的,該裝置還包括漏洞信息顯示單元57,用于顯示所述漏洞的信息;替換 單元58,用于替換所述shellcode。其中,所述的虛擬執(zhí)行單元53可以由虛擬機實現(xiàn),所述內(nèi)存監(jiān)視單元54可以由內(nèi) 存監(jiān)視引擎實現(xiàn)。進一步的,所述數(shù)據(jù)選取單元51包括起始位置設(shè)定單元511,用于設(shè)定滑動窗口 的起始位置為文檔數(shù)據(jù)的起始位置;選取單元512,用于按照預設(shè)窗口范圍依次選取所述 文檔數(shù)據(jù)。
所述指令過濾單元52包括反匯編單元521,用于反匯編所述被選取的數(shù)據(jù);指令 規(guī)則匹配單元522,用于將所述反匯編結(jié)果與預先設(shè)定的指令規(guī)則進行匹配,若所述反匯編 結(jié)果與預先設(shè)定的指令規(guī)則匹配,則所述被選取數(shù)據(jù)中具有shellcode,若不匹配,則所述 被選取數(shù)據(jù)中不具有shellcode。本裝置中各個單元執(zhí)行具體操作的過程如下所述首先通過起始位置設(shè)定單元設(shè)定窗口的起始位置為文檔數(shù)據(jù)的起始位置,然后, 選取單元按照預先設(shè)定的窗口范圍選取窗口范圍內(nèi)的文檔數(shù)據(jù),反匯編單元將窗口范圍內(nèi) 的數(shù)據(jù)進行反匯編得到被選取數(shù)據(jù)對應(yīng)的匯編語言代碼,指令規(guī)則匹配單元對匯編語言代 碼進行規(guī)則匹配,檢測其中是否具有shellcode,如果具有,則將該匯編語言代碼輸入到虛 擬執(zhí)行單元進行虛擬執(zhí)行,內(nèi)存監(jiān)測單元監(jiān)測整個執(zhí)行過程中是否出現(xiàn)對內(nèi)存的讀取操 作,如果出現(xiàn),則規(guī)則匹配單元將被操作的內(nèi)存與預先設(shè)定的內(nèi)存規(guī)則進行匹配,若相同, 則漏洞判定單元判定該文檔中存在漏洞。后續(xù),可利用漏洞信息顯示單元將漏洞信息進行 顯示,以便于后續(xù)研究分析。同樣可以利用替換單元,替換掉文檔中的shellcode,以保證文 檔則正常使用。本實施例中可將數(shù)據(jù)選取單元、指令過濾單元、內(nèi)存監(jiān)視單元、規(guī)則匹配單元和漏 洞判定單元同時集成在虛擬機上實現(xiàn),也可以將其采用分體化設(shè)計實現(xiàn)。在此并不限定其 具體實現(xiàn)形式。本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他 實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置 而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說 明即可。專業(yè)人員還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元 及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和 軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些 功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè) 技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng) 認為超出本發(fā)明的范圍。結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí) 行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存 儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù) 領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。 對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的 一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明 將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一 致的最寬的范圍。
10
權(quán)利要求
一種漏洞檢測方法,其特征在于,包括選取輸入的文檔數(shù)據(jù);檢測選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼shellcode;當所述選取的文檔數(shù)據(jù)中具有shellcode時,在預先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;當執(zhí)行所述shellcode中的指令過程中對內(nèi)存進行讀寫操作時,判斷被讀取內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則;當所述被讀取內(nèi)存滿足預設(shè)內(nèi)存規(guī)則時,則判定存在漏洞。
2.根據(jù)要求1所述的方法,其特征在于,還包括 顯示所述漏洞的信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括 替換所述shellcode。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述選取輸入文檔數(shù)據(jù)的過程包括 設(shè)定滑動窗口的起始位置為文檔數(shù)據(jù)的起始位置;按照預設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,還包括判斷所述窗口范圍的末位是否為文檔數(shù)據(jù)的末位,若是,則結(jié)束,若否,則更新所 述滑動窗口的起始位置,執(zhí)行檢測所述被選取的數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode 的過程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述檢測所述被選取的數(shù)據(jù)中是否具有 shellcode的過程包括反匯編所述被選取的數(shù)據(jù);判斷所述反匯編結(jié)果與預先設(shè)定的指令規(guī)則是否匹配,若匹配,則所述被選取數(shù)據(jù)中 具有shellcode,若不匹配,則所述被選取數(shù)據(jù)中不具有shellcode。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述預設(shè)內(nèi)存規(guī)則包括內(nèi)存的地址、長 度、匹配次數(shù)和依賴規(guī)則鏈表中的任意一項或多項的組合。
8.根據(jù)權(quán)利要求7述的方法,其特征在于,所述內(nèi)存規(guī)則按照樹形結(jié)構(gòu)進行存儲匹配。
9.一種漏洞檢測裝置,其特征在于,包括 數(shù)據(jù)選取單元,用于選取輸入的文檔數(shù)據(jù);指令過濾單元,用于檢測選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode ;虛擬執(zhí)行單元,用于當所述選取的數(shù)據(jù)中具有shellcode時,在預先設(shè)定的虛擬CPU環(huán) 境內(nèi)執(zhí)行所述shellcode中的指令;內(nèi)存監(jiān)視單元,用于監(jiān)視所述執(zhí)行所述shellcode中的指令過程中是否對內(nèi)存進行讀 寫操作;規(guī)則匹配單元,用于當執(zhí)行所述shellcode過程中對內(nèi)存進行讀寫操作時,判斷被讀 取內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則;漏洞判定單元,用于當所述被讀取內(nèi)存滿足預設(shè)內(nèi)存規(guī)則時,則判定存在漏洞。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括漏洞信息顯示單元,用于顯示所述漏洞的信息。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,還包括 替換單元,用于替換所述shelIcode。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述數(shù)據(jù)選取單元包括 起始位置設(shè)定單元,用于設(shè)定滑動窗口的起始位置為文檔數(shù)據(jù)的起始位置; 選取單元,用于按照預設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述指令過濾單元包括 反匯編單元,用于反匯編所述被選取的數(shù)據(jù);指令規(guī)則匹配單元,用于將所述反匯編結(jié)果與預先設(shè)定的指令規(guī)則進行匹配,若所述 反匯編結(jié)果與預先設(shè)定的指令規(guī)則匹配,則所述被選取數(shù)據(jù)中具有shellcode,若不匹配, 則所述被選取數(shù)據(jù)中不具有shellcode。
全文摘要
本發(fā)明公開了一種漏洞檢測方法及裝置,包括選取輸入的文檔數(shù)據(jù);檢測文檔數(shù)據(jù)中是否具有shellcode;當數(shù)據(jù)中具有shellcode時,在虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;當執(zhí)行shellcode中的指令過程中對內(nèi)存進行讀寫操作時,判斷被讀取內(nèi)存是否滿足預設(shè)內(nèi)存規(guī)則;當被讀取內(nèi)存滿足內(nèi)存規(guī)則時,則判定存在漏洞。本發(fā)明采用在虛擬環(huán)境下檢測接收的數(shù)據(jù)是否具有利用特定漏洞的代碼shellcode,并對檢測到的shellcode進行模擬運行,看其運行過程中是否具有與預設(shè)內(nèi)存規(guī)則相匹配的內(nèi)存操作,以判定是否存在漏洞的方法,提高檢測漏洞的完全性,提高了檢測精度,并進一步擴大了應(yīng)用范圍。
文檔編號G06F21/00GK101964036SQ201010526718
公開日2011年2月2日 申請日期2010年10月29日 優(yōu)先權(quán)日2010年10月29日
發(fā)明者李科 申請人:北京椒圖科技有限公司