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

惡意代碼的檢測方法及裝置的制作方法

文檔序號(hào):6397037閱讀:178來源:國知局
專利名稱:惡意代碼的檢測方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信安全技術(shù)領(lǐng)域,尤其涉及一種惡意代碼的檢測方法及裝置。
背景技術(shù)
PDF (portal document format,便攜文件格式)是一種電子文件格式。這種格式不受閱讀軟件、硬件以及操作系統(tǒng)的限制,可以在包括Windows、Linux和Mac OS的任何平臺(tái)中使用。JavaScript是一種廣泛用于客戶端網(wǎng)頁開發(fā)的腳本語言,這種腳本語言能夠?qū)崿F(xiàn)的功能十分豐富。在F1DF中嵌入JavaScript腳本語言對于實(shí)現(xiàn)PDF文件的交互特性十分重要,譬如動(dòng)態(tài)內(nèi)容的呈現(xiàn)、表格和3D界面等等。惡意JavaScript腳本程序是惡意攻擊代碼中的一個(gè)新型病毒,對軟件系統(tǒng)增加、改變或刪除部分腳本,以制造危害或者破壞計(jì)算機(jī)系統(tǒng)功能和網(wǎng)絡(luò)的完整性、保密性、可用性等為目的。它通常由一段JavaScript腳本語言編寫而成,惡意JavaScript腳本程序書寫形式靈活化,易通過各種代碼混淆技術(shù)產(chǎn)生變種,當(dāng)前的反病毒技術(shù)很難達(dá)到對它的控制及防護(hù)能力。惡意JavaScript腳本的傳播通常是通過瀏覽器、局域網(wǎng)共享、即時(shí)聊天和Email為載體實(shí)現(xiàn)的。近年來,隨著PDF漏洞利用技術(shù)的日益成熟,越來越多的惡意JavaScript被放在了 PDF文件里。代碼混淆,顧名思義是一種人為刻意地使腳本代碼顯得雜亂難懂的技術(shù)。在許多商業(yè)軟件中,為了保護(hù)版權(quán)開發(fā)者可能將代碼進(jìn)行混淆從而給逆向工程師增添困難。在惡意腳本中,混淆的使用則是為了躲過殺毒軟件和防火墻中的病毒特征庫掃描,并給人工的惡意攻擊代碼分析制造麻煩。相比于網(wǎng)頁中的惡意JavaScript腳本,PDF中的惡意腳本在混淆上更多地利用了PDF標(biāo)準(zhǔn)里的一些特性。如在文件的定義中使用字母和數(shù)字的十六進(jìn)制碼來代替相應(yīng)文字,使用PDF流對象來對某些含有JavaScript腳本的對象進(jìn)行隱藏和使用PDF流對象中的編碼嵌套功能用多種編碼方法處理JavaScript腳本?,F(xiàn)有瀏覽器端的許多解混淆工具無法對采用上述混淆方法進(jìn)行混淆的JavaScript腳本進(jìn)行解混淆,因此促使了惡意腳本通過PDF文件傳播攻擊,常見的攻擊方式包括網(wǎng)頁中包含惡意PDF文件、定向釣魚郵件中包含惡意PDF文件附件等,其中惡意PDF文件是指攜帶惡意JavaScript腳本的PDF文件?,F(xiàn)有對I3DF文件中腳本進(jìn)行檢測的方法有:模擬執(zhí)行環(huán)境來執(zhí)行被檢測的PDF文件,通過模擬被檢測的PDF文件在正常的系統(tǒng)操作環(huán)境中的行為,來檢測文件執(zhí)行時(shí)的調(diào)用等一系列操作,從而發(fā)現(xiàn)惡意行為。但這種方法對于常見的JavaScript的欺騙隱藏手段,例如某個(gè)PDF文件中的JavaScript腳本只在特定時(shí)段或依賴特定的插件才會(huì)呈現(xiàn)惡意行為的設(shè)置,就無法檢測到此類惡意行為。發(fā)明人在實(shí)現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),現(xiàn)有技術(shù)至少存在如下問題:不能對攜帶在PDF文件中的惡意JavaScript代碼,特別是通過混淆的方式攜帶在PDF文件中的惡意JavaScript代碼進(jìn)行準(zhǔn)確的檢測。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種惡意代碼的檢測方法及裝置,能夠提高對攜帶在PDF文件中的惡意JavaScript代碼的檢測準(zhǔn)確性。為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:第一方面,提供了一種惡意代碼的檢測方法,包括:提取PDF文件中的JavaScript腳本代碼;啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和字符串變量;根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。在第一方面的第一種可能實(shí)現(xiàn)方式中,在所述啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程之前,還包括:將庫文件插樁注入在所述腳本解釋器的解混淆進(jìn)程中,所述庫文件用于獲取所述腳本解釋器在解混淆JavaScript腳本代碼進(jìn)程中產(chǎn)生的被解混淆JavaScript腳本代碼對應(yīng)的代碼信息。結(jié)合第一方面以及第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第二種可能實(shí)現(xiàn)方式中,如果所述代碼信息的類型為操作碼,則所述根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括:在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則確定所述JavaScript腳本代碼為惡意代碼;若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則確定所述JavaScript腳本代碼不是惡意代碼。結(jié)合第一方面以及第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第三種可能實(shí)現(xiàn)方式中,如果所述代碼信息的類型為字符串變量,則所述根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括:獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;若所述字符串變量的長度位于第一區(qū)間,則獲取所述字符串變量對應(yīng)的第一特征參量;根據(jù)棧溢出檢測模型和所述第一特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;若所述字符串變量的長度位于第二區(qū)間,則獲取所述字符串變量對應(yīng)的第二特征參量;根據(jù)堆噴射檢測模型和所述第二特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。結(jié)合第一方面的第三種可能實(shí)現(xiàn)方式,在第一方面的第四種可能實(shí)現(xiàn)方式中,所述第一特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第二特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。
結(jié)合第一方面以及第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第五種可能實(shí)現(xiàn)方式中,如果所述代碼信息的類型為操作碼和字符串,則所述根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括:根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼;以及,根據(jù)所述字符串對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼;當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼,或根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼時(shí),則確定所述JavaScript腳本代碼為惡意代碼;當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼,且根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼時(shí),則確定所述JavaScript腳本代碼不為惡意代碼;其中,所述根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括:在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則確定所述JavaScript腳本代碼為惡意代碼;若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則確定所述JavaScript腳本代碼不是惡意代碼;所述根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括:獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;若所述字符串變量的長度位于第三區(qū)間,則獲取所述字符串變量對應(yīng)的第三特征參量;根據(jù)棧溢出檢測模型和所述第三特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;若所述字符串變量的長度位于第四區(qū)間,則獲取所述字符串變量對應(yīng)的第四特征參量;根據(jù)堆噴射檢測模型和所述第四特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。結(jié)合第一方面的第五種可能實(shí)現(xiàn)方式,在第一方面的第六種可能實(shí)現(xiàn)方式中,所述第三特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第四特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。第二方面,提供了一種惡意代碼的檢測裝置,包括:解混淆模塊,用于提取PDF文件中的JavaScript腳本代碼;啟動(dòng)預(yù)定的支持HF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和字符
串變量;檢測模塊,用于根據(jù)所述解混淆模塊獲得的代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。在第二方面的第一種可能實(shí)現(xiàn)方式中,所述裝置還包括:插樁注入模塊,用于將庫文件插樁注入在所述腳本解釋器對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程中,所述庫文件用于獲取所述腳本解釋器在解混淆JavaScript腳本代碼進(jìn)程中產(chǎn)生的被解混淆JavaScript腳本代碼對應(yīng)的代碼信息。
結(jié)合第二方面以及第一方面的第一種可能實(shí)現(xiàn)方式,在第二方面的第二種可能實(shí)現(xiàn)方式中,所述檢測模塊包括:第一匹配單元,用于如果所述代碼信息的類型為操作碼,在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;第一確定單元,用于在所述第一匹配單元在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;以及用于在所述第一匹配單元在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼不是惡意代碼。結(jié)合第二方面的第二種可能實(shí)現(xiàn)方式,在第二方面的第三種可能實(shí)現(xiàn)方式中,所述檢測模塊包括:第一獲取單元,用于如果所述代碼信息的類型為字符串變量,獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;第一判斷單元,用于在所述第一獲取單元獲取的字符串變量的長度位于第一區(qū)間時(shí),則獲取所述字符串變量對應(yīng)的第一特征參量;根據(jù)棧溢出檢測模型和所述第一特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;以及用于在所述第一獲取單元獲取的字符串變量的長度位于第二區(qū)間時(shí),則獲取所述字符串變量對應(yīng)的第二特征參量;根據(jù)堆噴射檢測模型和所述第二特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。結(jié)合第二方面以及第一方面的第一種可能實(shí)現(xiàn)方式,在第二方面的第四種可能實(shí)現(xiàn)方式中,所述第一特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第二特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。結(jié)合第二方面的第四種可能實(shí)現(xiàn)方式,在第二方面第五種可能實(shí)現(xiàn)方式中,所述檢測模塊具體用于如果所述代碼信息的類型為操作碼和字符串變量,根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼;以及,根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼;以及,用于當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼或根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;以及,用于當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼且根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼時(shí),確定所述JavaScript腳本代碼不為惡意代碼; 所述檢測模塊進(jìn)一步包括:第二匹配單元,用于在已存儲(chǔ)的惡意操作碼中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;第二確定單元,用于在所述第二匹配單元確定在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;以及用于在所述第二匹配單元確定在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼不是惡意代碼;所述檢測模塊進(jìn)一步還包括:
第二獲取單元,用于獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;第二判斷單元,用于在所述第二獲取單元獲取的所述字符串變量的長度位于第三區(qū)間,則獲取所述字符串變量對應(yīng)的第三特征參量;根據(jù)棧溢出檢測模型和所述第三特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;以及用于在所述第二獲取單元獲取的所述字符串變量的長度位于第四區(qū)間時(shí),獲取所述字符串變量對應(yīng)的第四特征參量;根據(jù)堆噴射檢測模型和所述第四特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。結(jié)合第二方面的第五種可能實(shí)現(xiàn)方式,在第二方面的第六種可能實(shí)現(xiàn)方式中,所述第三特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第四特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。第三方面,提供了一種檢測設(shè)備,包括存儲(chǔ)器和處理器,其中:所述存儲(chǔ)器被配置存儲(chǔ)代碼;所述處理器被配置讀取所述存儲(chǔ)器中存儲(chǔ)的代碼,執(zhí)行上述第一方面、或第一方面的六種可能實(shí)現(xiàn)方式中任意一種提供的方法。本發(fā)明實(shí)施例提供的一種惡意代碼的檢測方法及裝置,通過啟動(dòng)預(yù)定的支持TOF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程來獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,并根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則來檢測所述JavaScript腳本代碼是否為惡意代碼,相比于現(xiàn)有技術(shù)能夠比較準(zhǔn)確地對攜帶在PDF文件中的惡意JavaScript代碼進(jìn)行檢測。


