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

漏洞檢測(cè)方法及裝置的制作方法

文檔序號(hào):6334774閱讀:218來(lái)源:國(guó)知局
專(zhuān)利名稱:漏洞檢測(cè)方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種漏洞檢測(cè)方法及裝置。
背景技術(shù)
現(xiàn)有對(duì)文檔類(lèi)漏洞的檢測(cè)及解決方案主要是利用殺毒軟件進(jìn)行查殺,通常殺毒軟 件主要采用的是病毒樣本特征比對(duì)的技術(shù),通過(guò)獲取病毒樣本來(lái)完善病毒特征庫(kù)的覆蓋范 圍,采用靜態(tài)分析技術(shù)將病毒文件與病毒樣本庫(kù)規(guī)則匹配。首先,這種解決方案具有一定的滯后性,必須是病毒大范圍傳播以后才可以獲得 樣本。對(duì)于小范圍傳播、變種、未公開(kāi)的漏洞(ODAY)則不具備快速收集的條件,這樣就無(wú)法 查殺具有上述漏洞的惡意文檔。另外靜態(tài)分析技術(shù)主要依賴于有經(jīng)驗(yàn)的分析人員花費(fèi)大量時(shí)間去進(jìn)行反匯編調(diào) 試,跟蹤分析文檔是否包含惡意代碼的攻擊行為,一旦攻擊者在文檔中加入了大量的花指 令、反調(diào)試技術(shù)會(huì)導(dǎo)致分析單個(gè)文件的時(shí)間大大延長(zhǎng)。而且靜態(tài)漏洞分析方法依賴于個(gè)人 經(jīng)驗(yàn),缺少規(guī)范化的機(jī)制和流程,所以有非常大的偶然性。并且有可能出現(xiàn)無(wú)法分析或者分 析結(jié)果錯(cuò)誤等問(wèn)題。綜上所述可以看出,采用現(xiàn)有技術(shù)中的漏洞檢測(cè)方法的漏洞分析結(jié)果的準(zhǔn)確度較 低,且該方法的使用范圍較小。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種漏洞檢測(cè)方法及裝置,以解決現(xiàn)有技術(shù)中的漏洞檢測(cè) 結(jié)果的準(zhǔn)確度較低,且使用范圍較小問(wèn)題。其具體方案如下一種漏洞檢測(cè)方法,包括選取輸入的文檔數(shù)據(jù);檢測(cè)選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼shellcode ;當(dāng)所述選取的文檔數(shù)據(jù)中具有shellcode時(shí),在預(yù)先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行 所述shellcode中的指令;當(dāng)執(zhí)行所述shellcode中的指令過(guò)程中對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作時(shí),判斷被讀取內(nèi)存 是否滿足預(yù)設(shè)內(nèi)存規(guī)則;當(dāng)所述被讀取內(nèi)存滿足預(yù)設(shè)內(nèi)存規(guī)則時(shí),則判定存在漏洞。優(yōu)選的,還包括顯示所述漏洞的信息。優(yōu)選的,還包括替換所述shellcode。優(yōu)選的,所述選取輸入文檔數(shù)據(jù)的過(guò)程包括設(shè)定滑動(dòng)窗口的起始位置為文檔數(shù)據(jù)的起始位置;按照預(yù)設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。優(yōu)選的,還包括
判斷所述窗口范圍的末位是否為文檔數(shù)據(jù)的末位,若是,則結(jié)束,若否,則更新 所述滑動(dòng)窗口的起始位置,執(zhí)行檢測(cè)所述被選取的數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode 的過(guò)程。優(yōu)選的,所述檢測(cè)所述被選取的數(shù)據(jù)中是否具有shellcode的過(guò)程包括反匯編所述被選取的數(shù)據(jù);判斷所述反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則是否匹配,若匹配,則所述被選取數(shù) 據(jù)中具有shellcode,若不匹配,則所述被選取數(shù)據(jù)中不具有shellcode。優(yōu)選的,所述預(yù)設(shè)內(nèi)存規(guī)則包括內(nèi)存的地址、長(zhǎng)度、匹配次數(shù)和依賴規(guī)則鏈表中 的任意一項(xiàng)或多項(xiàng)的組合。優(yōu)選的,所述內(nèi)存規(guī)則按照樹(shù)形結(jié)構(gòu)進(jìn)行存儲(chǔ)匹配。一種漏洞檢測(cè)裝置,包括數(shù)據(jù)選取單元,用于選取輸入的文檔數(shù)據(jù);指令過(guò)濾單元,用于檢測(cè)所述選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode ;虛擬執(zhí)行單元,用于當(dāng)所述選取的數(shù)據(jù)中具有shellcode時(shí),在預(yù)先設(shè)定的虛擬 CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;內(nèi)存監(jiān)視單元,用于監(jiān)視所述執(zhí)行所述shellcode中的指令過(guò)程中是否對(duì)內(nèi)存進(jìn) 行讀寫(xiě)操作;規(guī)則匹配單元,用于當(dāng)執(zhí)行所述shellcode過(guò)程中對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作時(shí),判斷 被讀取內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則;漏洞判定單元,用于當(dāng)所述被讀取內(nèi)存滿足預(yù)設(shè)內(nèi)存規(guī)則時(shí),則判定存在漏洞。優(yōu)選的,還包括漏洞信息顯示單元,用于顯示所述漏洞的信息。優(yōu)選的,還包括替換單元,用于替換所述shellcode。優(yōu)選的,所述數(shù)據(jù)選取單元包括起始位置設(shè)定單元,用于設(shè)定滑動(dòng)窗口的起始位置為文檔數(shù)據(jù)的起始位置;選取單元,用于按照預(yù)設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。優(yōu)選的,所述指令過(guò)濾單元包括反匯編單元,用于反匯編所述被選取的數(shù)據(jù);指令規(guī)則匹配單元,用于將所述反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則進(jìn)行匹配,若 所述反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則匹配,則所述被選取數(shù)據(jù)中具有shellcode,若不匹 配,則所述被選取數(shù)據(jù)中不具有shellcode。從上述的技術(shù)方案可以看出,本發(fā)明實(shí)施例公開(kāi)的一種漏洞檢測(cè)方法,通過(guò)在 虛擬環(huán)境下檢測(cè)接收的數(shù)據(jù)是否具有利用特定漏洞的代碼shellcode,并對(duì)檢測(cè)到的 shellcode進(jìn)行模擬運(yùn)行,看其運(yùn)行過(guò)程中是否具有與預(yù)設(shè)內(nèi)存規(guī)則相匹配的內(nèi)存操作,以 判定是否存在漏洞。從而提高檢測(cè)漏洞的完全性,提高了檢測(cè)精度,并進(jìn)一步擴(kuò)大了應(yīng)用范 圍。


