朱立軍
(沈陽化工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,遼寧沈陽110142)
目前,對于已知計(jì)算機(jī)惡意代碼檢測方法主要是基于特征碼的方法,其基本思想是提取病毒樣本中能唯一標(biāo)識該病毒的二進(jìn)制串作為該病毒的“特征碼”,并將此“特征碼”添加到病毒特征庫中,在病毒檢測時(shí),通過在病毒特征庫中查找是否存在相匹配的“特征碼”來發(fā)現(xiàn)病毒.這種方法的優(yōu)點(diǎn)是能快速、準(zhǔn)確地檢測出已知惡意代碼;缺點(diǎn)是對未知惡意代碼卻無能為力.
由于對計(jì)算機(jī)病毒的檢測具有不可判定性[1-2],因此,為了識別未知惡意代碼及其變種,人們提出了很多近似算法,其中具有代表性的是:(1)靜態(tài)啟發(fā)式掃描技術(shù),即在代碼沒有運(yùn)行的狀態(tài)下,通過分析代碼中的特征序列來識別惡意代碼的方法.例如文獻(xiàn)[3]通過分析可執(zhí)行文件靜態(tài)調(diào)用的API序列來識別已知惡意代碼的變種,它的依據(jù)是惡意代碼和它的變種一定有足夠多相似的API調(diào)用序列;文獻(xiàn)[4]通過提取已知惡意代碼中的特征串和字節(jié)序列,并利用多重貝葉斯算法建立了分類模型.這些方法雖然取得了較好的識別效果,但缺點(diǎn)是對被加殼的惡意代碼無能為力.(2)基于代碼的動態(tài)行為分析法,與靜態(tài)掃描技術(shù)不同的是,行為分析技術(shù)監(jiān)控代碼運(yùn)行時(shí)的動態(tài)行為,由于某些行為是病毒、木馬等惡意代碼經(jīng)常出現(xiàn)的行為,而在合法程序中卻比較罕見,它們可作為判別應(yīng)用程序是否非法的依據(jù).文獻(xiàn)[5]通過代碼運(yùn)行時(shí)對系統(tǒng)注冊表的鍵值、網(wǎng)絡(luò)連接以及文件的異常變化來識別是否有惡意行為發(fā)生;該方法的優(yōu)點(diǎn)是簡單、高效,可以檢測出未知惡意代碼,而不用擔(dān)心是否該代碼被加殼,但缺點(diǎn)是誤判率和漏報(bào)率較高.
因?yàn)镋XE文件運(yùn)行時(shí),被調(diào)用的API序列能在一定程度上反映該文件的行為特征[6],所以,本文通過分析代碼在植入、安裝及啟動時(shí)調(diào)用的API序列來作為判定代碼是否為惡意的依據(jù),并采用不同的分類算法進(jìn)行分析比較.實(shí)驗(yàn)表明:基于API調(diào)用序列的未知惡意代碼識別方法具有較好的識別未知惡意代碼的能力,且不同的識別方法有不同的優(yōu)缺點(diǎn).
目前最為流行、破壞力最大的惡意代碼是Win32 PE病毒,PE(Portable Executables)是win32系統(tǒng)中可執(zhí)行程序的二進(jìn)制文件形式,它是通過調(diào)用操作系統(tǒng)中的API函數(shù)(應(yīng)用程序接口)來實(shí)現(xiàn)各項(xiàng)功能,而這些API函數(shù)來自不同的動態(tài)鏈接庫(DLL).所以,以PE文件為存在形式的病毒在完成植入、控制和傳播等任務(wù)時(shí)都必須借助API函數(shù)的調(diào)用.
實(shí)踐表明:與運(yùn)行階段相比,惡意代碼病毒在植入、安裝階段會表現(xiàn)出顯著的有別于一般合法程序的一系列行為特征,如:自刪除、自我復(fù)制、殺進(jìn)程、設(shè)置自啟動、感染EXE文件等.因此,捕獲惡意代碼在植入、安裝階段的API函數(shù)調(diào)用,就捕獲到了相應(yīng)惡意代碼的動態(tài)行為.根據(jù)對惡意代碼和合法程序運(yùn)行時(shí)調(diào)用API函數(shù)情況的觀察,本文選取141個(gè)較敏感的API函數(shù)作為監(jiān)控對象,部分API函數(shù)如表1所示.
表1 監(jiān)控API函數(shù)調(diào)用表Table 1 Part of API functions calls
為了防止惡意代碼對系統(tǒng)的破壞,在虛擬機(jī)環(huán)境下分析惡意代碼的動態(tài)行為.虛擬機(jī)實(shí)際是一款可以虛擬出一臺或多臺計(jì)算機(jī)的軟件,它具備真實(shí)計(jì)算機(jī)幾乎所有的功能,包括開機(jī)、關(guān)機(jī)、重新啟動等物理功能,并可以在上面安裝操作系統(tǒng)、應(yīng)用程序,訪問網(wǎng)絡(luò)資源等.因?yàn)樗皇谴疟P上的文件虛擬出來的,所以,無論惡意代碼進(jìn)行何種操作,包括磁盤格式化、重新分區(qū)等危險(xiǎn)操作,都可以通過回滾操作把系統(tǒng)恢復(fù)到系統(tǒng)改變之前的狀態(tài).目前基于Windows平臺的虛擬機(jī)應(yīng)用程序有Vmware Workstation和Virtual PC for Windows等.該實(shí)驗(yàn)平臺操作系統(tǒng)采用Windows XP Professional,虛擬機(jī)采用Vmware Workstation 6.0.Win32 API函數(shù)的攔截可以使用 API Hook[7]技術(shù)來實(shí)現(xiàn).在這里使用ApiMonitorTrial工具軟件對代碼運(yùn)行時(shí)API函數(shù)的調(diào)用情況進(jìn)行捕獲.
實(shí)驗(yàn)樣本共749個(gè),其中白名單-合法程序樣本是在Windows XP Professional操作系統(tǒng)首次安裝,能確保在干凈的系統(tǒng)環(huán)境下選取操作系統(tǒng)PE文件398個(gè);黑名單-惡意代碼樣本通過網(wǎng)絡(luò)及其他途徑搜集351個(gè).將殺毒軟件升級到最新并對這些惡意代碼病毒進(jìn)行查殺,確認(rèn)都是惡意代碼病毒.其流程如圖1所示.
圖1 代碼行為監(jiān)控步驟Fig.1 Monitoring steps of code behavior
具體實(shí)施步驟如下:
(1)啟動虛擬機(jī),并啟動虛擬機(jī)中的Windows XP Professional系統(tǒng);
(2)制作快照,保存當(dāng)前的系統(tǒng)狀態(tài);
(3)啟動API監(jiān)控程序ApiMonitorTrial;
(4)然后將惡意代碼樣本放置到虛擬機(jī)中;
(5)運(yùn)行惡意代碼;
(6)把代碼的監(jiān)控結(jié)果文件報(bào)告?zhèn)骰刂鳈C(jī);
(7)回滾到初始狀態(tài);
(8)回到第(4)步,準(zhǔn)備處理下一個(gè)樣本.
在已獲取樣本主機(jī)行為特征量的前提下,需要尋找一種能夠表達(dá)樣本與特征之間關(guān)系的方法.現(xiàn)將每一個(gè)樣本作為統(tǒng)計(jì)表中的一個(gè)元組,其特征定義為基于一多維空間的向量.對這二類樣本的API調(diào)用統(tǒng)計(jì)結(jié)果采用二維表形式(如表2),表中每個(gè)數(shù)據(jù)元組X=(x1,x2,…,xn,c)記為一個(gè)樣本的特征向量;其中xi(i=l,2,…,n)表示特征向量中的一個(gè)特征屬性,xi∈{0,1},0表示某個(gè)API一次都沒有被調(diào)用過,1表示某個(gè)API被調(diào)用過一次或多次.c表示類別,c∈{0,1},1代表黑名單樣本,0代表白名單樣本,
表2 特征向量統(tǒng)計(jì)表Table 2 Feature vector of sample
分別采用基于標(biāo)準(zhǔn)化歐式距離的最小距離分類器算法、K-最近鄰算法、余弦相似度算法[8]進(jìn)行分類比較.為了評價(jià)算法性能,引入相關(guān)概念如下:
真陽性TP:黑樣本被檢測為黑樣本的數(shù)目
假陽性FP:白樣本被檢測為黑樣本的數(shù)目
真陰性TN:白樣本被檢測為白樣本的數(shù)目
假陰性FN:黑樣本被檢測為白樣本的數(shù)目
檢出率:TPR=TP/(TP+FN)
誤報(bào)率:FPR=FP/(FP+TN)
正確率:ACY=(TP+TN)/(TP+TN+FP+FN)
Youden指數(shù)=TPR-FPR,其中Youden指數(shù)的取值范圍為(-1,1),其值越接近于+1,就意味著該檢測模型的判別準(zhǔn)確性越好.實(shí)驗(yàn)采用3次交叉驗(yàn)證的方法,結(jié)果如表3.
表3 不同分類方法的比較Table 3 Comparison of different methods
從表3結(jié)果可以看出:雖然基于標(biāo)準(zhǔn)化歐式距離的最小距離分類器算法的檢出率較其他兩種方法高,但是誤報(bào)率也較其他兩種方法高,而余弦相似度算法和K-最近鄰算法雖然誤報(bào)率較最小距離分類器算法低,但是檢出率卻不如最小距離分類器.所以,具體選擇哪個(gè)算法要依據(jù)具體要求而定,例如,如果在只要求檢出率的場合,則應(yīng)選擇最小距離分類器算法,如要求誤報(bào)率低的場合,則選擇余弦相似度算法.
由于惡意代碼在植入、安裝階段具有明顯不同于一般程序的行為特征,所以,通過提取代碼運(yùn)行時(shí)調(diào)用的API序列作為識別惡意代碼依據(jù)的方式,不但可以識別出未知的惡意代碼,而且也能識別出加殼的惡意代碼.為未知惡意代碼的識別提供了一個(gè)新的思路.
[1] Fred Cohen.Computer Viruses:Theory and Experiments[J].Computers&Security,1987:6(1):22-35.
[2] Diomidis Spinellis.Reliable Identification of Bounded-lengh Viruses Is NP-comlee[J].IEEE Transactions on Information Theory,2003,49(1):280-284.
[3] Xu Jianyun,Sung Andrew H,Mukkamala Srinivas,et al.Obfuscated Malicious Executable Scanner[J].Journal of Research and Practice in Information Technology,2007,(39)3:181-197.
[4] Schultzm G,Eskin E,Zadok E,et al.Datamining Methods for Detection of new Malicious Executables[C]//Proceedings of the 2001 IEEE Symposium on Security and Privacy.Washington:IEEE Computer Society,2001:38-49.
[5] Huang Hsien-Der,Chuang Tsung-Yen,Tsai Yi-Lang,et al.Ontology-based Intelligent System for Malware Behavioral Analysis[EB/OL].(2010-04-16)[2011-02-18].http://twman.nchc.org.tw/wpcontent/uploads/2011/02/WCCI2010.pdf.
[6] Xu J-Y,Sung A h,Chavez P,et al.Polymorphicmalicious Executable Scanner by API Sequence Analysis[C]//Proceedings of the 4th International Conference on Hybrid Intelligent Systems(HIS 04).Washington:IEEE Computer Society,2004:378-383.
[7] 裴要強(qiáng),孟波.Windows黑客技術(shù)揭秘與攻防[M].北京:中國鐵路出版社,2010:257-265.
[8] 毛國君,段立娟,王實(shí),等.數(shù)據(jù)挖掘原理與算法[M].北京:清華大學(xué)出版社,2005:109-130.