劉亞姝,侯躍然,嚴寒冰
(1.北京建筑大學 電氣與信息工程學院,北京 100044; 2.北京郵電大學 網(wǎng)絡技術研究院,北京 100876;3.國家計算機網(wǎng)絡應急技術處理協(xié)調中心,北京 100029)
惡意代碼可以定義為任意對用戶、計算機或網(wǎng)絡做出危害的軟件[1]。一般來講,惡意代碼包括病毒、蠕蟲、后門、漏洞攻擊程序、特洛伊木馬、rootkit等。隨著技術的發(fā)展,惡意代碼的產生越來越簡單,惡意代碼的變體也越來越多,對網(wǎng)絡安全和信息安全造成了嚴重的威脅。
惡意代碼的檢測可以分為靜態(tài)分析和動態(tài)分析兩大類別。動態(tài)分析需要在沙箱中或者虛擬機里實際運行可執(zhí)行文件,分析執(zhí)行程序的行為來識別各種潛在的危害行為和攻擊行為,以便識別代碼的惡意性。動態(tài)分析是惡意代碼分析的一個重要研究方向,相對靜態(tài)分析方法而言,動態(tài)分析更常用于工業(yè)應用中。
本文通過在沙盒中觀察樣本的動態(tài)執(zhí)行過程,提取動態(tài)API的訪問序列、調用的DLL等信息構建異質信息網(wǎng)絡(heterogeneous information network,HIN)。在所獲得的節(jié)點類型不充足的情況下,改進隨機游走策略,選取合適的方法描述元圖特征,從而實現(xiàn)惡意樣本的檢測和分類。
圖是一種直觀地表現(xiàn)出對象之間關系的工具。通常用有向圖描述對象之間的聯(lián)系,這樣的有向圖也稱為信息網(wǎng)絡。圖中頂點表示對象、邊表示對象間聯(lián)系。如果信息網(wǎng)絡中描述的對象類型是不同的,也就意味著圖中有多種類型的數(shù)據(jù)及多種關系,則被稱為異質信息網(wǎng)絡,否則稱為同質信息網(wǎng)絡[2-3]。與同質信息網(wǎng)絡相比,異質信息網(wǎng)絡更能反映真實條件下對象之間的關系,具有更豐富的結構和語義信息。常見的異質信息網(wǎng)絡有社交網(wǎng)絡、科技文獻、醫(yī)療系統(tǒng)等。
由于異質信息網(wǎng)絡的研究對象類型、鏈接關系多樣化,傳統(tǒng)的圖方法并不適用。2011年,Sun等[4]提出了元路徑(meta path)的概念,給出了異質網(wǎng)絡的分析工具,通過對稱元路徑抽取2個節(jié)點之間的鏈接關系,同時定義了一種名為PathSim的相似度度量方法,用于在異構網(wǎng)絡中尋找對等對象。2012年,Sun等[5]提出了元路徑的聚類方法——PathSelClus。異質信息網(wǎng)絡中一個很重要的任務是將元路徑提取的分散語義信息進行聚合。PathSelClus采用在用戶提供一個小的對象種子集合的指導下(稱為用戶指導)實現(xiàn)元路徑聚類。PathSelClus方法可以自動學習和設置元路徑聚集時的權重問題,與其他方法相比具有聚類結果穩(wěn)定、隱含語義信息的效果。2014年,Shi等[6]提出了在異質信息網(wǎng)絡中用統(tǒng)一框架判斷相同類型節(jié)點和不同類型節(jié)點的相關性方法——HeteSim。異質信息網(wǎng)絡中的元圖會存在奇數(shù)路徑(odd path),也就是路徑不對稱及任意路徑(arbitrary path)的問題。HeteSim通過約束路徑搜索的方法將奇數(shù)路徑轉換為等長路徑(even path),這樣2個節(jié)點之間的相關性概率通過路徑上的所有概率之和獲得,從而能夠計算在元圖中無路徑到達的2個節(jié)點的相關性。2015年,Cao等[7]提出了HCLP方法用于節(jié)點之間多種類型的鏈接關系的預測,給出了相似鏈接規(guī)則及不同類型節(jié)點間相關性度量方法(RM)以便計算不同類型節(jié)點間的存在概率。2016年,Huang等[8]建議使用元圖/元結構(meta graph/meta structure)度量對象之間的相似程度。元圖是一種有向無環(huán)圖,可以描述2個對象之間的復雜關系。例如,文獻[8]中指出KDD上的2篇論文具有相同類型的主題和相關的作者,這樣就改變了原有元路徑方法,必須是順序結構的要求,并給出了基于元圖的2個節(jié)點之間的相關性判斷策略。
2014年,Tamersoy等[9]基于置信網(wǎng)絡傳播算法,通過未知文件與已有標簽的文件的關系實現(xiàn)無標簽文件惡意性的判斷。2015年,Chen等[10]將同質信息網(wǎng)絡用于惡意代碼文件關系網(wǎng)絡的構建。2018年,F(xiàn)an等[11]將異質信息網(wǎng)絡應用到惡意代碼檢測中,通過多種信息——壓縮包、API、DLL及上報惡意文件所在的機器或位置等信息構建異質信息網(wǎng)絡,獲得其語義信息,通過不同的元圖獲得多種類型的特征描述,并通過主角度分析將特征向量映射到低維空間。該成果在Comodo反病毒產品中得到了應用。
本文將異質信息網(wǎng)絡應用于惡意代碼動態(tài)分析中,通過改進Metagraph2vec游走方式及網(wǎng)絡嵌入方法,以獲得樣本特征描述,并將該特征用于惡意代碼分類。實驗結果證明,本文方法在僅可獲得有限信息的情況下,可以大大提高惡意代碼檢測、分類的性能。
目前,異質信息網(wǎng)絡最新分析工具是元路徑和元圖,下面給出元路徑和元圖的詳細說明。
2011年,Sun等[4]提出了元路徑的概念,用于異質信息網(wǎng)絡中網(wǎng)絡模式的特征描述。下面給出相關的符號定義。一個異質信息網(wǎng)絡定義為
其網(wǎng)絡模式為
式中:A為有向圖TG的頂點;R為有向圖的邊。則有對象類型的映射τ:V→A,鏈接的映射Φ:ε→R。
圖1給出了P1和P2路徑(S為元圖結構)??梢酝ㄟ^統(tǒng)計2個對象節(jié)點x和y的路徑數(shù)量、隨機游走等方法計算對象節(jié)點的相似度s(x,y),從而構建節(jié)點的特征向量。元路徑直接反映了對象節(jié)點之間的單一鏈接關系,如果對象間關系復雜,則需要處理成多條元路徑。如圖1中的有向圖S所示,需要處理成P1和P2路徑并做線性組合。但是,元路徑這樣的處理方法無法約束節(jié)點之間的共享關系,會造成共享信息丟失的問題。為此,Huang等[8]提出了元圖的概念,來刻畫節(jié)點間的信息共享關系。元圖相關性度量的方法有元圖計數(shù)、結構約束的子圖擴展等。
圖1 元路徑與元圖示例Fig.1 Examples of meta path and meta graph
2014年,Perozzi等[12]提出了DeepWalk方法用于社交網(wǎng)絡的特征表示。Deep Walk使用隨機游走(random walk)的方式在網(wǎng)絡中查找當前節(jié)點的“上下文”節(jié)點,體現(xiàn)了節(jié)點與節(jié)點的共現(xiàn)關系。隨機游走從局部一定程度上保持了節(jié)點與其相鄰節(jié)點之間的連接性,即網(wǎng)絡結構信息。然而對于異質信息網(wǎng)絡來說,由于節(jié)點與連接節(jié)點的異質性的存在,異質信息網(wǎng)絡嵌入最大的難點在于如何有效地在多種類型節(jié)點之間保存“節(jié)點上下文”的信息。
2017年,Yu等[13]提出了異質網(wǎng)絡嵌入模型Metapath2vec。Metapath2vec是基于預先指定的元路徑進行隨機游走的。通過“有指導的”元路徑游走,從而能夠保持“節(jié)點上下文”的概念。
Metagraph2vec是在Metapath2vec的基礎上提出來的。區(qū)別之處是:Metagraph2vec同時有2個隨機游走的路線,如果初始給定的2個游走的起始點一致,Metagraph2vec退化為Metapath2vec。若元圖M的基本模式如圖2所示,則可以有PVP和PTP兩個游走路徑。
圖2 元圖M示例Fig.2 Examples of meta graph M
采用skip-gram建模,并分別做歸一化得到節(jié)點的表示。在多元圖上會得到同一個節(jié)點的不同表示,則需要通過權重的設置將這些節(jié)點表示融合起來。
應用程序對系統(tǒng)資源訪問、注冊表訪問、活躍的進程、被進程載入的DLL、進程屬性等,都是其是否具有惡意性的判斷標志。而這些信息僅僅依靠對樣本的靜態(tài)分析是很難獲得的,有很多惡意的特征只有在執(zhí)行過程中才會動態(tài)展現(xiàn)。
本文主要從動態(tài)分析角度提取樣本的特征,并基于異質信息網(wǎng)絡構建多種類型對象之間的關系,采用改進的隨機游走策略獲得特征向量并實現(xiàn)樣本惡意性的檢測。
Fan等[11]刻畫的惡意代碼異質信息網(wǎng)絡中的信息包括:上報樣本所在的主機(M)、樣本文件(F)、文件所屬的壓縮包(Z)、動態(tài)調用的API(A)、動態(tài)調用的DLL(D)。分析這些類別信息之間存在的關系是有利于惡意代碼檢測的。例如,在2個PE文件中,如果其具有相同的壓縮包、有屬于同一個DLL的API,那么這2個PE文件具有很高的概率同屬于一個類別。圖3刻畫了以上述類別為頂點的惡意代碼網(wǎng)絡模式。
Fan等[11]研究中使用的數(shù)據(jù)集來源于Comodo反病毒平臺,可以獲得圖3中全部類型的節(jié)點數(shù)據(jù)。但是,通常在研究中很難獲取機器信息、壓縮包信息等。為此,如何在有限信息的情況下獲得更好的異質信息網(wǎng)絡的描述是本文的研究重點。
在惡意代碼動態(tài)分析中,API(A)、DLL(D)是最常能夠獲取到的信息。本文在構建異質信息網(wǎng)絡時,不僅考慮了樣本的內容——API、DLL,也考慮了樣本文件(F)與樣本之間的關系。圖3中虛線框內部分為本文構建的異質信息網(wǎng)絡。
根據(jù)圖3中虛線框內的網(wǎng)絡模式可以得到圖4所示的4種元圖結構。
圖3 惡意代碼網(wǎng)絡模式Fig.3 Network schema of malicious code
圖4所示的元圖中,節(jié)點之間涉及到的關系如下:
圖4 四種元圖Fig.4 Four types of meta graph
1)關系R1。被調用API是否屬于同一個文件。用矩陣I描述,這里,sij∈{0,1,…,n}表示文件i是否包含了第j個API及包含的次數(shù)。
2)關系R2。被提取的API是否屬于同一個DLL(如“WriteFile”與“CreateFileA”都屬于“KERNEL32.DLL”)。用矩陣B描述,這里bij∈{0,1}描述第i個API是否在第j個DLL中。
從圖4中給出的4個元圖結構上可以看到,在可獲得對象類別有限的情況下,通過對象類別之間構造多種鏈接結構會獲得更多的信息。為了獲得惡意代碼異質信息網(wǎng)絡的描述,本文采用了改進的隨機游走策略。
根據(jù)元路徑的對稱性,在實際游走的過程中做了加速處理;限定的、多次隨機游走,以獲得盡可能多的上下文信息。將隨機游走獲取的節(jié)點上下文的信息作為CBOW 輸入,提取節(jié)點對象的特征向量。
2.2.1 改進的隨機游走策略
隨機游走模型用來描述不穩(wěn)定的移動。以圖4中S1為例說明如何通過隨機游走獲取樣本文件的環(huán)境信息(上下文信息)。為了在大量數(shù)據(jù)時游走算法依然保持靈敏,本文采取如下加速策略:
1)減少大量相關但幫助性不強的信息。采用TF-IDF將普遍出現(xiàn)的關系信息去除。
2)由于所有的元圖都是在2個樣本文件之間對稱,僅僅取其中一半的節(jié)點進行隨機游走,就可以刻畫在這個元圖下樣本文件的周圍環(huán)境信息。
關系R1中反映的是樣本文件與其包含的API及API出現(xiàn)的次數(shù)。則可根據(jù)樣本文件中所包含的API數(shù)量確定隨機游走的概率。通過游走可獲得F→A→F之間的關系。
圖5為關系R1的矩陣I的信息示例。F1的API信息在第2行,先從行的角度,隨機抽取API的信息,假設抽取到第2列數(shù)據(jù),即A1,然后沿著第2列繼續(xù)抽樣,抽取到某一行,即得到Fi。這樣的游走是在元圖S1指導下的游走,獲得F→A→F之間的關系。若從Fi出發(fā)繼續(xù)游走,獲取Aj信息,從Aj列游走獲取Fk,…,這樣的游走是在元圖S4的指導下的游走。以上游走需要進行多次,以便獲得更為豐富的信息。
圖5 關系R1的矩陣I示例Fig.5 Example of matrix I on relationship R1
游走獲得的數(shù)據(jù)具有實際的物理含義,行表示的是每個樣本文件中出現(xiàn)的API信息。根據(jù)Fi行游走得到的Ai信息,即得到樣本文件中包含Ai(API)的次數(shù),按照圖4所示的4個元圖,根據(jù)元圖結構在關系R1、R2上隨機游走得到Ai信息,即得到樣本文件中包含Ai(API)的次數(shù),根據(jù)Ai獲得該API在其他樣本文件中出現(xiàn)的次數(shù)。
按照圖4所示的4個元圖,根據(jù)元圖結構在關系R1、R2上隨機游走獲得相對應的上下文信息,以此作為各個元圖的詞向量模型。
2.2.2 CBOW 模型與skip-gram模型
CBOW 模型與skip-gram模型都包含3層結構——輸入層、投影層和輸出層[14-15]。
skip-gram模型的訓練方法是:中心詞和周圍某個詞成對進行訓練,中心詞做輸入、周圍某個詞做輸出,描述中心詞對周圍詞的推斷。因此,可以將skip-gram輸出詞向量理解為對輸入詞典的降維。而CBOW 模型的訓練,是將中心詞周圍多個詞和中心詞進行訓練,周圍多個詞做輸入,中心詞做輸出,描述通過周圍詞推測中心詞的過程。
本文采用CBOW 模型進行詞向量的網(wǎng)絡嵌入,原因為:①圖4所示的4個元圖是從不同角度獲得樣本文件與周圍API、DLL異構節(jié)點的分布關系。②使用CBOW 模型可以直接獲得樣本的特征。
本文實驗采用了CNCERT實驗室提供的數(shù)據(jù)集,該數(shù)據(jù)集共有10個家族,每個家族1 500個惡意樣本,共15 000個惡意代碼樣本。由于動態(tài)分析需要實際執(zhí)行每一個樣本,非常耗時。在實驗中隨機選擇3個家族,下面以某次隨機選取的3個家族Allaple、Virut、Agent為例完成實驗結果分析和評價。
實驗中為了獲得樣本的動態(tài)信息,需要在Cuckoo沙箱內運行樣本。Cuckoo沙箱是一款著名的開源沙箱系統(tǒng),已被業(yè)界廣泛使用。在Cuckoo沙箱內運行這3個家族4 500個樣本,共獲取3 948個有效樣本的信息。
通過解析Cuckoo報告文件——“report.json”包含的字典中“apistats”子項,獲得各個進程下的API統(tǒng)計信息;解析Cuckoo monitor中的hook腳本,獲得API中DLL信息。本實驗中共檢測到365個API、27個DLL。
本文獲得了圖4所示的4張元圖,主要描述樣本文件、API及DLL的關系。關系R1的矩陣I為3 948×365大小的矩陣,行表示樣本Fi對365個API的調用情況及調用的次數(shù)。根據(jù)API和DLL的對照,得到關系R2的矩陣B,矩陣B為365×27維。
根據(jù)2.2.1節(jié),按照圖4所示的元圖做有指導的隨機游走。在實驗過程中,為了獲得更為豐富的信息,這樣的隨機游走需要進行多次才能刻畫出一個樣本點周圍的節(jié)點信息,獲得的API分布才會盡可能接近樣本的API實際分布,同時可以獲得大量相關的樣本文件作為輔助信息。
經(jīng)過多次游走實驗,最終確定30次隨機游走可獲得足夠多的信息。因此,本文實驗中規(guī)定任意的元圖都將反復進行30次隨機游走。以S1為例,經(jīng)過30次隨機游走獲得文件節(jié)點F周圍的信息,即獲得30組“F-A-F”信息。將這些信息統(tǒng)計到一個字典上,這個字典包含所有的API、樣本文件及DLL,長度為4 340(即3 948+365+27=4 340)維。經(jīng)過30次隨機游走,可以獲得30個字典長的向量,其語義信息是:按照規(guī)定的元圖找到當前樣本與周圍節(jié)點的關系。以此作為樣本根據(jù)這個子圖獲得的訓練結果。
在4個元圖上,都可以通過上述隨機游走方法獲得對應的上下文信息,最終會獲得4個相應的詞向量模型。
經(jīng)過隨機游走后,獲得的詞向量高達4 340維,為了達到降維的目的,本文采用CBOW 模型對詞向量降維,將4 340維字典嵌入(embedding)到128維中。
實驗中,在每個元圖指導下的隨機游走獲取的詞向量經(jīng)過降維后都可以獨立用于樣本分類。
1)單元圖分類測試
實驗代碼由Python語言編寫,采用kNN、RF(random forest)及線性SVM分類器分別完成分類實驗。所有實驗均采用了十重交叉驗證。
經(jīng)多次實驗驗證,當k=2時,kNN算法得到的分類結果最好,如表1所示。RF分類器中決策樹的數(shù)目設置為10時,結果如表2所示。SVM分類器中kernel參數(shù)為“l(fā)inear”(線性核)、懲罰參數(shù)C=1,分類結果如表3所示。
表2 單元圖模型RF分類結果Table 2 Classification results of each meta graph model using RF
表3 單元圖模型線性SVM 分類結果Table 3 Classification results of each meta graph model using linear SVM
表1~表3中,S1、S2、S3及S4分別為在圖4中4個元圖的指導下,根據(jù)改進的Metagraph2vec隨機游走策略和CBOW 模型獲得的特征向量的分類結果。
可以發(fā)現(xiàn),根據(jù)S1元圖游走獲得的特征向量具有最好的分類準確率、最低的誤報率和漏報率。這說明通過調用的API來判斷樣本之間的相似行為,具有非常好的鑒別能力。S2元圖中在尋找2個樣本的關聯(lián)關系中增加了DLL信息,也可以獲得較好的分類結果。
S4元圖相比S1元圖增加了通過API獲取多樣本之間關聯(lián)性的游走。3種分類器的分類結果表明,這種游走會對樣本之間的相似性判斷產生干擾。
根據(jù)S3元圖游走獲取的特征向量具有最差的分類結果。S3元圖在S2元圖的基礎上增加了S4元圖的游走路線,影響了分類效果。
2)多元圖融合的分類測試
為了綜合應用這4個元圖的分類結果,本文采用了投票的方法以便確定權重。在4個元圖中分別對每個測試樣本的詞向量特征采用投票的方法確定樣本屬于哪一個家族,投票結果以百分比表示。通過主角度分析方法,確定各個元圖分類結果的權重。
主角度α的計算方法為:假設有空間Yi和Yj,則其角度可以定義為
式中:θ=0,當且僅當Yi∩Yj≠0;θ=π/2,當且僅當Yi⊥Yj。
設θ1,θ2,…,θd為空間Yi和Yj主角度,則Yi和Yj的幾何距離為
則權重αi為
根據(jù)式(3)可以計算4個元圖模型投票結果的權重,結果如表4所示。根據(jù)表4的權重,融合4個元圖最終可獲得如表5所示的分類結果。
表4 元圖權重結果Table 4 Weight values of meta graphs
表5 主角度融合分類結果Table 5 Classification results using principal angle hybrid method
表5中的分類準確率是S1、S2、S3及S4的融合結果(分類器的參數(shù)設置同單元圖中的分類器參數(shù)設置)。相對表1~表3,表5的結果說明,融合的方法使得S3及S4元圖的分類準確率得到了很大的提升。這說明,多元圖相比單元圖而言,可以對部分單元圖的信息給與補充,可以通過α的物理意義得以解釋。
3)特征有效性分析
動態(tài)分析受運行條件、觸發(fā)條件的影響較大,而惡意代碼為了不被檢測到,很多都增加了抗檢測技術。因此,在Cuckoo沙箱中獲取的API、DLL可能會存在漏報、誤報的情況。為了分析Cuckoo沙箱獲取的信息對本文方法的影響,采用DynamoRIO工具對Cuckoo沙箱中可執(zhí)行惡意樣本再次分析,重新獲取API、DLL信息,并將二者結果做對比、合并。
在3個家族3 948個有效樣本中Cuckoo沙箱共獲得365個API、27個DLL。DynamoRIO再次分析這些樣本,共獲得373個API、27個DLL及3 948個有效樣本。將Cuckoo與DynamoRIO結果合并之后,獲得3 948個有效樣本、375個API及28個DLL。
根據(jù)合并后的樣本文件、API、DLL信息構造異質網(wǎng)絡,并再次完成單元圖分類測試。表6為k=2時k NN算法得到的分類結果。
表6 合并2個沙箱結果后單元圖模型k NN分類結果Table 6 Classification results of each meta graph model with two sandboxes results using k NN
可以發(fā)現(xiàn),表6與表1的結果基本一致。同樣地,采用RF與SVM 分類器可以得到與表2、表3相似的實驗結果,在此不再贅述。
從對比實驗結果可以看到,本文采用的單元圖指導下的多次隨機游走策略,可以降低單特征(如API、DLL)在異質信息網(wǎng)絡中對分類結果的影響。
4)與其他文獻結果的對比
Fan等[11]基于Comodo平臺構建了12個元圖,涉及到樣本文件、API、DLL、壓縮包、樣本來源的機器(Machine)等信息,采用的是基本的隨機游走策略及skip-gram方法描述樣本特征。在該研究中,記錄了單元圖在Comodo公司提供的數(shù)據(jù)集上的分類準確率、召回率等,多元圖融合后準確率可達0.983;但是對于單元圖(元路徑)的準確率只有0.75左右。將Fan等[11]的方法應用到本文數(shù)據(jù)集上,在S1元圖的指導下,RF的分類準確率只有0.56,遠遠低于本文的單元圖的分類準確率(見表1)。這說明本文采用的隨機游走和CBOW 策略在單元圖的分類效果是優(yōu)于Fan等[11]的方法的。
由于Comodo公司的數(shù)據(jù)集并未公開,本文在CNCERT數(shù)據(jù)集上只能構造出有限種類的元圖。在這種情況下,采取改進的Metagraph2vec隨機游走策略與CBOW 相結合的方式獲得單元圖特征向量描述,并取得了較好的分類準確率,這說明本文為信息類型不夠豐富的異質信息網(wǎng)絡的信息表示及提高單元圖分類準確率方面提供了一個可行的研究方法。
本文從動態(tài)分析的角度分析惡意樣本,將異質信息網(wǎng)絡應用到惡意代碼動態(tài)分析中,為惡意代碼動態(tài)分析提供了一種新的特征構造、描述方法。本文實現(xiàn)了:
1)通過在沙箱中運行樣本,獲得PE文件的動態(tài)訪問信息,例如API、DLL等。通過構建異質信息網(wǎng)絡的4個元圖,獲得樣本文件與API、樣本文件與DLL、API與DLL、樣本文件與API及DLL之間的關系。
2)提出改進的隨機游走策略,并結合CBOW模型獲得元圖的特征描述。本文方法相比Fan等[11]的方法提高了單元圖分類準確率。
3)通過投票和主角度權重設置實現(xiàn)了多元圖分類結果的融合。
實驗中發(fā)現(xiàn),多元圖融合后的分類準確率提高程度沒有達到Fan等[11]給出的融合效果。經(jīng)分析,這是由于本文異質信息網(wǎng)絡節(jié)點類型不夠豐富造成的,這將是下一步研究中要解決的問題。