張英韜,王寶會(huì)
(1.武漢大學(xué)國(guó)家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072;2.空天信息安全與可信計(jì)算教育部重點(diǎn)實(shí)驗(yàn)室(武漢大學(xué)),湖北 武漢 430072;3.北京航空航天大學(xué)軟件學(xué)院,北京 102206)
互聯(lián)網(wǎng)技術(shù)的高速發(fā)展在為人們帶來(lái)無(wú)限便利的同時(shí),也同時(shí)成為某些別有用心的人對(duì)特定用戶(hù)群進(jìn)行攻擊的途徑。據(jù)統(tǒng)計(jì),過(guò)去一年中,全世界由于惡意攻擊造成的經(jīng)濟(jì)損失達(dá)6萬(wàn)億之多[1]。在所有的操作系統(tǒng)中,Windows系統(tǒng)由于其用戶(hù)界面精美,操作簡(jiǎn)單,且各類(lèi)游戲和軟件的普及性較高,得到了眾多用戶(hù)的青睞。不幸的是,針對(duì)Windows系統(tǒng)的惡意攻擊層出不窮,對(duì)系統(tǒng)造成極大威脅。尤其是類(lèi)似于勒索病毒,挖礦程序,DDOS木馬,蠕蟲(chóng)病毒等惡意軟件。雖然業(yè)界涌現(xiàn)了大量的應(yīng)對(duì)方法,但由于這些軟件衍生出越來(lái)越多的變種、且具有更深的行為特征隱藏性,為惡意軟件檢測(cè)任務(wù)帶來(lái)了前所未有的巨大挑戰(zhàn)。
根據(jù)現(xiàn)有文獻(xiàn),惡意軟件檢測(cè)方法大致分為兩種,首先是基于人工提取特征的方式,其中典型的有基于統(tǒng)計(jì)特征的方式[2]。由于該方式往往依賴(lài)于過(guò)往人工積累的特征碼經(jīng)驗(yàn),因而易于導(dǎo)致在識(shí)別經(jīng)過(guò)加殼處理或經(jīng)過(guò)混淆的惡意軟件方面存在困難[3];其二是基于機(jī)器學(xué)習(xí)的檢測(cè)方法,該方法又分為基于傳統(tǒng)機(jī)器學(xué)習(xí)技術(shù)和基于深度學(xué)習(xí)技術(shù)。傳統(tǒng)機(jī)器學(xué)習(xí)的特征設(shè)計(jì)往往需要人工干預(yù),如果特征提取工作出現(xiàn)誤差,則可能會(huì)導(dǎo)致準(zhǔn)確性降低,誤報(bào)率更高[4]。同時(shí)在處理序列數(shù)據(jù)方面有很大不足[5],導(dǎo)致該類(lèi)模型往往泛化能力較低。典型的如[6-7],其主要運(yùn)用了SVM,決策樹(shù)等傳統(tǒng)機(jī)器學(xué)習(xí)算法。與之相對(duì)應(yīng)的深度學(xué)習(xí)方法,由于該方法可以學(xué)習(xí)更高維度的特征及表達(dá)更抽象的語(yǔ)義,因而在近年來(lái)成為檢測(cè)方法的主流[8]。常用的深度學(xué)習(xí)方法依賴(lài)于對(duì)API語(yǔ)義的抽取,然而由于這些方法對(duì)于的過(guò)長(zhǎng)序列數(shù)據(jù)常用截?cái)嗵幚恚瑢?dǎo)致惡意軟件可輕易繞過(guò)序列檢測(cè)窗口。幸運(yùn)的是,隨著深度學(xué)習(xí)的發(fā)展,以圖的方式來(lái)對(duì)API調(diào)用序列進(jìn)行建模的方式逐漸受到研究者的青睞。其主要優(yōu)點(diǎn)是可以在圖結(jié)構(gòu)內(nèi)部建立拓?fù)潢P(guān)聯(lián),并且具有強(qiáng)大的推理能力,可以充分吸收周?chē)?jié)點(diǎn)的特征。有鑒于此,本研究將使用圖表示學(xué)習(xí)方法,根據(jù)API相互的調(diào)用關(guān)系和調(diào)用序列,得到該軟件的圖表示,再輸入至圖神經(jīng)網(wǎng)絡(luò)中進(jìn)行分類(lèi)。本文在這項(xiàng)工作中的主要貢獻(xiàn)如下:
(1)本文根據(jù)PE軟件調(diào)用API的特點(diǎn),提出多子圖的圖表示方法對(duì)API序列構(gòu)圖建模,并運(yùn)用該模型實(shí)現(xiàn)惡意軟件家族分類(lèi),實(shí)驗(yàn)的結(jié)果驗(yàn)證了本文的合理性和準(zhǔn)確性。
(2)本文創(chuàng)新性提出了邊嵌入方法,將調(diào)用序列中的一些邊根據(jù)其兩頭的節(jié)點(diǎn)類(lèi)型生成邊節(jié)點(diǎn),對(duì)關(guān)鍵性的調(diào)用信息進(jìn)行突出提取,實(shí)驗(yàn)證明,該方法增加了準(zhǔn)確性。
根據(jù)對(duì)惡意軟件處理的角度不同,目前惡意軟件的檢測(cè)方法大致可以分為靜態(tài)檢測(cè)技術(shù)和動(dòng)態(tài)檢測(cè)技術(shù)兩類(lèi)。靜態(tài)檢測(cè)是指并不實(shí)際的運(yùn)行樣本,而是直接根據(jù)樣本,使用相應(yīng)的反匯編軟件對(duì)樣本分析得到其特征信息。動(dòng)態(tài)檢測(cè)則是將樣本放置在沙箱等環(huán)境中運(yùn)行,根據(jù)樣本對(duì)操作系統(tǒng)的資源調(diào)度情況的日志進(jìn)行分析。目前大多數(shù)的惡意軟件的檢測(cè)方法都是基于靜態(tài)檢測(cè),通過(guò)一些靜態(tài)的軟件反匯編軟件,得到該軟件的API調(diào)用序列,再輸入到神經(jīng)網(wǎng)絡(luò)中進(jìn)行學(xué)習(xí)。然而隨著時(shí)代的發(fā)展,惡意軟件為了躲避檢測(cè)而采用了各種特征隱匿手段以抹除靜態(tài)特征。但是惡意軟件這種混淆檢測(cè)的方法仍舊無(wú)法隱藏其區(qū)別于良性軟件的動(dòng)態(tài)行為模式,如特定的函數(shù)調(diào)用序列。因此本研究將選用動(dòng)態(tài)檢測(cè)方法來(lái)對(duì)樣本進(jìn)行行為特征提取,并以此嵌入成圖進(jìn)行學(xué)習(xí)。在本節(jié)中我們將對(duì)整個(gè)模型的核心組成進(jìn)行介紹。
整體的數(shù)據(jù)準(zhǔn)備流程如圖1所示。其中Cuckoo sandbox[24]是一個(gè)開(kāi)源的惡意文件自動(dòng)化分析系統(tǒng),對(duì)于上傳的文件能記錄其在虛擬機(jī)動(dòng)態(tài)運(yùn)行后的進(jìn)程、網(wǎng)絡(luò)、文件等行為,對(duì)于初步分析惡意軟件并獲取其動(dòng)態(tài)特征有很大幫助。本文通過(guò)在virusshare網(wǎng)站中下載相關(guān)惡意軟件,將得到的惡意軟件上傳至virustotal網(wǎng)站進(jìn)行分類(lèi),得到其標(biāo)簽。
同時(shí)將惡意軟件送入cuckoo沙箱中進(jìn)行分析,得到的動(dòng)態(tài)運(yùn)行報(bào)告如圖2所示。
圖1 數(shù)據(jù)準(zhǔn)備
本文對(duì)其中的“category”,“api”,“time”,“tid”進(jìn)行提取,轉(zhuǎn)化為csv格式后,得到了惡意軟件的初始特征數(shù)據(jù)。
在得到上述樣本的各種標(biāo)簽以及特征后,便開(kāi)始著手構(gòu)建惡意軟件的圖表示。
(1)特征選擇。本文選擇了對(duì)于節(jié)點(diǎn)的嵌入方法來(lái)表示惡意軟件的API節(jié)點(diǎn)向量。首先我們繼承了Tu等人[9]的工作,根據(jù)API函數(shù)的調(diào)用序列,將各API函數(shù)嵌入為圖的節(jié)點(diǎn)。然后使用節(jié)點(diǎn)嵌入的方法將每個(gè)節(jié)點(diǎn)節(jié)點(diǎn)嵌入為獨(dú)特的向量表示。
圖2 行為報(bào)告
本文使用的節(jié)點(diǎn)嵌入方法是基于Deepwalk[10],并結(jié)合了NLP的一種新的基于惡意軟件API的圖嵌入方法。首先在每個(gè)圖中隨機(jī)選取一個(gè)節(jié)點(diǎn),對(duì)該節(jié)點(diǎn)進(jìn)行隨機(jī)游走并對(duì)已走過(guò)的節(jié)點(diǎn)進(jìn)行標(biāo)記。當(dāng)走到最后一個(gè)節(jié)點(diǎn)沒(méi)有路徑的時(shí)候退回前一個(gè)節(jié)點(diǎn)尋找其他路徑,每個(gè)圖截取其中的前n(超參數(shù))個(gè)節(jié)點(diǎn)組成該文件的路徑,在對(duì)所有的圖進(jìn)行隨機(jī)游走之后拼接在一起,得到整個(gè)語(yǔ)料庫(kù)的路徑,最后對(duì)這個(gè)路徑進(jìn)行一種改進(jìn)的fastText處理得到每個(gè)節(jié)點(diǎn)的嵌入表示作為其第一層特征。本文使用改進(jìn)的fastText方法H(駝峰)-fastText主要是基于A(yíng)PI大多是類(lèi)似“GetAsyncKeyState”的復(fù)合詞,且大多使用駝峰命名法。因此本文將子詞變?yōu)椤?Get”“Async”“Key”“State>”和“
其中Aw為所有子詞的詞庫(kù),zg為該詞語(yǔ)所涉及的子詞的向量表示,最終加和得到該節(jié)點(diǎn)的向量表示。
在進(jìn)行圖表示時(shí),本文另外對(duì)模型的邊進(jìn)行了處理,Wüchner等人[11]在文章中指出,在惡意軟件運(yùn)行的時(shí)候,極易調(diào)用以下三類(lèi)的API,ProcessAPI,F(xiàn)ileAPI和RegistryAPI,而且特別當(dāng)這些類(lèi)型的API連續(xù)調(diào)用時(shí),基本就是在進(jìn)行對(duì)電腦較為重要的任務(wù)。因此如果某一條邊的兩端頂點(diǎn)為以上三類(lèi)節(jié)點(diǎn)時(shí),將該邊提取為一個(gè)節(jié)點(diǎn),命名為T(mén)ypetoType,例如“FiletoFile”。然后將該邊節(jié)點(diǎn)放回至原DeepWalk得到的序列中并進(jìn)行Word2Vec處理,其中API節(jié)點(diǎn)向量不進(jìn)行訓(xùn)練,單獨(dú)訓(xùn)練邊向量。
(2)子圖表示。隨著惡意軟件檢測(cè)方法的發(fā)展,惡意軟件作者的水平也在提高,他們可能會(huì)使用多線(xiàn)程方法來(lái)實(shí)現(xiàn)其最終目標(biāo)。目前,惡意軟件的圖表示主要基于整個(gè)惡意軟件調(diào)用序列,而不同的線(xiàn)程的調(diào)用序列可能具有不同的含義。惡意軟件在運(yùn)行時(shí)可能會(huì)進(jìn)行大量的正常行為,但會(huì)分支出某個(gè)線(xiàn)程對(duì)系統(tǒng)進(jìn)行破壞。因此本文提出采用子圖,識(shí)別出具有惡意行為的線(xiàn)程。
本文的方法首先對(duì)每個(gè)惡意軟件的函數(shù)調(diào)用序列進(jìn)行提取,根據(jù)調(diào)用的時(shí)間信息進(jìn)行排序,得到其不同的函數(shù)調(diào)用子圖,如圖3所示。圖中將兩個(gè)不同的API調(diào)用序列表示為兩個(gè)子圖,作為接下來(lái)的圖神經(jīng)網(wǎng)絡(luò)的輸入。但是在對(duì)數(shù)據(jù)進(jìn)行處理的時(shí)候,出現(xiàn)了一個(gè)問(wèn)題。首先由于每個(gè)圖輸入的子圖數(shù)量不同,導(dǎo)致在輸入至全連接層時(shí)的維度并不固定。這樣導(dǎo)致整體參數(shù)維度不固定而無(wú)法訓(xùn)練。因此我們選擇了類(lèi)似Transformer中的Padding方法。對(duì)于子圖數(shù)量少于應(yīng)有的輸入數(shù)量的情況,直接輸入一個(gè)沒(méi)有任何邊的子圖進(jìn)行訓(xùn)練,即鄰接矩陣與度矩陣均為0的輸入。
(3)基于圖神經(jīng)網(wǎng)絡(luò)的分類(lèi)器。在得到每個(gè)惡意軟件的圖表示后,便開(kāi)始構(gòu)建我們的圖神經(jīng)網(wǎng)絡(luò)分類(lèi)器。如圖4所示,首先我們對(duì)每個(gè)子圖單獨(dú)進(jìn)行兩層圖卷積[12],如公式(2)所示:
圖3 生成子圖
圖4 圖表示分類(lèi)方法
在經(jīng)過(guò)卷積后,各個(gè)節(jié)點(diǎn)均吸收了其鄰居節(jié)點(diǎn)的特征,此時(shí)使用TopK[14]的方法來(lái)對(duì)圖進(jìn)行池化。TopK的思路是指對(duì)該圖分類(lèi)越不重要的節(jié)點(diǎn)則丟棄,而保留對(duì)分類(lèi)結(jié)果重要的節(jié)點(diǎn),其中池化率K是一個(gè)超參數(shù),K∈(0,1)。在進(jìn)行圖卷積的之后,我們?cè)O(shè)立一個(gè)權(quán)重值以表示其節(jié)點(diǎn)的重要程度并對(duì)其進(jìn)行降序排序。如公式(3)所示:
Mask操作相當(dāng)于在原始的數(shù)據(jù)上蓋上一層掩膜,從而屏蔽或選擇一些特定元素。應(yīng)用于本文方法中則是屏蔽掉那些被池化的節(jié)點(diǎn)的鄰接矩陣A和特征向量X。每個(gè)子圖在進(jìn)行兩次卷積和池化后,得到K1*K2*N個(gè)節(jié)點(diǎn)(K1,K2∈(0,1),且均為超參數(shù)),這些節(jié)點(diǎn)有著他們的特征值,以及屬于哪個(gè)圖的標(biāo)識(shí)。為了統(tǒng)一所有圖的維度,使用平均池化的方法,如公式(7)所示,對(duì)每一層池化后的節(jié)點(diǎn)的向量進(jìn)行讀出:
在本文的模型中,經(jīng)歷了多次池化的過(guò)程,每一次池化都會(huì)丟失一定的節(jié)點(diǎn)信息。為了使本文的模型也能收錄全部丟棄了的節(jié)點(diǎn)的信息,本文對(duì)得到的信息進(jìn)行一次性的聚合,具體方式為將各子圖池化后的值拼接起來(lái):
最終,得到了該樣本經(jīng)過(guò)圖神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)后的向量表示,然后將該向量輸送至前饋神經(jīng)網(wǎng)絡(luò)中降維至類(lèi)別數(shù)量,再對(duì)其進(jìn)行Softmax處理得到每個(gè)類(lèi)別的概率。
本文進(jìn)行了多組實(shí)驗(yàn),同時(shí)對(duì)數(shù)據(jù)集也進(jìn)行了多種的處理。為了使我們的實(shí)驗(yàn)的結(jié)果更加令人信服,本文使用了同種數(shù)據(jù)對(duì)其他的模型(LSTM,CNN等)進(jìn)行了實(shí)驗(yàn),并將我們的準(zhǔn)確率與這些模型進(jìn)行了對(duì)比。
本文使用前文所示的方法共獲取數(shù)據(jù)集總量為13996個(gè)。其中各類(lèi)惡意軟件樣本分布情況如圖5所示。
圖5 軟件類(lèi)型分布表
本文一共使用以下指標(biāo)對(duì)我們的實(shí)驗(yàn)進(jìn)行評(píng)估,準(zhǔn)確率(ACC),召回率(R),精度(P)以及F1_score(F1)。本文做了兩類(lèi)實(shí)驗(yàn),首先是對(duì)是否為惡意軟件的二分類(lèi),其次是具體屬于哪個(gè)種類(lèi)的8分類(lèi)。同時(shí)還對(duì)自身的實(shí)驗(yàn)進(jìn)行了消融實(shí)驗(yàn),也對(duì)其他模型進(jìn)行了橫向?qū)Ρ取?/p>
我們的模型為WMALG(Windows Malware Graph),SAGp為本文所使用的的初始模型SAGp[33](Self-Attention Graph pool)。在二分類(lèi)方面,從表1,表2的實(shí)驗(yàn)結(jié)果可以看出本文所提出的兩種方法均可以有效的提高檢測(cè)效果。首先相對(duì)于經(jīng)典的機(jī)器學(xué)習(xí)而言,本文所使用的數(shù)據(jù)集并不是很適合,我們僅提取了兩類(lèi)特征,一是線(xiàn)程數(shù)量,另一個(gè)為惡意等級(jí)為3的API的數(shù)量的特征,因此所提供的參考意義不大。但與CNN、LSTM等神經(jīng)網(wǎng)絡(luò)模型的實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比,分類(lèi)的各項(xiàng)指標(biāo)均有著很大提升,而相比于MAG同樣使用圖神經(jīng)網(wǎng)絡(luò)進(jìn)行分類(lèi)的模型也有著2.5%左右的提高。在表2的消融實(shí)驗(yàn)中,也進(jìn)一步驗(yàn)證了本文所使用的兩種惡意軟件圖嵌入方法確實(shí)有效。而對(duì)于8分類(lèi)而言,表3可以看出本文的方法相對(duì)于其他的深度學(xué)習(xí)模型而言有著較大提升,但受限于數(shù)據(jù)集的分布不均勻,最終的F1值和ACC值并不是很高。但總體來(lái)說(shuō),本文所提出的模型對(duì)于檢測(cè)效果的提升是十分有效的。
表1 二分類(lèi)對(duì)比實(shí)驗(yàn)
表2 二分類(lèi)消融實(shí)驗(yàn)
表3 八分類(lèi)對(duì)比實(shí)驗(yàn)
圖6 準(zhǔn)確率,召回率以及精度
圖7 SAGp 與WMALG 模型的準(zhǔn)確率對(duì)比
圖8 SAGp 與WMALG 模型的Loss 對(duì)比
惡意軟件已經(jīng)成為了最具威脅性的網(wǎng)絡(luò)安全問(wèn)題之一,給個(gè)人、企業(yè)以及國(guó)家的信息安全造成嚴(yán)重威脅。針對(duì)此問(wèn)題,本文提出了一種基于圖表示學(xué)習(xí)的惡意軟件檢測(cè)方法,使用基于多線(xiàn)程的多子圖表示方法以及添加邊節(jié)點(diǎn)的方式將惡意軟件表示為圖結(jié)構(gòu),并輸入至圖神經(jīng)網(wǎng)絡(luò)中進(jìn)行分類(lèi)。實(shí)驗(yàn)證明,本文提出的方法的檢測(cè)效率對(duì)比其他模型有著不小的提升。