本專利屬于信息安全領(lǐng)域,具體而言涉及一種一種函數(shù)惡意程度的檢測(cè)方法和裝置。
背景技術(shù):
在信息安全領(lǐng)域,惡意文件檢測(cè)是非常重要的一環(huán)。惡意文件的類型多種多樣。例如,包括但不限于windows系統(tǒng)的PE文件、linux系統(tǒng)的ELF文件、MAC系統(tǒng)的可執(zhí)行文件、Android系統(tǒng)上的APK文件;還有客戶端腳本類文件,如Javascript腳本、VBscript腳本、shell腳本;還有服務(wù)端腳本文件,如php文件,Python文件,asp文件等等。為了保證信息安全需要判定出預(yù)定文件是否是惡意文件,并采取相應(yīng)的措施進(jìn)行處理。
現(xiàn)有技術(shù)中對(duì)惡意文件的判定方法針對(duì)不同的文件類型也不盡然相同。但惡意文件的判定一般有兩種方式,一是靠人工判定,需要借助安全人員的經(jīng)驗(yàn)來對(duì)文件進(jìn)行分析;二是自動(dòng)化判定,自動(dòng)化判定方式是使用計(jì)算機(jī)程序來固化人工的經(jīng)驗(yàn),達(dá)到機(jī)器自動(dòng)化判定惡意文件的目的。自動(dòng)化判定技術(shù),本質(zhì)上是根據(jù)已知文件與未知文件之間的關(guān)聯(lián),來推測(cè)出未知文件的屬性。這種關(guān)聯(lián)包含了文件內(nèi)容的相似度比較、文件內(nèi)容的差異性比較、文件的來源是否相同、以及是文件之間否有同樣的簽名信息,等等。其中最重要的就是文件內(nèi)容的相似度比較,因?yàn)槎鄶?shù)情況下,能夠獲得的只有文件的內(nèi)容而沒有文件的外圍關(guān)聯(lián)信息。
隨著惡意文件種類和技術(shù)的日益增長(zhǎng),現(xiàn)有技術(shù)中需要持續(xù)地豐富對(duì)惡意文件檢測(cè)的手段,以便于提高信息安全能力。
技術(shù)實(shí)現(xiàn)要素:
本專利即是基于現(xiàn)有技術(shù)中的上述需求而提出的,本專利要解決的技術(shù)問題是提供一種函數(shù)惡意程度的檢測(cè)方法和裝置,以分辨預(yù)定函數(shù)的惡意程度。
為了解決上述問題,本發(fā)明提供了如下技術(shù)方案:
一種函數(shù)惡意程度的檢測(cè)方法,所述方法包括:文件采集步驟,采集樣本文件,所述樣本文件包含已知的干凈文件和惡意文件;文件反編譯步驟,分別對(duì)每個(gè)干凈文件和惡意文件文件進(jìn)行反編譯,得到底層語言描述的函數(shù)數(shù)據(jù);數(shù)據(jù)篩選步驟,對(duì)所述函數(shù)數(shù)據(jù)進(jìn)行篩選,選出樣本文件中與用戶所寫內(nèi)容所對(duì)應(yīng)的函數(shù)數(shù)據(jù);數(shù)據(jù)清洗步驟,對(duì)所述與用戶所寫內(nèi)容所對(duì)應(yīng)的每個(gè)函數(shù)進(jìn)行清洗,去除其中的不穩(wěn)定字節(jié),得到清洗后的函數(shù)數(shù)據(jù);統(tǒng)計(jì)步驟,根據(jù)所述清洗后的函數(shù)數(shù)據(jù)統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù),根據(jù)所述次數(shù)得到每個(gè)函數(shù)的惡意程度數(shù)值。
優(yōu)選地,所述方法還包括:函數(shù)內(nèi)容摘要計(jì)算步驟,針對(duì)每個(gè)函數(shù),取所述清洗后的函數(shù)數(shù)據(jù)中預(yù)定長(zhǎng)度的編碼,根據(jù)該編碼計(jì)算得到該函數(shù)內(nèi)容摘要值。
優(yōu)選地,根據(jù)所述清洗后的函數(shù)數(shù)據(jù)統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù)包括:根據(jù)所述函數(shù)內(nèi)容摘要值統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù)。
優(yōu)選地,所述底層語言底層語言描述的函數(shù)數(shù)據(jù)為操作碼或字節(jié)碼。
優(yōu)選地,所述去除其中的不穩(wěn)定字節(jié)包括:對(duì)所述不穩(wěn)定的字節(jié)賦予預(yù)定的數(shù)值,或者將所述不穩(wěn)定的字節(jié)完全刪除。
根據(jù)本發(fā)明的另一個(gè)方面還提供了一種函數(shù)惡意程度的檢測(cè)裝置,所述裝置包括:文件采集模塊,采集樣本文件,所述樣本文件包含已知的干凈文件和惡意文件;文件反編譯模塊,分別對(duì)每個(gè)干凈文件和惡意文件文件進(jìn)行反編譯,得到底層語言描述的函數(shù)數(shù)據(jù);數(shù)據(jù)篩選模塊,對(duì)所述函數(shù)數(shù)據(jù)進(jìn)行篩選,選出樣本文件中與用戶所寫內(nèi)容所對(duì)應(yīng)的函數(shù)數(shù)據(jù);數(shù)據(jù)清洗模塊,對(duì)所述與用戶所寫內(nèi)容所對(duì)應(yīng)的每個(gè)函數(shù)進(jìn)行清洗,去除其中的不穩(wěn)定字節(jié),得到清洗后的函數(shù)數(shù)據(jù);統(tǒng)計(jì)模塊,根據(jù)所述清洗后的函數(shù)數(shù)據(jù)統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù),根據(jù)所述次數(shù)得到每個(gè)函數(shù)的惡意程度數(shù)值。
優(yōu)選地,所述裝置還包括:函數(shù)內(nèi)容摘要計(jì)算模塊,針對(duì)每個(gè)函數(shù),取所述清洗后的函數(shù)數(shù)據(jù)中預(yù)定長(zhǎng)度的編碼,根據(jù)該編碼計(jì)算得到該函數(shù)內(nèi)容摘要值。
優(yōu)選地,根據(jù)所述清洗后的函數(shù)數(shù)據(jù)統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù)包括:根據(jù)所述函數(shù)內(nèi)容摘要值統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù)。
優(yōu)選地,所述底層語言底層語言描述的函數(shù)數(shù)據(jù)為操作碼或字節(jié)碼。
優(yōu)選地,所述去除其中的不穩(wěn)定字節(jié)包括:對(duì)所述不穩(wěn)定的字節(jié)賦予預(yù)定的數(shù)值,或者將所述不穩(wěn)定的字節(jié)完全刪除。
本專利通過上述技術(shù)方案,實(shí)現(xiàn)了對(duì)預(yù)定函數(shù)惡意程度的智能判斷。因此,把文件的檢測(cè)粒度降低到函數(shù)級(jí)別,有利于提高文件的惡意性。
附圖說明
圖1是本專利具體實(shí)施方式中提供的一種函數(shù)惡意程度的檢測(cè)方法的流程圖;
圖2是本專利具體實(shí)施方式中提供的一種函數(shù)惡意程度的檢測(cè)裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本專利的具體實(shí)施方式進(jìn)行說明。需要指出的是,本具體實(shí)施方式僅僅是對(duì)本專利優(yōu)選技術(shù)方案的舉例,并不能理解為對(duì)本專利保護(hù)范圍的限制。
實(shí)施例一
本實(shí)施例一提供了一種函數(shù)惡意程度的檢測(cè)方法。通過該方法檢測(cè)計(jì)算機(jī)文件中單個(gè)函數(shù)的惡意程度和干凈程度。
本實(shí)施例一中所指的惡意文件是指能夠在計(jì)算機(jī)系統(tǒng)或者其他智能系統(tǒng)運(yùn)行并進(jìn)行惡意操作的文件。其中所述計(jì)算機(jī)系統(tǒng)并不僅限于個(gè)人電腦或者是服務(wù)器,還包括其他利用計(jì)算機(jī)工作的系統(tǒng);其他智能系統(tǒng)包括但不限于手機(jī)操作系統(tǒng)、可穿戴設(shè)備操作系統(tǒng)以及智能機(jī)器人操作系統(tǒng)等。
圖1示出了本實(shí)施例中惡意文件檢測(cè)方法的流程。在該方法中包括如下步驟:
步驟101,采集已知的干凈文件和惡意文件。
在本步驟101中,可以采集大量的干凈文件和惡意文件;這種采集可以是一次性的,但是更為優(yōu)選的是不斷地運(yùn)行本方法,從而持續(xù)不斷地采集各種已知的干凈文件和惡意文件。所述干凈文件和惡意文件樣本是已經(jīng)確認(rèn)過的文件,即根據(jù)已有信息就能夠準(zhǔn)確判斷該文件是安全還是惡意的文件。在本實(shí)施例中的所述惡意文件是指所有會(huì)產(chǎn)生危害的軟件,包括但不限于“病毒”、“蠕蟲病毒”、木馬程序、惡意間諜軟件、非允許的廣告軟件和勒索軟件等。所述干凈文件與惡意文件相對(duì),是指不會(huì)對(duì)系統(tǒng)安全或信息安全產(chǎn)生危害的軟件。例如,所述干凈文件樣本可以選取具有安全信譽(yù)的公司簽名的文件,例如經(jīng)過微軟簽名的文件等,也可以是基于各種渠道獲取的確認(rèn)安全的文件。惡意文件樣本可以選取各種已經(jīng)確認(rèn)的惡意文件,例如包括但不限于經(jīng)過殺毒軟件公司核實(shí)過的惡意文件樣本。在本步驟中,采集的軟件樣本數(shù)量可以是多個(gè),甚至是數(shù)量巨大的。比如采集盡可能多的能獲取到的干凈文件和惡意文件。當(dāng)采集軟件的數(shù)量越多,則基于統(tǒng)計(jì)的分析越準(zhǔn)確。
步驟102,分別對(duì)每個(gè)干凈文件和惡意文件文件,進(jìn)行反編譯,得到底層語言描述匯編語言的函數(shù)數(shù)據(jù)。
在步驟102中對(duì)獲取的文件進(jìn)行反編譯,既包括對(duì)所述干凈文件進(jìn)行反編譯也包括對(duì)所述惡意文件進(jìn)行反編譯。每個(gè)文件得到的反編譯結(jié)果單獨(dú)存儲(chǔ)。反編譯可以采用現(xiàn)有技術(shù)中的反編譯工具來實(shí)現(xiàn),例如采用現(xiàn)有技術(shù)中的編譯工具IDA來實(shí)現(xiàn),當(dāng)然也可以采用現(xiàn)有技術(shù)中的其它反編譯方法來實(shí)現(xiàn),將每個(gè)干凈文件和惡意文件分別編譯得到各自的底層語言描述的函數(shù)數(shù)據(jù)。所述底層語言是一種使用十六進(jìn)制字符描述的序列。例如樣本文件是EXE文件,則將其反編譯成匯編語言描述的函數(shù)數(shù)據(jù)包,如果樣本是APK文件,則將其反編譯成smali語言描述的函數(shù)數(shù)據(jù)包。所述匯編語言和所述samli語言都是使用十六進(jìn)制的字節(jié)來描述的序列。所述匯編語言描述的函數(shù)數(shù)據(jù)也可以叫做操作碼,其它的底層語言描述的函數(shù)數(shù)據(jù)通常稱為字節(jié)碼。
將所述干凈文件和惡意文件都反編譯成上述底層語言描述的內(nèi)容,是因?yàn)榻^大部分的計(jì)算機(jī)文件都可以反編譯成上述底層語言,并且反編譯成上述底層語言能夠更加真實(shí)地反應(yīng)所述文件的內(nèi)容。從而提高了對(duì)文件分析的適用范圍和準(zhǔn)確性。
步驟103,對(duì)所述函數(shù)數(shù)據(jù)進(jìn)行篩選,得到與樣本軟件中由用戶所寫內(nèi)容所對(duì)應(yīng)的函數(shù)數(shù)據(jù)。
在步驟103中的所述篩選包括對(duì)得到的底層語言所描述的函數(shù)進(jìn)行篩選,所述篩選可以包括去除匯編語言級(jí)別的庫函數(shù)、以及在反編譯過程中由編譯器自動(dòng)生成的函數(shù)。因?yàn)?,通常惡意的指令都是由特定的用戶所施加的,庫函?shù)和編譯工具生成的函數(shù)通常都不會(huì)帶來惡意指令,也就是說通常文件中的惡意指令的特征信息都是基于用戶自行編寫完成的,因而僅僅保留與用戶所寫內(nèi)容對(duì)應(yīng)的函數(shù)就足以保留與文件是否惡意相關(guān)的特征,去掉其他函數(shù)可以避免帶來噪音影響判斷。
識(shí)別用戶所寫的內(nèi)容以及庫函數(shù)和編譯工具生成的函數(shù),可以通過現(xiàn)有技術(shù)來實(shí)現(xiàn),通常現(xiàn)有技術(shù)中對(duì)于庫函數(shù)和編譯器自動(dòng)生成的函數(shù)都有明確的記錄,因而將這些函數(shù)直接去掉即可。例如,當(dāng)采用IDA反編譯工具反編譯時(shí),可以調(diào)用IDA反編譯工具提供的API來實(shí)現(xiàn)這些篩選,當(dāng)然依據(jù)與之類似的規(guī)則,也可以在反編譯庫中實(shí)現(xiàn)上述篩選。
篩選過庫函數(shù)和編譯器生成的函數(shù)的數(shù)據(jù),后通常僅剩下與用戶所寫內(nèi)容對(duì)應(yīng)的函數(shù)。當(dāng)然如果在反編譯得到的函數(shù)數(shù)據(jù)中存在其它與用戶所寫內(nèi)容無關(guān)的函數(shù)也可以去除。
步驟104,對(duì)每個(gè)與用戶所寫內(nèi)容所對(duì)應(yīng)的函數(shù)進(jìn)行清洗,去除其中不穩(wěn)定字節(jié),得到清洗后的函數(shù)數(shù)據(jù)。
如上所述,每一個(gè)函數(shù)在反編譯完成后的數(shù)據(jù)內(nèi)容是一段16進(jìn)制的字節(jié)序列。在該字節(jié)序列中的某些字節(jié)是在每次編譯之后有可能是不一樣的,例如,其中有些字節(jié)的值是某個(gè)字符串的偏移地址,由于字符串的位置位置在每次編譯后有可能是不一樣的,這樣就導(dǎo)致了所述便宜地址也不一樣,從而相應(yīng)的字節(jié)內(nèi)容也會(huì)產(chǎn)生變化,這些易于產(chǎn)生變化的字節(jié)即為不穩(wěn)定字節(jié),或者稱之為易變字節(jié)。通常不穩(wěn)定字節(jié)包括在如下類型的字節(jié)中:例如,在采用匯編語言進(jìn)行反編譯中,包括但不限于,字符串引用的字節(jié)68 xx xx xx xx,調(diào)用API函數(shù)FF 15 xx xx xx xx,調(diào)用內(nèi)部函數(shù)E8 xx xx xx xx等類型。其中的xx xx xx xx即為易變字節(jié)。
由此可見,函數(shù)中如果引用了某些字符串或者其它資源,在進(jìn)行反編譯后,操作碼中會(huì)含有相對(duì)地址,這種相對(duì)地址,在重新編譯后有可能是變化的,所以導(dǎo)致函數(shù)的內(nèi)容也發(fā)生了變化。因而對(duì)于不穩(wěn)定字節(jié)的清洗,目的就是去除這種易變字節(jié)帶來的影響。對(duì)于這些字節(jié)進(jìn)行清洗,可以采取把這些字節(jié)重置為預(yù)定的數(shù)值、包括但不限于0;或者完全去掉等方法。
例如,一個(gè)函數(shù)經(jīng)過反編譯后可以得到如下操作內(nèi)容:
text:00401828 55
text:00401829 8B EC
text:0040182B 83 EC 20
text:0040182E 6A 64
text:00401830 68 80 E1 40 00
text:00401835 6A 67F
text:00401837 FF 75 08
text:0040183A FF 15 50 91 40 00
text:00401840 6A 64
text:00401842 68 E8 E1 40 00
text:00401847 6A 6D
text:00401849 FF 75 08
text:0040184C FF 15 50 91 40 40
text:00401852 FF 75 08
text:00401855 E8 53 F9 FF FF
text:0040185A 59
text:0040185B 8B 45 08
text:0040185E A3 A3 D1 40 00
text:00401863FF 75 14
text:00401866FF 75 08
text:00401869 E8 E9 0F 00 00
text:0040186E 59
text:0040186F 59
text:00401870 85 C0
其中,
55 8B EC 83 EC 20 6A 64 68 80 E1 40 00 6A 67 FF
75 08 FF 15 50 91 40 00 6A 64 68 E8 E1 40 00 6A
6D FF 75 08 FF 15 50 91 40 00 FF 75 08 E8 53 F9
FF FF 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
08 E8 E9 0F 00 00 59 59 85 C0
即為得到的操作碼。然后進(jìn)行清洗操作,例如,對(duì)其中前64個(gè)字節(jié)進(jìn)行清洗操作,其結(jié)果為:
55 8B EC 83 EC 20 6A 64 68 00 00 00 00 6A 67 FF
75 08 FF 15 00 00 00 00 6A 64 68 00 00 00 00 6A
6D FF 75 08 FF 15 00 00 00 00 FF 75 08 E8 00 00
00 00 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
其中依照前述的規(guī)則判斷的不穩(wěn)定字節(jié)80 E1 40 00、50 91 40 00、E8 E1 40 00、50 91 40 00、53 F9 FF FF、均進(jìn)行歸零操作,從而實(shí)現(xiàn)清洗。
步驟105,計(jì)算取每個(gè)函數(shù)的清洗后的函數(shù)數(shù)據(jù)中預(yù)定長(zhǎng)度的編碼,計(jì)算得到該函數(shù)內(nèi)容摘要值。
經(jīng)過清洗后的函數(shù)即表示為一個(gè)特定內(nèi)容和順序的編碼,這個(gè)編碼可以通過計(jì)算其預(yù)定長(zhǎng)度數(shù)值的所得到的內(nèi)容摘要來表示。所述內(nèi)容摘要即成為該函數(shù)的“指紋”,可以用于識(shí)別該函數(shù)。
所述預(yù)定長(zhǎng)度可以是該函數(shù)編碼的前N字節(jié)(例如64字節(jié)或者128字節(jié)),也可以是全部字節(jié)或者是在所述編碼中節(jié)選的部分字節(jié)。計(jì)算所述內(nèi)容摘要的算法可以是哈希算法,所述內(nèi)容摘要即為計(jì)算出來的哈希值。數(shù)據(jù)包中每個(gè)函數(shù)預(yù)定長(zhǎng)度的匯編碼的哈希值。
例如,在如上所舉的例子中,采用SHA256算法計(jì)算前64字節(jié)的哈希值:
SHA256
(558BEC83EC206A6468000000006A67FF7508FF15000000006A6468000000006A6DFF7508FF1500000000FF7508E800000000598B4508A3A3D14000FF7514FF75)=324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b
最終的SHA256的值就用來表示這個(gè)函數(shù):
324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b
步驟106統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù),由此得到每個(gè)函數(shù)的惡意程度數(shù)值。
對(duì)大量的惡意和干凈樣本文件反編譯,并且提取函數(shù),并對(duì)每一個(gè)函數(shù)出現(xiàn)在惡意文件和干凈文件中的次數(shù)進(jìn)行統(tǒng)計(jì)。如果該函數(shù)出現(xiàn)在惡意文件中,則相應(yīng)的惡意統(tǒng)計(jì)次數(shù)遞增;反之,如果出現(xiàn)在干凈文件中,則相應(yīng)的干凈統(tǒng)計(jì)次數(shù)遞增。根據(jù)統(tǒng)計(jì)數(shù)據(jù),就可以計(jì)算得到此函數(shù)的惡意程度值。
實(shí)施例二
本實(shí)施例二提供了一種函數(shù)惡意程度的檢測(cè)裝置。通過該裝置檢測(cè)計(jì)算機(jī)文件中單個(gè)函數(shù)的惡意程度和干凈程度。
圖2示出了本實(shí)施例中一種函數(shù)惡意程度的檢測(cè)裝置。在裝置包括如下模塊:
文件采集模塊,采集已知的干凈文件和惡意文件。
在本文件采集模塊中,可以采集大量的干凈文件和惡意文件;這種采集可以是一次性的,但是更為優(yōu)選的是不斷地運(yùn)行本方法,從而持續(xù)不斷地采集各種已知的干凈文件和惡意文件。所述干凈文件和惡意文件樣本是已經(jīng)確認(rèn)過的文件,即根據(jù)已有信息就能夠準(zhǔn)確判斷該文件是安全還是惡意的文件。在本實(shí)施例中的所述惡意文件是指所有會(huì)產(chǎn)生危害的軟件,包括但不限于“病毒”、“蠕蟲病毒”、木馬程序、惡意間諜軟件、非允許的廣告軟件和勒索軟件等。所述干凈文件與惡意文件相對(duì),是指不會(huì)對(duì)系統(tǒng)安全或信息安全產(chǎn)生危害的軟件。例如,所述干凈文件樣本可以選取具有安全信譽(yù)的公司簽名的文件,例如經(jīng)過微軟簽名的文件等,也可以是基于各種渠道獲取的確認(rèn)安全的文件。惡意文件樣本可以選取各種已經(jīng)確認(rèn)的惡意文件,例如包括但不限于經(jīng)過殺毒軟件公司核實(shí)過的惡意文件樣本。
在本模塊中,采集的軟件樣本數(shù)量可以是多個(gè),甚至是數(shù)量巨大的。比如采集盡可能多的能獲取到的干凈文件和惡意文件。當(dāng)采集軟件的數(shù)量越多,則基于統(tǒng)計(jì)的分析越準(zhǔn)確。
文件反編譯模塊,分別對(duì)每個(gè)干凈文件和惡意文件文件,進(jìn)行反編譯,得到底層語言描述匯編語言的函數(shù)數(shù)據(jù)。
所述文件反編譯模塊,對(duì)獲取的文件進(jìn)行反編譯,既包括對(duì)所述干凈文件進(jìn)行反編譯也包括對(duì)所述惡意文件進(jìn)行反編譯。每個(gè)文件得到的反編譯結(jié)果單獨(dú)存儲(chǔ)。反編譯可以采用現(xiàn)有技術(shù)中的反編譯工具來實(shí)現(xiàn),例如采用現(xiàn)有技術(shù)中的編譯工具IDA來實(shí)現(xiàn),當(dāng)然也可以采用現(xiàn)有技術(shù)中的其它反編譯方法來實(shí)現(xiàn),將每個(gè)干凈文件和惡意文件分別編譯得到各自的底層語言描述的函數(shù)數(shù)據(jù)。所述底層語言是一種使用十六進(jìn)制字符描述的序列。例如樣本文件是EXE文件,則將其反編譯成匯編語言描述的函數(shù)數(shù)據(jù)包,如果樣本是APK文件,則將其反編譯成smali語言描述的函數(shù)數(shù)據(jù)包。所述匯編語言和所述samli語言都是使用十六進(jìn)制的字節(jié)來描述的序列。所述匯編語言描述的函數(shù)數(shù)據(jù)也可以叫做操作碼,其它的底層語言描述的函數(shù)數(shù)據(jù)通常稱為字節(jié)碼。
將所述干凈文件和惡意文件都反編譯成上述底層語言描述的內(nèi)容,是因?yàn)榻^大部分的計(jì)算機(jī)文件都可以反編譯成上述底層語言,并且反編譯成上述底層語言能夠更加真實(shí)地反應(yīng)所述文件的內(nèi)容。從而提高了對(duì)文件分析的適用范圍和準(zhǔn)確性。
數(shù)據(jù)篩選模塊,對(duì)所述函數(shù)數(shù)據(jù)進(jìn)行篩選,得到與樣本軟件中由用戶所寫內(nèi)容所對(duì)應(yīng)的函數(shù)數(shù)據(jù)。
所述篩選包括對(duì)反編譯后的各個(gè)函數(shù)進(jìn)行篩選,所述篩選可以包括去除底層語言級(jí)別的庫函數(shù)、以及在反編譯過程中由編譯器自動(dòng)生成的函數(shù)。
因?yàn)?,通常惡意的指令都是由特定的用戶所施加的,庫函?shù)和編譯工具生成的函數(shù)通常都不會(huì)帶來惡意指令,也就是說通常文件中的惡意指令的特征信息都是基于用戶自行編寫完成的,因而僅僅保留與用戶所寫內(nèi)容對(duì)應(yīng)的函數(shù)就足以保留與文件是否惡意相關(guān)的特征,去掉其他函數(shù)可以避免帶來噪音影響判斷。
識(shí)別用戶所寫的內(nèi)容以及庫函數(shù)和編譯工具生成的函數(shù),可以通過現(xiàn)有技術(shù)來實(shí)現(xiàn),通常現(xiàn)有技術(shù)中對(duì)于庫函數(shù)和編譯器自動(dòng)生成的函數(shù)都有明確的記錄,因而將這些函數(shù)直接去掉即可。例如,當(dāng)采用IDA反編譯工具反編譯時(shí),可以調(diào)用IDA反編譯工具提供的API來實(shí)現(xiàn)這些篩選,當(dāng)然依據(jù)與之類似的規(guī)則,也可以在反編譯庫中實(shí)現(xiàn)上述篩選。
篩選過庫函數(shù)和編譯器生成的函數(shù)的數(shù)據(jù),后通常僅剩下與用戶所寫內(nèi)容對(duì)應(yīng)的函數(shù)。當(dāng)然如果在反編譯得到的函數(shù)數(shù)據(jù)中存在其它與用戶所寫內(nèi)容無關(guān)的函數(shù)也可以去除。
數(shù)據(jù)清洗模塊,對(duì)與用戶所寫內(nèi)容所對(duì)應(yīng)的每個(gè)函數(shù)進(jìn)行清洗,去除其中不穩(wěn)定字節(jié),得到清洗后的函數(shù)數(shù)據(jù)。
如上所述,每一個(gè)函數(shù)在反編譯完成后的數(shù)據(jù)內(nèi)容是一段16進(jìn)制的字節(jié)序列。在該字節(jié)序列中的某些字節(jié)是在每次編譯之后有可能是不一樣的,例如,其中有些字節(jié)的值是某個(gè)字符串的偏移地址,由于字符串的位置位置在每次編譯后有可能是不一樣的,這樣就導(dǎo)致了所述便宜地址也不一樣,從而相應(yīng)的字節(jié)內(nèi)容也會(huì)產(chǎn)生變化,這些易于產(chǎn)生變化的字節(jié)即為不穩(wěn)定字節(jié),或者稱之為易變字節(jié)。通常不穩(wěn)定字節(jié)包括在如下類型的字節(jié)中:例如,在采用匯編語言進(jìn)行反編譯中,包括但不限于,字符串引用的字節(jié)68 xx xx xx xx,調(diào)用API函數(shù)FF 15 xx xx xx xx,調(diào)用內(nèi)部函數(shù)E8 xx xx xx xx等類型。其中的xx xx xx xx即為易變字節(jié)。
由此可見,函數(shù)中如果引用了某些字符串或者其它資源,在進(jìn)行反編譯后,操作碼中會(huì)含有相對(duì)地址,這種相對(duì)地址,在重新編譯后有可能是變化的,所以導(dǎo)致函數(shù)的內(nèi)容也發(fā)生了變化。因而對(duì)于不穩(wěn)定字節(jié)的清洗,目的就是去除這種易變字節(jié)帶來的影響。對(duì)于這些字節(jié)進(jìn)行清洗,可以采取把這些字節(jié)重置為預(yù)定的數(shù)值、包括但不限于0;或者完全去掉等方法。
例如,一個(gè)函數(shù)經(jīng)過反編譯后可以得到如下操作內(nèi)容:
text:00401828 55
text:00401829 8B EC
text:0040182B 83 EC 20
text:0040182E 6A 64
text:00401830 68 80 E1 40 00
text:00401835 6A 67F
text:00401837 FF 75 08
text:0040183A FF 15 50 91 40 00
text:00401840 6A 64
text:00401842 68 E8 E1 40 00
text:00401847 6A 6D
text:00401849 FF 75 08
text:0040184C FF 15 50 91 40 40
text:00401852 FF 75 08
text:00401855 E8 53 F9 FF FF
text:0040185A 59
text:0040185B 8B 45 08
text:0040185E A3 A3 D1 40 00
text:00401863 FF 75 14
text:00401866 FF 75 08
text:00401869 E8 E9 0F 00 00
text:0040186E 59
text:0040186F 59
text:00401870 85 C0
其中,
55 8B EC 83 EC 20 6A 64 68 80 E1 40 00 6A 67FF
75 08 FF 15 50 91 40 00 6A 64 68 E8 E1 40 00 6A
6D FF 75 08 FF 15 50 91 40 00 FF 75 08 E8 53 F9
FF FF 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
08 E8 E9 0F 00 00 59 59 85 C0
即為得到的操作碼。然后進(jìn)行清洗操作,例如,對(duì)其中前64個(gè)字節(jié)進(jìn)行清洗操作,其結(jié)果為:
55 8B EC 83 EC 206A 64 68 00 00 00 00 6A 67 FF
75 08 FF 15 00 00 00 00 6A 64 68 00 00 00 00 6A
6D FF 75 08 FF 15 00 00 00 00 FF 75 08 E8 00 00
00 00 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
其中依照前述的規(guī)則判斷的不穩(wěn)定字節(jié)80 E1 40 00、50 91 40 00、E8 E1 40 00、50 91 40 00、53 F9 FF FF、均進(jìn)行歸零操作,從而實(shí)現(xiàn)清洗。
函數(shù)內(nèi)容摘要計(jì)算模塊,計(jì)算取每個(gè)函數(shù)的清洗后的函數(shù)數(shù)據(jù)中預(yù)定長(zhǎng)度的編碼,計(jì)算得到該函數(shù)內(nèi)容摘要值。
經(jīng)過清洗后的函數(shù)即表示為一個(gè)特定內(nèi)容和順序的編碼,這個(gè)編碼可以通過計(jì)算其預(yù)定長(zhǎng)度數(shù)值的所得到的內(nèi)容摘要來表示。所述內(nèi)容摘要即成為該函數(shù)的“指紋”,可以用于識(shí)別該函數(shù)。
所述預(yù)定長(zhǎng)度可以是該函數(shù)編碼的前N字節(jié)(例如64字節(jié)或者128字節(jié)),也可以是全部字節(jié)或者是在所述編碼中節(jié)選的部分字節(jié)。計(jì)算所述內(nèi)容摘要的算法可以是哈希算法,所述內(nèi)容摘要即為計(jì)算出來的哈希值。數(shù)據(jù)包中每個(gè)函數(shù)預(yù)定長(zhǎng)度的匯編碼的哈希值。
例如,在如上所舉的例子中,采用SHA256算法計(jì)算前64字節(jié)的哈希值:
SHA256
(558BEC83EC206A6468000000006A67FF7508FF15000000006A6468000000006A6DFF7508FF1500000000FF7508E800000000598B4508A3A3D14000FF7514FF75)=324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b
最終的SHA256的值就用來表示這個(gè)函數(shù):
324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b
統(tǒng)計(jì)模塊,統(tǒng)計(jì)每個(gè)函數(shù)在惡意文件和干凈文件中出現(xiàn)的次數(shù),由此得到每個(gè)函數(shù)的惡意程度數(shù)值。
對(duì)大量的惡意和干凈樣本文件反編譯,并且提取函數(shù),并對(duì)每一個(gè)函數(shù)出現(xiàn)在惡意文件和干凈文件中的次數(shù)進(jìn)行統(tǒng)計(jì)。如果該函數(shù)出現(xiàn)在惡意文件中,則相應(yīng)的惡意統(tǒng)計(jì)次數(shù)遞增;反之,如果出現(xiàn)在干凈文件中,則相應(yīng)的干凈統(tǒng)計(jì)次數(shù)遞增。根據(jù)統(tǒng)計(jì)數(shù)據(jù),就可以計(jì)算得到此函數(shù)的惡意程度值。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、裝置、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(裝置)、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。