黃琨茗, 張 磊, 趙 奎, 劉 亮
(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院, 成都 610065)
惡意代碼包括病毒、蠕蟲、木馬、后門、Rootkit、流氓軟件以及廣告軟件等. 目前惡意代碼的檢測主要分為基于可移植執(zhí)行文件及其反匯編文件的靜態(tài)檢測和基于惡意代碼運行過程的行為特征的動態(tài)檢測.
靜態(tài)檢測方法[1]的特征主要包括可移植執(zhí)行文件及其反匯編文件的字節(jié)碼、匯編指令、導(dǎo)入函數(shù)和分節(jié)信息等. 該方法對使用了代碼混淆技術(shù)[2]的已知惡意代碼和未知的惡意代碼作用有限.
為克服基于靜態(tài)檢測方法的不足,研究者們提出基于行為的方法,相對于特征碼,程序的行為更加固定. 惡意代碼往往通過執(zhí)行關(guān)鍵API調(diào)用函數(shù)實現(xiàn)惡意行為,系統(tǒng)API調(diào)用序列可作為惡意代碼檢測方法的最有效特征之一,API調(diào)用序列特征被研究者廣泛使用. 2013年Ahmadi 等人[3]使用迭代模式的挖掘方法來挖掘頻繁序列,他們認(rèn)為惡意軟件編寫者調(diào)用重復(fù)性的API,特別是循環(huán)加密或解密和感染. 2014年Cho等人[4]應(yīng)用序列隊的方法檢測變種惡意代碼,該方法能夠發(fā)現(xiàn)惡意軟件API調(diào)用序列中的相同部分并檢測出相似行為. 2015年Ki等人[5]使用DNA序列抽象出惡意軟件的API調(diào)用序列模式,得出相同的惡意代碼功能可以包含在不同的類別中,Pirscoveanu等人[6]用取前兩百個不重復(fù)API函數(shù),API函數(shù)的頻繁度等作為特征,用于惡意代碼分類. 2016年,Kolosnjaji等人[7]提取動態(tài)API序列的kernel系統(tǒng)調(diào)用序列,使用N-Gram和CNN提取序列特征輸入到LSTM網(wǎng)絡(luò)中進行惡意代碼檢測. 2018年,榮俸萍等人[8]使用模式挖掘算法得到API調(diào)用序列并結(jié)合隨機森林模型來識別惡意代碼,該方法使用改進的沙箱模型能有效檢測逃避性樣本. 以上基于API序列的惡意代碼檢測都沒有考慮不同類別惡意代碼的行為差異,而把所有惡意代碼集中到一起進行特征挖掘,不能充分挖掘能代表惡意行為的序列模式,以至于不能有效的檢測惡意代碼.
基于惡意代碼的行為依賴圖[9-10]需通過動態(tài)污點分析的方法獲取,該方法需要人工操作,速度慢效率低,還可能造成污點爆炸等問題. N-Gram方法[11-13]被廣泛用于API序列的特征提取,N-Gram提取的子序列維度很大. 其中,文獻[14]采用冗余子序列去除法處理子序列維度很大的問題,使用信息增益篩選N-Gram序列,輸入到LSTM網(wǎng)絡(luò)模型中進行分類,其API序列特征可解釋性差,惡意樣本在API序列中插入不相關(guān)API來逃避檢測,會導(dǎo)致N-Gram失效.
為了改進以上基于惡意代碼行為的動態(tài)檢測技術(shù)的不足,本文選擇挖掘不同種類惡意代碼的最長頻繁序列以表征惡意代碼的惡意行為,提出了一種基于多種類惡意代碼的最長頻繁序列集合的惡意代碼檢測方法. 對于樣本文件在沙箱中動態(tài)運行產(chǎn)生的系統(tǒng)API調(diào)用序列,使用改進的序列挖掘算法挖掘出同一類型的惡意代碼的最長頻繁序列,并將挖掘的多種類的最長頻繁API序列集合合并,構(gòu)造詞袋模型,基于該詞袋模型使用向量表征樣本文件的動態(tài)API序列,構(gòu)造隨機森林分類器用于惡意代碼的檢測. 本文的主要貢獻如下.
1) 采用了挖掘不同種類惡意代碼的最長頻繁序列的策略:不同種類的公共惡意行為往往有所區(qū)別,勒索軟件會進行大量的注冊表讀寫和文件讀寫操作,蠕蟲病毒有大量自我復(fù)制和網(wǎng)絡(luò)行為,特洛伊木馬監(jiān)聽鍵盤記錄和竊取賬號密碼等,挖掘不同種類的最長頻繁序列集合能代表不同惡意行為模式.
2) 提出了新的最長頻繁序列挖掘算法:本文提出的最長頻繁序列挖掘算法在引入面向目標(biāo)的關(guān)聯(lián)挖掘技術(shù)的基礎(chǔ)上進行了去重、剪枝的過程,保留關(guān)鍵API序列用于挖掘,大大減小了挖掘的時間復(fù)雜度,在運行過程中基于深度優(yōu)先策略,通過判斷候選項是否屬于可擴展項,邊挖掘邊剪枝,進一步減小了挖掘過程中的時間和空間消耗.
3) 提出了一種基于最長頻繁序列集合表示樣本文件的方法:樣本的動態(tài)API序列可以看作具有時間序列的一維文本,單個最長頻繁序列可以看成能表征文本類別的一個特征.本文使用挖掘的最長頻繁序列集合構(gòu)造詞袋模型,基于此模型把樣本文件動態(tài)API序列轉(zhuǎn)化為特征向量,特征向量能有效的包含樣本文件的惡意行為.
本文提出的惡意代碼檢測方法主要檢測Windows系統(tǒng)的惡意可執(zhí)行文件PE(Portable Executable)文件,采用本文提出的序列挖掘算法挖掘出各個類別的最長頻繁序列,使用最長頻繁序列集合構(gòu)造詞袋模型,把樣本文件由向量表示,使用隨機森林構(gòu)造分類器進行惡意代碼檢測. 如圖1方法實現(xiàn)流程圖分為兩個階段,即特征挖掘和惡意代碼檢測階段.
1) 特征挖掘階段:首先提取樣本文件的動態(tài)API調(diào)用序列,對動態(tài)API進行預(yù)剪枝;其次,基于同一類別的惡意代碼挖掘出對惡意代碼和正常樣本有區(qū)分作用的最長頻繁API序列;然后,合并挖掘出的不同類別惡意代碼最長API序列集合,構(gòu)造詞袋模型;最后,根據(jù)詞袋模型將樣本文件的動態(tài)API轉(zhuǎn)化為向量.
2) 惡意代碼檢測階段:首先使用訓(xùn)練樣本構(gòu)造分類器;然后提取測試樣本的動態(tài)API調(diào)用序列,進行簡單的去重處理;最后把去重的樣本文件的API序列轉(zhuǎn)化為向量,用訓(xùn)練的分類器模型進行惡意代碼檢測.
圖1 方法實現(xiàn)流程圖Fig.1 Flow chart of the method
本文使用系統(tǒng)API調(diào)用序列表征惡意代碼的行為,基于Cuckoo Sandbox搭建惡意代碼動態(tài)分析系統(tǒng),為了更好地模擬正常用戶的環(huán)境,在客戶機上安裝一些常用的應(yīng)用軟件,并留下使用記錄. 該分析系統(tǒng)通過Hook技術(shù)提取惡意代碼運行過程的API調(diào)用,形成樣本報告,實現(xiàn)了API序列的批量自動提取.
2.2.1 動態(tài)API預(yù)剪枝 由于惡意軟件的動態(tài)API序列往往比較長,而惡意代碼要完成惡意行為必須執(zhí)行關(guān)鍵的API函數(shù),過多的非關(guān)鍵API函數(shù)在模式挖掘過程中會產(chǎn)生大量冗余且無益的序列,這些會大大增加特征挖掘過程的時間消耗.所以,需要刪除動態(tài)API序列中的非關(guān)鍵的API函數(shù),對不同類別的動態(tài)API集合序列進行預(yù)剪枝,預(yù)剪枝分為動態(tài)API去重和關(guān)鍵API函數(shù)篩選.
2.2.2 動態(tài)API去重 序列模式中存在同一種API序列模式被頻繁調(diào)用,存在信息冗余. 為了減少挖掘過程中的復(fù)雜度,并且要保證保留的信息不減少,本文采用了連續(xù)API序列模式去除方法[13],即只保留連續(xù)重復(fù)出現(xiàn)的API子序列中的單個子序列,如表1展示了API序列去重前后的API序列.
表1 API序列去重
2.2.3 關(guān)鍵API函數(shù)篩選
定義1 設(shè)f={s1,s2,…,sn}是同一個類別去重后的惡意代碼樣本動態(tài)API序列集,h={h1,h2,…,hm}是正常樣本去重后的動態(tài)API序列集. 令ak表示該類別動態(tài)API序列中的API調(diào)用序列第k個API調(diào)用;freq(ak,f)表示ak在惡意代碼類別f中的加權(quán)頻率;freq(ak,h)表示ak在h中的加權(quán)頻率. 它們的相關(guān)度的計算公式如下.
(1)
(2)
式(1)中,SN(ak,f)表示包含ak且屬于類別f的樣本數(shù)量;SN(f)表示類別f中的樣本總數(shù)量;AN(ak,f)表示ak在惡意類別f的樣本集中的動態(tài)API序列中出現(xiàn)的次數(shù);AN(f)表示惡意類別f的樣本文件API調(diào)用序列中API調(diào)用的總次數(shù). 式(2)中,SN(ak,h)表示樣本集h中包含ak的樣本數(shù)量;SN(h)表示h中的樣本總數(shù)量;AN(ak,h)表示ak在h的樣本集中的動態(tài)API序列中出現(xiàn)的次數(shù);AN(h)表示h的樣本文件API調(diào)用序列中API調(diào)用的總次數(shù). 本文當(dāng)freq(ak,h)>freq(ak,f)時,可對惡意代碼類別集合中所有樣本進行合理剪枝.
惡意序列模式挖掘的主要目的是挖掘出對惡意樣本和正常樣本文件有區(qū)分能力的最長惡意API調(diào)用序列模式. 本文基于Freespan算法思想[14],采取樹深度優(yōu)先策略,提出了基于有限API序列集挖掘出最長頻繁API子序列的算法.
2.3.1 最長頻繁API序列模式挖掘相關(guān)概念的定義 我們先給出最長頻繁子序列挖掘算法的相關(guān)概念定義如下.
定義2 支持度. 一個序列S在序列集T中的支持度等于該序列集中包含序列S的個數(shù),即該序列的頻繁度,記SupT(Sa)是數(shù)據(jù)集T中所包含的Sa序列的個數(shù),其中S∈T,Sa=sub(S).
定義3 最大不支持度Supnon:一個序列S在序列集T中的支持度等于該序列集中不包含序列S的最小個數(shù).
定義4 頻繁序列. 對于子序列Sa,如果其在序列集T中支持度大于或等于設(shè)定的最小支持度閾值Supmin,即SupT(Sa)Supmin,那么稱Sa為序列集T的頻繁序列.
定義5 最長頻繁序列. 設(shè)Sa是頻繁序列,如果不存在頻繁序列Sb是Sa的超集,則Sa被稱為最長頻繁序列.
定義6 候選擴展項. 如果一個頻繁序列的最后一項為X2,如果頻繁一項集序列S1=[X1,X2,X7,…,X59],則候選可擴展項序列為S1,其中序列的每一項均是候選可擴展項.
定義7 可擴展項. 設(shè)序列s為頻繁序列,如果s最后面擴展一項后支持度依然大于或等于Supmin,即擴展后得到的序列還是頻繁序列,該項被稱為s的可擴展項.
定義7給出了擴展項的概念,可知頻繁API序列順序添加單個候選擴展API后得到的新API序列還是頻繁API序列,則該API項是原API序列的可擴展API項. 根據(jù)最長頻繁子序列的定義可知:如果頻繁API序列沒有擴展項且其不是其他最長頻繁API序列的子集,則序列s為最長頻繁API子序列. 表2頻繁1項API序列的可擴展項所示,展示API序列集中頻繁1-項API序列集的候選可擴展項及其可擴展項,例如API4可擴展項集合有{API2,API5},表中沒有可擴展項的記為“?”.
表2 頻繁1項API序列的可擴展項
2.3.2 最長頻繁API序列挖掘算法 本文設(shè)計了一種最長API頻繁子序列挖掘算法,利用Redis隊列結(jié)構(gòu)邊挖掘邊過濾,算法分兩部分.
第一部分為最長頻繁序列挖掘部分,即把產(chǎn)生的最長頻繁序列加入到Redis隊列頭部,本文采用字典來記錄i-項頻繁API序列的可擴展項信息,字典名為extend_address,以"API2":{s_1:address},{s_2:address},…,
{s_i:address},…,"APIn":{s_1:address},{s_2:address},…,{s_i:address}}的形式存儲其信息,s_i與address分別指包含該可擴展項的動態(tài)AP序列和其在對應(yīng)動態(tài)API序列中的位置信息. 例如{1:{s_1:1,s_2:1,s_3:2,s_5:7},2:{ s_2:2,s_3:4,s_5:9}},其中的可擴展項在動態(tài)API序列編號為1,2,可擴展項1分別在s_1、s_2、s_3和s_5動態(tài)序列的1、1、2和7位置,可擴展項2分別在s_2、s_3和s_5動態(tài)序列的2、4、9位置. 挖掘算法采用深度優(yōu)先搜索的策略來遍歷序列模式的搜索空間.
搜索過程如下:首先搜索所有1-項頻繁API子序列集并將其作為候選可擴展項,然后以1-項頻繁API子序列作為第一層樹節(jié)點,最左邊第一個樹節(jié)點添加候選可擴展項作為后綴搜索2-項頻繁API子序列,把沒有擴展項的最長頻繁API序列存到數(shù)據(jù)庫隊列頭部,把搜索得到的頻繁二項序列作為第二層樹節(jié)點,同理從第二層最左邊節(jié)點繼續(xù)搜索頻繁三項序列,最后遞歸搜索直到搜索的所有i-項頻繁API子序列的擴展項都為“?”時停止搜索.
最長頻繁API序列挖掘算法的偽代碼如算法1.
算法1 最長API頻繁序列挖掘算法
輸入類別f={S1,S2,…,Sn},關(guān)鍵API序列important_api=[api1,api2, …,apin],初始第一層節(jié)點init_seq,最小支持度Supmin和最小不支持度Supnon
輸出Redis數(shù)據(jù)庫存儲最長頻繁API序列集f′=[s1,s2,…,sk]
1) one_item_frequent=[] # 全局變量
2) function main() # 此為程序入口函數(shù)
3) extend_address = find_one_seq()
4) recusive_seq(init_seq, extend_address)
5) functionfind_one_seq () # 獲取頻繁一項集在動態(tài)API序列位置
6) for api in important_api:
7) forSiinf:
8) extend_address={Si:位置} # 記錄api在Si首次出現(xiàn)的位置
9) if the number of Si contains api>supmin:
10) one_item_frequent. append(api) # 包含api的序列個數(shù)大于支持度
11) return exend_address
12) function recusive _seq(init_seq, extend_address): # 遞歸得到所有的最長頻繁序列
13) can_extension=find_extension_seq(seq, extend_address)
14) if can_extension is not null:
15) for eachseq in can_extension: #遞歸獲得最長頻繁序列
16) can_extension=find_extension_seq(seq, extend_address)
17) else :
18) Redis. lpush(f′, seq)
19) functionfind_extension_seq (extend_address) #得到序列的可擴展一項集
20) for item in one_item_frequent:
21) for Si in extend_address:
22) Item_extend_address={Si:位置} # 記錄在動態(tài)API的位置
23) If (++non_sup) > Supnon
24) Break # 候選可擴展項的不支持度大于Supnon,結(jié)束循環(huán)
25) extend_address={item : 可擴展項的位置 }
26) return extend_address
本文提出了最大不支持度概念(在挖掘算法第23~24行),當(dāng)不支持度大于最大不支持度時,提前結(jié)束本輪循環(huán),在最小支持度較大,最大不支持度較小時,比如本文最小支持度為94,最大不支持度為6,能顯著減少計算量.
第二部分對搜索過程中產(chǎn)生的最長頻繁API序列進行過濾,由于本挖掘算法采用深度優(yōu)先策略,挖掘過程中會產(chǎn)生大量較短的子序列. 本文從Redis數(shù)據(jù)庫的隊尾依次取出最長頻繁序列進行過濾,過濾隊列為f’,過濾策略如下.
(1) 超集檢測:對一個最長頻繁序列s,通過查找其在f′中是否存在一個最長頻繁API序列Sa,使得s?Sa,如果存在,則s不是最長頻繁API序列. 如果不存在,s就是目前為止已經(jīng)挖掘到的最長頻繁API序列,并把它添加到f′中.
(2) 子集檢測:如果序列s通過了超集檢測,即它為目前已經(jīng)挖掘到的最長頻繁API序列,那么需要刪除f′中s所有的子集,設(shè)s′是f′中任意一個API序列,如果s′?s,則其是s的子集,從f′中移除s′.
本文基于挖掘的最長頻繁序列集合構(gòu)造詞袋模型,把樣本文件的動態(tài)API序列轉(zhuǎn)化為特征向量,使用隨機森林進行分類器訓(xùn)練和惡意代碼檢測.
2.4.1 最長頻繁序列集合表征樣本文件 詞袋(Bag of Words,BoW)模型最早出現(xiàn)在自然語言處理領(lǐng)域,廣泛用于信息檢索和文本分類,用于把文本內(nèi)容向量化. 詞袋模型也廣泛應(yīng)用于惡意代碼的分類與聚類問題[15-17].
樣本的動態(tài)API序列可以看作具有時間序列的一維文本,單個最長惡意頻繁序列作為能表征文本類別的一個特征,因此本文用最長頻繁API序列集合構(gòu)造惡意行為的詞袋模型,基于此模型將惡意代碼樣本和正常樣本的動態(tài)API序列轉(zhuǎn)化為向量.
對于惡意代碼來說,惡意行為往往多次出現(xiàn),因此最長頻繁序列可能在樣本文件的動態(tài)API序列中多次出現(xiàn). 統(tǒng)計表明,大多數(shù)最長頻繁序列在動態(tài)API序列中出現(xiàn)次數(shù)不超過5次.因此,為了避免奇異性向量出現(xiàn)導(dǎo)致訓(xùn)練時間長,當(dāng)該API序列在動態(tài)API序列出現(xiàn)的次數(shù)超過5次時,計為5次.
2.4.2 分類器構(gòu)建與惡意代碼檢測 本文使用隨機森林算法[18]建立分類器模型并進行惡意代碼檢測. 隨機森林屬于集成學(xué)習(xí)中的Bagging算法,通過組合多個弱分類器(決策樹),最終結(jié)果通過投票或取均值,使得模型有較高的精確度和抗過擬合性能.
檢測階段首先把訓(xùn)練樣本的向量集進行歸一化處理;然后進行標(biāo)注,導(dǎo)入數(shù)據(jù)開始訓(xùn)練分類器;最后把處理好的測試集輸入到已訓(xùn)練好的模型中進行檢測.
本節(jié)通過一系列實驗對本文提出的惡意代碼檢測方法進行評估,并將其與已有的基于API調(diào)用序列的惡意代碼檢測方法進行比較. 本文實驗采用多進程,利用Redis數(shù)據(jù)庫的隊列功能實現(xiàn)分布式挖掘,挖掘部分在2臺6核Intel(R)i5-8600k機器上進行,去重部分在6核Intel(R) Xren(R) CPU E3-1230 v3上運行.
論文實驗中的實驗樣本來源于阿里云安全算法大賽使用的數(shù)據(jù)集,包括7個典型類別的惡意樣本和正常樣本. 實驗的7類惡意代碼分別是勒索病毒、挖礦程序、DDoS木馬、蠕蟲病毒、感染性病毒、后門程序和特洛伊木馬. 此數(shù)據(jù)集包含301個API函數(shù),為便于處理,本文對每個API函數(shù)用編號替代.
由于此數(shù)據(jù)集包含逃避性樣本,還有一些樣本因其他原因未在沙箱環(huán)境成功運行[6,9],對最長頻繁序列挖掘及后面的惡意代碼檢測造成干擾,因此剔除這部分樣本,該數(shù)據(jù)集的蠕蟲病毒樣本數(shù)量較少,故額外選取180個蠕蟲樣本,他們來源于開源病毒庫Virushare,使用Virustotal檢測和本地搭建Avclass[19]環(huán)境進行標(biāo)注. 本文除去挖掘樣本后,80%的樣本用于模型訓(xùn)練,20%的樣本用于測試. 篩選后的數(shù)據(jù)集樣本空間如表3樣本集所示.
表3 樣本集
為保證挖掘的最長頻繁序列具有普適性,樣本應(yīng)該隨機選取,且達(dá)到一定量. 所有類別采用100個樣本進行挖掘. 由定義可知,支持度越小,時間和空間復(fù)雜度越大,挖掘到的最長頻繁序列越多. 為保證挖掘算法的時間可實現(xiàn)性,而挖掘到盡可能多的最長頻繁序列,支持度應(yīng)合理選擇. 本文各類別挖掘的支持度以及挖掘結(jié)果如表3所示.
在分類問題中,評價指標(biāo)有準(zhǔn)確率(Accuracy,ACC)、精確度和召回率曲線(Precision Recall Curve,PRC)、特征曲線(Receiver Operating Curve,ROC)和曲線區(qū)域面積(Area Under Curve,AUC). 曲線面積AUC在測試集樣本分布變化時仍然能夠保持穩(wěn)定. AUC越大,表明分類器效果越好,因此測試結(jié)果的采用的主要指標(biāo)有:ACC和AUC. 這些指標(biāo)涉及機器學(xué)習(xí)中的四個檢驗指標(biāo):真陽性(TP)、真陰性(TN)、假陽性(FP)、假陰性(FN),如表4檢驗指標(biāo)的含義.
表4 檢驗指標(biāo)的含義
ROC是一個二維坐標(biāo)軸中的曲線,橫坐標(biāo)是假陽性率(False Positive Rate,F(xiàn)PR),縱坐標(biāo)是真陽性率(True Positive Rate,F(xiàn)PR),由表4得到TPR和FPR定義. 由一個確定的分類器和測試集可得到一組FPR和TPR,設(shè)置不同的TPR可得到一系列的FPR和TPR構(gòu)成ROC曲線,AUC是ROC曲線好壞的有效度量方式,TPR、FPR和ACC的定義如下.
(3)
(4)
(5)
選取不同的信息增益的序列,可得到一系列的AUC和ACC值,如圖2不同最長頻繁數(shù)量的準(zhǔn)確率和AUC值所示.
圖2 不同最長頻繁數(shù)量的準(zhǔn)確率和AUC值Fig.2 The accuracy and AUC value of different sequence number
從圖2可以看出,選取前6131個信息增益較大的最長API序列,AUC曲線面積最大為0.99,分類器的準(zhǔn)確率為95.6%. 而蘆效峰等人[13]提出的方法使用信息熵篩選API序列特征,組合隨機森林和LSTM網(wǎng)絡(luò)進行惡意代碼檢測. 如表5為本文方法蘆效峰等人的組合模型的對比.
表5 本文方法和組合框架方法的檢測結(jié)果
Tab.5 The method comparison between this paper and combination frame
本文Method組合模型準(zhǔn)確率/%AUC準(zhǔn)確率%AUC95.60.9993.50.971
表5的實驗結(jié)果表明,本文提出的惡意代碼檢測方法相對于蘆效峰等人的組合模型對惡意代碼檢測的效果更佳. 這是因為蘆效峰等人把所有樣本作為一個惡意樣本集進行API序列的篩選,沒有考慮不同種類的惡意代碼的功能差異性導(dǎo)致的API序列的差異性.
文獻[8,13]指出序列長度越長,對惡意樣本和正常樣本有更強的區(qū)分能力,而文獻[8]提出的MACSPMD方法挖掘的序列長度大于等于5的才174個,大于等于7的序列才8個,文獻[14]采用4-Gram方法進行API序列的分割,因此檢測準(zhǔn)確率存在局限性. 本文提出的方法挖掘的6 131個序列長度分布如圖3所示.
圖3 最長頻繁序列不同長度的個數(shù)分布圖Fig.3 The number of longest frequent API sequence distribution of the length
如圖所示最長頻繁序列的長度大部分大于6,因此,本文挖掘的最長頻繁序列能更好的表示惡意代碼的某種潛在惡意行為,并且相對于其他特征形式(API調(diào)用集和N-Gram模式),本文挖掘的最長頻繁序列作為特征有更強的解釋性. 另外本文不同類別的惡意樣本分布不均衡,仍能取得較好的檢測效果,說明本文提取的特征更有效,因此對惡意樣本和正常樣本有更好的區(qū)分能力.
本文基于惡意代碼的動態(tài)API調(diào)用序列,采用最長頻繁序列挖掘算法,提出了一種新的惡意代碼檢測方法. 本文提出的惡意代碼檢測方法首先獲取PE文件在沙箱中運行產(chǎn)生的API調(diào)用序列;然后,選取區(qū)別惡意樣本和正常樣本的關(guān)鍵API保留其調(diào)用順序,并使用本文提出的分類別的最長頻繁序列挖掘算法挖掘出能代表這一類惡意代碼的最長API調(diào)用序列;使用挖掘出的最長頻繁API序列集合構(gòu)造詞袋模型;用特征向量表征樣本文件;最后采用隨機森林構(gòu)造分類器用于惡意代碼檢測. 實驗結(jié)果表明,本文提出的惡意代碼檢測模型能有效檢測惡意代碼.
本文提出的挖掘算法在挖掘過程中要根據(jù)候選項多次迭代,產(chǎn)生了大量冗余的子序列,這也是當(dāng)前序列挖掘算法的一大難點,希望在以后的工作中能夠優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法,避免大量冗余的序列產(chǎn)生,加快挖掘速度,節(jié)約存儲空間. 本文考慮到子序列的數(shù)量級較大,未將最長頻繁API序列還原成API子序列,在惡意行為的表征方面缺乏細(xì)粒度的表示,下一步提出優(yōu)化策略完全還原所有的API子序列,并篩選增益較大的API子序列來表征惡意代碼的惡意行為. 另外本文選取的特征較為單一,在加入API總數(shù)、API個數(shù)、單個API所占比例統(tǒng)計特征,API語義,API參數(shù)及返回值等特征,結(jié)合自然語言處理和深度學(xué)習(xí)算法應(yīng)該能進一步提高準(zhǔn)確率.