為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例提供的一種惡意代碼的檢測方法流程圖;圖2為本發(fā)明實(shí)施例提供的另一種惡意代碼的檢測方法流程圖;圖3為本發(fā)明實(shí)施例提供的另一種惡意代碼的檢測方法流程圖;圖4為本發(fā)明實(shí)施例提供的另一種惡意代碼的檢測方法流程圖;圖5為本發(fā)明實(shí)施例提供的一種惡意代碼的檢測裝置的組成框圖;圖6為本發(fā)明實(shí)施例提供的另一種惡意代碼的檢測裝置的組成框圖;圖7為本發(fā)明實(shí)施例提供的檢測模塊的組成框圖;圖8為本發(fā)明實(shí)施例提供的另一種檢測模塊的組成框圖;圖9為本發(fā)明實(shí)施例提供的另一種檢測模塊的組成框圖;圖10為本發(fā)明實(shí)施例提供的一種檢測設(shè)備的組成框圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明一實(shí)施例提供了一種惡意代碼的檢測方法,該方法可以由一個(gè)檢測設(shè)備來執(zhí)行,如圖1所示,包括:101、提取PDF文件中的JavaScript腳本代碼。其中,所述JavaScript腳本嵌入在PDF文件中,可以實(shí)現(xiàn)PDF文件的顯示增效功能,但也被攻擊者和惡意代碼惡意使用,用于利用TOF閱讀器軟件的漏洞,滲透入侵所在主機(jī)。待檢測的該P(yáng)DF文件可以來源于電子郵件的附件,網(wǎng)頁內(nèi)容等等,在這里不進(jìn)行限定。其中,所述提取PDF文件中的JavaScript腳本代碼的實(shí)現(xiàn)方法具體可以包括:根據(jù)PDF文件的國際通用格式規(guī)范,解析PDF文件中JavaScript流的元素位置,并根據(jù)該JavaScript流所采用的壓縮編碼方法進(jìn)行相應(yīng)的解碼,從而提取到PDF文件中包含的JavaScript 代石馬。102、啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和字符串變量。其中,所述預(yù)定的支持PDF標(biāo)準(zhǔn)(即支持PDF格式規(guī)范,能夠解析以PDF格式規(guī)范生成的PDF文件)的腳本解釋器,可以是PDF閱讀器內(nèi)嵌的腳本解釋器,其中PDF閱讀器可以為任意一種擁有內(nèi)嵌JavaScript腳本代碼解釋引擎的TOF閱讀器,例如,本發(fā)明實(shí)施例使用由Adobe公司提供的PDF閱讀應(yīng)用程序Acrobat reader,使用Acrobat reader內(nèi)嵌的腳本解釋器可以實(shí)現(xiàn)對目前絕大多數(shù)的JavaScript腳本代碼進(jìn)行解混淆。所述支持TOF標(biāo)準(zhǔn)的腳本解釋器可以是所述檢測設(shè)備的管理人員在檢測之前預(yù)先配置的。其中,所述代碼信息是指本發(fā)明實(shí)施例中使用的支持PDF標(biāo)準(zhǔn)的腳本解釋器對腳本代碼解釋并翻譯后,提交給JavaScript虛擬機(jī)執(zhí)行的信息。其中,JavaScript虛擬機(jī)是使用軟件模擬的用于運(yùn)行所有JavaScript代碼的抽象計(jì)算機(jī)。在本實(shí)施例中,提交給JavaScript虛擬機(jī)執(zhí)行的信息包含了腳本解釋器在對腳本代碼解釋和翻譯的過程中的不同階段所輸出的信息,至少可以包括以下兩類:操作碼和字符串變量。其中,若代碼信息的類型包括操作碼,則所述操作碼可以為機(jī)器使用的命令代碼,典型操作碼片斷如下:[207]resolve_global r3, Array(iidlO)[212]get_by_id rl, r3,prototype(iidll)[220]method_check[221]get_by_id rO, rl, push(iidl2)[229]moV r2, Int32:0 (ik8)[232]call r0,2,9需要說明的是,雖然在本實(shí)施例中,為了表達(dá)清楚,在此使用了通用英文字符來對操作碼進(jìn)行舉例說明,但實(shí)際過程中,操作碼可以以二進(jìn)制來表示。其中,若代碼信息的類型包括字符串變量,所述字符串變量可以為JavaScript腳本中定義的字符串變量,典型的存在形式如下:var str = “some value...” ;
thisVar.replace ( “Monday”,“Friday,,);需要說明的是,在惡意代碼中,字符串變量的值本身也可能是經(jīng)過編譯的指令。例如,字符串變量thisVar.replace的值Monday就可以是經(jīng)過Unicode編碼的一段指令。其中,所述根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息可以通過插樁注入的方法對解混淆進(jìn)程進(jìn)行監(jiān)測以獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,具體插樁注入的過程請參見后面附圖4及對應(yīng)的文字描述。并且,所述操作碼和字符串變量這兩種不同類型的參數(shù)是解混淆過程的不同階段中會(huì)出現(xiàn)的中間參數(shù),因而,通過監(jiān)測解混淆進(jìn)程的各個(gè)步驟就能夠獲取到操作碼和字符串變量兩種不同類型的參數(shù)。103、根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。值得說明的是,基于代碼信息類型的不同,本發(fā)明實(shí)施例提供的檢測方法也不相同,根據(jù)代碼信息的類型為操作碼、代碼信息的類型為字符串、以及代碼信息的類型為操作碼和字符串三種情況,所述步驟103根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼分別可以由以下三種檢測方法實(shí)現(xiàn),具體為:第一種方法如圖2所示,包括:al031、如果所述代碼信息的類型為操作碼,則在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則執(zhí)行步驟al032 ;若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則執(zhí)行步驟al033。al032、確定所述JavaScript腳本代碼為惡意代碼。al033、確定所述JavaScript腳本代碼不是惡意代碼。其中,所述惡意操作碼特征庫為PDF文件中的所述JavaScript腳本代碼實(shí)施惡意漏洞利用所進(jìn)行的操作碼序列構(gòu)成的模式庫,典型針對CVE-2009-0927漏洞的特征模式實(shí)例如下:getmethod_ “getlcon”getgvar “var_l,,call第二種方法如圖3所示,包括:bl031、如果所述代碼信息的類型為字符串變量,獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;若所述字符串變量的長度位于第一區(qū)間,則執(zhí)行步驟bl032 ;若所述字符串變量的長度位于第二區(qū)間,則執(zhí)行步驟bl034。bl032、獲取所述字符串變量對應(yīng)的第一特征參量。bl033、根據(jù)棧溢出檢測模型和所述第一特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。bl034、獲取所述字符串變量對應(yīng)的第二特征參量。bl035、根據(jù)堆噴射檢測模型和所述第二特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。第三種方法:如果所述代碼信息的類型為操作碼和字符串變量,根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼;以及,根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼;或根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼時(shí),則確定所述JavaScript腳本代碼為惡意代碼;當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼,且根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼時(shí),則確定所述JavaScript腳本代碼不為惡意代碼。在上述第一種方法中,所述已存儲(chǔ)的惡意操作碼特征庫均為本發(fā)明所處技術(shù)領(lǐng)域中已確認(rèn)具有惡意行為的JavaScript腳本代碼對應(yīng)的操作碼對應(yīng)的特征,這些特征的來源可以為各個(gè)權(quán)威機(jī)構(gòu)公開的惡意操作碼特征等。在本發(fā)明實(shí)施例中,已存儲(chǔ)的惡意操作碼特征庫并不是固定不變的,可以根據(jù)需要按照一定周期進(jìn)行更新。在上述第二種方法中,第一區(qū)間和第二區(qū)間為分別針對棧溢出、堆噴射兩種惡意代碼攻擊方式設(shè)置的,其設(shè)置方法可以參照經(jīng)驗(yàn)值,一般情況下,第一區(qū)間可設(shè)置為32-64K字節(jié),第二區(qū)間可設(shè)置為大于64K字節(jié)。在上述第二種方法中,所述第一特征參量至少可以包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第二特征參量至少可以包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。GetPC指令是指Shellcode中用于定位自身虛擬地址的指令;花指令是用于干擾反匯編引擎正確實(shí)現(xiàn)反匯編的代碼;字符串中出現(xiàn)GetPC指令和花指令的頻率可作為字符串中是否存在shellcode的部分依據(jù);脫殼代碼指紋是指加殼shellcode在執(zhí)行時(shí)總會(huì)自行脫殼,這些脫殼代碼的特征即為脫殼代碼指紋,該指紋的存在可作為存在shellcode的部分依據(jù);字符串信息熵是衡量字符串信息量大小的指標(biāo),如果字符串信息熵小于某一閥值,則可能存在堆噴射;NOP指令為CPU空操作指令,當(dāng)串中包含大量NOP指令時(shí),則該段NOP指令可能為堆噴射shellcode 的前導(dǎo)代碼(Slidge)。其中,所述字符串變量對應(yīng)的第一特征參量的獲取可以利用GetPC指令匹配來識(shí)別出字符串變量中包含GetPC類指令的頻率,利用花指令匹配來識(shí)別出字符串變量中包含花指令的頻率,利用脫殼代碼器指紋匹配來識(shí)別出字符串變量中是否包含已知脫殼代碼指紋;所述字符串變量對應(yīng)的第二特征參量的獲取可以利用通用的信息熵值計(jì)算公式計(jì)算得出字符串變量的信息熵值,并以其偏離統(tǒng)計(jì)平均信息熵值的程度確定其異常度,利用NOP指令匹配來識(shí)別出字符串中包含NOP指令的頻率。在上述第二種方法中,棧溢出檢測模型和堆噴射檢測模型都是預(yù)先訓(xùn)練好的,棧溢出檢測模型可選擇GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋為特征向量,并使用標(biāo)準(zhǔn)數(shù)據(jù)集進(jìn)行訓(xùn)練,得到棧溢出檢測模型對應(yīng)的閾值,例如,GetPC指令出現(xiàn)最低頻率、花指令出現(xiàn)最低頻率、包含已知脫殼代碼指紋等。堆噴射檢測模型可選擇信息熵值、NOP指令出現(xiàn)頻率為特征向量,并使用標(biāo)準(zhǔn)數(shù)據(jù)集進(jìn)行訓(xùn)練,得到堆噴射檢測模型對應(yīng)的閾值,例如,信息熵最小值、NOP指令出現(xiàn)最小頻率等。在實(shí)際檢測過程中,當(dāng)?shù)谝惶卣鲄⒘恐械囊粋€(gè)參數(shù)或多個(gè)參數(shù)超過棧溢出檢測模型對應(yīng)的閾值,貝1J認(rèn)定JavaScript腳本代碼為惡意代碼,否則認(rèn)定JavaScript腳本代碼不為惡意代碼;當(dāng)?shù)诙卣鲄⒘恐械囊粋€(gè)參數(shù)或多個(gè)參數(shù)超過棧溢出檢測模型對應(yīng)的閾值,則認(rèn)定JavaScript腳本代碼為惡意代碼,否則認(rèn)定JavaScript腳本代碼不為惡意代碼。
在上述第三種方法中,根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼的實(shí)現(xiàn)方法具體為:在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則確定所述JavaScript腳本代碼為惡意代碼;若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則確定所述JavaScript腳本代碼不是惡意代碼。根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼的實(shí)現(xiàn)方式具體為獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;若所述字符串變量的長度位于第三區(qū)間,貝1J獲取所述字符串變量對應(yīng)的第三特征參量;根據(jù)棧溢出檢測模型和所述第三特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;若所述字符串變量的長度位于第四區(qū)間,則獲取所述字符串變量對應(yīng)的第四特征參量;根據(jù)堆噴射檢測模型和所述第四特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。其中所述第三特征參量至少可以包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第四特征參量至少可以包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。值得說明的是,根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼可直接使用上述第一種方法,具體包括步驟al031至步驟al033,而根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼則可直接使用上述第二種方法,具體包括步驟bl031至步驟bl035。因此,在第三種方法中描述的第三區(qū)間可使用上述第二種方法中的第一區(qū)間的設(shè)置,第四區(qū)間可使用上述第二種方法中的第二區(qū)間的設(shè)置。棧溢出檢測模型和堆噴射檢測模型也可以相應(yīng)使用第二種方法中的模型。在本發(fā)明實(shí)施例中,在對PDF文件進(jìn)行檢測之前,還需要對預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器進(jìn)行插樁注入處理,用以獲取PDF文件中的JavaScript腳本代碼對應(yīng)的代碼信息等,在本實(shí)施例中以TOF閱讀器內(nèi)嵌的腳本解釋器為例進(jìn)行說明,如圖4所示,其具體流程為:201、啟動(dòng)預(yù)定的PDF閱讀器的應(yīng)用程序進(jìn)程。202、將庫文件插樁注入在預(yù)定的TOF閱讀器內(nèi)嵌的腳本解釋器的解混淆進(jìn)程中。其中,所述庫文件為預(yù)先寫好的dll格式的文件,用于獲取所述預(yù)定的PDF腳本解釋器在解混淆JavaScript腳本代碼進(jìn)程中產(chǎn)生的被解混淆的JavaScript腳本代碼對應(yīng)的代碼信息。將庫文件插樁注入進(jìn)程中就是將具有特定功能的dll文件的執(zhí)行進(jìn)程添加在一個(gè)當(dāng)前正在運(yùn)行的進(jìn)程中,但不并不影響正在運(yùn)行的進(jìn)程的正常工作狀態(tài)。值得說明的是,插樁注入的位置需要根據(jù)預(yù)定的TOF閱讀器本身提供的API來進(jìn)行選擇。例如,如果要獲取JavaScript腳本代碼對應(yīng)的操作碼,則需要獲取到預(yù)定的HF閱讀器中能夠輸出操作碼的API進(jìn)行插樁注入才行。203、對注入的庫文件進(jìn)行初始化運(yùn)行。以上步驟201至203的執(zhí)行是為步驟102的執(zhí)行的必要步驟,但是,步驟201至203只需要在啟動(dòng)預(yù)定的PDF閱讀器的應(yīng)用程序進(jìn)程時(shí)執(zhí)行一次即可,在后續(xù)對TOF文件進(jìn)行檢測的過程中并不需要再次執(zhí)行。進(jìn)一步,值得說明的是,上述棧溢出檢測模型和堆噴射檢測模型需要在啟動(dòng)預(yù)定的HF閱讀器的應(yīng)用程序進(jìn)程之前建立,并且可以在后續(xù)對PDF文件進(jìn)行檢測的過程中一直使用。另外,值得說明的是,在執(zhí)行步驟103之后,若確定所述JavaScript腳本代碼為惡意代碼,還可以獲取JavaScript腳本代碼對應(yīng)的明文代碼,并將惡意代碼的檢測報(bào)告和明文代碼進(jìn)行關(guān)聯(lián),例如,JavaScript腳本代碼對應(yīng)的操作碼為惡意操作碼則在明文代碼中與所述惡意操作碼對應(yīng)的位置進(jìn)行標(biāo)示,用以方便技術(shù)人員進(jìn)行研究和整合。其中,明文代碼的獲取方法與確定所述JavaScript腳本代碼對應(yīng)的代碼信息的實(shí)現(xiàn)方法相同,在本實(shí)施例中,通過監(jiān)測預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器,如PDF閱讀器內(nèi)嵌的腳本解釋器,對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程來獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,并根據(jù)不同類型的代碼信息對應(yīng)的檢測規(guī)則來檢測所述JavaScript腳本代碼是否為惡意代碼,相比于現(xiàn)有技術(shù)不能有效地識(shí)別出通過PDF文件傳播的惡意JavaScript腳本代碼,能夠準(zhǔn)確地檢測出PDF文件中的惡意JavaScript代碼,提高了網(wǎng)絡(luò)資源的安全性。本發(fā)明實(shí)施例還提供了一種惡意代碼的檢測裝置,可實(shí)現(xiàn)上述如圖1至圖4所示的方法步驟。該裝置如圖5所示,包括:解混淆模塊31,用于提取PDF文件中的JavaScript腳本代碼;啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器,如PDF閱讀器內(nèi)嵌的腳本解釋器,對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和/或字符串變量。檢測模塊32,用于根據(jù)所述解混淆模塊31獲得的代碼信息的類型對應(yīng)的檢測規(guī)貝lj,檢測所述JavaScript腳本代碼是否為惡意代碼。可選的是,如圖6所示,所述裝置還包括:插樁注入模塊33,用于將庫文件插樁注入在所述腳本解釋器對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程中,所述庫文件用于獲取所述腳本解釋器在解混淆JavaScript腳本代碼進(jìn)程中產(chǎn)生的被解混淆的JavaScript腳本代碼對應(yīng)的代碼信息。可選的是,如圖7所示,所述檢測模塊32包括:第一匹配單元321,用于如果所述代碼信息的類型為操作碼,在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼。第一確定單元322,用于在所述第一匹配單元321在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;以及用于在所述第一匹配單元321在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼不是惡意代碼??蛇x的是,如圖8所示,所述檢測模塊32包括:第一獲取單元323,用于如果確定所述代碼信息的類型為字符串變量,獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度。第一判斷單元324,用于在所述第一獲取單元323獲取的字符串變量的長度位于第一區(qū)間時(shí),則獲取所述字符串變量對應(yīng)的第一特征參量;根據(jù)棧溢出檢測模型和所述第一特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;以及用于在所述第一獲取單元323獲取的字符串變量的長度位于第二區(qū)間時(shí),則獲取所述字符串變量對應(yīng)的第二特征參量;根據(jù)堆噴射檢測模型和所述第二特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。可選的是,所述第一特征參量至少可以包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第二特征參量至少可以包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。GetPC指令是指Shellcode中用于定位自身虛擬地址的指令;花指令是用于干擾反匯編引擎正確實(shí)現(xiàn)反匯編的代碼;字符串中出現(xiàn)GetPC指令和花指令的頻率可作為字符串中是否存在shellcode的部分依據(jù);脫殼代碼指紋是指加殼shellcode在執(zhí)行時(shí)總會(huì)自行脫殼,這些脫殼代碼的特征即為脫殼代碼指紋,該指紋的存在可作為存在shellcode的部分依據(jù);字符串信息熵是衡量字符串信息量大小的指標(biāo),如果字符串信息熵小于某一閥值,則可能存在堆噴射;Ν0Ρ指令為CPU空操作指令,當(dāng)串中包含大量NOP指令時(shí),則該段NOP指令可能為堆噴射shellcode的前導(dǎo)代碼(Slidge) ο可選的是,所述檢測模塊32具體用于如果所述代碼信息的類型為操作碼和字符串變量,根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼;以及,根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。以及,用于當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼或根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼時(shí),確定所述JavaScript腳本代碼為惡意代碼。以及,用于當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼且根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼時(shí),確定所述JavaScript腳本代碼不為惡意代碼;如圖9所示,所述檢測模塊32進(jìn)一步包括:第二匹配單元325,用于在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼。第二確定單元326,用于在所述第二匹配單元325確定在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;以及用于在所述第二匹配單元325確定在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼不是惡意代碼。如圖9所示,所述檢測模塊進(jìn)一步還可以包括:第二獲取單元327,用于獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度。第二判斷單元328,用于在所述第二獲取單元327獲取的所述字符串變量的長度位于第三區(qū)間,則獲取所述字符串變量對應(yīng)的第三特征參量;根據(jù)棧溢出檢測模型和所述第三特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;以及用于在所述第二獲取單元327獲取的所述字符串變量的長度位于第四區(qū)間時(shí),獲取所述字符串變量對應(yīng)的第四特征參量;根據(jù)堆噴射檢測模型和所述第四特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼??蛇x的是,所述 第三特征參量至少可以包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第四特征參量至少可以包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。在本實(shí)施例中,惡意代碼的檢測裝置通過監(jiān)測預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器,如TOF閱讀器內(nèi)嵌的腳本解釋器,對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程來獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,并根據(jù)不同類型的代碼信息對應(yīng)的檢測規(guī)則來檢測所述JavaScript腳本代碼是否為惡意代碼,相比于現(xiàn)有技術(shù)不能有效地識(shí)別出通過PDF文件傳播的惡意JavaScript腳本代碼,能夠準(zhǔn)確地檢測出PDF文件中的惡意JavaScript代碼,提高了網(wǎng)絡(luò)資源的安全性。本發(fā)明實(shí)施例還提供了一種檢測設(shè)備,可實(shí)現(xiàn)上述如圖1至圖4所示的方法步驟。該設(shè)備如圖10所示,包括處理器(processor)41和存儲(chǔ)器42。存儲(chǔ)器42可以包括隨機(jī)存取存儲(chǔ)器(RAM)等。所述存儲(chǔ)器42被配置存儲(chǔ)程序代碼(code);所述處理器41被配置讀取所述存儲(chǔ)器中存儲(chǔ)的程序代碼,從而執(zhí)行方法實(shí)施例中的各步驟。所述處理器41與所述存儲(chǔ)器42通過總線進(jìn)行通信。所述存儲(chǔ)器42還用于存儲(chǔ)F1DF文件中的JavaScript腳本代碼和所述JavaScript腳本代碼對應(yīng)的代碼信息。所述處理器41,用于提取存儲(chǔ)器42存儲(chǔ)的PDF文件中的JavaScript腳本代碼;啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和字符串變量。所述存儲(chǔ)器42,還用于存儲(chǔ)庫文件。可選的是,所述處理器41,還用于將所述存儲(chǔ)器42存儲(chǔ)的庫文件插樁注入在所述支持TOF標(biāo)準(zhǔn)的腳本解釋器,例如預(yù)定的PDF閱讀器內(nèi)嵌的腳本解釋器,對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程中,所述庫文件用于獲取所述腳本解釋器在解混淆JavaScript腳本代碼進(jìn)程中產(chǎn)生的被解混淆的JavaScript腳本代碼對應(yīng)的代碼信息??蛇x的是,所述處理器41,用于如果所述存儲(chǔ)器42存儲(chǔ)的所述代碼信息的類型為操作碼,在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則確定所述JavaScript腳本代碼為惡意代碼;若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則確定所述JavaScript腳本代碼不是惡意代碼。所述存儲(chǔ)器42,用于存儲(chǔ)惡意操作碼特征庫??蛇x的是,所述處理器41,用于如果所述存儲(chǔ)器42存儲(chǔ)的所述代碼信息的類型為字符串變量時(shí),獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;若所述字符串變量的長度位于第一區(qū)間,則獲取所述字符串變量對應(yīng)的第一特征參量;根據(jù)棧溢出檢測模型和所述第一特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;若所述字符串變量的長度位于第二區(qū)間,則獲取所述字符串變量對應(yīng)的第二特征參量;根據(jù)堆噴射檢測模型和所述第二特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。所述存儲(chǔ)器42,用于存儲(chǔ)所述JavaScript腳本代碼對應(yīng)的字符串的長度、第一特征參量、第二特征參量、第一區(qū)間、第二區(qū)間、棧溢出檢測模型、堆噴射檢測模型。其中,所述第一特征參量至少可以包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第二特征參量至少可以包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合??蛇x的是,所述處理器41,用于如果所述存儲(chǔ)器42存儲(chǔ)的所述代碼信息的類型為操作碼和字符串變量,根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼;以及,根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼;當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼,或根據(jù)所述字符串對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼,且根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼時(shí),確定所述JavaScript腳本代碼不為惡意代碼。進(jìn)一步的,所述處理器41根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼的實(shí)現(xiàn)方法具體包括:在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則確定所述JavaScript腳本代碼為惡意代碼;若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則確定所述JavaScript腳本代碼不是惡意代碼;所述處理器41根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼的實(shí)現(xiàn)方法具體包括:獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;若所述字符串變量的長度位于第三區(qū)間,則獲取所述字符串變量對應(yīng)的第三特征參量;根據(jù)棧溢出檢測模型和所述第三特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;若所述字符串變量的長度位于第四區(qū)間,則獲取所述字符串變量對應(yīng)的第四特征參量;根據(jù)堆噴射檢測模型和所述第四特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼??蛇x地,所述第三特征參量至少可以包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第四特征參量至少可以包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。在本實(shí)施例中,檢測設(shè)備通過監(jiān)測預(yù)定的TOF閱讀器內(nèi)嵌的腳本解釋器對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程來獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,并根據(jù)不同類型的代碼信息對應(yīng)的檢測規(guī)則來檢測所述JavaScript腳本代碼是否為惡意代碼,相比于現(xiàn)有技術(shù)不能有效地識(shí)別出通過PDF文件傳播的惡意JavaScript腳本代碼,能夠準(zhǔn)確地檢測出待檢測PDF文件中的惡意JavaScript代碼,提高了網(wǎng)絡(luò)資源的安全性。通過以上的實(shí)施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在可讀取的存儲(chǔ)介質(zhì)中,如計(jì)算機(jī)的軟盤,硬盤或光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種惡意代碼的檢測方法,其特征在于,包括: 提取便攜文件格式PDF文件中的JavaScript腳本代碼; 啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和字符串變量; 根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述啟動(dòng)預(yù)定的支持TOF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程之前,還包括: 將庫文件插樁注入在所述腳本解釋器對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程中,所述庫文件用于獲取所述腳本解釋器在解混淆JavaScript腳本代碼進(jìn)程中產(chǎn)生的被解混淆JavaScript腳本代碼對應(yīng)的代碼信息。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,如果所述代碼信息的類型為操作碼,則所述根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括: 在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼; 若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則確定所述JavaScript腳本代碼為惡意代碼; 若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則確定所述JavaScript腳本代碼不是惡意代碼。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,如果所述代碼信息的類型為字符串變量,則所述根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括: 獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度; 若所述字符串變量的長度位于第一區(qū)間,則獲取所述字符串變量對應(yīng)的第一特征參量;根據(jù)棧溢出檢測模型和所述第一特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼; 若所述字符串變量的長度位于第二區(qū)間,則獲取所述字符串變量對應(yīng)的第二特征參量;根據(jù)堆噴射檢測模型和所述第二特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述第一特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第二特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。
6.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,如果所述代碼信息的類型為操作碼和字符串,則所述根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼包括: 根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼;以及, 根據(jù)所述字符串對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼; 當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼,或根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼時(shí),則確定所述JavaScript腳本代碼為惡意代碼; 當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼,且根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼時(shí),則確定所述JavaScript腳本代碼不為惡意代碼; 其中,所述根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼包括: 在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼;若在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼,則確定所述JavaScript腳本代碼為惡意代碼;若在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼,則確定所述JavaScript腳本代碼不是惡意代碼; 所述根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼包括: 獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度;若所述字符串變量的長度位于第三區(qū)間,則獲取所述字符串變量對應(yīng)的第三特征參量;根據(jù)棧溢出檢測模型和所述第三特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;若所述字符串變量的長度位于第四區(qū)間,則獲取所述字符串變量對應(yīng)的第四特征參量;根據(jù)堆噴射檢測模型和所述第四特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第三特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第四特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。
8.—種惡意代碼的檢測裝置,其特征在于,包括: 解混淆模塊,用于提取PDF文件中的JavaScript腳本代碼;啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和字符串變量; 檢測模塊,用于根據(jù)所述解混淆模塊獲得的代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括: 插樁注入模塊,用于將庫文件插樁注入在所述腳本解釋器對所述JavaScript腳本代碼運(yùn)行的解混淆進(jìn)程中,所述庫文件用于獲取所述腳本解釋器在解混淆JavaScript腳本代碼進(jìn)程中產(chǎn)生的被解混淆JavaScript腳本代碼對應(yīng)的代碼信息。
10.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,則所述檢測模塊包括: 第一匹配單元,用于如果所述代碼信息的類型為操作碼,在已存儲(chǔ)的惡意操作碼特征庫中匹配所述JavaScript腳本代碼對應(yīng)的操作碼; 第一確定單元,用于在所述第一匹配單元在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;以及用于在所述第一匹配單元在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼不是惡意代碼。
11.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,則所述檢測模塊包括: 第一獲取單元,用于如果所述代碼信息的類型為字符串變量,獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度; 第一判斷單元,用于在所述第一獲取單元獲取的字符串變量的長度位于第一區(qū)間時(shí),則獲取所述字符串變量對應(yīng)的第一特征參量;根據(jù)棧溢出檢測模型和所述第一特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;以及用于在所述第一獲取單元獲取的字符串變量的長度位于第二區(qū)間時(shí),則獲取所述字符串變量對應(yīng)的第二特征參量;根據(jù)堆噴射檢測模型和所述第二特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述第一特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第二特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。
13.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,所述檢測模塊具體用于如果所述代碼信息的類型為操作碼和字符串變量,根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼;以及,根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼; 以及,用于當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼或根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼為惡意代碼時(shí),確定所述JavaScript腳本代碼為惡意代碼; 以及,用于當(dāng)根據(jù)所述操作碼對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼且根據(jù)所述字符串變量對應(yīng)的檢測規(guī)則,確定所述JavaScript腳本代碼不為惡意代碼時(shí),確定所述JavaScript腳本代碼不為惡意代碼; 所述檢測模塊進(jìn)一步包括: 第二匹配單元,用于在已存儲(chǔ)的惡意操作碼中匹配所述JavaScript腳本代碼對應(yīng)的操作碼; 第二確定單元,用于在所述第二匹配單元確定在已存儲(chǔ)的惡意操作碼特征庫中匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼為惡意代碼;以及用于在所述第二匹配單元確定在已存儲(chǔ)的惡意操作碼特征庫中未匹配到所述操作碼時(shí),確定所述JavaScript腳本代碼不是惡意代碼; 所述檢測模塊進(jìn)一步還包括: 第二獲取單元,用于獲取所述JavaScript腳本代碼對應(yīng)的字符串變量的長度; 第二判斷單元,用于在所述第二獲取單元獲取的所述字符串變量的長度位于第三區(qū)間,則獲取所述字符串變量對應(yīng)的第三特征參量;根據(jù)棧溢出檢測模型和所述第三特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼;以及用于在所述第二獲取單元獲取的所述字符串變量的長度位于第四區(qū)間時(shí),獲取所述字符串變量對應(yīng)的第四特征參量;根據(jù)堆噴射檢測模型和所述第四特征參量,判斷所述JavaScript腳本代碼是否為惡意代碼。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述第三特征參量包括GetPC指令出現(xiàn)頻率、花指令出現(xiàn)頻率、是否包含已知脫殼代碼指紋中的一種或多種的組合;所述第四特征參量包括字符串信息熵值、NOP指令出現(xiàn)頻率中的一種或多種的組合。
15.一種檢測設(shè)備, 其特征在于,包括存儲(chǔ)器和處理器,其中: 所述存儲(chǔ)器被配置存儲(chǔ)代碼; 所述處理器被配置讀取所述存儲(chǔ)器中存儲(chǔ)的代碼,執(zhí)行如權(quán)利要求1至7任一所述的方法。
全文摘要
一種惡意代碼的檢測方法及裝置,涉及通信安全領(lǐng)域,提高了對惡意JavaScript代碼的檢測準(zhǔn)確率。包括提取PDF文件中的JavaScript腳本代碼;啟動(dòng)預(yù)定的支持PDF標(biāo)準(zhǔn)的腳本解釋器對所述JavaScript腳本代碼運(yùn)行解混淆進(jìn)程,并根據(jù)所述解混淆進(jìn)程,獲得所述JavaScript腳本代碼對應(yīng)的代碼信息,所述代碼信息的類型包括操作碼和字符串變量;根據(jù)所述代碼信息的類型對應(yīng)的檢測規(guī)則,檢測所述JavaScript腳本代碼是否為惡意代碼。
文檔編號(hào)G06F21/56GK103221960SQ201280002026
公開日2013年7月24日 申請日期2012年12月10日 優(yōu)先權(quán)日2012年12月10日
發(fā)明者諸葛建偉, 錢曉斌, 侯永干, 富鍵, 陸恂, 王若愚 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
托克托县| 西宁市| 洛川县| 沭阳县| 永善县| 南川市| 双江| 三门县| 眉山市| 玉环县| 务川| 克拉玛依市| 樟树市| 比如县| 高雄市| 通河县| 静安区| 阜平县| 昭平县| 花莲县| 昌平区| 达尔| 辉南县| 日喀则市| 万年县| 霍城县| 云浮市| 和政县| 城口县| 钟山县| 德州市| 墨竹工卡县| 涞源县| 阳城县| 赞皇县| 夏河县| 舟山市| 嘉黎县| 黄陵县| 武威市| 阳泉市|