孫錦濤 李祺 李曉龍
摘 要: 如今越來越多的攻擊者通過修改惡意軟件源碼的方式逃避惡意軟件檢測,惡意軟件變種在代碼重用、編碼風(fēng)格、攻擊行為等多方面的復(fù)雜關(guān)系為惡意軟件分析帶來了挑戰(zhàn). 近年來,圖神經(jīng)網(wǎng)絡(luò)憑借其在建模圖結(jié)構(gòu)數(shù)據(jù),學(xué)習(xí)實體間復(fù)雜關(guān)系等方面的強大能力,已被廣泛應(yīng)用于惡意軟件分類與檢測任務(wù)之中,以建模惡意軟件及其變種間復(fù)雜的關(guān)系,擺脫孤立分析困境. 然而,現(xiàn)有方法一方面缺少對惡意軟件及其變種間多維度復(fù)雜關(guān)系的全面表征,導(dǎo)致復(fù)雜關(guān)聯(lián)關(guān)系未被充分挖掘及利用. 另一方面僅關(guān)注惡意軟件間的拓?fù)浣Y(jié)構(gòu),忽略了實體語義信息,這導(dǎo)致攻擊者極易通過對抗手段偽造特征從而逃過檢測. 此外,與惡意軟件相關(guān)的Windows API、通信IP 等實體自身匱乏的語義信息進一步阻礙了語義信息的提取和表示. 因此,實現(xiàn)惡意軟件間全面的關(guān)聯(lián)關(guān)系與特征語義信息的融合對提升惡意軟件變種檢測的魯棒性和準(zhǔn)確性具有重要意義. 為此,本文提出了一種基于異質(zhì)圖屬性增強的惡意軟件變種檢測方法. 首先,構(gòu)建了一個惡意軟件異質(zhì)信息網(wǎng)絡(luò),以建模惡意軟件及特征間的復(fù)雜關(guān)系;然后,通過惡意軟件異質(zhì)信息網(wǎng)絡(luò),將惡意軟件變種檢測問題轉(zhuǎn)化為異質(zhì)圖中的節(jié)點分類問題,為實體節(jié)點構(gòu)建語義屬性來增強節(jié)點信息的表示;接下來,對于其中語義信息匱乏的實體節(jié)點,從外部開源數(shù)據(jù)中學(xué)習(xí)實體的語義信息來彌補自身的語義缺失;最后,本文以拓?fù)潢P(guān)系為指導(dǎo),基于注意力機制聚合有屬性節(jié)點信息以補全無屬性節(jié)點,實現(xiàn)節(jié)點屬性補全. 遵循一種迭代優(yōu)化方式,以交替式地優(yōu)化補全過程與異質(zhì)圖節(jié)點嵌入過程,實現(xiàn)統(tǒng)一的基于異質(zhì)圖屬性補全的惡意軟件變種檢測方法. 實驗結(jié)果表明,本文提出的方法能夠有效提升惡意軟件變種檢測的性能,在多個數(shù)據(jù)集下優(yōu)于其他最先進的模型.
關(guān)鍵詞: 惡意軟件變種檢測; 異質(zhì)圖神經(jīng)網(wǎng)絡(luò); 特征增強; 屬性補全
中圖分類號: TP391. 1 文獻標(biāo)志碼: A DOI: 10. 19907/j. 0490-6756. 2024. 030002
1 引言
如今,隨著代碼重用技術(shù)的發(fā)展,惡意軟件變種可以輕易地由已知惡意軟件改造而來. 這使得惡意軟件數(shù)量以指數(shù)型速度增長,給企業(yè)、政府和金融機構(gòu)等造成巨大損失. 根據(jù)AV-TEST 報告[1],截止到2023 年,惡意軟件數(shù)量已經(jīng)超過120萬,過去1 年間惡意軟件新增超10 萬,其中一半以上是來自現(xiàn)有惡意軟件的變種. 面對惡意軟件及其變種的爆發(fā)式增長,傳統(tǒng)的基于簽名的檢測方法已經(jīng)無法阻止不斷發(fā)展的惡意軟件威脅[2]. 因此,準(zhǔn)確、魯棒和可擴展的惡意軟件變種檢測方案對于保護現(xiàn)代網(wǎng)絡(luò)世界的可信性是十分必要的.
在過去的幾年間,受深度學(xué)習(xí)在圖像分類、自然語言處理等方向產(chǎn)生的巨大影響,許多研究工作將深度學(xué)習(xí)應(yīng)用于惡意軟件檢測和分類之中,并取得了優(yōu)秀的檢測性能. 這些方法通過提取惡意軟件的各類型特征構(gòu)建特征集,并依據(jù)特征集訓(xùn)練模型作為分類器,訓(xùn)練后的分類器能夠?qū)崿F(xiàn)對未知惡意軟件的檢測和分類[3]. 當(dāng)前絕大多數(shù)研究工作基于單個惡意樣本的內(nèi)容提取特征并進行分類,實現(xiàn)了對單個惡意軟件的孤立分析. 但這些方法忽略了惡意軟件間的關(guān)系且易受代碼混淆技術(shù)的影響. 為進一步提升惡意軟件變種檢測的效果,許多研究開始考慮建模惡意軟件間復(fù)雜的關(guān)系. 實際上,惡意軟件間的關(guān)系可以為惡意軟件檢測和分類提供更多的寶貴信息,并且相比于孤立地分析惡意軟件,分析惡意軟件及特征間的關(guān)系能夠有效對抗惡意軟件逃避技術(shù)[4]. 近期已經(jīng)有許多研究基于惡意軟件間的關(guān)系檢測惡意軟件. 例如,Scorpion[4]構(gòu)建異質(zhì)信息網(wǎng)絡(luò)表述惡意軟件與Windows API、動態(tài)鏈接庫、壓縮包、設(shè)備之間的關(guān)系,設(shè)計metagraph2vec 方法實現(xiàn)惡意軟件檢測.GDroid[5]構(gòu)建APP-API 和API-API 關(guān)系,采用圖卷積神經(jīng)網(wǎng)實現(xiàn)Android 惡意軟件檢測. 諸多研究已經(jīng)證明,基于惡意軟件及特征間關(guān)系的惡意軟件檢測與分類方法具有強大的潛力.
然而,當(dāng)前基于惡意軟件間關(guān)系的檢測方法依然存在諸多問題. 首先,惡意軟件變種檢測旨在根據(jù)惡意軟件間存在的代碼復(fù)用、編碼風(fēng)格等信息檢測惡意軟件是否由已知惡意軟件變種而來[6].而當(dāng)前已有研究缺少對惡意軟件間代碼復(fù)用、網(wǎng)絡(luò)行為等復(fù)雜關(guān)系的全面表征[5],這導(dǎo)致惡意軟件間未能建立豐富的關(guān)聯(lián)關(guān)系. 其次,當(dāng)前方法只依賴于惡意軟件及特征間的拓?fù)潢P(guān)系進行檢測,缺少對惡意軟件及特征自身語義的表示,容易遭受對抗攻擊[4]. 以Windows API 特征為例,當(dāng)惡意軟件采用替換功能相近API 的方式生成新變種時,現(xiàn)有方法無法識別惡意軟件和其變種的關(guān)系,這是由于現(xiàn)有方法僅基于是否共同調(diào)用了同一個Windows API 來建模兩個軟件間的關(guān)系,而未考慮到Windows API 的功能等語義信息,缺失了Windows API 間的相似性關(guān)系. 實際上,當(dāng)兩個惡意軟件分別調(diào)用兩個功能相似的敏感WindowsAPI 時,他們屬于同一類變種的概率也將進一步提高. 由此可知,惡意軟件特征的語義信息能夠表達惡意軟件間隱蔽的關(guān)聯(lián)關(guān)系,有助于構(gòu)建惡意軟件間深層次的關(guān)聯(lián)關(guān)系. 然而,并非所有特征的語義信息都可以輕松獲得. 例如,惡意軟件的WindowsAPI、通信IP 等特征存在關(guān)鍵的語義信息,但難以從惡意樣本中直接提取. 而字符串、導(dǎo)入鏈接庫等特征則更是難以表示其語義. 這都為惡意軟件及其特征的語義信息表征帶來了困難,嚴(yán)重影響了惡意軟件變種檢測的準(zhǔn)確性和魯棒性.
為了解決以上缺陷,本文提出基于異質(zhì)圖屬性增強的惡意軟件變種檢測方法. 該方法首先從代碼功能、通信行為等多方面提取惡意代碼特征,包括導(dǎo)入的Windows API、動態(tài)鏈接庫、字符串、代碼塊和通信IP. 并基于多維特征全面建模惡意軟件間的關(guān)系,構(gòu)建惡意軟件變種檢測場景下的異質(zhì)信息網(wǎng)絡(luò),將惡意軟件變種檢測問題轉(zhuǎn)化為異質(zhì)圖中的節(jié)點分類問題. 之后,我們?yōu)楫愘|(zhì)信息網(wǎng)絡(luò)的實體節(jié)點構(gòu)建語義屬性來增強節(jié)點的表示,特征語義信息能夠描述特征間的相似性關(guān)系,對代碼混淆等攻擊手段存在魯棒性. 特別對于其中語義信息匱乏的實體節(jié)點(Windows API 節(jié)點、通信IP 節(jié)點),我們從外部開源數(shù)據(jù)(Windows?API 參考文檔、IP 地理位置庫)中學(xué)習(xí)特征的語義信息來彌補語義信息缺失的不足. 最后,我們采用異質(zhì)圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)多維特征的異質(zhì)信息,同時,面向字符串和動態(tài)鏈接庫兩類無語義屬性的節(jié)點,我們以異質(zhì)信息網(wǎng)絡(luò)的拓?fù)潢P(guān)系為指導(dǎo),通過加權(quán)聚合鄰居節(jié)點屬性補全無語義節(jié)點. 通過一種迭代式的訓(xùn)練機制,我們將語義屬性補全過程與異質(zhì)圖節(jié)點嵌入過程迭代優(yōu)化,實現(xiàn)統(tǒng)一的基于異質(zhì)圖屬性補全的惡意軟件變種檢測方法.
綜上所述,本文的貢獻總結(jié)如下:
(1) 我們提出了一種面向惡意軟件變種檢測的異質(zhì)信息網(wǎng)絡(luò),通過提取多維特征全面表征惡意軟件,并依賴惡意軟件與特征間的關(guān)系(例如,惡意軟件→調(diào)用→API)建模多個惡意軟件間的復(fù)雜關(guān)系,實現(xiàn)惡意軟件間關(guān)系的全面表示.
(2) 我們?yōu)楫愘|(zhì)信息網(wǎng)絡(luò)的實體節(jié)點構(gòu)建語義屬性來增強節(jié)點信息的表示,特別是對于語義信息匱乏的節(jié)點,我們從外部開源數(shù)據(jù)中學(xué)習(xí)實體的語義信息來彌補語義信息缺失的不足. 通過語義增強,實體間的相似性關(guān)系得以利用,提升了對代碼混淆等攻擊手段的魯棒性.
(3) 我們采用異質(zhì)圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)多維特征的異質(zhì)信息,同時以異質(zhì)信息網(wǎng)絡(luò)的拓?fù)潢P(guān)系為指導(dǎo),通過加權(quán)聚合鄰居節(jié)點補全無語義節(jié)點. 通過一種迭代式的訓(xùn)練機制,將語義屬性補全過程與異質(zhì)圖節(jié)點嵌入過程迭代優(yōu)化,實現(xiàn)統(tǒng)一的基于異質(zhì)圖屬性補全的惡意軟件變種檢測方法.
(4) 我們進行了多項實驗證明所提出方案的優(yōu)越性. 實驗結(jié)果證明,我們提出方案在兩個數(shù)據(jù)集上實現(xiàn)了90. 9%~98. 9% 的準(zhǔn)確率,優(yōu)于其他惡意軟件變種檢測方案.
本文其余章節(jié)組織如下: 第2 節(jié)回顧惡意軟件變種檢測和圖神經(jīng)網(wǎng)絡(luò)的相關(guān)工作. 第3 節(jié)介紹提出的基于異質(zhì)圖屬性增強的惡意軟件變種檢測方法,包括異質(zhì)信息網(wǎng)絡(luò)構(gòu)建、異質(zhì)圖屬性增強與基于屬性補全的異質(zhì)圖神經(jīng)網(wǎng)絡(luò)模塊. 第4 節(jié)進行充分實驗來評估本文提出的方法在多個數(shù)據(jù)集中的性能. 最后,對本文工作進行了總結(jié)和展望.
2 相關(guān)工作
在本節(jié)中,我們回顧以下兩個方面的相關(guān)研究:惡意軟件變種檢測和圖神經(jīng)網(wǎng)絡(luò).
2. 1 惡意軟件變種檢測
由于人工智能技術(shù)在圖像分類、自然語言處理等方向的迅猛發(fā)展,基于機器學(xué)習(xí)和深度學(xué)習(xí)的惡意軟件變種檢測已成為廣泛研究的焦點. 現(xiàn)有方法通過提取惡意軟件的多樣化特征,形成特征集合,然后利用這些特征集合進行分類模型的訓(xùn)練,當(dāng)前主流的惡意軟件變種檢測方法包含基于代碼內(nèi)容的方法、基于軟件行為的方法和基于惡意軟件關(guān)系的方法.
基于代碼內(nèi)容的方法是在不執(zhí)行惡意代碼的前提下,通過分析原始二進制代碼或者反匯編相關(guān)文件提取惡意軟件的靜態(tài)特征,并基于靜態(tài)特征構(gòu)建分類模型實現(xiàn)惡意代碼分析. 常見的特征有字節(jié)序列、操作碼和控制流圖等. Li 等人[7]提出一種基于RGB 圖像的惡意軟件特征表示方法,該方法根據(jù)相對虛擬地址組合惡意軟件的字節(jié)圖像、操作碼圖像、字符串圖像,形成紋理信息更豐富的圖像,并結(jié)合自注意力機制和空間金字塔池化改進了卷積神經(jīng)網(wǎng)絡(luò)模型,解決了惡意軟件大小差異較大的問題. Dib 等人[8]則提出了EVOLIoT方法,將匯編指令序列視作句子,采用BERT架構(gòu)學(xué)習(xí)惡意軟件的語義. 同時,引入了一種魯棒且有效的對比學(xué)習(xí)方法,來對抗“ 概念漂移”和家族間物聯(lián)網(wǎng)惡意軟件分類的局限性. Yan 等人[3]將惡意代碼表示為屬性控制流圖,以實現(xiàn)通用且有效的惡意代碼表示,并基于深度圖卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)惡意軟件變種檢測.
基于軟件行為的方法則是在孤立環(huán)境中執(zhí)行惡意軟件追蹤其執(zhí)行行為,將捕獲的API 調(diào)用、進程操作、網(wǎng)絡(luò)通信等行為作為特征,構(gòu)建分類模型實現(xiàn)惡意軟件變種檢測. Liu 等人[9]提出了惡意軟件變種檢測框架FewM-HGCL,該框架將每個惡意軟件變種的執(zhí)行行為建模為一個異構(gòu)圖,刻畫惡意軟件對象(如API、進程、文件等)之間的交互關(guān)系,并基于異質(zhì)圖對比學(xué)習(xí)解決了小樣本場景下的樣本真實標(biāo)簽不足的問題. Liu 等人[10]提出了一種基于動態(tài)異構(gòu)圖學(xué)習(xí)的新型檢測框架MGDVD,用于實時檢測惡意軟件變種. MG-DVD 首先將惡意軟件變體的細(xì)粒度執(zhí)行事件流建模為動態(tài)異構(gòu)圖,并提出了兩種基于動態(tài)游走的異構(gòu)圖學(xué)習(xí)方法,學(xué)習(xí)更全面的惡意軟件變種表示,從而顯著降低了整個圖再訓(xùn)練的成本,實現(xiàn)了實時檢測惡意軟件變體的能力.
然而,以上這些方法僅基于單個惡意樣本的內(nèi)容進行變種檢測,實現(xiàn)了單個惡意軟件的孤立分析,而忽略了惡意軟件間的關(guān)系,容易受到對抗手段攻擊. 為了解決孤立分析的困境,有研究開始基于惡意軟件間的關(guān)系設(shè)計相關(guān)的檢測方法[11,12].HinDroid[13]將Android 應(yīng)用程序、相關(guān)API 以及它們之間豐富的關(guān)系表示為一個結(jié)構(gòu)化的異構(gòu)信息網(wǎng)絡(luò),使用基于元路徑的方法來描述應(yīng)用程序和API 的語義相關(guān)性. Scorpion[4]構(gòu)建異質(zhì)信息網(wǎng)絡(luò)表述惡意代碼與API、DLL、壓縮包、設(shè)備之間的關(guān)系,設(shè)計了metagraph2vec 方法實現(xiàn)惡意軟件檢測. GDroid[5]構(gòu)建APP-API 和API-API 關(guān)系,采用GCN 實現(xiàn)Android 惡意軟件檢測.
然而,現(xiàn)有方法存在兩個問題:(1) 當(dāng)前方法缺少對惡意軟件間代碼復(fù)用、網(wǎng)絡(luò)行為等復(fù)雜關(guān)系的全面表征,導(dǎo)致惡意軟件間未能建立豐富的關(guān)聯(lián)關(guān)系;(2) 當(dāng)前方法只關(guān)注于惡意軟件及特征間的拓?fù)潢P(guān)系,缺少對惡意軟件及其特征的自身語義信息的表示,使得可用信息單一,易被對抗手段攻擊.
2. 2 圖神經(jīng)網(wǎng)絡(luò)
為了擴展深度神經(jīng)網(wǎng)絡(luò)來處理任意圖結(jié)構(gòu)數(shù)據(jù),圖神經(jīng)網(wǎng)絡(luò)被提出. 圖神經(jīng)網(wǎng)絡(luò)將圖中的節(jié)點嵌入到低維空間中,并使節(jié)點嵌入保持圖的拓?fù)浣Y(jié)構(gòu)和節(jié)點屬性的相似性. 當(dāng)前被廣泛接受的圖神經(jīng)網(wǎng)絡(luò)包括GraphSAGE[14]和GAT[15]等. 然而,上述圖神經(jīng)網(wǎng)絡(luò)僅用于處理同質(zhì)圖,在處理節(jié)點或邊類型不唯一的異質(zhì)圖時,會丟失異質(zhì)信息. 最近,一些研究試圖將圖神經(jīng)網(wǎng)絡(luò)擴展到異質(zhì)圖. 例如,Wang 等人[16]提出異質(zhì)圖注意網(wǎng)絡(luò)HAN,在節(jié)點級別和語義級別上執(zhí)行分層注意力機制,以聚合基于元路徑的鄰居并獲得最終的節(jié)點嵌入. Fu等人[17]提出聚合元路徑的圖神經(jīng)網(wǎng)絡(luò)MAGNN,該模型包含節(jié)點內(nèi)容轉(zhuǎn)換以封裝輸入節(jié)點屬性,元路徑內(nèi)聚合以合并中間語義節(jié)點,以及元路徑間聚合以組合來自多個元路徑的消息. Yun 等人[18]則提出GTN,通過識別原始圖上未連接節(jié)點之間的有用連接來生成新的圖結(jié)構(gòu),可以以端到端的方式學(xué)習(xí)新圖上的有效節(jié)點嵌入.
然而,對于異質(zhì)圖中某些類型節(jié)點的屬性缺失問題,上述方法均不能給出合適的解決方案. 他們只能通過手工求均值等方式填充固定的節(jié)點屬性,并不能起到良好的效果. 為了彌補節(jié)點屬性缺失的問題,有研究開始為異質(zhì)圖中的缺失屬性節(jié)點進行屬性補全. Jin 等人[19]認(rèn)為缺失的屬性可以通過可學(xué)習(xí)的方式獲取,并提出了一種基于屬性補全的異構(gòu)圖神經(jīng)網(wǎng)絡(luò)(HGNN-AC)的通用框架,包括拓?fù)淝度腩A(yù)學(xué)習(xí)和帶有注意機制的屬性補全. Wang 等人[20]提出了一種異構(gòu)網(wǎng)絡(luò)的通用屬性補全框架AC-HEN, 利用特征聚合和結(jié)構(gòu)聚合來獲得考慮特征空間和結(jié)構(gòu)空間的多視圖嵌入. 然后,使用多視圖嵌入通過弱監(jiān)督學(xué)習(xí)范式中的嵌入融合模塊來完成缺失的屬性. Zhu 等人[21]提出了一種稱為AutoAC 的可微屬性補全框架,用于異構(gòu)圖神經(jīng)網(wǎng)絡(luò)中的自動補全操作搜索. AutoAC 首先提出一個包括拓?fù)湎嚓P(guān)和拓?fù)錈o關(guān)的補全操作搜索空間. 然后設(shè)計連續(xù)松弛模式,并進一步提出了可微分補全算法. 受這些研究的啟發(fā),本文采用圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)惡意軟件及其變種檢測復(fù)雜的關(guān)系,并引入屬性補全機制彌補無屬性節(jié)點缺失的語義,實現(xiàn)屬性補全下的惡意軟件變種檢測.
3 基于異質(zhì)圖屬性增強的惡意軟件變種檢測方法
在本文中,我們提出了一種基于異質(zhì)圖屬性增強的惡意軟件變種檢測方法. 該方法基于惡意軟件及特征間的關(guān)系(例如,惡意軟件→ 調(diào)用→API)構(gòu)建惡意軟件變種檢測場景下的異質(zhì)信息網(wǎng)絡(luò),建模惡意軟件間復(fù)雜的關(guān)系,實現(xiàn)惡意軟件間關(guān)系的全面表征. 之后,我們?yōu)楫愘|(zhì)信息網(wǎng)絡(luò)的實體節(jié)點構(gòu)建語義屬性來增強節(jié)點信息的表示. 特別是對于語義信息匱乏的節(jié)點,我們從外部開源數(shù)據(jù)中學(xué)習(xí)實體的語義信息來彌補語義信息缺失的不足. 通過語義增強,實體間的相似性關(guān)系得以利用,提升了對代碼混淆等攻擊手段的魯棒性. 最后,我們采用異質(zhì)圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)多維特征的異質(zhì)信息,同時,以異質(zhì)信息網(wǎng)絡(luò)的拓?fù)潢P(guān)系為指導(dǎo),通過加權(quán)聚合鄰居節(jié)點屬性補全無語義節(jié)點.通過一種迭代式的訓(xùn)練機制,我們將語義屬性補全過程與異質(zhì)圖節(jié)點嵌入過程迭代優(yōu)化,實現(xiàn)統(tǒng)一的基于異質(zhì)圖屬性補全的惡意軟件變種檢測方法. 如圖1 所示,本方案分為三個組件:構(gòu)建異質(zhì)信息網(wǎng)絡(luò)、異質(zhì)信息網(wǎng)絡(luò)節(jié)點屬性增強和基于屬性補全和異質(zhì)圖神經(jīng)網(wǎng)絡(luò)的惡意軟件變種檢測.
具體來說,在構(gòu)建異質(zhì)信息網(wǎng)絡(luò)階段,如圖1中的第1)階段所示. 我們針對惡意軟件及其變種間的代碼重用、編碼風(fēng)格相似、行為共通等特點,設(shè)計并提取惡意軟件的多維特征,包括導(dǎo)入的Windows API、動態(tài)鏈接庫、字符串、通信IP 和代碼塊. 以樣本及提取的特征為節(jié)點,以彼此間的關(guān)系為引導(dǎo),構(gòu)建惡意軟件變種檢測場景下的異質(zhì)信息網(wǎng)絡(luò),建模惡意軟件間復(fù)雜的關(guān)系.
之后,為建模異質(zhì)信息網(wǎng)絡(luò)中實體間的相似性關(guān)系,提升對代碼混淆等攻擊手段的魯棒性,我們對實體節(jié)點進行特征增強,如圖1 中的第2)階段所表示. 具體來說,我們?yōu)楫愘|(zhì)信息網(wǎng)絡(luò)中的實體節(jié)點構(gòu)造語義屬性以增強異質(zhì)信息網(wǎng)絡(luò)的表達,建立屬性增強的異質(zhì)信息網(wǎng)絡(luò). 其中,對于樣本和代碼塊節(jié)點,其自身包含豐富的語義信息,因此我們分別提取字節(jié)分布序列、匯編指令統(tǒng)計特征作為其節(jié)點語義屬性. 對于Windows API、通信IP 節(jié)點,其本身包含的信息匱乏,因此我們從外部開源數(shù)據(jù)中學(xué)習(xí)Windows API 和通信IP 的語義信息,以彌補節(jié)點語義信息的缺失,表達實體間的相似性. 進一步來說,針對于Windows API,我們基于Windows API 官方參考文檔構(gòu)建API 知識圖,基于知識圖譜學(xué)習(xí)API 嵌入表達其語義,將學(xué)習(xí)到的API 嵌入作為Windows API 節(jié)點的屬性. 針對通信IP,我們依賴IP 地理位置庫,為通信IP 引入IP 地理位置特征作為其屬性,表示通信IP 間的相似度.
最后,我們設(shè)計基于屬性補全與異質(zhì)圖神經(jīng)網(wǎng)絡(luò)的惡意軟件變種檢測方法,根據(jù)圖的拓?fù)潢P(guān)系加權(quán)聚合鄰居節(jié)點的屬性,為動態(tài)鏈接庫、字符串此類無語義節(jié)點補全屬性. 并基于一種迭代式的訓(xùn)練機制,將語義屬性補全過程與異質(zhì)圖節(jié)點嵌入過程迭代優(yōu)化,實現(xiàn)統(tǒng)一的基于異質(zhì)圖屬性補全的惡意軟件變種檢測方法.
3. 1 構(gòu)造異質(zhì)信息網(wǎng)絡(luò)
異質(zhì)信息網(wǎng)絡(luò)又稱異質(zhì)圖,可以表示為G ={ V,E,F(xiàn),R,φ,? },V 為節(jié)點集,E 為邊集,F(xiàn) 為節(jié)點類型集合,R 為邊類型集合,其中| F |+| R |> 2.每個節(jié)點i ∈ V 對應(yīng)一個節(jié)點類型映射函數(shù)φ:V → F,每個邊e ∈ E 對應(yīng)一個邊類型映射函數(shù)?:E → R. G 的網(wǎng)絡(luò)模式記為TG = ( F,R),是G ={ V,E,F(xiàn),R,φ,? } 的元模式. 具體地,網(wǎng)絡(luò)模式是定義在對象類型集合F 上的有向圖,并以R 上的關(guān)系為邊.
為了建模惡意軟件及其變種間的關(guān)系,我們構(gòu)建一個惡意軟件異質(zhì)信息網(wǎng)絡(luò)G. 區(qū)別于其他基于惡意軟件間關(guān)系的工作,我們提取多維度特征以從代碼復(fù)用、編碼風(fēng)格、惡意行為等多方面表征惡意軟件及其變種間復(fù)雜多樣的關(guān)系,并依此構(gòu)建異質(zhì)信息網(wǎng)絡(luò). 具體來說,我們提取惡意軟件中出現(xiàn)的字符串,用以描述惡意軟件及其變種在作者編碼風(fēng)格上的關(guān)聯(lián)性;提取惡意軟件的代碼塊,描繪惡意軟件變種間存在的代碼復(fù)用等現(xiàn)象;提取惡意軟件的通信IP、導(dǎo)入的Windows API 及動態(tài)鏈接庫,建模惡意軟件變種間在功能、行為等方面的相似度. 之后,我們將樣本和提取的多維特征作為異質(zhì)信息網(wǎng)絡(luò)的實體節(jié)點,基于實體節(jié)點間的關(guān)系構(gòu)建異質(zhì)信息網(wǎng)絡(luò)中節(jié)的邊,形成如圖2所示的網(wǎng)絡(luò)模式. 我們的方案可以添加更多的特征(例如,注冊表行為、N-Gram 等)以描述惡意軟件間更復(fù)雜的關(guān)系,考慮到特征可用性與執(zhí)行效率,我們選取以上5 種特征建模本方案的異質(zhì)信息網(wǎng)絡(luò).
下面將詳細(xì)描述異質(zhì)信息網(wǎng)絡(luò)的節(jié)點和邊的含義及選取理由.
樣本節(jié)點F1:樣本節(jié)點是我們需要檢測目標(biāo)實體,由數(shù)據(jù)集中的所有樣本組成.
字符串節(jié)點F2:字符串是反應(yīng)惡意軟件作者編碼風(fēng)格和惡意軟件行為的重要特征,惡意軟件中的字符串能夠揭示不同惡意樣本之間的潛在關(guān)系. 我們通過逆向工程提取有意義的字符串,包括命令、鏈接、地址等. 這些字符串大多由惡意軟件開發(fā)者硬編碼而來,反映出開發(fā)者的編碼風(fēng)格以及樣本訪問的文件、通信地址等信息,在惡意軟件及其變種間具有強的共現(xiàn)性. 因此,我們將字符串作為節(jié)點,構(gòu)建樣本間字符串共現(xiàn)關(guān)系.
代碼塊節(jié)點F3:由于惡意軟件及其變種間存在普遍的代碼復(fù)用現(xiàn)象,我們選擇代碼塊作為變種檢測的特征,以評估惡意樣本間存在的代碼復(fù)用現(xiàn)象. 具體來說,本文通過逆向工程提取惡意軟件的控制流圖,將控制流圖中的基本塊視為我們所需要的代碼塊,其代表了一段連續(xù)且有實際意義的代碼序列,以代碼塊為節(jié)點,建立樣本間的關(guān)系來描述惡意代碼間的代碼復(fù)用.
通信IP 節(jié)點F4:惡意軟件需要與惡意主機(例如C&C 服務(wù)器)通信,以獲取惡意命令或有效載荷并上傳收集到的信息. 在相同的惡意軟件變種內(nèi),開發(fā)者往往改變惡意軟件的功能以實現(xiàn)不同的惡意行為,但作為惡意主機的通信IP 往往得到保留. 同時,相較于域名、URL 等特征,通信IP 更具有通用性,因此我們將通信IP 作為關(guān)聯(lián)惡意樣本的重要依據(jù). 具體來說,我們在孤立環(huán)境中運行惡意軟件獲得其通信的IP 地址,將其作為特征描述惡意軟件通信行為在中的相似性.
Windows API 節(jié)點F5:Windows API 調(diào)用可以有效地反映惡意軟件的行為. 例如,惡意軟件通過調(diào)用函數(shù)GetFileInformationByHandle 能夠獲取文件的信息,如大小、屬性等,而調(diào)用RegSetValueEx可以用來修改注冊表中指定值的數(shù)據(jù)和類型. 多項研究[4,5,11]已經(jīng)證明具有相同WindowsAPI 的樣本有更大可能具有相似的功能,采用Windows API 檢測惡意軟件具有優(yōu)秀的檢測效果. 因此,我們從文件的導(dǎo)入表中提取WindowsAPI 調(diào)用來表示惡意軟件及其變種在功能及行為上的相似性.
動態(tài)鏈接庫節(jié)點F6:動態(tài)鏈接庫整合了一系列具有相似功能的Windows API. 我們通過引入動態(tài)鏈接庫節(jié)點關(guān)聯(lián)多個Windows API,構(gòu)建Windows API 間的關(guān)系,增強異質(zhì)信息網(wǎng)絡(luò)的信息表達.
為了關(guān)注于更重要的特征,本文設(shè)置超參數(shù)r,用于過濾掉在大部分樣本中都出現(xiàn)的特征,這些特征往往表達Windows 軟件中通用的信息,對于區(qū)分惡意軟件變種無實質(zhì)性幫助. 具體來說,我們過濾掉在不同樣本中出現(xiàn)頻率大于r 的特征,這里的特征僅針對于字符串、代碼塊、通信IP 和WindowsAPI,不針對于動態(tài)鏈接庫.
根據(jù)以上設(shè)計的節(jié)點,我們構(gòu)建5 種類型的邊,描述樣本和特征間的關(guān)系. 具體來說,我們建模樣本和字符串間的擁有關(guān)系R1,建模樣本和代碼塊間的包含關(guān)系R2,建模樣本和通信IP 地址間的連接關(guān)系R3,建模樣本和Windows API 間的導(dǎo)入關(guān)系R4,建模Windows API 和動態(tài)鏈接庫的所屬關(guān)系R5.
3. 2 異質(zhì)信息網(wǎng)絡(luò)節(jié)點屬性增強
為建模異質(zhì)信息網(wǎng)絡(luò)中實體間的相似性關(guān)系,提升對代碼混淆等攻擊手段的魯棒性,我們?yōu)楫愘|(zhì)信息網(wǎng)絡(luò)中的實體節(jié)點添加語義屬性以增強異質(zhì)信息網(wǎng)絡(luò)的表達. 通過構(gòu)建節(jié)點語義屬性,該方案不再僅基于實體節(jié)點間拓?fù)潢P(guān)系進行檢測,而同時關(guān)注節(jié)點間拓?fù)潢P(guān)系以及節(jié)點自身語義,描繪出同類實體節(jié)點間在語義上的相似性關(guān)系,降低了API 混淆、代碼混淆等逃避手段帶來的影響,提升了模型的魯棒性與準(zhǔn)確性. 具體來說,我們利用知識圖譜學(xué)習(xí)Windows API 參考文檔中的知識,將得到的包含語義的Windows API 嵌入作為Windows API 節(jié)點的屬性. 對于通信IP,我們引入IP 地理位置庫為IP 節(jié)點添加地理位置屬性. 對于代碼塊,我們利用反匯編為代碼塊添加匯編代碼序列統(tǒng)計特征作為屬性描述代碼塊的功能. 對于樣本,我們提取字節(jié)分布序列作為屬性. 以下具體解釋各類型節(jié)點的屬性如何生成.
3. 2. 1 Windows API 屬性生成 每一個WindowsAPI 都有各自的功能,面對惡意軟件中導(dǎo)入的大量Windows API,區(qū)分Windows API 的功能、尋找功能相似的Windows API 對于判斷惡意軟件的行為起著關(guān)鍵性作用[22]. 然而Windows API 本身缺少有效的語義信息,為了表征Windows API的語義屬性,我們構(gòu)建知識圖譜從Windows API參考文檔中學(xué)習(xí)Windows API 的語義嵌入,將其作為Windows API 節(jié)點的屬性. 具體來說,我們首先在微軟官方網(wǎng)站[23]收集API 參考文檔,之后解析這些文檔,提取實體及其關(guān)系,并根據(jù)實體與其關(guān)系進行關(guān)聯(lián),形成API 知識圖. 最后,基于知識圖譜嵌入學(xué)習(xí)API 知識圖信息,獲得API 語義嵌入.
首先,我們進行實體提取. 實體是API 知識圖中的基本元素. Windows API 參考文檔以層次結(jié)構(gòu)組織,最底層是API 文檔中定義的供開發(fā)人員使用的基本單元,包含函數(shù)、方法和結(jié)構(gòu)體等3 種數(shù)據(jù)類型. 而頭文件和類接口等3 種數(shù)據(jù)類型則在上層,作為函數(shù)、方法和結(jié)構(gòu)體的容器. 通過解析組織樹,我們提取函數(shù)、方法、結(jié)構(gòu)體、頭文件、類、接口等6 種數(shù)據(jù)類型作為實體,并將函數(shù)、方法和結(jié)構(gòu)體定義為功能實體,將頭文件、類和接口定義為容器實體.
之后,我們進行關(guān)系抽取. 關(guān)系表示實體如何相互關(guān)聯(lián). 如表1 所示,我們考慮上述實體之間的三類關(guān)系:
(1) 結(jié)構(gòu)關(guān)系:描述功能實體和容器實體之間的組織關(guān)系,由Windows API 參考文檔的層次結(jié)構(gòu)建立. 例如,方法由接口或類組織,接口、函數(shù)、結(jié)構(gòu)體和類由頭文件組織.
(2) 功能關(guān)系:表示實體在功能上的相關(guān)性,包含繼承、參數(shù)調(diào)用和返回調(diào)用等3 種關(guān)系. 其中,繼承關(guān)系根據(jù)參考文檔中的Inheritance 字段將類或接口與其繼承的類或接口連接起來;參數(shù)調(diào)用關(guān)系反映了一個方法或函數(shù)是否將其他方法、函數(shù)、結(jié)構(gòu)體、類、接口等作為輸入?yún)?shù)使用;返回調(diào)用關(guān)系則根據(jù)一個方法或函數(shù)將結(jié)構(gòu)體作為其返回值來建立關(guān)系.
(3) 引用關(guān)系:在Windows API 參考文檔中的Description、Remark 和See Also 字段會出現(xiàn)與該API 存在關(guān)系的引用,以幫助開發(fā)者快速跳轉(zhuǎn)到其他API,這種共現(xiàn)性表現(xiàn)出兩個API 之間功能或結(jié)構(gòu)上存在相似性. 因此,我們通過對API 參考文檔中的描述Description、Remark 和See Also 字段進行分詞解析,搜索存在API 引用,并依此建立兩個實體間的引用關(guān)系.
最后,我們生成API 嵌入. 知識圖譜嵌入方法可以學(xué)習(xí)知識圖譜實體和關(guān)系的低維表示,同時保留其語義. 在API 知識圖中,知識圖譜嵌入方法旨在將知識圖中的每個API 轉(zhuǎn)換為低維向量,保留API 語義的同時使得語義上更接近的API 在其低維向量上有更高的相似性. 我們利用經(jīng)典的TransE 方法[24]來學(xué)習(xí)API 知識圖. 該算法受word2vec[25]啟發(fā),假設(shè)有一個連接實體h 和實體t的關(guān)系c,用3 個向量lh,lc,l t 來表示它們,TransE的核心思想是不斷調(diào)整這3 個向量,使lh 和lc 的和接近于lt. 這樣,語義上接近的API 就會有相似的向量表示.
3. 2. 2 IP 屬性生成 惡意軟件中通信的IP 地址通常表示用于下載惡意載荷和上傳用戶信息的C&C 服務(wù)器[26]. IP 地址本身的語義屬性對于判斷惡意軟件間的變種具有重要參考價值,已經(jīng)有多項研究通過IP 增強特征以提升任務(wù)性能[27,28]. 在本方案中,我們引入IP 地理位置庫以獲得IP 所在的經(jīng)緯度,表示異質(zhì)信息網(wǎng)絡(luò)中通信IP 節(jié)點的語義屬性.
為了得到計算機可以理解的IP 屬性,我們對提取到的IP 地理位置特征進行編碼. 具體來說,我們對IP 經(jīng)緯度采用GeoHash 方法[29]進行編碼.GeoHash 方法將地球理解為1 個二維平面,通過把二維的空間經(jīng)緯度數(shù)據(jù)編碼為1 個字符串,使得物理距離相近的兩個地點在編碼后更相似.
3. 2. 3 代碼塊屬性生成 代碼塊被定義為控制流圖中基本塊,其表示了一段連續(xù)且有實際意義的功能邏輯,能夠有效地表述惡意軟件變種間的代碼復(fù)用關(guān)系. 為了有效表示代碼塊的語義特征,我們基于Yan 等人[3]提出的方法,分析代碼塊的匯編代碼序列,提取多維度統(tǒng)計特征表示代碼塊的語義屬性,包含不同類型的指令數(shù)量、常量值數(shù)量、特殊字符串?dāng)?shù)量等共計32 維特征.
3. 2. 4 樣本屬性生成 惡意樣本本身包含多種屬性,在本方案中,我們選擇樣本的字節(jié)分布序列作為屬性. 具體來說,我們將惡意樣本的二進制比特序列編碼為十六進制字節(jié)序列,1 個字節(jié)能夠表示0~255 之間的數(shù)字. 之后,將每種字節(jié)在樣本中占的比例作為該字節(jié)的特征值,256 種字節(jié)按由小到大順序拼接得到字節(jié)分布序列. 我們選擇字節(jié)分布序列作為屬性是基于以下兩個理由:(1) 該方法能夠表示惡意樣本的所有信息,避免了惡意樣本間大小不一致導(dǎo)致的信息缺失問題;(2) 該序列生成過程簡單快速,生成的序列長度固定為256,既避免n-gram 等生成方法帶來的時間消耗,又減少了之后的檢測模型負(fù)擔(dān)[30].
3. 3 基于屬性補全的異質(zhì)圖神經(jīng)網(wǎng)絡(luò)
經(jīng)過異質(zhì)圖節(jié)點屬性增強階段,異質(zhì)信息網(wǎng)絡(luò)的通信IP 節(jié)點、Windows API 節(jié)點、樣本節(jié)點和代碼塊節(jié)點的語義信息得到充分表示,然而動態(tài)鏈接庫節(jié)點和字符串節(jié)點卻難以生成恰當(dāng)?shù)恼Z義信息其屬性. 為了解決異質(zhì)信息網(wǎng)絡(luò)中動態(tài)鏈接庫節(jié)點和字符串節(jié)點屬性缺失的問題,我們以拓?fù)湫畔橹笇?dǎo),通過對有屬性節(jié)點的屬性進行加權(quán)聚合來補全無屬性節(jié)點的屬性. 此外,為了提高下游圖學(xué)習(xí)任務(wù)的性能,我們按照一種迭代優(yōu)化的策略,將屬性補全和異質(zhì)圖神經(jīng)網(wǎng)絡(luò)的訓(xùn)練聯(lián)合優(yōu)化,而不是將其視為兩個獨立的過程. 具體而言,在屬性補全階段,首先使用異質(zhì)圖嵌入方法獲取節(jié)點拓?fù)淝度?,然后通過計算節(jié)點嵌入的注意力值來區(qū)分不同鄰居節(jié)點的貢獻,加權(quán)聚合得到無屬性節(jié)點.