為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例公開(kāi)的漏洞檢測(cè)方法流程圖;圖2為本發(fā)明實(shí)施例公開(kāi)的內(nèi)存規(guī)則樹(shù)形結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例公開(kāi)的又一漏洞檢測(cè)方法流程圖;圖4為本發(fā)明實(shí)施例公開(kāi)的又一漏洞檢測(cè)方法流程圖;圖5為本發(fā)明公開(kāi)的漏洞檢測(cè)裝置結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明公開(kāi)了一種漏洞檢測(cè)方法,采用在虛擬環(huán)境下檢測(cè)接收的數(shù)據(jù)是否具有利 用特定漏洞的代碼shellcode,并對(duì)檢測(cè)到的shellcode進(jìn)行模擬運(yùn)行,看其運(yùn)行過(guò)程中是 否具有與預(yù)設(shè)內(nèi)存規(guī)則相匹配的內(nèi)存操作,以判定是否存在漏洞的方法,其具體實(shí)現(xiàn)方式 如下所述本發(fā)明實(shí)施例公開(kāi)的一種漏洞檢測(cè)方法的流程如圖1所示,包括步驟S11、選取輸入的文檔數(shù)據(jù);從輸入的文檔數(shù)據(jù)中選擇進(jìn)行檢測(cè)的數(shù)據(jù),具體的選取形式可以為利用滑動(dòng)窗口 操作選取,也可以利用指針進(jìn)行選取。指針選取形式只適應(yīng)于C或C++之類(lèi)的語(yǔ)言格式的 數(shù)據(jù),而滑動(dòng)窗口的形式可以適應(yīng)任何語(yǔ)言格式的數(shù)據(jù)。步驟S12、檢測(cè)所述文檔數(shù)據(jù)是否具有shellcode,若是,則執(zhí)行步驟S13,若否,則 結(jié)束;本步驟中可以利用shellcode所具有的一些通用特征來(lái)判斷數(shù)據(jù)中是否具有 shellcode,例如,很多的shellcode都帶有循環(huán)自解密指令,則可以通過(guò)判斷數(shù)據(jù)中是否 具有循環(huán)自解密指令來(lái)判斷是否具有shellcode。例如mo ν ecx, 0x5Cmov esi,0x00401000—continue xor byte ptr [esi+ecx-1],0x01loop_continue上述示例指令是對(duì)地址為0x00401000,長(zhǎng)度為0x5C的代碼段,按照每字節(jié)與1進(jìn)
行異或運(yùn)算。根據(jù)類(lèi)似的指令,只需要提供相應(yīng)的指令規(guī)則,即可靈活匹配,例如檢測(cè)循環(huán)對(duì)內(nèi) 存進(jìn)行異或?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 表示任意類(lèi)型Exists 為指令存在檢測(cè)函數(shù)上述規(guī)則表示匹配一個(gè)由短跳轉(zhuǎn)指令產(chǎn)生的一個(gè)循環(huán),當(dāng)在數(shù)據(jù)中的循環(huán)體中發(fā) 現(xiàn)一條xor指令時(shí),則規(guī)則匹配成功,說(shuō)明數(shù)據(jù)具有shellcode。步驟S13、在預(yù)先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;本步驟通過(guò)虛擬機(jī)來(lái)實(shí)現(xiàn),通過(guò)虛擬機(jī)內(nèi)的虛擬CPU實(shí)現(xiàn)對(duì)指令的模擬執(zhí)行,并 通過(guò)虛擬環(huán)境,提供對(duì)指令執(zhí)行的環(huán)境支撐。例如,很多shellcode需要獲取PEB (Process Enviroment Block,進(jìn)程環(huán)境塊)和kernel32. dll的基地址,再獲得一些重要的 API (Application Programming Interface,應(yīng)用程序編程接口)函數(shù)。當(dāng)指令對(duì)kernel32. dl 1的基地址進(jìn)行訪問(wèn)的時(shí)候,就會(huì)被檢測(cè)到。步驟S14、判斷執(zhí)行所述shellcode中的指令過(guò)程中是否對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作,若 是,則執(zhí)行步驟S15,若否,則結(jié)束;步驟S15、判斷被讀取內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則,若是,則執(zhí)行步驟S16,若否, 則結(jié)束;所述預(yù)設(shè)內(nèi)存規(guī)則可以包括內(nèi)存的地址、長(zhǎng)度、匹配次數(shù)和依賴規(guī)則鏈表中的任 意一項(xiàng)或多項(xiàng)的組合。例如,當(dāng)被讀取的內(nèi)存的地址與預(yù)設(shè)內(nèi)存規(guī)則中的內(nèi)存地址相同時(shí), 說(shuō)明指令執(zhí)行過(guò)程中對(duì)預(yù)先設(shè)定的內(nèi)存地址的內(nèi)存進(jìn)行了讀取操作,則此shellcode為惡 意代碼,文檔中存在漏洞。內(nèi)存規(guī)則的結(jié)構(gòu)如下Monitor: memory (Address, Length, Operation, Count, DependRule)Address:內(nèi)存地址Length 長(zhǎng)度Operation 讀取或?qū)懭隒ount:匹配次數(shù)DependRule 依賴規(guī)則在匹配規(guī)則的過(guò)程中,由于shellcode自解密的過(guò)程中會(huì)對(duì)一段連續(xù)內(nèi)存進(jìn)行寫(xiě) 操作,所以需要不斷的執(zhí)行循環(huán)操作,因此其與內(nèi)存規(guī)則的匹配次數(shù)也會(huì)不斷的改變,可以 根據(jù)此情況,設(shè)定當(dāng)匹配次數(shù)為某一特定值時(shí),滿足匹配次數(shù)的內(nèi)存規(guī)則,其具體的數(shù)值可 以靈活的設(shè)置。同樣可以通過(guò)設(shè)置更多的依賴規(guī)則,來(lái)達(dá)到縮小目標(biāo)范圍的效果,使其更精 確的匹配shellcode,降低誤報(bào)率。本實(shí)施例中的內(nèi)存規(guī)則可以采用樹(shù)形結(jié)構(gòu)排列,其結(jié)構(gòu)示意圖如圖2所示,該結(jié)
7構(gòu)中Root為根節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包含左子樹(shù)L和右子樹(shù)R,左子樹(shù)的規(guī)則依賴于父子樹(shù)的規(guī) 則,而右子樹(shù)的規(guī)則不依賴父子樹(shù)的規(guī)則。進(jìn)行內(nèi)存規(guī)則匹配的時(shí)候,遍歷整個(gè)樹(shù),根據(jù)依 賴關(guān)系,即可判斷是否符合內(nèi)存規(guī)則條件。步驟S16、判定存在漏洞。當(dāng)內(nèi)存規(guī)則被匹配時(shí),表示文檔中存在可執(zhí)行的惡意shellcode,即文檔中存在漏 洞,反之則文檔是安全的。本實(shí)施例公開(kāi)的種漏洞檢測(cè)方法對(duì)接收的文檔中的數(shù)據(jù)進(jìn)行檢測(cè),以實(shí)現(xiàn)判斷其 是否具有漏洞的目的,其檢測(cè)原則為與shellcode對(duì)應(yīng)的內(nèi)存匹配原則,從而使得該檢測(cè) 方法可以適用于任何一種shellcode,可以對(duì)新的、未知的新shellcode具有相同的檢測(cè)能 力。對(duì)于大量shellcode樣本的的分析具有通用性,提高了檢測(cè)精度,擴(kuò)大了適用范圍。本發(fā)明實(shí)施例公開(kāi)的又一漏洞檢測(cè)方法流程如圖3所示,包括步驟S31、選取輸入的文檔數(shù)據(jù);步驟S32、檢測(cè)選取的文檔數(shù)據(jù)中是否具shellcode,若是,則執(zhí)行步驟S33,若否, 則結(jié)束;步驟S33、在預(yù)先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;步驟S34、判斷執(zhí)行所述shellcode中的指令過(guò)程中是否對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作,若 是,則執(zhí)行步驟S35,若否,則結(jié)束;步驟S35、判斷被讀取內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則,若是,則執(zhí)行步驟S36,若否, 則結(jié)束;步驟S36、判定存在漏洞;步驟S37、顯示所述漏洞的信息;將所述漏洞信息進(jìn)行顯示,以便于對(duì)漏洞進(jìn)行分析。步驟S38、替換所述 shellcode。通過(guò)檢測(cè)獲得內(nèi)存地址Address,與之對(duì)應(yīng)的文件偏移地址Offset,shellcode長(zhǎng) 度Length等信息,然后將Offset到Offset+Length這段內(nèi)容用新的shellcode填充,即可 達(dá)到替換shellcode內(nèi)容。根據(jù)填充的內(nèi)容不同,替換后shellcode可以實(shí)現(xiàn)恢復(fù)文檔的 正常功能。本發(fā)明實(shí)施例公開(kāi)的又一漏洞檢測(cè)流程如圖4所示,包括步驟S41、設(shè)定滑動(dòng)窗口的起始位置為文檔數(shù)據(jù)的起始位置;步驟S42、按照預(yù)設(shè)窗口范圍依次選取所述文檔數(shù)據(jù);具體的窗口范圍可以根據(jù)實(shí)際情況設(shè)定,可以為lk,也可以為2k。選取的范圍越 大,檢測(cè)的時(shí)間就越短,檢測(cè)速度就越快。選取的范圍越小,檢測(cè)的精度就越高,可以根據(jù)具 體應(yīng)用場(chǎng)景進(jìn)行設(shè)定。步驟S43、反匯編所述被選取的數(shù)據(jù);將被選取的數(shù)據(jù)反匯編為匯編語(yǔ)言格式的數(shù)據(jù)。步驟S44、判斷所述反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則是否匹配,若匹配,則執(zhí)行 步驟S45a,若不匹配,則執(zhí)行步驟S45b ;本步驟中的預(yù)先設(shè)定的指令規(guī)則為,數(shù)據(jù)的循環(huán)體具有xor指令。步驟S45a、判定所述被選取數(shù)據(jù)中具有shellcode,執(zhí)行步驟S46a ;
步驟S45b、判斷所述窗口范圍的末位是否為文檔數(shù)據(jù)的末位,若否,則執(zhí)行步驟 S46b,若是,則結(jié)束;步驟S46a、在預(yù)先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的當(dāng)前待執(zhí)行指 令,執(zhí)行步驟S47;Shellcode中可能會(huì)包含多個(gè)執(zhí)行指令,分別對(duì)這些指令進(jìn)行模擬執(zhí)行。步驟S46b、更新所述滑動(dòng)窗口的起始位置,返回執(zhí)行步驟S42 ;步驟S47、判斷執(zhí)行所述當(dāng)前待執(zhí)行指令過(guò)程中是否對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作,若是則 執(zhí)行步驟S48a,若否,則執(zhí)行步驟S48b ;步驟S48a、判斷所述被讀取內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則,若是,則執(zhí)行步驟S49a, 若否,則返回執(zhí)行步驟S48b;本實(shí)施例中所述的預(yù)設(shè)內(nèi)存規(guī)則的判斷過(guò)程為依次判斷被操作內(nèi)存的地址、長(zhǎng) 度、匹配次數(shù)和依賴規(guī)則鏈表的數(shù)據(jù)是否與預(yù)先設(shè)定的內(nèi)存規(guī)則相匹配,雖然匹配規(guī)則的 內(nèi)容較多,檢測(cè)時(shí)間較長(zhǎng),但是會(huì)大大提高檢測(cè)精度,避免漏檢的情況出現(xiàn)。步驟S48b、判斷當(dāng)前待執(zhí)行指令是否為選取數(shù)據(jù)中的shellcode內(nèi)的最后一條指 令,若否,則執(zhí)行步驟S49b,若是,則返回執(zhí)行步驟S45b ;步驟S49a、判定存在漏洞;步驟S49b、選取下一條指令作為當(dāng)前待執(zhí)行指令,返回步驟S46a ;步驟S410、顯示所述漏洞的信息;將所述漏洞信息進(jìn)行顯示,以便于對(duì)漏洞進(jìn)行分析。本實(shí)施例中同樣也可增加替換shellcode的過(guò)程。本實(shí)施例公開(kāi)的漏洞檢測(cè)方法中,采用利用窗口選取被檢測(cè)數(shù)據(jù)的方式,利用循 環(huán)選取的步驟實(shí)現(xiàn)對(duì)被檢測(cè)數(shù)據(jù)的選取及檢測(cè),簡(jiǎn)化了處理流程,提高了處理效率。本發(fā)明進(jìn)一步公開(kāi)了一種漏洞檢測(cè)裝置,其結(jié)構(gòu)如圖5所示,包括數(shù)據(jù)選取單元 51、指令過(guò)濾單元52、虛擬執(zhí)行單元53、內(nèi)存監(jiān)視單元54、規(guī)則匹配單元55和漏洞判定單元 56,其中數(shù)據(jù)選取單元51用于選取輸入的文檔數(shù)據(jù);指令過(guò)濾單元52用于檢測(cè)選取的文 檔數(shù)據(jù)中是否具有利用特定漏洞的代碼shellcode ;虛擬執(zhí)行單元53用于當(dāng)所述數(shù)據(jù)中具 有she 11 code時(shí),在預(yù)先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;內(nèi)存監(jiān)視單 元54用于監(jiān)視所述執(zhí)行所述shellcode中的指令過(guò)程中是否對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作;規(guī)則匹 配單元55用于當(dāng)執(zhí)行所述shellcode中的指令過(guò)程中對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作時(shí),判斷被讀取 內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則;漏洞判定單元56用于當(dāng)所述被讀取內(nèi)存滿足預(yù)設(shè)內(nèi)存規(guī)則 時(shí),則判定存在漏洞。進(jìn)一步的,該裝置還包括漏洞信息顯示單元57,用于顯示所述漏洞的信息;替換 單元58,用于替換所述shellcode。其中,所述的虛擬執(zhí)行單元53可以由虛擬機(jī)實(shí)現(xiàn),所述內(nèi)存監(jiān)視單元54可以由內(nèi) 存監(jiān)視引擎實(shí)現(xiàn)。進(jìn)一步的,所述數(shù)據(jù)選取單元51包括起始位置設(shè)定單元511,用于設(shè)定滑動(dòng)窗口 的起始位置為文檔數(shù)據(jù)的起始位置;選取單元512,用于按照預(yù)設(shè)窗口范圍依次選取所述 文檔數(shù)據(jù)。
所述指令過(guò)濾單元52包括反匯編單元521,用于反匯編所述被選取的數(shù)據(jù);指令 規(guī)則匹配單元522,用于將所述反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則進(jìn)行匹配,若所述反匯編 結(jié)果與預(yù)先設(shè)定的指令規(guī)則匹配,則所述被選取數(shù)據(jù)中具有shellcode,若不匹配,則所述 被選取數(shù)據(jù)中不具有shellcode。本裝置中各個(gè)單元執(zhí)行具體操作的過(guò)程如下所述首先通過(guò)起始位置設(shè)定單元設(shè)定窗口的起始位置為文檔數(shù)據(jù)的起始位置,然后, 選取單元按照預(yù)先設(shè)定的窗口范圍選取窗口范圍內(nèi)的文檔數(shù)據(jù),反匯編單元將窗口范圍內(nèi) 的數(shù)據(jù)進(jìn)行反匯編得到被選取數(shù)據(jù)對(duì)應(yīng)的匯編語(yǔ)言代碼,指令規(guī)則匹配單元對(duì)匯編語(yǔ)言代 碼進(jìn)行規(guī)則匹配,檢測(cè)其中是否具有shellcode,如果具有,則將該匯編語(yǔ)言代碼輸入到虛 擬執(zhí)行單元進(jìn)行虛擬執(zhí)行,內(nèi)存監(jiān)測(cè)單元監(jiān)測(cè)整個(gè)執(zhí)行過(guò)程中是否出現(xiàn)對(duì)內(nèi)存的讀取操 作,如果出現(xiàn),則規(guī)則匹配單元將被操作的內(nèi)存與預(yù)先設(shè)定的內(nèi)存規(guī)則進(jìn)行匹配,若相同, 則漏洞判定單元判定該文檔中存在漏洞。后續(xù),可利用漏洞信息顯示單元將漏洞信息進(jìn)行 顯示,以便于后續(xù)研究分析。同樣可以利用替換單元,替換掉文檔中的shellcode,以保證文 檔則正常使用。本實(shí)施例中可將數(shù)據(jù)選取單元、指令過(guò)濾單元、內(nèi)存監(jiān)視單元、規(guī)則匹配單元和漏 洞判定單元同時(shí)集成在虛擬機(jī)上實(shí)現(xiàn),也可以將其采用分體化設(shè)計(jì)實(shí)現(xiàn)。在此并不限定其 具體實(shí)現(xiàn)形式。本說(shuō)明書(shū)中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他 實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見(jiàn)即可。對(duì)于實(shí)施例公開(kāi)的裝置 而言,由于其與實(shí)施例公開(kāi)的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法部分說(shuō) 明即可。專(zhuān)業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的單元 及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來(lái)實(shí)現(xiàn),為了清楚地說(shuō)明硬件和 軟件的可互換性,在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些 功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專(zhuān)業(yè) 技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng) 認(rèn)為超出本發(fā)明的范圍。結(jié)合本文中所公開(kāi)的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí) 行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存 儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤(pán)、可移動(dòng)磁盤(pán)、CD-ROM、或技術(shù) 領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。對(duì)所公開(kāi)的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。 對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專(zhuān)業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,本文中所定義的 一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明 將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開(kāi)的原理和新穎特點(diǎn)相一 致的最寬的范圍。
10
權(quán)利要求
一種漏洞檢測(cè)方法,其特征在于,包括選取輸入的文檔數(shù)據(jù);檢測(cè)選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼shellcode;當(dāng)所述選取的文檔數(shù)據(jù)中具有shellcode時(shí),在預(yù)先設(shè)定的虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;當(dāng)執(zhí)行所述shellcode中的指令過(guò)程中對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作時(shí),判斷被讀取內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則;當(dāng)所述被讀取內(nèi)存滿足預(yù)設(shè)內(nèi)存規(guī)則時(shí),則判定存在漏洞。
2.根據(jù)要求1所述的方法,其特征在于,還包括 顯示所述漏洞的信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,還包括 替換所述shellcode。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述選取輸入文檔數(shù)據(jù)的過(guò)程包括 設(shè)定滑動(dòng)窗口的起始位置為文檔數(shù)據(jù)的起始位置;按照預(yù)設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,還包括判斷所述窗口范圍的末位是否為文檔數(shù)據(jù)的末位,若是,則結(jié)束,若否,則更新所 述滑動(dòng)窗口的起始位置,執(zhí)行檢測(cè)所述被選取的數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode 的過(guò)程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述檢測(cè)所述被選取的數(shù)據(jù)中是否具有 shellcode的過(guò)程包括反匯編所述被選取的數(shù)據(jù);判斷所述反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則是否匹配,若匹配,則所述被選取數(shù)據(jù)中 具有shellcode,若不匹配,則所述被選取數(shù)據(jù)中不具有shellcode。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述預(yù)設(shè)內(nèi)存規(guī)則包括內(nèi)存的地址、長(zhǎng) 度、匹配次數(shù)和依賴規(guī)則鏈表中的任意一項(xiàng)或多項(xiàng)的組合。
8.根據(jù)權(quán)利要求7述的方法,其特征在于,所述內(nèi)存規(guī)則按照樹(shù)形結(jié)構(gòu)進(jìn)行存儲(chǔ)匹配。
9.一種漏洞檢測(cè)裝置,其特征在于,包括 數(shù)據(jù)選取單元,用于選取輸入的文檔數(shù)據(jù);指令過(guò)濾單元,用于檢測(cè)選取的文檔數(shù)據(jù)中是否具有利用特定漏洞的代碼 shellcode ;虛擬執(zhí)行單元,用于當(dāng)所述選取的數(shù)據(jù)中具有shellcode時(shí),在預(yù)先設(shè)定的虛擬CPU環(huán) 境內(nèi)執(zhí)行所述shellcode中的指令;內(nèi)存監(jiān)視單元,用于監(jiān)視所述執(zhí)行所述shellcode中的指令過(guò)程中是否對(duì)內(nèi)存進(jìn)行讀 寫(xiě)操作;規(guī)則匹配單元,用于當(dāng)執(zhí)行所述shellcode過(guò)程中對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作時(shí),判斷被讀 取內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則;漏洞判定單元,用于當(dāng)所述被讀取內(nèi)存滿足預(yù)設(shè)內(nèi)存規(guī)則時(shí),則判定存在漏洞。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括漏洞信息顯示單元,用于顯示所述漏洞的信息。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,還包括 替換單元,用于替換所述shelIcode。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述數(shù)據(jù)選取單元包括 起始位置設(shè)定單元,用于設(shè)定滑動(dòng)窗口的起始位置為文檔數(shù)據(jù)的起始位置; 選取單元,用于按照預(yù)設(shè)窗口范圍依次選取所述文檔數(shù)據(jù)。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述指令過(guò)濾單元包括 反匯編單元,用于反匯編所述被選取的數(shù)據(jù);指令規(guī)則匹配單元,用于將所述反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則進(jìn)行匹配,若所述 反匯編結(jié)果與預(yù)先設(shè)定的指令規(guī)則匹配,則所述被選取數(shù)據(jù)中具有shellcode,若不匹配, 則所述被選取數(shù)據(jù)中不具有shellcode。
全文摘要
本發(fā)明公開(kāi)了一種漏洞檢測(cè)方法及裝置,包括選取輸入的文檔數(shù)據(jù);檢測(cè)文檔數(shù)據(jù)中是否具有shellcode;當(dāng)數(shù)據(jù)中具有shellcode時(shí),在虛擬CPU環(huán)境內(nèi)執(zhí)行所述shellcode中的指令;當(dāng)執(zhí)行shellcode中的指令過(guò)程中對(duì)內(nèi)存進(jìn)行讀寫(xiě)操作時(shí),判斷被讀取內(nèi)存是否滿足預(yù)設(shè)內(nèi)存規(guī)則;當(dāng)被讀取內(nèi)存滿足內(nèi)存規(guī)則時(shí),則判定存在漏洞。本發(fā)明采用在虛擬環(huán)境下檢測(cè)接收的數(shù)據(jù)是否具有利用特定漏洞的代碼shellcode,并對(duì)檢測(cè)到的shellcode進(jìn)行模擬運(yùn)行,看其運(yùn)行過(guò)程中是否具有與預(yù)設(shè)內(nèi)存規(guī)則相匹配的內(nèi)存操作,以判定是否存在漏洞的方法,提高檢測(cè)漏洞的完全性,提高了檢測(cè)精度,并進(jìn)一步擴(kuò)大了應(yīng)用范圍。
文檔編號(hào)G06F21/00GK101964036SQ201010526718
公開(kāi)日2011年2月2日 申請(qǐng)日期2010年10月29日 優(yōu)先權(quán)日2010年10月29日
發(fā)明者李科 申請(qǐng)人:北京椒圖科技有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
沾化县| 垦利县| 钦州市| 黄骅市| 图片| 吉水县| 会昌县| 古蔺县| 兴安盟| 色达县| 科尔| 望江县| 独山县| 桂平市| 吴江市| 广元市| 珠海市| 禹州市| 遂川县| 武隆县| 大余县| 白银市| 呈贡县| 木里| 安福县| 新密市| 富源县| 内丘县| 东山县| 肥东县| 县级市| 洪雅县| 临澧县| 周宁县| 成安县| 梁山县| 贵德县| 安图县| 晋中市| 木兰县| 怀仁县|