摘要: 針對應(yīng)用程序接口(application programming interface,API)序列識別的惡意代碼分類方法存在特征描述能力弱和調(diào)用關(guān)系缺失的問題,提出一種基于知識圖譜增強(qiáng)的惡意代碼分類方法。首先,基于函數(shù)調(diào)用圖抽取惡意代碼所含的API實(shí)體及其調(diào)用關(guān)系,在此基礎(chǔ)上構(gòu)建惡意代碼API知識圖譜。其次,使用Word2Vec技術(shù)計(jì)算攜帶上下文調(diào)用語義的API序列向量,借助TransE技術(shù)捕獲API知識圖譜中的API實(shí)體向量,將這兩個(gè)向量的融合結(jié)果作為API特征。最后,將惡意代碼所含的API表示為特征矩陣,輸入TextCNN進(jìn)行分類模型訓(xùn)練。在惡意代碼家族分類任務(wù)中,與基線模型相比,所提方法的準(zhǔn)確率有較大提升,達(dá)到93.8%,表明知識圖譜可以有效增強(qiáng)惡意代碼家族分類效果。同時(shí),通過可解釋性實(shí)驗(yàn)證實(shí)了所提方法具有應(yīng)用價(jià)值。
關(guān)鍵詞: 惡意代碼; API序列; 語義抽取; 知識圖譜; 可解釋性
中圖分類號: TP309.5
文獻(xiàn)標(biāo)志碼: A
文章編號: 1671-6841(2025)02-0061-08
DOI: 10.13705/j.issn.1671-6841.2023165
Malware Classification Method Based on Knowledge Graph Enhancement
XIA Bing HE Qudong1,2, LIU Wenbo1,2, CHU Shihao1,2, PANG Jianmin3
(1.The Frontier Information Technology Research Institute, Zhongyuan University of Technology,
Zhengzhou 450007, China; 2.Henan Key Laboratory on Public Opinion Intelligent Analysis,
Zhengzhou 450007, China; 3.Key Laboratory of Mathematical Engineering and Advanced
Computing, Zhengzhou 450001, China)
Abstract: Aiming at the weak feature description ability and the lack of call relations in malware classification methods with application programming interface(API) sequences, a malware classification method based on knowledge graph enhancement was proposed. Firstly, on the basis of a function call graph, an API entity and its call relations contained in malware were extracted so as to construct an API knowledge graph for malware. Secondly, the Word2Vec technology was used to get an API sequence vector that was blended with context semantics, and the TransE technology was used to learn an API entity vector in the knowledge graph, then the blending result of the two vectors was used as the API feature. Finally, with the feature matrix that contained API, the classification model was trained on TextCNN. In the task of malware family classification, compared with the baseline models,the proposed method had a significant improvement in accuracy,reaching 93.8%, thus indicating that the classification effect of malware family could be effectively enhanced by such a knowledge graph. Meanwhile, the method was also confirmed of application value by the explainability experiment.
Key words: malware; API sequence; semantic extraction; knowledge graph; explainability
0 引言
根據(jù)國家互聯(lián)網(wǎng)應(yīng)急中心發(fā)布的《互聯(lián)網(wǎng)安全威脅報(bào)告》,惡意代碼引發(fā)的網(wǎng)絡(luò)安全事件占比高達(dá)38%,對網(wǎng)絡(luò)空間安全產(chǎn)生嚴(yán)重威脅[1]。因此,開展惡意代碼檢測工作意義重大。
開展惡意代碼分類識別是惡意代碼檢測的一項(xiàng)基礎(chǔ)工作。同一類別的惡意代碼往往存在開發(fā)風(fēng)格一致、代碼復(fù)用等情況,這為基于特征的惡意代碼靜態(tài)檢測提供了分類依據(jù)。靜態(tài)檢測不運(yùn)行惡意代碼樣本,通過逆向工程提取文件所含函數(shù)參數(shù)、函數(shù)變量、函數(shù)調(diào)用關(guān)系和匯編指令等靜態(tài)特征,利用訓(xùn)練好的檢測模型,快速批量地分析惡意代碼樣本。依據(jù)惡意代碼所在文件線性地址的先后順序,可快速抽取內(nèi)部調(diào)用的應(yīng)用程序接口(application programming interface,API),進(jìn)而生成惡意代碼API序列。由于API序列信息具有一定程度的前后關(guān)聯(lián)性,因此API序列能捕獲惡意代碼行為特征,進(jìn)而實(shí)現(xiàn)惡意代碼分類[2-3]。然而,上述方案無法完整捕獲惡意代碼行為,僅捕獲了API先后順序?qū)傩裕嬖谔卣鞅硎灸芰θ鹾虯PI間復(fù)雜調(diào)用關(guān)系缺失的問題。
針對上述問題,本文基于函數(shù)調(diào)用圖抽取API實(shí)體及其調(diào)用關(guān)系,構(gòu)建惡意代碼API知識圖譜,將具有可推理、可解釋的知識表示學(xué)習(xí)應(yīng)用到惡意代碼分類中,提出一種基于知識圖譜增強(qiáng)的惡意代碼分類方法。實(shí)驗(yàn)結(jié)果表明,所提方法能提高惡意代碼分類任務(wù)中的語義特征描述能力。主要貢獻(xiàn)如下:1) 提出一種惡意代碼知識圖譜構(gòu)建方法?;陬A(yù)定義的8種惡意代碼知識本體,設(shè)計(jì)一種API調(diào)用關(guān)系圖實(shí)現(xiàn)方法,在此基礎(chǔ)上抽取惡意代碼實(shí)體和關(guān)系,采用三元組形式構(gòu)建惡意代碼知識圖譜。2) 提出一種基于知識圖譜增強(qiáng)的惡意代碼分類方法。分別抽取API序列信息和API調(diào)用信息并生成嵌入向量,將兩個(gè)向量融合拼接得到API知識圖譜增強(qiáng)特征向量,輸入TextCNN進(jìn)行惡意代碼分類模型訓(xùn)練。實(shí)驗(yàn)結(jié)果表明,所提模型的分類準(zhǔn)確率達(dá)到93.8%。
1 相關(guān)工作
1.1 基于靜態(tài)特征的惡意代碼分類
常見的惡意代碼種類包括病毒、蠕蟲、木馬和勒索軟件等。準(zhǔn)確描述惡意代碼的行為特征是惡意代碼靜態(tài)檢測的關(guān)鍵。喬延臣等[4]通過逆向技術(shù)獲取惡意程序的匯編代碼,將匯編指令看作詞,函數(shù)看作句子,將每個(gè)惡意程序轉(zhuǎn)化為一個(gè)文檔,然后使用CNN實(shí)現(xiàn)惡意程序的分類。Nataraj等[5]將惡意代碼文件映射為灰度圖像,抽取圖像的gist特征,并基于此特征使用K近鄰算法進(jìn)行分類。郎大鵬等[6]提出基于多特征融合的惡意代碼分類方法,分別提取灰度共生矩陣、操作碼序列、操作碼3個(gè)特征后用隨機(jī)森林分類器實(shí)現(xiàn)分類。Huang等[7]提取惡意代碼的一致執(zhí)行序列、軟件基因、指令序列、控制流圖和調(diào)用圖等特征,借助圖卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)惡意代碼檢測。
API是系統(tǒng)鏈接庫中預(yù)先定義的函數(shù),操作系統(tǒng)在執(zhí)行內(nèi)存分配、系統(tǒng)資源管理等行為時(shí),通常通過API來操作。因此,API調(diào)用序列在一定程度上可以表示惡意代碼的行為特征。Salehi等[2]將惡意代碼中的API及API參數(shù)作為分類特征,采用降維方法與多元分類器實(shí)現(xiàn)惡意代碼分類。Zhang等[3]將惡意代碼的API及其對應(yīng)的參數(shù)和類別作為輸入特征,采用多個(gè)門控CNN和BiLSTM學(xué)習(xí)API調(diào)用之間的序列相關(guān)性,進(jìn)而實(shí)現(xiàn)惡意代碼分類。Li等[8]使用沙箱技術(shù)抽取API序列,借助LSTM模型學(xué)習(xí)惡意代碼API序列特征。于媛爾等[9]融合程序的敏感權(quán)限信息和敏感API信息構(gòu)建特征庫,使用隨機(jī)森林算法實(shí)現(xiàn)惡意軟件家族分類。
1.2 基于知識圖譜的軟件安全分析
知識圖譜是一種基于圖的數(shù)據(jù)結(jié)構(gòu),由節(jié)點(diǎn)和邊組成,節(jié)點(diǎn)表示實(shí)體,邊表示實(shí)體間關(guān)系。知識圖譜能夠很好地表示實(shí)體、概念、客觀事實(shí)及其之間的關(guān)系,具有可推理、可解釋等特點(diǎn)。從知識涵蓋的領(lǐng)域來看,知識圖譜分為通用知識圖譜和領(lǐng)域知識圖譜,本文構(gòu)建的惡意代碼知識圖譜屬于領(lǐng)域知識圖譜。
知識圖譜的技術(shù)優(yōu)勢已在軟件安全分析和分類任務(wù)中得到應(yīng)用。王婷等[10]將文本實(shí)體鏈接到外部知識庫實(shí)現(xiàn)實(shí)體增強(qiáng)表示,提出了一種基于知識增強(qiáng)的文本分類方法。王樂[11]通過提取NVD和CVE數(shù)據(jù)庫的漏洞類型、源代碼、供應(yīng)商等數(shù)據(jù)構(gòu)建軟件漏洞知識圖譜,借助知識圖譜鏈?zhǔn)酵评砑夹g(shù),提出一種基于知識圖譜的軟件安全漏洞挖掘方法。Chowdhury等[12]提出一種基于知識圖譜的惡意代碼行為捕獲方法,所構(gòu)建的知識圖譜包含樣本類型、行為、惡意代碼家族、代碼結(jié)構(gòu)等信息。Bai等[13]提出一種通過API知識圖譜檢測安卓惡意代碼變種的方法,依據(jù)API調(diào)用關(guān)系構(gòu)建API知識圖譜,用于檢測安卓惡意代碼變種。
2 惡意代碼知識圖譜構(gòu)建
2.1 本體及關(guān)系定義
構(gòu)建知識圖譜首先要定義本體及其之間的關(guān)系。本體是知識圖譜中的概念,可以將其理解為一類實(shí)體的集合,其描述了現(xiàn)實(shí)存在的事物。實(shí)體間存在的各種內(nèi)在關(guān)聯(lián)用關(guān)系來描述,圖譜中豐富的關(guān)系有助于發(fā)掘深層知識和語義理解[14]。
2.1.1 本體定義
API調(diào)用之間的關(guān)系可以描述惡意代碼行為,因此以API調(diào)用關(guān)系為基礎(chǔ)構(gòu)建了8種知識圖譜本體。1) FileName本體:待分析樣本的名稱,將樣本名放到圖譜中是為了增加樣本的描述信息。2) FileType本體:文件類型,主要包括PE、ELF、MS-DOS,不同系統(tǒng)上的惡意代碼具有不同的鏈接庫和不同的交互邏輯等特征。3) MD5本體:樣本MD5值,由于文件名可能會重復(fù)或者命名不規(guī)范,因此用樣本MD5值作為該樣本的唯一標(biāo)識。4) Caller_API本體:對于某個(gè)API,其前驅(qū)API函數(shù)稱為Caller。5) Callee_API本體:對于某個(gè)API,其后繼API函數(shù)稱為Callee。通過Caller_API和Callee_API這兩個(gè)本體可以清晰地描述某個(gè)API調(diào)用的前后關(guān)系。6) API_Name本體:Caller_API和Callee_API統(tǒng)稱為API_Name,這些API名稱可以清晰地表達(dá)惡意代碼的操作行為。7) EntryAPI本體:API調(diào)用圖的入口API。8) EndAPI本體:API調(diào)用圖的結(jié)束API。EntryAPI和EndAPI描述了API調(diào)用的起始關(guān)系。
2.1.2 關(guān)系定義
惡意代碼的8種本體間存在關(guān)聯(lián)關(guān)系,這些關(guān)系清晰地表達(dá)了惡意代碼行為,有助于惡意代碼分類。惡意代碼三元組如表1所示,顯示了所建立的6種惡意代碼本體間的關(guān)系。
表1所示的三元組在樣本名稱與樣本MD5值間建立一一對應(yīng)關(guān)系,即以MD5值作為樣本的唯一標(biāo)識;HasAPI關(guān)系連接了樣本中的所有API;FileType表示該樣本的文件類型;Call表示API間的調(diào)用與被調(diào)用關(guān)系;EntryAPI表示該樣本的入口API;EndAPI表示該樣本的結(jié)束API。建立上述關(guān)系后,采用三元組方式表示惡意代碼分析結(jié)果。
2.2 API調(diào)用關(guān)系圖構(gòu)建
API調(diào)用關(guān)系是惡意代碼知識圖譜的核心。由于現(xiàn)有工具能分析出惡意代碼的函數(shù)調(diào)用圖以及函數(shù)內(nèi)部的控制流圖(control flow graph,CFG),但無法給出API的調(diào)用關(guān)系圖。因此,基于函數(shù)調(diào)用圖提出一種構(gòu)建API調(diào)用關(guān)系圖的方法。API調(diào)用關(guān)系圖過濾過程如圖1所示,顯示了樣本“Backdoor.Win32.Afcore.a”的API調(diào)用關(guān)系圖構(gòu)建過程,具體步驟如下。
Step 1 通過逆向分析生成函數(shù)調(diào)用圖。
Step 2 對函數(shù)調(diào)用圖中的每個(gè)函數(shù)進(jìn)行如下操作:1) 獲取函數(shù)CFG,將基本塊視為節(jié)點(diǎn),判斷節(jié)點(diǎn)中是否包含API調(diào)用。2) 對不包含API調(diào)用的節(jié)點(diǎn)N跳轉(zhuǎn)到3)。3) 分析節(jié)點(diǎn)N的前驅(qū)和后繼,將節(jié)點(diǎn)N的前驅(qū)節(jié)點(diǎn)定義為N_P,后繼節(jié)點(diǎn)定義為N_C。若存在節(jié)點(diǎn)N_C且含API調(diào)用,則將節(jié)點(diǎn)N_C作為節(jié)點(diǎn)N_P的直接后繼,并刪除節(jié)點(diǎn)N;若不存在節(jié)點(diǎn)N_C,則直接刪除節(jié)點(diǎn)N。4) 反復(fù)上述過程直到遍歷所有節(jié)點(diǎn)。如果存在生成的API圖則替換該函數(shù),否則從函數(shù)調(diào)用圖中刪除該函數(shù)。
Step 3 遍歷完所有函數(shù)則停止,否則執(zhí)行Step 2。這樣就得到了惡意代碼的API調(diào)用關(guān)系圖。
用戶自定義函數(shù)在編譯過程中通常會被剝離,并用類似“fcn.00404268”的名稱代替,在分析時(shí)并不清楚該函數(shù)的名稱,不利于分析惡意代碼的語義。因此,在構(gòu)建API調(diào)用關(guān)系時(shí)過濾掉用戶自定義函數(shù)。如圖1中的“GetTempPathA-fcn.00404268-CreateFileA”這條調(diào)用關(guān)系,在實(shí)現(xiàn)過程中刪除了灰色的“fcn.00404268”用戶自定義函數(shù),將“GetTempPathA”和“CreateFileA”直接連接。
2.3 惡意代碼知識抽取
在知識圖譜中,知識越豐富則知識表示學(xué)習(xí)的效果越好。惡意代碼的FileName、FileType、MD5知識可利用逆向工具分析得到,如樣本“Backdoor.Win32.Afcore.a”的文件類型是“PE”,MD5值為“10586070da6e1859b5b6dab5efae60f2”。對于Caller_API、Callee_API、API_Name、EntryAPI、EndAPI知識,則需要從2.2節(jié)中構(gòu)建的API調(diào)用關(guān)系圖中抽取。為此,基于API調(diào)用關(guān)系圖給出一種惡意代碼知識抽取算法。
算法1 惡意代碼知識抽取算法
輸入: Binary Malware
輸出: Knowledge_List
1. Knowledge_List=[]
2. API_Three_Tuple=[]
3. Des=Read describe from Malware.elf
4. G=API Call Relation Graph
5. for API in G do
6. API_Three_Tuple.append(caller+callee+API_Name+EntryAPI+EndAPI)
7. end for
8. Knowledge_List.append(Des+API_Three_Tuple)
9. return Knowledge_List
根據(jù)算法1描述,輸入為二進(jìn)制惡意代碼樣本。算法第4行為構(gòu)建的API調(diào)用關(guān)系圖,每個(gè)節(jié)點(diǎn)為一個(gè)API,前驅(qū)API稱為Caller,后繼API稱為Callee。算法第5~7行從API調(diào)用關(guān)系圖入口開始,遍歷每個(gè)節(jié)點(diǎn)及其后繼節(jié)點(diǎn),即Caller和所有Callee。將每個(gè)Callee與調(diào)用它的Caller、API_Name、EntryAPI和EndAPI合并,就得到所有API調(diào)用三元組。最后,結(jié)合樣本描述得到該樣本的所有知識。
2.4 API序列提取
Salehi等[2]和Zhang等[3]提出的方法表明,API序列在一定程度上可以描述惡意代碼的行為特征。為驗(yàn)證提出的惡意代碼知識圖譜對惡意代碼分類方法有性能提升,進(jìn)行了基于API序列的惡意代碼分類實(shí)驗(yàn),但是所提取的API序列不用于知識圖譜構(gòu)建。
借助函數(shù)執(zhí)行路徑來抽取API序列會引發(fā)路徑爆炸或循環(huán)調(diào)用等問題,因此依據(jù)文件線性地址建立API序列。使用逆向分析工具Radare2分析二進(jìn)制惡意代碼樣本,通過工具中的“afl”功能抽取并過濾出樣本中的所有API及其線性地址;再根據(jù)線性地址的先后順序?qū)PI進(jìn)行排序,得到樣本的API序列;最后在分類標(biāo)簽和API序列之間建立關(guān)聯(lián)。
2.5 惡意代碼知識圖譜構(gòu)建
完成惡意代碼知識抽取后,需要將其存儲為結(jié)構(gòu)化數(shù)據(jù),接著將結(jié)構(gòu)化數(shù)據(jù)中的實(shí)體、關(guān)系與相關(guān)的本體概念對應(yīng),生成惡意代碼知識圖譜三元組,最后將三元組存儲到Neo4j圖數(shù)據(jù)庫,完成惡意代碼知識圖譜構(gòu)建。圖2為構(gòu)建的惡意代碼知識圖譜。
3 基于知識圖譜增強(qiáng)的惡意代碼分類方法
3.1 總體設(shè)計(jì)
基于知識圖譜增強(qiáng)的惡意代碼分類方法總體設(shè)計(jì)框架如圖3所示,由惡意代碼特征提取、特征表示學(xué)習(xí)和分類模型3個(gè)部分組成。首先通過逆向工程提取惡意代碼樣本中的API序列和API調(diào)用關(guān)系,接著將API以地址的先后順序作為排序依據(jù),建立惡意代碼API序列數(shù)據(jù)集。將API調(diào)用關(guān)系、惡意代碼類型、樣本名等信息及其之間的關(guān)系作為知識,建立惡意代碼知識圖譜,再使用Word2Vec技術(shù)將惡意代碼序列特征數(shù)據(jù)集中的每個(gè)API轉(zhuǎn)為詞向量,使用TransE技術(shù)將知識圖譜中的每個(gè)實(shí)體轉(zhuǎn)為實(shí)體向量,實(shí)現(xiàn)一個(gè)API在兩個(gè)向量空間中的表示。然后,將兩個(gè)向量拼接為一個(gè)向量,得到知識圖譜增強(qiáng)的惡意代碼特征矩陣。最后,以該特征矩陣作為輸入,構(gòu)建TextCNN網(wǎng)絡(luò),訓(xùn)練惡意代碼分類模型。
3.2 特征表示學(xué)習(xí)
3.2.1 API序列向量化
Word2Vec[15]是谷歌公司提出的一種詞嵌入模型,實(shí)現(xiàn)了將詞轉(zhuǎn)化為可計(jì)算的、融合上下文的語義向量。因此,通過向量的余弦距離可以衡量詞之間的相關(guān)性。由于Word2Vec生成的是靜態(tài)向量,具有很好的通用性,可移植到不同的任務(wù)中,所以采用該技術(shù)作為詞嵌入模型。
Word2Vec有CBOW和Skip-gram兩種訓(xùn)練模式,前者通過上下文來預(yù)測中間詞,后者通過中間詞來預(yù)測上下文。CBOW模式更適合小型語料庫,而Skip-gram模式在大型語料庫中表現(xiàn)更好。由于所選用的數(shù)據(jù)集詞典長度在5 000以內(nèi),因此采取CBOW模式訓(xùn)練詞向量。本文方法中的詞為API序列中的每一個(gè)API。
3.2.2 知識圖譜表示學(xué)習(xí)
知識表示學(xué)習(xí)將知識圖譜中的實(shí)體和關(guān)系嵌入向量空間,使實(shí)體和關(guān)系變成可計(jì)算的低維稠密向量[16],得到的向量表示結(jié)果可應(yīng)用于語義增強(qiáng)、知識推理等場景。
知識圖譜通常采用三元組方式來表示,即[頭實(shí)體head,關(guān)系relation,尾實(shí)體tail]的形式,簡寫為[h,r,t]。選取Bordes等[17]提出的TransE模型作為知識表示學(xué)習(xí)模型,其原因在于該模型將每個(gè)三元組中的關(guān)系r看作從頭實(shí)體h到尾實(shí)體t的翻譯,通過不斷調(diào)整h、r、t,使得(h+r)盡可能地逼近t,越接近則三元組的嵌入效果越好。與此同時(shí),TransE模型參數(shù)少,計(jì)算復(fù)雜度低,語義表示能力強(qiáng)。
在實(shí)際學(xué)習(xí)過程中,為了增強(qiáng)知識表示的區(qū)分能力,TransE模型采用最大間隔方法[18],定義的優(yōu)化目標(biāo)函數(shù)為
L=∑(h,r,t)∈S
∑(h′,r′,t′)∈S-
max(0, fr(h,t)+γ-fr′(h′,t′)),(1)
式中:S為正確三元組集合;S-為錯(cuò)誤三元組集合;max(x,y)返回x,y中較大的值;γ為正確三元組得分與錯(cuò)誤三元組得分之間的間隔距離。S-是利用TransE將S中每個(gè)三元組的h、r、t其中之一隨機(jī)替換為其他實(shí)體得到的。
3.3 惡意代碼分類模型
3.3.1 特征矩陣
惡意代碼分類模型的輸入是一個(gè)特征矩陣,由惡意代碼API序列中的詞向量和知識圖譜中的實(shí)體向量拼接而成。其中,詞向量采用Word2Vec技術(shù)將API序列嵌入向量空間,維數(shù)dim為100,用Vw表示;實(shí)體向量采用TransE技術(shù)來對惡意代碼知識圖譜進(jìn)行表示學(xué)習(xí),將三元組中的每個(gè)實(shí)體及其關(guān)系嵌入向量空間,維數(shù)dim為100,用Ve表示。特征矩陣的拼接過程如圖4所示。
首先檢索API序列,從Word2Vec模型中取出API的向量Vw,從TransE模型中檢索該API在知識圖譜中的向量Ve,接著將Vw與Ve進(jìn)行拼接,得到維數(shù)dim為200的知識圖譜增強(qiáng)的特征向量Vew。以上述方式遍歷一個(gè)樣本的所有API,最后形成尺寸為n×200的特征矩陣,作為深度學(xué)習(xí)模型的輸入。特征矩陣計(jì)算過程可表示為
FeatureMatrix=∑n=1(Vwn+Ven),(2)
式中:Vwn表示API序列中的第n個(gè)API詞向量;Ven表示該API在知識圖譜中的實(shí)體向量。
3.3.2 模型結(jié)構(gòu)
TextCNN是由Kim[19]提出的文本分類模型,與傳統(tǒng)的應(yīng)用于計(jì)算機(jī)視覺的CNN模型相比,TextCNN對模型的輸入層進(jìn)行了一些變形,使文本能夠以特征矩陣的形式輸入神經(jīng)網(wǎng)絡(luò)。TextCNN模型結(jié)構(gòu)如圖5所示。模型輸入是一個(gè)s×d的特征矩陣,其中:s表示文本序列中詞的數(shù)量;d代表向量的維數(shù)。模型包含卷積層和池化層,最后連接一個(gè)帶Softmax的全連接層。
在卷積層中,設(shè)置卷積核的尺寸分別為2、3、4,卷積核數(shù)量為256。使用3個(gè)尺寸的卷積核,保證了每次滑動的位置都是一個(gè)API的完整特征,從而全面學(xué)習(xí)特征矩陣的語義信息。卷積過程可表示為
y=LeakyReLU∑s-h+1i=1W×A[i:i+h-1]+b,(3)
式中:W表示卷積核;h為卷積核的高度;A[i:i+h-1]表示特征矩陣A的第i行到第i+h-1行;b為偏置;LeakyReLU為激活函數(shù)。
在池化層中,采用最大池化max_pool1d進(jìn)行池化操作,將每一個(gè)卷積層輸出的向量都通過最大池化方法映射為一個(gè)具體的數(shù)值,然后再將池化后的結(jié)果進(jìn)行合并,得出一個(gè)全新的特征向量,用作全連接層的輸入。
在全連接層中,將所有特征圖堆疊成一個(gè)長度固定的特征向量,并應(yīng)用Dropout來保持特征不變性并防止過擬合。模型輸出采用Softmax分類器,其輸出是分類標(biāo)簽的概率分布。
通過監(jiān)督學(xué)習(xí)的方式訓(xùn)練模型,模型訓(xùn)練的損失函數(shù)可表示為
loss=-1N∑i∑Cc=1yi,cpi,c,(4)
式中:N為樣本總數(shù);C為分類任務(wù)中的類別數(shù);pi,c為樣本屬于類別c的概率;若樣本分類預(yù)測正確則yi,c為1,不正確則為0。
4 實(shí)驗(yàn)與結(jié)果分析
4.1 數(shù)據(jù)集
實(shí)驗(yàn)使用VxHeaven[20]惡意代碼數(shù)據(jù)集,從中選出Hupigon、Buzus、Small、OnLineGames、Delf、Agent和Vapsup 7個(gè)惡意代碼家族。為避免數(shù)據(jù)量帶來的誤差,每個(gè)家族隨機(jī)選取1 000個(gè)左右的樣本,使每個(gè)家族惡意代碼數(shù)量基本持平。訓(xùn)練時(shí),將數(shù)據(jù)集的80%作為訓(xùn)練集,10%作為測試集,10%作為驗(yàn)證集。
4.2 基線方法與評價(jià)指標(biāo)
為評價(jià)模型在惡意代碼分類任務(wù)上的性能,引入文獻(xiàn)[8]和文獻(xiàn)[21]中典型模型作為基線對比。其中,文獻(xiàn)[8]采用LSTM模型,訓(xùn)練數(shù)據(jù)為API序列;文獻(xiàn)[21]采用邏輯回歸模型,訓(xùn)練數(shù)據(jù)為TF-IDF值和API序列。
經(jīng)統(tǒng)計(jì)發(fā)現(xiàn),95%的API序列長度在600個(gè)詞以內(nèi),因此實(shí)驗(yàn)?zāi)P凸潭ㄐ蛄虚L度為600。詞向量維數(shù)dim為100,每個(gè)知識的維數(shù)dim為100。為評估惡意代碼分類性能,采用準(zhǔn)確率、精確率、召回率和F1值作為模型的評價(jià)指標(biāo)。
4.3 模型準(zhǔn)確率對比
為驗(yàn)證本文所提出的將知識圖譜與API序列融合的方法能夠提高惡意代碼分類準(zhǔn)確率,與采用API序列及加其他特征的方法進(jìn)行了對比,不同方法的準(zhǔn)確率結(jié)果對比如表2所示??梢钥闯觯c本文方法相比,文獻(xiàn)[8]和文獻(xiàn)[21]的準(zhǔn)確率均有所減少。這表明引入知識表示學(xué)習(xí)的API調(diào)用關(guān)系更好地描述了惡意代碼的行為,增強(qiáng)了惡意代碼語義特征的描述能力,進(jìn)而提升惡意代碼分類準(zhǔn)確率。
4.4 消融實(shí)驗(yàn)
選取了文本分類中常用的TextCNN、BiLSTM和FastText模型進(jìn)行了惡意代碼分類預(yù)測消融實(shí)驗(yàn),將“API序列”和“知識圖譜+API序列”兩種特征進(jìn)行對比分析,消融實(shí)驗(yàn)結(jié)果如表3所示。在兩種特征下,TextCNN模型均取得了最好的實(shí)驗(yàn)效果,鑒于此,實(shí)驗(yàn)均采用該模型進(jìn)行。在TextCNN模型中,單純使用API序列作為特征時(shí),分類準(zhǔn)確率為90.3%,加入知識圖譜后,分類準(zhǔn)確率有所提升。實(shí)驗(yàn)結(jié)果表明,知識圖譜提升了惡意代碼分類的準(zhǔn)確率。
4.5 可解釋性實(shí)驗(yàn)
同一家族或同一類型的惡意代碼,往往具有特定API行為特征。為探究是哪些API對惡意代碼分類結(jié)果產(chǎn)生了影響,采用可解釋性預(yù)測模型LIME[22]。以API序列和訓(xùn)練后的TextCNN分類模型作為輸入,進(jìn)行可解釋性實(shí)驗(yàn)。Agent家族的特征權(quán)重結(jié)果如圖6所示,由上至下為該類別中對分類結(jié)果影響權(quán)重最大的API排序。
以Agent家族的惡意代碼為例,InitCommonContrals、SafeArrayPtrOfIndex、Creat、CoCreateGuid、Add這5個(gè)API對分類結(jié)果產(chǎn)生了最大的正影響,擁有這5個(gè)API的樣本被分類為Agent家族的概率較大。ImageList、SetBkColor這2個(gè)API對分類結(jié)果產(chǎn)生了最大的負(fù)影響,即包含這2個(gè)API的樣本被分類為Agent家族的概率較小。
通過人工分析發(fā)現(xiàn),InitCommonContrals函數(shù)實(shí)現(xiàn)了通用控件的初始化;SafeArrayPtrOfIndex函數(shù)可以獲取指向數(shù)組元素的指針;CoCreateGuid函數(shù)通過調(diào)用RPC功能的函數(shù)UuidCreate來創(chuàng)建GUID;Creat是C語言中的函數(shù),用來創(chuàng)建文件;Add函數(shù)實(shí)現(xiàn)了內(nèi)容的增加。這些函數(shù)的組合實(shí)現(xiàn)了文件創(chuàng)建和內(nèi)容增加,并通過遠(yuǎn)程過程調(diào)用實(shí)現(xiàn)數(shù)據(jù)傳輸,屬于典型的木馬行為。綜上所述,本文提出的惡意代碼分類方法行之有效,具有實(shí)際應(yīng)用價(jià)值。
5 結(jié)語
本文針對當(dāng)前基于API序列的惡意代碼分類任務(wù)無法完整捕獲行為特征的不足,提出一種基于知識圖譜增強(qiáng)的惡意代碼分類方法。實(shí)驗(yàn)結(jié)果表明,引入知識表示學(xué)習(xí)的API調(diào)用關(guān)系和API序列兩種特征的結(jié)合,可以更好地描述惡意代碼的行為,增強(qiáng)惡意代碼語義特征的描述能力,提升惡意代碼分類的效果。下一步研究計(jì)劃通過虛擬機(jī)捕獲隱含的API調(diào)用關(guān)系,豐富與完善惡意代碼知識圖譜,融合二進(jìn)制代碼指令行為特征和圖神經(jīng)網(wǎng)絡(luò),進(jìn)一步提升惡意代碼分類效果。
參考文獻(xiàn):
[1] 國家互聯(lián)網(wǎng)應(yīng)急中心.互聯(lián)網(wǎng)安全威脅報(bào)告[EB/OL].[2023-06-23].https:∥www.cert.org.cn/
publish/main/upload/File/CNCERT-report202201.pdf. 2022.
CNCERT. Internet security threat report[EB/OL]. [2023-06-23]. https:∥www.cert.org.cn/publish/main/upload/File/CNCERT-report202201.pdf. 2022.
[2] SALEHI Z, GHIASI M, SAMI A. A miner for malware detection based on API function calls and their arguments[C]∥Proceedings of the 16th CSI International Symposium on Artificial Intelligence and Signal Processing. Piscataway:IEEE Press, 2012: 563-568.
[3] ZHANG Z Q, QI P P, WANG W. Dynamic malware analysis with feature engineering and feature learning[C]∥Proceedings of the AAAI Conference on Artificial Intelligence. Palo Alto:AAAI Press, 2020: 1210-1217.
[4] 喬延臣, 姜青山, 古亮, 等. 基于匯編指令詞向量與卷積神經(jīng)網(wǎng)絡(luò)的惡意代碼分類方法研究[J]. 信息網(wǎng)絡(luò)安全, 2019(4): 20-28.
QIAO Y C, JIANG Q S, GU L, et al. Malware classification method based on word vector of assembly instruction and CNN[J]. Netinfo security, 2019(4): 20-28.
[5] NATARAJ L, KARTHIKEYAN S, JACOB G, et al. Malware images: visualization and automatic classification[C]∥Proceedings of the 8th International Symposium on Visualization for Cyber Security. New York: ACM Press, 2011: 1-7.
[6] 郎大鵬, 丁巍, 姜昊辰, 等. 基于多特征融合的惡意代碼分類算法[J]. 計(jì)算機(jī)應(yīng)用, 2019, 39(8): 2333-2338.
LANG D P, DING W, JIANG H C, et al. Malicious code classification algorithm based on multi-feature fusion[J]. Journal of computer applications, 2019, 39(8): 2333-2338.
[7] HUANG Y Z, QIAO M, LIU F D, et al. Binary code traceability of multigranularity information fusion from the perspective of software genes[J]. Computers & security, 2022, 114: 102607.
[8] LI C, ZHENG J J. API call-based malware classification using recurrent neural networks[J]. Journal of cyber security and mobility, 2021: 617-640.
[9] 于媛爾, 張琳琳, 趙楷, 等. 基于敏感權(quán)限和API的Android惡意軟件家族分類方法[J]. 鄭州大學(xué)學(xué)報(bào)(理學(xué)版), 2020, 52(3): 75-79, 91.
YU Y E, ZHANG L L, ZHAO K, et al. Android malware family classification method based on sensitive permissions and API[J]. Journal of Zhengzhou university (natural science edition), 2020, 52(3): 75-79, 91.
[10]王婷, 朱小飛, 唐顧. 基于知識增強(qiáng)的圖卷積神經(jīng)網(wǎng)絡(luò)的文本分類[J]. 浙江大學(xué)學(xué)報(bào)(工學(xué)版), 2022, 56(2): 322-328.
WANG T, ZHU X F, TANG G. Knowledge-enhanced graph convolutional neural networks for text classification[J]. Journal of Zhejiang university (engineering science), 2022, 56(2): 322-328.
[11]王樂. 基于知識圖譜的軟件安全漏洞挖掘技術(shù)研究[D]. 西安: 西安工業(yè)大學(xué), 2021.
WANG L. Research on software security vulnerability mining technology based on knowledge graph[D]. Xi′an: Xi′an Technological University, 2021.
[12]CHOWDHURY I R, BHOWMIK D. Capturing malware behaviour with ontology-based knowledge graphs[C]∥IEEE Conference on Dependable and Secure Computing. Piscataway:IEEE Press, 2022: 1-7.
[13]BAI Y D, CHEN S, XING Z C, et al. ArgusDroid: detecting Android malware variants by mining permission-API knowledge graph[J]. Science China information sciences, 2023, 66(9): 192101.
[14]昝紅英, 竇華溢, 賈玉祥, 等. 基于多來源文本的中文醫(yī)學(xué)知識圖譜的構(gòu)建[J]. 鄭州大學(xué)學(xué)報(bào)(理學(xué)版), 2020, 52(2): 45-51.
ZAN H Y, DOU H Y, JIA Y X, et al. Construction of Chinese medical knowledge graph based on multi-source corpus[J]. Journal of Zhengzhou university (natural science edition), 2020, 52(2): 45-51.
[15]MIKOLOV T, CHEN K, CORRADO G, et al. Efficient estimation of word representations in vector space[EB/OL].[2022-12-21]. https:∥doi.org/10.48550/arXiv.1301.3781.
[16]劉知遠(yuǎn), 孫茂松, 林衍凱, 等. 知識表示學(xué)習(xí)研究進(jìn)展[J]. 計(jì)算機(jī)研究與發(fā)展, 2016, 53(2): 247-261.
LIU Z Y, SUN M S, LIN Y K, et al. Knowledge representation learning: a review[J]. Journal of computer research and development, 2016, 53(2): 247-261.
[17]BORDES A,USUNIER N,GARCIA-DURAN A, et al. Translating embeddings for modeling multi-relational data [J]. Advances in neural information processing systems, 2013:2787-2795.
[18]王昊奮, 漆桂林, 陳華鈞. 知識圖譜: 方法、實(shí)踐與應(yīng)用[M]. 北京: 電子工業(yè)出版社, 2019.
WANG H F, QI G L, CHEN H J. Knowledge graph:methods,practices,and applications [M]. Beijing: Publishing House of Electronics Industry, 2019.
[19]KIM Y. Convolutional neural networks for sentence classification[C]∥Proceedings of the Conference on Empirical Methods in Natural Language Processing. Stroudsburg: Association for Computational Linguistics, 2014: 1746-1751.
[20]VxHeaven Dataset[EB/OL].[2023-06-12]. https:∥1vx.ug/archive/Vx-Heaven.
[21]周楊. 基于行為特征的Windows惡意代碼檢測與分析[D]. 北京: 中國人民公安大學(xué), 2021.
ZHOU Y. Windows malicious code detection and analysis based on behavior characteristics[D]. Beijing: Chinese People′s Public Security University, 2021.
[22]RIBEIRO M T, SINGH S, GUESTRIN C. "Why should I trust You?": explaining the predictions of any classifier[C]∥Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. New York: ACM Press, 2016: 1135-1144.