一種檢測(cè)惡意代碼的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域,特別涉及一種檢測(cè)惡意代碼的方法及裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,惡意代碼的類型隨之日漸豐富,惡意軟件的檢測(cè)機(jī)制也不斷完善。為逃避傳統(tǒng)機(jī)制的檢測(cè),惡意代碼的自解碼技術(shù)應(yīng)運(yùn)而生,并已被各種高級(jí)惡意軟件廣泛使用。所謂自解碼惡意代碼,通常狀態(tài)下該代碼處于一種偽裝狀態(tài),在特定的條件下被觸發(fā)運(yùn)行,其顯著特征是邊運(yùn)行邊解碼。
[0003]目前常用的惡意代碼檢測(cè)技術(shù)主要有簽名檢測(cè)技術(shù)、沙箱檢測(cè)技術(shù)等。
[0004]現(xiàn)有的檢測(cè)技術(shù)中,簽名檢測(cè)技術(shù)只能檢測(cè)已知的非加密惡意代碼;而沙箱檢測(cè)技術(shù)通過觸發(fā)惡意代碼進(jìn)行檢測(cè),易受操作系統(tǒng)和應(yīng)用程序的限制,且不適宜在線部署。
[0005]由此可見,現(xiàn)有的惡意代碼檢測(cè)技術(shù)不能有效地檢測(cè)出自解碼惡意代碼,這就需要一種新的檢測(cè)技術(shù)來解決現(xiàn)有技術(shù)中存在的缺陷。
【發(fā)明內(nèi)容】
[0006]本申請(qǐng)實(shí)施例提供一種檢測(cè)惡意代碼的方法及裝置,用以提高自解碼惡意代碼檢測(cè)的準(zhǔn)確率。
[0007]本申請(qǐng)實(shí)施例提供一種檢測(cè)惡意代碼的方法,包括:
[0008]獲取待檢測(cè)文件,并從待檢測(cè)文件中讀取指令,每讀取一條指令,執(zhí)行該指令并記錄執(zhí)行結(jié)果,以及將此執(zhí)行結(jié)果與預(yù)設(shè)的行為特征模型進(jìn)行匹配;其中,上述行為特征模型是基于海量的自解碼惡意代碼運(yùn)行后產(chǎn)生的行為數(shù)據(jù)生成的;
[0009]確定讀取到的任意一條指令的執(zhí)行結(jié)果與上述行為特征模型匹配成功時(shí),判定待檢測(cè)文件包含自解碼惡意代碼。
[0010]這樣,通過對(duì)待檢測(cè)文件進(jìn)行反編譯,可以逐條讀取并執(zhí)行其包含的指令,并對(duì)這些指令的執(zhí)行結(jié)果進(jìn)行行為特征匹配,從而能夠準(zhǔn)確地判定待檢測(cè)文件是否包含有自解碼惡意代碼,有效提高了檢測(cè)自解碼惡意代碼的準(zhǔn)確率,減少了漏檢率,進(jìn)而提高了系統(tǒng)的安全性。
[0011]較佳的,從待檢測(cè)文件中讀取一條指令,包括:
[0012]在待檢測(cè)文件對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流中,確定當(dāng)前的字節(jié)讀取起始位置;
[0013]基于預(yù)設(shè)的字節(jié)數(shù)目集合,從當(dāng)前的字節(jié)讀取起始位置開始,依次讀取符合上述字節(jié)數(shù)目集合的數(shù)據(jù)段,每讀取到一個(gè)數(shù)據(jù)段,對(duì)讀取到的數(shù)據(jù)段進(jìn)行反編譯獲得反編譯結(jié)果,以及將獲得的反編譯結(jié)果與預(yù)設(shè)的指令集進(jìn)行匹配,直到確定匹配成功為止,并將匹配成功的反編譯結(jié)果判定為一條指令。
[0014]較佳的,執(zhí)行讀取到的一條指令,包括:
[0015]讀取到一條指令,將讀取到的一條指令放到CPU編輯器中執(zhí)行,并記錄執(zhí)行結(jié)果,以及記錄讀取下一條指令的字節(jié)起始位置。
[0016]較佳的,每讀取一條指令之前,進(jìn)一步包括:
[0017]確定執(zhí)行上一條指令后記錄的下一條指令的字節(jié)起始位置,位于待檢測(cè)文件對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流中時(shí),判定該字節(jié)起始位置有效。
[0018]這樣,可以避免無效指令帶來的資源消耗,節(jié)省軟硬件資源。
[0019]較佳的,確定讀取到的任意一條指令的執(zhí)行結(jié)果與上述行為特征模型匹配成功,包括:
[0020]確定讀取到的上述任意一條指令的執(zhí)行結(jié)果表征上述任意一條指令涉及寫錄操作且循環(huán)執(zhí)行次數(shù)達(dá)到設(shè)定門限時(shí),判定上述任意一條指令的執(zhí)行結(jié)果與上述行為特征模型匹配成功。
[0021]較佳的,判定上述待檢測(cè)文件包含自解碼惡意代碼之后,進(jìn)一步包括:
[0022]基于從待檢測(cè)文件中已讀取的各個(gè)指令的執(zhí)行結(jié)果對(duì)應(yīng)的行為特征,對(duì)上述行為特征模型進(jìn)行更新。
[0023]這樣,可以通過自學(xué)習(xí)方式對(duì)行為特征模型進(jìn)行優(yōu)化,在后續(xù)的檢測(cè)過程中,能夠進(jìn)一步提高檢測(cè)自解碼惡意代碼的準(zhǔn)確率。
[0024]本申請(qǐng)實(shí)施例提供一種檢測(cè)惡意代碼的裝置,包括:
[0025]提取模塊,用于獲取待檢測(cè)文件,并從待檢測(cè)文件中讀取指令,每讀取一條指令,執(zhí)行該指令并記錄執(zhí)行結(jié)果,以及將該執(zhí)行結(jié)果與預(yù)設(shè)的行為特征模型進(jìn)行匹配;其中,上述行為特征模型是基于海量的自解碼惡意代碼運(yùn)行后產(chǎn)生的行為數(shù)據(jù)生成的;
[0026]判定模塊,用于確定讀取到的任意一條指令與上述行為特征模型匹配成功時(shí),判定該待檢測(cè)文件包含自解碼惡意代碼。
[0027]這樣,通過對(duì)待檢測(cè)文件進(jìn)行反編譯,可以逐條讀取并執(zhí)行其包含的指令,并對(duì)這些指令的執(zhí)行結(jié)果進(jìn)行行為特征匹配,從而能夠準(zhǔn)確地判定待檢測(cè)文件是否包含有自解碼惡意代碼,有效提高了檢測(cè)自解碼惡意代碼的準(zhǔn)確率,減少了漏檢率,進(jìn)而提高了系統(tǒng)的安全性。
[0028]較佳的,從待檢測(cè)文件中讀取一條指令時(shí),提取模塊用于:
[0029]在待檢測(cè)文件對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流中,確定當(dāng)前的字節(jié)讀取起始位置;
[0030]基于預(yù)設(shè)的字節(jié)數(shù)目集合,從當(dāng)前的字節(jié)讀取起始位置開始,依次讀取符合上述字節(jié)數(shù)目集合的數(shù)據(jù)段,每讀取到一個(gè)數(shù)據(jù)段,對(duì)讀取到的數(shù)據(jù)段進(jìn)行反編譯獲得反編譯結(jié)果,以及將獲得的反編譯結(jié)果與預(yù)設(shè)的指令集進(jìn)行匹配,直到確定匹配成功為止,并將匹配成功的反編譯結(jié)果判定為一條指令。
[0031]較佳的,執(zhí)行讀取到的一條指令時(shí),提取模塊進(jìn)一步用于:
[0032]讀取到一條指令,將讀取到的一條指令放到CPU編輯器中執(zhí)行,并記錄執(zhí)行結(jié)果,以及記錄讀取下一條指令的字節(jié)起始位置。
[0033]較佳的,每讀取一條指令之前,提取模塊進(jìn)一步用于:
[0034]確定執(zhí)行上一條指令后記錄的下一條指令的字節(jié)起始位置,位于待檢測(cè)文件對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流中時(shí),判定該字節(jié)起始位置有效。
[0035]這樣,可以避免無效指令帶來的資源消耗,節(jié)省軟硬件資源。
[0036]較佳的,確定讀取到的任意一條指令的執(zhí)行結(jié)果與上述行為特征模型匹配成功時(shí),判斷模塊用于:
[0037]確定讀取到的任意一條指令的執(zhí)行結(jié)果表征上述任意一條指令涉及寫錄操作且循環(huán)執(zhí)行次數(shù)達(dá)到設(shè)定門限時(shí),判定上述任意一條指令的執(zhí)行結(jié)果與上述行為特征模型匹配成功。
[0038]較佳的,判定待檢測(cè)文件包含自解碼惡意代碼之后,判定模塊進(jìn)一步用于:
[0039]基于從待檢測(cè)文件中已讀取的各個(gè)指令的執(zhí)行結(jié)果對(duì)應(yīng)的行為特征,對(duì)行為特征模型進(jìn)行更新。
[0040]這樣,可以通過自學(xué)習(xí)方式對(duì)行為特征模型進(jìn)行優(yōu)化,在后續(xù)的檢測(cè)過程中,能夠進(jìn)一步提高檢測(cè)自解碼惡意代碼的準(zhǔn)確率。
【附圖說明】
[0041]圖1為本發(fā)明實(shí)施例中檢測(cè)自解碼惡意代碼流程圖;
[0042]圖2為本發(fā)明實(shí)施例中設(shè)定自解碼惡意代碼的判定門限值流程圖;
[0043]圖3為本申請(qǐng)實(shí)施例中檢測(cè)自解碼惡意代碼的裝置功能結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0044]為了提高自解碼惡意代碼檢測(cè)的準(zhǔn)確率,本發(fā)明實(shí)施例中,獲取待檢測(cè)文件,執(zhí)行從待檢測(cè)文件中反編譯得到的指令并記錄執(zhí)行結(jié)果,以及將該執(zhí)行結(jié)果與預(yù)設(shè)的行為特征模型進(jìn)行匹配,以判定上述待檢測(cè)文件是否包含自解碼惡意代碼。
[0045]下面結(jié)合說明書附圖,對(duì)本申請(qǐng)實(shí)施例進(jìn)行詳細(xì)描述。
[0046]參閱圖1所示,本發(fā)明實(shí)施例中,針對(duì)待檢測(cè)文件進(jìn)行自解碼惡意代碼檢測(cè)的具體過程如下:
[0047]步驟100:獲取待檢測(cè)文件,并從待檢測(cè)文件中讀取指令,每讀取一條指令,執(zhí)行上述一條指令并記錄執(zhí)行結(jié)果,以及將上述執(zhí)行結(jié)果與預(yù)設(shè)的行為特征模型進(jìn)行匹配;其中,上行為特征模型是基于海量的自解碼惡意代碼運(yùn)行后產(chǎn)生的行為數(shù)據(jù)生成的;
[0048]具體的,在從待檢測(cè)文件中讀取指令時(shí),可以采用但不限于以下方式:
[0049]在待檢測(cè)文件對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)流中,確定當(dāng)前的字節(jié)讀取起始位置;
[0050]基于預(yù)設(shè)的字節(jié)數(shù)目集合,從當(dāng)前的字節(jié)讀取起始位置開始,依次讀取符合上述字節(jié)數(shù)目集合的數(shù)據(jù)段,每讀取到一個(gè)數(shù)據(jù)段,對(duì)讀取到的數(shù)據(jù)段進(jìn)行反編譯獲得反編譯結(jié)果,以及將獲得的反編譯結(jié)果與預(yù)設(shè)的指令集進(jìn)行匹配,直到確定匹配成功為止,并將匹配成功的反編譯結(jié)果判定為一條指令。
[0051]例如:設(shè)定的字節(jié)數(shù)目集合包含的字節(jié)數(shù)目分別為1、2、3,檢測(cè)目標(biāo)為長(zhǎng)度是10的數(shù)據(jù)流aabbbcdddc,檢測(cè)方向從左到右,且當(dāng)前檢測(cè)位置為數(shù)據(jù)流最左位。
[0052]當(dāng)前位置若讀取字節(jié)數(shù)目為I的數(shù)據(jù)段,可得到的數(shù)據(jù)段為a,進(jìn)行反編譯
[0053]若讀取字節(jié)數(shù)目為2的數(shù)據(jù)段,可得到的數(shù)據(jù)段為aa;
[0054]若讀取字節(jié)數(shù)目為3的數(shù)據(jù)段,可得到的數(shù)據(jù)段為aab。
[0055]當(dāng)前起始位置的所有字節(jié)數(shù)目數(shù)據(jù)段讀取完畢,未檢測(cè)到有效的指令,則設(shè)定數(shù)據(jù)段左側(cè)第二位為起始檢測(cè)位置。
[0056]此時(shí)若讀取字節(jié)數(shù)目為I的數(shù)據(jù)段,可得到的數(shù)據(jù)段為a;
[0057]若讀取字節(jié)數(shù)目為2的數(shù)據(jù)段,可得到的數(shù)據(jù)段