本發(fā)明涉及數據檢測技術領域,尤指一種數據檢測方法和裝置。
背景技術:
目前,主要通過兩種方式對數據中的惡意代碼進行檢測,一種是基于傳統(tǒng)特征進行檢測,例如殺毒軟件通常采用這種方式,一個是基于行為進行檢測,例如沙箱通常采用這種方式。
基于傳統(tǒng)特征進行檢測的方式中,都是先由安全廠商的安全分析人員在已捕獲惡意樣本的前提下,對樣本進行特征提取,并通過提取的特征對惡意代碼進行檢測。傳統(tǒng)特征方式,檢測準確,效率高,但由于其特征一般都是無意義的二進制數據(比如文件的MD5值),提取的內容通常只用于確定惡意樣本,沒有額外的功能,在遇到病毒變種,或新的惡意代碼時,它通常無能為力,需要通過安全分析人員重新根據捕獲的惡意樣本進行特征提取。
基于行為進行檢測的方式中,通常是讓樣本在虛擬環(huán)境中運行起來,通過分析樣本的行為來確定樣本中是否存在惡意代碼。這種方式的一個重要弊端是,只有惡意代碼運行起來,才能被檢測到,如果因為環(huán)境不符,沙箱對抗等原因,導致惡意代碼沒有運行,則惡意代碼無法被檢測到,因此這種方式的檢測準確率較低。
技術實現(xiàn)要素:
為了解決上述問題,本發(fā)明提出了一種數據檢測方法和裝置,能夠提高惡意代碼的檢測效率和檢出率。
為了解決上述技術問題,本發(fā)明提出了一種數據檢測方法,包括:
獲取待檢測的機器碼流對應的機器指令;
判斷連續(xù)的合法機器指令的數目是否達到預定的閾值;
如果連續(xù)的合法機器指令的數目達到預定的閾值,則判斷待檢測的機器碼流中存在可疑代碼。
優(yōu)選的,所述獲取待檢測的機器碼流對應的機器指令包括:
根據當前數據地址,對機器碼流進行翻譯,獲取翻譯得到的機器指令;
在所述翻譯執(zhí)行之后,還包括:將當前數據地址跟新為指向下一段未翻譯的機器碼流。
優(yōu)選的,所述判斷連續(xù)的合法機器指令的數目是否達到預定的閾值包括:
在翻譯不能獲得合法機器指令的情況下,將指令計數器設置為0,繼續(xù)執(zhí)行所述根據當前數據地址,對機器碼流進行翻譯的步驟;
在翻譯得到一條合法機器指令的情況下,將指令計數器加1;
判斷指令計數器的計數數目是否達到預定的閾值;如果沒達到,則判斷待檢測的機器碼流是否已全部翻譯完畢;如果沒有全部翻譯完畢,則繼續(xù)執(zhí)行所述根據當前數據地址,對機器碼流進行翻譯的步驟。
優(yōu)選的,在所述獲取待檢測的機器碼流對應的機器指令之后,所述方法還包括:
判斷所述機器指令是否為跳轉指令;
在所述機器指令不是跳轉指令的情況下,繼續(xù)執(zhí)行所述根據當前數據地址,對機器碼流進行翻譯的步驟;
在該機器指令是跳轉指令的情況下,根據跳轉指令的內容更新當前數據地址,繼續(xù)執(zhí)行所述根據當前數據地址,對機器碼進行翻譯的步驟。
優(yōu)選的,所述預定的閾值設置為50~150。
為了解決上述技術問題,本發(fā)明還提出了一種數據檢測裝置,所述裝置包括:
翻譯單元,用于獲取待檢測的機器碼流對應的機器指令;
檢測單元,用于判斷連續(xù)的合法機器指令的數目是否達到預定的閾值;
結果判斷單元,用于在連續(xù)的合法機器指令的數目達到預定的閾值時,則判斷待檢測的機器碼流中存在可疑代碼。
優(yōu)選的,所述翻譯單元包括:
翻譯模塊,用于根據當前數據地址,對機器碼流進行翻譯,獲取翻譯得到的機器指令;
地址更新模塊,用于在翻譯模塊執(zhí)行翻譯之后,將當前數據地址跟新為指向下一段未翻譯的機器碼流。
優(yōu)選的,所述檢測單元包括:
指令計數模塊,用于在翻譯單元執(zhí)行翻譯不能獲得合法機器指令的情況下,將指令計數器設置為0,并繼續(xù)通過翻譯模塊執(zhí)行所述根據當前數據地址,對機器碼流進行翻譯;在翻譯單元執(zhí)行翻譯得到一條合法機器指令的情況下,將指令計數器加1;
計數檢測模塊,用于判斷指令計數器的計數數目是否達到預定的閾值;如果沒達到,則判斷待檢測的機器碼流是否已全部翻譯完畢;如果沒有全部翻譯完畢,則繼續(xù)通過翻譯模塊執(zhí)行所述根據當前數據地址,對機器碼流進行翻譯。
優(yōu)選的,所述檢測單元還包括:跳轉檢測模塊,用于
在翻譯單元獲取待檢測的機器碼流對應的機器指令之后,判斷所述機器指令是否為跳轉指令;在該機器指令是跳轉指令的情況下,通知地址更新模塊根據跳轉指令的內容更新當前數據地址。
優(yōu)選的,所述預定的閾值設置為50~150。
與現(xiàn)有技術相比,本發(fā)明提供的技術方案包括:獲取待檢測的機器碼流對應的機器指令;判斷連續(xù)的合法機器指令的數目是否達到預定的閾值;如果連續(xù)的合法機器指令的數目達到預定的閾值,則判斷待檢測的機器碼流中存在可疑代碼。通過本發(fā)明的方案,通過對連續(xù)的機器指令進行計數的方式進行檢測。在檢測可以代碼時,不需要提取惡意樣本,因此在病毒變種或者面對新的惡意代碼時,不會由于確認惡意樣本而無法識別,本發(fā)明的檢測方法具有較好的適應性和較快的應變能力,此外,本發(fā)明實施例提供的檢測方法中,不需要運行樣本,不會由于環(huán)境不符或沙箱對抗導致惡意代碼沒有運行時,而造成惡意代碼無法被檢測到,因此,具有較高的檢出率,檢測準確率較高。
附圖說明
下面對本發(fā)明實施例中的附圖進行說明,實施例中的附圖是用于對本發(fā)明的進一步理解,與說明書一起用于解釋本發(fā)明,并不構成對本發(fā)明保護范圍的限制。
圖1為本發(fā)明實施例提供的一種數據檢測方法的流程圖;
圖2為本發(fā)明實施例提供的另一種數據檢測方法的流程圖;
圖3A和圖3B分別為本發(fā)明實施例提供的數據檢測裝置的結構示意圖。
具體實施方式
為了便于本領域技術人員的理解,下面結合附圖對本發(fā)明作進一步的描述,并不能用來限制本發(fā)明的保護范圍。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的各種方式可以相互組合。
參見圖1,本發(fā)明提出了一種數據檢測方法,所述方法包括:
步驟110,獲取數據中待檢測的機器碼流對應的機器指令;
步驟120,判斷連續(xù)的合法機器指令的數目是否達到預定的閾值;
步驟130,如果連續(xù)的合法機器指令的數目達到預定的閾值,則判斷待檢測的機器碼流中存在可疑代碼。
其中,步驟110中,所述獲取機器碼流對應的機器指令包括:
根據當前數據地址,對機器碼流進行翻譯,從而得到對應的機器指令。在所述翻譯執(zhí)行之后,還包括:將當前數據地址跟新為指向下一段未翻譯的機器碼流。
參見圖2,本發(fā)明提出了一種數據檢測方法,所述方法包括:
步驟210,根據當前數據地址,對機器碼流進行翻譯。
其中,根據預定的合法性規(guī)則,對機器碼流進行翻譯,例如,合法性規(guī)則可以是基于某CPU平臺的指令集,根據指令集定義的機器碼流與機器指令之間的映射關系,對機器碼流進行翻譯。
步驟220,在翻譯不能獲得機器指令的情況下,將指令計數器設置為0;更新當前數據地址,繼續(xù)執(zhí)行步驟210;
本發(fā)明實施例中,指令計數器用于對連續(xù)的機器指令進行計數,指令計數器的初始值為0。
步驟230,在翻譯得到一條機器指令的情況下,將指令計數器加1;
在當前指令計數器為非零的情況下,只有當翻譯得到的機器指令與上一條機器指令是連續(xù)的機器指令,才會將指令計數器加1,如果檢測到無法翻譯成機器指令的機器碼流片段,則會將指令計數器設置為0。
步驟240,判斷指令計數器的計數數目是否達到預定的閾值;
步驟250,如果指令計數器的計數數目達到預定的閾值,則判斷數據中存在可疑代碼;
步驟260,如果指令計數器的計數數目沒有達到預定的閾值,判斷該機器指令是否為跳轉指令;
在該機器指令不是跳轉指令的情況下,根據更新的當前數據地址,繼續(xù)執(zhí)行步驟210;
步驟270,在該機器指令是跳轉指令的情況下,根據跳轉指令的內容更新當前數據地址,繼續(xù)執(zhí)行步驟210;
本發(fā)明實施例中的跳轉指令是指call指令以外的跳轉指令,也就是說對call指令以外的跳轉指令進行地址跳轉翻譯操作。
本實施例中,有兩種翻譯方式,第一種翻譯方式是,對機器碼流進行翻譯時,能夠翻譯成機器指令的部分,則翻譯成機器指令,機器指令指合法的機器指令,不能翻譯成機器指令的部分,放棄翻譯成機器指令,第二種翻譯方式是,對于不能翻譯成機器指令的部分,則翻譯成預設的翻譯代碼,該翻譯代碼和合法的機器指令統(tǒng)稱為翻譯指令,上述實施例中,采用第一種翻譯方式。下面結合另一個具體的示例進行說明。該實例中,采用第一種翻譯方式。
步驟310,對數據對應的機器碼流進行翻譯,并獲取對應的翻譯指令;
本發(fā)明實施例中,根據機器指令的相關定義制定翻譯規(guī)則,并將根據翻譯規(guī)則對機器碼流進行翻譯得到的內容稱為翻譯指令。
步驟320,在獲取翻譯指令之后,檢測翻譯指令是否為合法的機器指令;
其中,檢測翻譯指令是否為合法的機器指令包括:根據預定的合法性規(guī)則判斷所述翻譯指令是否為合法的機器指令。
其中,機器指令是在CPU平臺中根據預定的指令規(guī)則預定義好的,符合這個預定規(guī)則的翻譯指令稱為合法的機器指令,不符合的稱為非法指令。
步驟330,判斷連續(xù)的合法的機器指令的數目是否達到預定的閾值;
步驟340,如果連續(xù)的合法的機器指令的數目達到預定的閾值,則判斷數據中存在可疑代碼。
步驟350,是否完成全部機器碼流的翻譯,如果已經完成全部機器碼流的翻譯,執(zhí)行步驟360,如果沒有完成全部機器碼流的翻譯,執(zhí)行步驟310。
本實施例中,步驟310和其他的步驟不存在特定的執(zhí)行順序,對機器碼流的翻譯可以持續(xù)進行,翻譯得到的翻譯指令由其他單元進行相應的處理。
步驟360,判斷數據中不存在可疑代碼。
其中,步驟330中,可以通過指令計數器對合法的機器指令進行計數,從而判斷連續(xù)的合法的機器指令的數目是否達到預定的閾值。
所述判斷連續(xù)的合法的機器指令的數目是否達到預定的閾值包括:
如果翻譯指令是合法的機器指令,將指令計數器加1,如果翻譯指令不是合法的機器指令,將指令計數器清零;
判斷指令計數器的計數值是否到達預定的閾值;
本發(fā)明實施例中,所述預定的閾值設置為50~150。其中,可以根據經驗對預定的閾值進行設置。
下面結合具體的實施場景進行說明,
參見表1,為對機器碼流進行翻譯的示意數據。
表1為對機器碼流進行翻譯的示意數據
左側為機器碼流,例如,60、8B 74 24 24等均為機器碼流,其中,60對應的當前數據地址為0000009B,8B 74 24 24對應的當前數據地址為0000009C;右側為根據機器碼流進行翻譯所得到的機器指令,例如,通過對60進行翻譯,得到的對應的當前數據地址為00000098為pusha;通過對E8 97 00 00 00進行翻譯,得到的翻譯指令為call sub_13C。
對于當前數據地址為000000A0時,根據機器碼流E8 97 00 00 00進行翻譯所得到的機器指令為call sub_13C,該機器指令為跳轉指令,但是,本發(fā)明實施例僅對call指令以外的跳轉指令進行地址跳轉翻譯操作,因此翻譯得到call sub_13C之后,當前數據地址繼續(xù)指向下一段機器碼流,即將當前數據地址更新為000000A5之后,對000000A5的機器碼流繼續(xù)進行翻譯。
本發(fā)明實施例中,當前數據地址為000000BA時,根據機器碼流進行翻譯所得到的機器指令為inz short loc B7,該機器指令為跳轉指令,根據該跳轉指令,當前數據地址會跳轉至000000B7,即loc B7對應的地址。
可以看出,000000B7~000000BA構成循環(huán)內容,指令計數器會根據該循環(huán)內容反復執(zhí)行加1操作,最終將導致檢測結果為存在可疑代碼。
SHELLCODE,即可疑代碼,通常都是一段連續(xù)的機器碼流,而在正常的非可執(zhí)行文件中以及網絡數據流中,通常是不會存在的,換句話說,如果我們在非可執(zhí)行文件或網絡數據流中發(fā)現(xiàn)一段可連續(xù)執(zhí)行的指令流,我們就可以將其視為SHELLCODE。
基于與上述實施例相同或相似的構思,本發(fā)明實施例還提供一種數據檢測裝置,參見圖3A和圖3B,本發(fā)明提出的一種數據檢測裝置包括:
翻譯單元10,用于獲取待檢測的機器碼流對應的機器指令;
檢測單元20,用于判斷連續(xù)的合法機器指令的數目是否達到預定的閾值;
結果判斷單元30,用于在連續(xù)的合法機器指令的數目達到預定的閾值時,則判斷待檢測的機器碼流中存在可疑代碼。
本發(fā)明實施例中,所述翻譯單元10包括:
翻譯模塊11,用于根據當前數據地址,對機器碼流進行翻譯,獲取翻譯得到的機器指令;
地址更新模塊12,用于在翻譯模塊執(zhí)行翻譯之后,將當前數據地址跟新為指向下一段未翻譯的機器碼流。
本發(fā)明實施例中,所述檢測單元20包括:
指令計數模塊21,用于在翻譯單元執(zhí)行翻譯不能獲得合法機器指令的情況下,將指令計數器設置為0,并繼續(xù)通過翻譯模塊執(zhí)行所述根據當前數據地址,對機器碼流進行翻譯;在翻譯單元執(zhí)行翻譯得到一條合法機器指令的情況下,將指令計數器加1;
計數檢測模塊22,用于判斷指令計數器的計數數目是否達到預定的閾值;如果沒達到,則判斷待檢測的機器碼流是否已全部翻譯完畢;如果沒有全部翻譯完畢,則繼續(xù)通過翻譯模塊執(zhí)行所述根據當前數據地址,對機器碼流進行翻譯。
本發(fā)明實施例中,所述檢測單元20還包括:跳轉檢測模塊23,用于
在翻譯單元獲取待檢測的機器碼流對應的機器指令之后,判斷所述機器指令是否為跳轉指令;在該機器指令是跳轉指令的情況下,通知地址更新模塊根據跳轉指令的內容更新當前數據地址。
本發(fā)明實施例中,所述預定的閾值設置為50~150。
需要說明的是,以上所述的實施例僅是為了便于本領域的技術人員理解而已,并不用于限制本發(fā)明的保護范圍,在不脫離本發(fā)明的發(fā)明構思的前提下,本領域技術人員對本發(fā)明所做出的任何顯而易見的替換和改進等均在本發(fā)明的保護范圍之內。