胡建偉,車欣,周漫,崔艷鵬
(1. 西安電子科技大學網(wǎng)絡(luò)與信息安全學院,陜西 西安 710071;2. 華中科技大學網(wǎng)絡(luò)空間安全學院,湖北 武漢 430074)
近年來,利用惡意軟件進行網(wǎng)絡(luò)攻擊的行為越來越多[1]。惡意軟件利用欺騙技術(shù)可以在發(fā)動攻擊的同時逃避反病毒檢測,具有多態(tài)性、隱蔽性、易感染性等特性,嚴重影響網(wǎng)絡(luò)數(shù)據(jù)或程序的安全性、使用性與整合性,給互聯(lián)網(wǎng)和用戶帶來巨大威脅,造成嚴重的損失,因此,惡意軟件檢測技術(shù)已經(jīng)成為目前信息安全人員的研究熱點之一。
然而,當前的惡意軟件檢測技術(shù)存在高誤報率和高漏報率的不足[2],難以檢測出采用了欺騙技術(shù)的惡意軟件。值得注意的是,目前流行的惡意軟件都具有很強的目的性,惡意代碼編寫者依據(jù)已有的惡意軟件不斷開發(fā)出行為目的相似但代碼結(jié)構(gòu)又不完全相同的惡意軟件,從而形成惡意軟件家族。據(jù)研究結(jié)果證實[3],超過98%的新惡意軟件樣本實際上是來自現(xiàn)有惡意軟件系列的“衍生物”,新的惡意軟件繼承了原始惡意軟件的部分功能。為了躲避檢測并快速地部署惡意軟件,黑客通常不會重新開發(fā)新的惡意軟件,而是改進惡意軟件現(xiàn)有的行為邏輯或者在現(xiàn)有的惡意軟件中添加新的惡意行為邏輯,即新的惡意軟件具有繼承性與多態(tài)性。本文將具有相似行為邏輯或者相同行為目的的惡意軟件集合稱為惡意軟件家族。
為了提高惡意軟件檢測的準確率與檢測效率,本文提出了基于高斯混合模型(GMM, Gaussian mixture model)的增量聚類方法來識別惡意軟件家族。本文的主要工作如下。
1) 依據(jù)屬于同一個家族的惡意軟件的行為特征具有邏輯相似性這一特點,本文從行為檢測的角度分析并識別惡意軟件家族。
2) 為了構(gòu)建惡意行為特征的分析框架,本文利用靜態(tài)分析與動態(tài)分析相結(jié)合的方法來提取API函數(shù)調(diào)用的抽象特征,通過分析API函數(shù)調(diào)用的參數(shù)依賴關(guān)系來構(gòu)建惡意軟件行為邏輯圖。
3) 為了找到擁有整個軟件家族惡意行為特征的惡意軟件群UM與擁有軟件家族成員共有的惡意行為特征的惡意軟件群CM,本文依據(jù)惡意軟件家族行為的繼承性與多樣性,為特定目的的惡意軟件家族構(gòu)建4個行為傳遞閉包,并建立特征行為與惡意軟件的一對一映射關(guān)系。
4) 針對傳統(tǒng)聚類方法不能利用上一次聚類結(jié)果,從而導致耗時、資源浪費等問題,本文采用基于高斯混合模型的增量聚類方法來識別惡意軟件家族,創(chuàng)建并動態(tài)調(diào)整與惡意軟件家族的進化史相一致的高斯混合模型樹,并引入增量學習,同時進行惡意軟件家族的識別與惡意樣本的聚類。
隨著當前惡意軟件的欺騙技術(shù)越來越成熟,以及各類病毒數(shù)量的急劇增加,導致傳統(tǒng)的惡意軟件檢測技術(shù)不再有效。因此,出現(xiàn)了各種基于行為的惡意軟件檢測技術(shù)。Pektas等[4]通過API調(diào)用序列挖掘和搜索n-gram從而收集代表惡意軟件行為特征的集合。針對目前惡意軟件識別率下降的現(xiàn)狀,Han等[5]指出造成這種困境的原因是越來越多的目的性惡意軟件攻擊已經(jīng)出現(xiàn),與傳統(tǒng)惡意軟件幾乎沒有共同特征。Han等基于可判定理論,證明了任何軟件執(zhí)行的任務(wù)都是遞歸的和可確定的,并通過建立從軟件到任務(wù)的多對一的映射,證明了包括惡意軟件在內(nèi)的各類軟件也是遞歸的,并且可以由相應(yīng)的任務(wù)來確定。
為了提高檢測惡意軟件的準確率,Kolosnjaji等[6]提出首先在沙箱中執(zhí)行惡意軟件樣本以收集系統(tǒng)調(diào)用,然后使用深度神經(jīng)網(wǎng)絡(luò)對惡意軟件的系統(tǒng)調(diào)用序列進行建模以用于惡意軟件分類。Cho等[7]利用動態(tài)行為分析工具將API序列提取為惡意軟件行為報告,然后使用Malheur進行聚類和分類分析。
近年來,基于機器學習和數(shù)據(jù)挖掘算法的惡意軟件行為特征的分析方法逐漸受到研究人員的重視。Santos等[8]提出使用可執(zhí)行文件的操作碼序列頻率來檢測和分類惡意軟件,通過這種方式來訓練機器學習算法從而檢測未知的惡意軟件變種。Arp等[9]將針對API函數(shù)的靜態(tài)分析與機器學習算法相結(jié)合,以檢測惡意軟件。他們在向量空間中嵌入了特征,從向量空間中發(fā)現(xiàn)了惡意軟件模型,并使用這些模型構(gòu)建了機器學習檢測系統(tǒng)。
傳統(tǒng)的聚類方法主要是利用批處理模型來發(fā)現(xiàn)固定特征數(shù)據(jù)庫的數(shù)據(jù)集群,但是目前出現(xiàn)了越來越多的動態(tài)數(shù)據(jù)集,數(shù)據(jù)點以流形方式輸入。在這種情況下,增量聚類可以有效地處理這樣的數(shù)據(jù)集[10]。當不斷輸入數(shù)據(jù)點時,增量聚類逐步更新聚類結(jié)果,使當前的所有數(shù)據(jù)存在一個最新的聚類。為了對流數(shù)據(jù)進行數(shù)據(jù)聚類,Wan等[11]提出了一種基于高斯混合模型的新型增量聚類方法,稱為ICGT(incremental clustering of GMM tree)。ICGT創(chuàng)建并動態(tài)調(diào)整與數(shù)據(jù)流順序一致的GMM樹,樹中的每個葉子節(jié)點對應(yīng)于密集高斯分布,每個非葉子節(jié)點對應(yīng)于GMM。為了更新GMM樹以插入新輸入的數(shù)據(jù)點,Wan等引入了節(jié)點連接和連接子集的定義,并提出了樹更新算法,實驗結(jié)果證實所提方法是有效的。
基于軟件家族惡意行為的依賴性與繼承性[12],人們能為每個惡意軟件家族建立一個特征庫,并挑選出具有代表性的惡意軟件集合。當出現(xiàn)未知的惡意軟件時,人們可以提取它的特征,并與最具代表性的惡意軟件集合的特征進行比對,如果具有該家族的惡意簽名或特征,則此未知的惡意軟件屬于該惡意軟件家族;否則,需要分析軟件的行為特征,將分析出來的有意義的特征加入特征庫中再進行聚類[13]。本文將新樣本劃分到一個已知的惡意軟件家族的過程定義為聚類過程,并將依據(jù)新樣本的行為特征更新已知的惡意軟件特征庫,直到最后發(fā)現(xiàn)新的家族并更新已知家族成員的過程定義為惡意軟件家族識別。同時執(zhí)行惡意軟件識別與惡意聚類,提高惡意軟件的檢測效率。
若追根溯源,每一個惡意軟件家族一定會有“祖先”[3]。隨著時間推移,惡意代碼需要不斷“衍生”,不斷更新技術(shù)以滿足功能需求,逃避惡意軟件檢測,但“衍生”的惡意軟件與其祖先的行為特征相似,這體現(xiàn)了惡意軟件家族的繼承性。為了躲避檢測并快速地部署惡意軟件,惡意代碼創(chuàng)建者通常不會重新開發(fā)新的惡意軟件,而是在已有的惡意代碼的基礎(chǔ)上運用欺騙技術(shù),改進惡意軟件現(xiàn)有的行為邏輯或者添加新的惡意行為邏輯。欺騙技術(shù)包括靜態(tài)欺騙技術(shù)與動態(tài)欺騙技術(shù)兩方面[14]。靜態(tài)欺騙技術(shù)包括:1) 代碼混淆,一種在不改變程序功能的前提下,將正常源代碼轉(zhuǎn)換成更難以閱讀和理解的形式的技術(shù);2) 加殼,一種為了保護目標程序,而在運行時先于目標程序運行的一段代碼,常見的壓縮殼有UPX、Aspack等,常見的加密殼有 ASProtect、Armadillo等;3) 自修改代碼(SMC, self modifying code),一種對程序核心代碼和數(shù)據(jù)進行加密,且在被加密代碼執(zhí)行前,才進行解密的一種技術(shù)。動態(tài)欺騙技術(shù)包括:1) 反調(diào)試技術(shù),當惡意代碼檢測到程序正在一個調(diào)試器上運行時,它會修改自身代碼來躲避調(diào)試;2) 反虛擬機技術(shù),惡意代碼在運行前會檢測自己是否運行在虛擬機中,如果檢測到正在虛擬機中運行,惡意代碼會執(zhí)行與其本身行為不同的行為,其中最簡單的行為是停止運行。
巴西惡意代碼進化史大致可分為3個階段:1)初級階段,在這個階段,惡意代碼就是一段開源的鍵盤記錄器代碼,沒有使用任何反分析機制;2)中級階段,惡意代碼開發(fā)者開發(fā)出鼠標記錄器和釣魚木馬,并且為了釣魚木馬不輕易被識別出來,開發(fā)者修改host文件,將銀行網(wǎng)站的域名解析到一個硬編碼的服務(wù)器上;3)高級階段,惡意代碼開發(fā)者使用Internet explorer自動化來操作轉(zhuǎn)賬頁面內(nèi)容,同時為了延長惡意代碼的生存周期,惡意代碼開發(fā)者采用代碼混淆、反調(diào)試技術(shù)、反虛擬機技術(shù)等來躲避反病毒軟件的檢測。每個階段的代碼實現(xiàn)方式及采用的惡意欺騙手段如表1所示。
表1 巴西惡意代碼進化史
當前的惡意軟件有很強的目的性,它們通過已有的惡意代碼不斷開發(fā)出行為目的相似但代碼結(jié)構(gòu)不完全相同的惡意軟件,從而形成惡意軟件家族。依據(jù)惡意軟件行為的目的性,本文從行為檢測的角度分析并識別惡意軟件家族,將惡意軟件家族分為8類,分類框架如表2所示。該檢測方法的優(yōu)勢在于不管惡意軟件的結(jié)構(gòu)如何復雜、數(shù)量如何龐大,其根本的行為特征都具有相似的邏輯性,從而使基于行為的檢測方法可以有效地對已知和未知的惡意代碼進行鑒別和檢測。這種方法一方面可以提高檢測效率和檢測成本,另一方面可以避免傳統(tǒng)的病毒檢測技術(shù),只有等到計算機被感染時才能實現(xiàn)檢測的弊端,實現(xiàn)病毒快速、準確的防御。
表2 基于惡意目的的惡意軟件分類框架
基于惡意軟件行為的檢測方法分為基于行為的精確匹配和模糊匹配,其中精確匹配方法對目前的惡意軟件幾乎不起作用,因為當前的惡意代碼大多利用惡意欺騙技術(shù)來偽裝自己以逃避防火墻和反病毒軟件的檢測,它們會經(jīng)過一層層封裝后再執(zhí)行,因此模糊匹配成為主要的判別方法,其中利用API函數(shù)調(diào)用來識別惡意行為是比較常用的方法[15]。惡意程序會以異常的頻率調(diào)用實現(xiàn)特定功能的或者罕見的API函數(shù)序列,或者在正常軟件中不常使用的API函數(shù)。因此,分析樣本軟件在運行時API的調(diào)用情況可以有效地鑒別樣本軟件。
提取API調(diào)用序列可以通過2種途徑,靜態(tài)分析與動態(tài)分析。靜態(tài)分析是指不運行可執(zhí)行文件,而是通過反匯編目標文件來提取有用的低級行為特征,如字節(jié)序列、操作碼等。高級行為特征可以通過分析API調(diào)用序列、函數(shù)功能、控制流程圖來提取。但是靜態(tài)分析會受到代碼混淆、加密和加殼等欺騙技術(shù)的影響。動態(tài)分析是指在惡意代碼運行時提取行為特征,提供更有效的結(jié)果。通過在虛擬機中運行可執(zhí)行文件樣本,跟蹤程序的執(zhí)行過程并分析其惡意性,能夠有效地檢測出使用欺騙技術(shù)的惡意軟件。此外,還可以利用沙箱技術(shù)在線分析病毒,檢測軟件惡意行為,已知的沙箱 Cuckoo可以有效地分析和處理未知的惡意軟件[16]。但是動態(tài)分析僅著眼于惡意代碼在當前實驗環(huán)境中的行為,忽略了惡意代碼程序本身的代碼,因此會受實驗環(huán)境的限制,進而有可能無法得出樣本真實的惡意行為特征。因此,本文采用靜態(tài)分析與動態(tài)調(diào)試聯(lián)合分析的方法,具體如圖1所示。
本文將靜態(tài)分析與動態(tài)分析相結(jié)合來分析惡意軟件并提取其特征。在靜態(tài)分析部分,本文首先對樣本進行預處理,然后利用Python的pefile模塊來提取樣本導入的API。具體操作是:首先,解析樣本 PE文件;然后,通過屬性 DIRECTORY_ENTRY_IMPORT遍歷樣本文件所有導入的dll;最后,通過屬性 imports遍歷所有的導入函數(shù)。但是單純通過分析樣本文件導入表中的API函數(shù)來判斷樣本的行為是不準確的,因為惡意軟件的開發(fā)者可通過函數(shù) LoadLibrary和 GetProcAddress來動態(tài)加載所需要的API函數(shù),所以還需繼續(xù)進行動態(tài)分析。
在動態(tài)分析部分,本文利用一個動態(tài)API函數(shù)調(diào)用跟蹤器Drltrace來提取樣本的動態(tài)API調(diào)用序列、參數(shù)和返回值。Drltrace是基于 DBI[17]的、主要用于Windows和Linux的惡意代碼分析,其優(yōu)點是運行、分析惡意代碼足夠快,能夠有效對抗基于時間的反調(diào)試技術(shù),并且支持所有類型的庫連接,能有效對抗多種反分析機制。獲取API調(diào)用序列后,本文使用污點傳播分析技術(shù)來提取樣本的動態(tài)行為特征。首先標記污染源,然后根據(jù)API函數(shù)調(diào)用流程,跟蹤被標記為污點的數(shù)據(jù)在整個程序中的傳播路徑。使用污點傳播分析技術(shù),可以清晰地觀察到污點在整個程序中的傳播路徑,其本質(zhì)是可以反映參數(shù)變量在程序中的傳播過程。
以3個階段的巴西惡意代碼為例,本文首先利用靜態(tài)分析得到部分的API函數(shù),然后再結(jié)合動態(tài)分析得到惡意代碼完整的API調(diào)用序列、參數(shù)及返回值,最后得到 3個階段的巴西惡意代碼的部分API調(diào)用序列及其參數(shù)依賴性,如圖2所示。圖2中加粗顯示的函數(shù)是實現(xiàn)竊取用戶信息的主要功能函數(shù),相同的參數(shù)是通過追蹤器Drltrace與污點傳播技術(shù)分析后得到的。
圖1 惡意軟件分析框架
同一惡意軟件家族具有相似的行為邏輯,而惡意軟件API函數(shù)的調(diào)用也具有強邏輯性。表3展示了惡意代碼家族Wannacry、NotPetya和Kuzzle的API調(diào)用邏輯規(guī)則。結(jié)合圖2的分析可以得到,API調(diào)用存在參數(shù)依賴性,函數(shù)調(diào)用在時序上有特定的邏輯,因此,本文通過分析惡意軟件API調(diào)用的邏輯規(guī)則來提取行為特征。
圖2 API調(diào)用序列及參數(shù)
表3 惡意代碼家族的API調(diào)用邏輯規(guī)則
本文從行為檢測的角度分析并識別惡意軟件家族,依據(jù)惡意軟件家族的目的將其分為8類,任意軟件均可以依據(jù)其行為目的、技術(shù)手段與危害性得到量化后的行為特征軌跡。本文構(gòu)建一個四維空間來表示惡意軟件所使用的不同惡意技術(shù),即將軟件行為(獲取、創(chuàng)建、跟蹤、破壞)量化為一個四元組b=(f(a),f(c),f(t),f(d))。并依據(jù)其目的,將整個空間劃分為8個小空間,不同目的的惡意行為屬于不同的小空間。為了簡化計算,本文設(shè)置具有不同目的的軟件(如間諜軟件、蠕蟲、木馬、后門、Rootkit、病毒、勒索軟件、惡意挖礦軟件等)行為特征,其四元組分量的取值范圍分別為[0,1)、[1,2)、[2,3)、[3,4)、[4,5)、[5,6)、[6,7)、[7,8),即不同目的的軟件的特征節(jié)點位于不同的空間。空間中的節(jié)點是軟件的特征節(jié)點,代表軟件的行為,特征節(jié)點的位置取決于軟件行為量化后四元組的值。軟件行為的危害性越大,則軟件行為特征的四元組取值越大,表現(xiàn)為特征節(jié)點的半徑越大。集合軟件所有的特征節(jié)點能得到軟件的行為軌跡。
圖 3為間諜軟件類部分惡意軟件經(jīng)量化后得到的行為特征,坐標軸為量化的四元組。間諜軟件類軟件行為特征的四元組分量取值為[0,1),取值越大,表示其危害性越大。圖3中的3條曲線分別表示表1中巴西惡意軟件3個階段的行為特征軌跡。圖3中初級階段的惡意軟件行為特征可用4個四元組來表示:{[0.12,0.08, 0.16, 0.09],[0.24,0.12,0.09,0.13],[0.13,0.17,0.23, 0.36],[0.15,0.32,0.31,0.36]}。
圖3 間諜軟件特征的量化空間
為了量化軟件行為特征,本文利用靜態(tài)分析與動態(tài)分析相結(jié)合的方法來分析惡意軟件行為,然后提取軟件的L個行為,構(gòu)成L個四元組。軟件的特征軌跡一定屬于8個小空間中的一個,體現(xiàn)了惡意軟件家族的目的性;在同一個家族中具有“衍生”關(guān)系的軟件的行為特征軌跡會有交集,揭示了惡意軟件家族的繼承性;繼承了“祖先”部分代碼并“衍生”出新的惡意技術(shù)的后代軟件具有更嚴重的危害性,其特征節(jié)點半徑更大,體現(xiàn)了惡意軟件的多樣性。
為了能夠有效地度量具有繼承性與多樣性的惡意軟件的相似性,本文將惡意軟件的“繼承”與“衍生”過程定義為一種傳遞閉包關(guān)系,并找到能代表所屬的惡意軟件家族的惡意軟件集合。對于任意關(guān)系R,R的傳遞閉包總是存在的,具有傳遞關(guān)系的任意家族的交集也是傳遞的。具體的惡意軟件家族的傳遞閉包關(guān)系定義過程如下。
惡意軟件的行為(獲取、創(chuàng)建、跟蹤、破壞)用四元組b=(f(a),f(c),f(t),f(d))來表示。若惡意軟件家族初始的“族長”R0的惡意行為特征為(f(a0),f(c0),f(t0),f(d0)),且由R0派生的惡意軟件為R11與R12,其惡意行為特征為(f(a101),f(c101),f(t101),f(d101))與(f(a102),f(c102),f(t102),f(d102))。則(f(a0),f(a101))、(f(c0),f(c101))、(f(t0),f(t101))、(f(d0),f(d101))、(f(a0),f(a102))、(f(c0),f(c102))、(f(t0),f(t102))與(f(d0),f(d102))為傳遞關(guān)系,且針對四元組b=(f(a),f(c),f(t),f(d)),具有特定目的的惡意軟件家族的行為特征可以構(gòu)成4個傳遞閉包關(guān)系:T(f(aij),f(ai+1jm))、T(f(cik), f(ci+1kn))、T(f(tiy),f(ti+1yp))與T(f(diz),f(di+1zq))。若“衍生”N代,則i∈(0,N)。m、n、p、q分別是行為特征為f(aij)、f(cik)、f(tiy)、f(diz)的樣本的第m、n、p、q個衍生對象,j、k、y、z分別是惡意行為特征f(ai+1jm)、f(ci+1kn)、f(ti+1yp)、f(di+1zq)的派生史。
其中,T1表示某個惡意家族的惡意行為特征的集合,T2表示該惡意家族成員共有的惡意行為特征的集合,并且(f(aNew),f(cNhx),f(tNrg),f(dNsl))屬于(f(a),f(c),f(t),f(d))的第N代衍生對象中的任意一個。由Han等[5]的研究可知,?e,h,r,s,w,x,g,l,必有一個或多個惡意軟件與惡意行為特征(f(aNew),f(cNhx),f(tNrg),f(dNsl))相對應(yīng),即可以建立行為與惡意軟件的一對多的映射關(guān)系。在T1中,對?e,h,r,s,w,x,g,l,在(f(aNew),f(cNhx),f(tNrg),f(dNsl))所對應(yīng)的多個惡意軟件中任意選取一個,并建立一一映射關(guān)系,如式(2)所示。
然后,由T1中所有的惡意行為特征所對應(yīng)的惡意軟件來構(gòu)成集合UM,則集合UM可以代表整個惡意軟件家族,如式(3)所示。
所以新的不定性的軟件只需要與UM進行相似性比較,而不需要與整個惡意軟件家族進行相似性比較。
同理,由T2中所有的惡意行為特征對應(yīng)的惡意軟件構(gòu)成的集合為CM,CM所包含的行為特征是整個惡意軟件家族成員共有的。
如圖3所示,將惡意軟件行為特征量化后可得到特征軌跡,依據(jù)軌跡曲線可以發(fā)現(xiàn)具有“衍生”關(guān)系的軟件的軌跡曲線會有交集,并且后代軟件的特征節(jié)點的半徑更大,即四元組分量的取值更大。因此,可以依據(jù)惡意軟件家族內(nèi)特征軌跡的重疊面積或交集數(shù)目、特征節(jié)點的半徑或取值來生成家族的傳遞閉包關(guān)系,從而找到擁有整個軟件家族惡意行為特征的惡意軟件群UM與擁有軟件家族成員共有的惡意行為特征的惡意軟件群CM。
基于模型的聚類方法試圖優(yōu)化給定數(shù)據(jù)和擬合某些數(shù)學模型。傳統(tǒng)的基于模型的聚類方法GMM 能夠平滑地近似任意形狀的密度分布[18]。GMM 使用無監(jiān)督學習方法將數(shù)據(jù)劃分為多個集群,每個數(shù)據(jù)簇由高斯分布近似,稱為混合分量,具有自己的均值和協(xié)方差。假設(shè)一個n維樣本空間中有隨機向量x,若x服從多元高斯分布,則其概率密度函數(shù)為
其中,μ是n維均值向量,Σ是n×n的協(xié)方差矩陣。高斯混合分布被定義為k個高斯分布的凸組合,如式(5)所示。
其中,k為混合成分的數(shù)量,μj、Σj分別為第j個高斯成分的均值向量和協(xié)方差矩陣,jλ為混合系數(shù),滿足
求解GMM時,需要使用最大似然估計來迭代更新GMM的參數(shù),并計算該參數(shù)屬于不同簇的概率,具體的求解步驟詳見文獻[19]。
傳統(tǒng)的GMM通過假設(shè)待估計的分布來自固定成分數(shù)量的高斯混合分布,把密度估計問題轉(zhuǎn)變?yōu)橐粋€求解最大似然估計的問題,這樣的假設(shè)大大減少了模型的參數(shù),降低了空間復雜度。GMM 的學習過程從參數(shù)的初始估計開始,然后使用期望最大化(EM, expectation maximization)算法進行估計并最大化后驗估計[20]。然而,GMM對選定的初始參數(shù)估計過于敏感,并且可能會收斂到參數(shù)的邊界,導致估計不準確。因此,在傳統(tǒng)的高斯混合模型的基礎(chǔ)上[21],本文引入增量學習,構(gòu)建基于增量的高斯混合模型來識別惡意軟件家族。增量學習是指在學得模型后,接收到訓練樣本時,僅需根據(jù)新樣例對模型進行更新,不必重新訓練整個模型,不需要每次對所有數(shù)據(jù)進行重新聚類,這種學習方法很適合用來識別惡意軟件家族。因為當需要檢測一個未知的惡意樣本時,只需要利用上一次聚類的結(jié)果,即已有的惡意軟件家族,每次將一個數(shù)據(jù)樣本劃分到已有簇中或新增一個簇,這樣新增的數(shù)據(jù)樣本也不會影響原有劃分。
本文利用改進的高斯混合模型的樹結(jié)構(gòu)來刻畫惡意軟件家族內(nèi)的傳遞閉包關(guān)系。一方面,傳遞閉包關(guān)系是依據(jù)惡意軟件家族的進化史構(gòu)建的,一個顯著的特點是后代軟件功能的強化與多樣化;另一方面,GMM 樹結(jié)構(gòu)構(gòu)建的依據(jù)是軟件行為特征的一致多樣性,根節(jié)點具有軟件家族中最普遍的特征,葉子節(jié)點的特征最能代表整個軟件家族的特征,而普通成員的特征需要與葉子節(jié)點的特征相似且比根節(jié)點的特征更具多樣性。而軟件的功能是軟件外在行為的表現(xiàn),軟件的特征是對軟件行為的標識,兩者都是對軟件行為的刻畫。因此,本文提出的高斯混合模型的樹結(jié)構(gòu)能有效地揭示惡意軟件家族的進化史及惡意軟件行為的目的性、繼承性與多樣性。
Wan等[11]提出的ICGT算法首先并未考慮節(jié)點的繼承性與多樣性,只是簡單地將新的節(jié)點插入GMM 樹中,而且新的節(jié)點需要與所有的葉子節(jié)點進行簡單的距離比較,簡單的距離比較也不能反映節(jié)點的相似性。其次,當GMM樹更新時,需要更新葉子節(jié)點的所有祖先節(jié)點的GMM參數(shù),因此,ICGT算法不僅不能揭示節(jié)點間的內(nèi)在關(guān)系,而且數(shù)據(jù)的插入與更新速率太慢,影響聚類效率。本文依據(jù)惡意軟件家族的目的性、繼承性與多樣性,提出了適用于惡意軟件聚類的基于高斯混合模型的增量聚類方法,稱為ICGM(incremental clustering of GMM model)。ICGM創(chuàng)建并動態(tài)調(diào)整與惡意軟件家族的進化史相一致的GMM樹,每一個GMM樹代表一個有相同目的的惡意軟件家族,由樣本點生成的所有的GMM樹就構(gòu)成了GMM森林。GMM樹的定義為TG=(NR,NM,NL),其中,NR是根節(jié)點,由式(3)中CM包含的數(shù)據(jù)樣本構(gòu)成,代表了家族成員共有的行為特征;NM是成員節(jié)點,是由NR派生得到的;NL是葉子節(jié)點,葉子節(jié)點中的部分節(jié)點由式(3)中的UM構(gòu)成,代表惡意軟件家族的惡意行為特征,本文將這群葉子節(jié)點記為NLR。
相對熵(KL, kullback leibler)可以用來度量2個概率分布之間的差異,當待比較的2個統(tǒng)計模型服從高斯分布時,KLD(kullback-leibler divergence)有閉式解[22],如式(6)所示。其中,KLD(gi,gj)是指高斯分布gi到gj間的KL距離,n是特征向量的維數(shù)。但由于KL不滿足對稱性,本文采用式(7)定義的距離度量方法來比較形如式(5)的高斯分布之間的相似性。
由于GMM樹的節(jié)點均是GMM,當輸入新的數(shù)據(jù)點時,需要度量數(shù)據(jù)點與GMM之間的相似性。本文給出的方法是,對于新的數(shù)據(jù)點也創(chuàng)建相應(yīng)的高斯分布,其平均向量是數(shù)據(jù)向量,并賦予協(xié)方差很小的值,這樣能使高斯分布被協(xié)方差約束在一個小的范圍內(nèi)。若新的節(jié)點對應(yīng)的高斯分布為gnew,則gnew與擁有k個高斯分布的GMM之間的相似性度量如式(8)所示,其中,lλ為高斯分布的混合系數(shù),gl為GMM的第l個高斯分布。
基于高斯混合模型的增量構(gòu)建算法如算法 1所示。
算法1基于高斯混合模型的增量構(gòu)建算法
輸入已知惡意軟件家族數(shù)量N,樣本數(shù)量M,樣本,閾值其中,im表示第i個GMM樹的節(jié)點數(shù)
輸出插入M個樣本點后的GMM樹
初始化GMM 樹的根節(jié)點:k=1,S=0
1) 構(gòu)建每個GMM樹的根節(jié)點,根節(jié)點由CM中的數(shù)據(jù)點組成
3) 根據(jù)式(8)計算 GMM 樹中數(shù)據(jù)點Xk和之間的相似性
6) 從根節(jié)點開始,數(shù)據(jù)點按照從上到下的順序插入第i個GMM樹
17) 否則,將生成一個新的葉子節(jié)點。該葉子節(jié)點僅有一個數(shù)據(jù)點Xk,并且葉子節(jié)點的父節(jié)點是當前節(jié)點。令k=k+1
算法1采用基于高斯混合模型的方法,在構(gòu)建增量的同時進行惡意樣本聚類,最終通過惡意軟件家族邏輯行為的相似性識別出M個惡意軟件樣本。當輸入新的樣本數(shù)據(jù)Xk時,僅需要與GMM樹的NLR進行相似性比較,若相似性滿足閾值條件,則從根節(jié)點開始將新樣本數(shù)據(jù)與GMM樹的節(jié)點進行相似性比較,然后插入最優(yōu)的節(jié)點中。否則,尋找下一個GMM樹。當數(shù)據(jù)點Xk插入相應(yīng)的GMM樹后,需要更新GMM樹。依據(jù)條件1~條件3,本文分4種情況討論GMM樹的更新方法,即update函數(shù)的實現(xiàn)。
下面,從惡意軟件的繼承性與多樣性角度來分析GMM樹更新的4種情況。
1) 若數(shù)據(jù)點Xk同時滿足條件1~條件3,首先,數(shù)據(jù)點Xk繼承了第i個惡意軟件家族的目的性特征,則數(shù)據(jù)點Xk屬于GMMi。并且數(shù)據(jù)點Xk需要插入GMMi的新葉子節(jié)點中,則將該葉子節(jié)點的高斯分布的平均向量賦值為,并且協(xié)方差被賦予非常小的值。
2) 若數(shù)據(jù)點Xk滿足條件1和條件2,但不滿足條件3,則數(shù)據(jù)點Xk屬于GMMi,且數(shù)據(jù)點Xk需要插入GMMi的已有葉子節(jié)點中,此時依據(jù)式(9)調(diào)整該葉子節(jié)點的混合高斯分布的參數(shù)即可。
3) 若數(shù)據(jù)點Xk不滿足條件1,說明Xk不屬于當前任意一個惡意軟件家族。此時,將節(jié)點的平均向量賦值為,并且協(xié)方差被賦予非常小的值。令N=N+1,找到一類新的惡意軟件家族。
4) 當數(shù)據(jù)點Xk滿足條件1但不滿足條件2,即數(shù)據(jù)點Xk需要插入GMMi的jmax節(jié)點中作為成員節(jié)點,說明數(shù)據(jù)點Xk不僅繼承了第i個惡意軟件家族的目的性特征,而且改進了家族的行為邏輯或者添加了新的惡意行為邏輯。此時,應(yīng)依據(jù)式(9)調(diào)整節(jié)點jmax的混合高斯分布的參數(shù)。并且,依據(jù)家族的繼承性可知,當前節(jié)點參數(shù)的變化會影響節(jié)點派生的子節(jié)點,而派生的子節(jié)點應(yīng)當擁有當前節(jié)點的所有行為特征,所以再根據(jù)式(9),從節(jié)點jmax開始向下調(diào)整由jmax派生出的子節(jié)點的混合高斯分布的參數(shù)。調(diào)整完時,再依據(jù)式(1)重新確立第i個GMM樹的NRLi,從而保證聚類的有效性。同時,因為不需要對整個GMM樹進行調(diào)整,提高了惡意行為的識別效率。
其中,n表示在插入新數(shù)據(jù)點之前,當前節(jié)點中數(shù)據(jù)點的數(shù)量;x表示插入的數(shù)據(jù)點向量;μ、Σ表示插入的數(shù)據(jù)點的平均向量與協(xié)方差矩陣;xn與表示插入前后的數(shù)據(jù)點向量nΣ、Σn+1分別表示插入新數(shù)據(jù)點前后節(jié)點的混合系數(shù)、平均向量和協(xié)方差矩陣。
傳統(tǒng)聚類方法不能利用上一次的聚類結(jié)果,從而導致耗時、資源浪費等問題,而本文提出的ICGM算法引入增量學習,在接收到訓練樣本時,僅需根據(jù)新樣本對模型進行更新,不必重新訓練整個模型。當比較相似性時,新的樣本點僅需要與惡意軟件家族的部分葉子節(jié)點進行比較,并且當新的樣本點插入GMM樹后,僅需更新被插入節(jié)點的后代節(jié)點的高斯分布混合參數(shù)。因此,本文提出的ICGM方法適用于具有目的性、繼承性與多樣性的惡意軟件家族的聚類。
本文實驗平臺的具體配置如下,CPU是Intel(R)Core(TM) i5 2.50 GHz,內(nèi)存是8 GB,操作系統(tǒng)是Windows10。為了獲取樣本的動態(tài)API函數(shù)調(diào)用序列,所有樣本運行在一臺主機上,具體配置如下,CPU是Intel(R) Core(TM) i5 2.50 GHz,內(nèi)存是1 GB,操作系統(tǒng)是Windows XP Professional。實驗框架如圖4所示,共分為三大模塊:惡意軟件行為分析模塊、惡意軟件家族傳遞閉包關(guān)系構(gòu)建模塊和惡意軟件識別算法模塊。
在惡意軟件分析模塊,本文將分別提取樣本的靜態(tài)特征和動態(tài)特征,最后組成混合行為特征。提取樣本的靜態(tài)特征時,首先對樣本進行靜態(tài)分析,然后提取樣本導入表中的API函數(shù),以此作為靜態(tài)特征;提取樣本的動態(tài)特征時,首先通過動態(tài)分析,提取樣本的API調(diào)用序列、參數(shù)和返回值;同時利用污點傳播分析技術(shù),對污染源進行標記,標記污點,并記錄污點的傳播路徑,以此作為動態(tài)特征。然后將靜態(tài)特征和動態(tài)特征進行組合,最后得到樣本的混合行為特征。
圖4 實驗框架
在惡意軟件家族傳遞閉包關(guān)系構(gòu)建模塊,首先依據(jù)每個樣本的混合行為特征構(gòu)建L個四元組,并做出軟件在目的空間內(nèi)的行為特征軌跡圖。然后依據(jù)特征軌跡圖的重疊面積或交集數(shù)目、特征節(jié)點的半徑或取值來生成家族的傳遞閉包關(guān)系,從而找到擁有整個軟件家族惡意行為特征的惡意軟件群UM與擁有軟件家族成員共有的惡意行為特征的惡意軟件群CM。最后利用算法1同時進行惡意軟件家族的識別與惡意樣本的聚類。首先判斷是否為惡意軟件,若不是,則標記為正常軟件;若是,則進一步識別樣本是否屬于已知的惡意家族,若屬于,則將其插入相應(yīng)惡意家族的節(jié)點中,否則生成新的惡意家族GMM樹。
實驗使用的數(shù)據(jù)集[23]如表4所示,包含了來自8個家族共計10 826個惡意軟件樣本。將每個家族的樣本分為兩部分,一部分用作訓練,另一部分用作測試。訓練集包括1 600個惡意樣本和2 800個良性樣本,測試集包括9 226個惡意樣本和10 000個良性樣本。
表4 實驗數(shù)據(jù)集描述
在實驗過程中,未知樣本點通過本文提出的ICGM法將被識別為良性樣本、已知家族中的惡意樣本、未知家族的惡意樣本。并通過以下參數(shù)來評價該方法的有效性:召回率或真陽性率(TPR, true positive rate)、誤報率(FNR, false negative rate)、精確度和靈敏度的調(diào)和平均(F1)、準確度(ACC, accuracy)。其中,TPN(false negative number)表示被正確判定為良性的樣本點,TNN(true negative number)表示被正確判定為惡意的樣本點(包括已知家族的惡意樣本點與未知家族的惡意樣本點),F(xiàn)PN(false positive number)表示3種類型的樣本點:被錯誤判定為良性的惡意樣本點、未知家族中被判定為已知家族的惡意樣本點、已知家族中被判定為未知家族的惡意樣本點,F(xiàn)NN(false negative number)表示被判定為惡意的良性樣本點。則TPR、TNR、F1、ACC的定義分別為
本實驗中需要確定的參數(shù)有四元組的長度L和取值為(0,1)范圍的閾值參數(shù)θ、ψ。依據(jù)樣本中多數(shù)惡意軟件的行為,本文將L設(shè)置為8。閾值參數(shù)的取值取決于參數(shù)對惡意檢測誤報率與漏報率的影響。圖5仿真了閾值參數(shù)θ、ψ在(0,1)內(nèi)取值時對惡意檢測效率的影響,當θ取值范圍為(0,0.4]時,漏報率低但誤報率高;當θ取值范圍為(0.4,1)時,誤報率低但漏報率高。為了綜合考慮惡意檢測的漏報率與誤報率,本文設(shè)置閾值θ=0.4。同理,設(shè)置閾值ψ=0.6。
圖5 閾值參數(shù)的選擇
結(jié)合長短期記憶(LSTM, long short term memory)深度學習模型[24]和隨機森林模型,Lu等[25]提出了一種基于API調(diào)用統(tǒng)計特征的惡意軟件檢測體系結(jié)構(gòu)(ASSCA, API-based sequence and statistics feature combined malware detection architecture),將傳統(tǒng)的機器學習與遞歸神經(jīng)網(wǎng)絡(luò)結(jié)合以獲得更好的分類性能。Santos等[8]提出了一種表示依賴于操作碼序列的惡意軟件的方法(OSDM, opcode sequence as representation of executable for data-mining-based unknown malware detection),使用靜態(tài)檢測方來提取可執(zhí)行文件的操作碼序列頻率從而檢測和分類惡意軟件。Kolosnjaji等[6]構(gòu)建了一個基于卷積和循環(huán)網(wǎng)絡(luò)層的神經(jīng)網(wǎng)絡(luò)(NCLN, neural network based on convolutional and recurrent network layer),并通過動態(tài)特征提取的方式得到了一種分層特征提取架構(gòu),將基于n-gram的卷積與完整的順序建模相結(jié)合來檢測惡意軟件。
表 5將本文提出的方法 ICGM與 ASSCA、OSDM 和 NCLN就真陽性率(TPR)與誤報率(FNR)進行比較。由表5可知,ICGM與ASSCA方法的 TPR幾乎相同,這說明基于軟件的 API調(diào)用序列可以表示惡意軟件家族的行為特征,從而識別惡意軟件家族成員。此外,OSDM、NCLN的誤報率遠高于ICGM的誤報率,說明采用靜態(tài)與動態(tài)檢測相結(jié)合的方式能更好地區(qū)分良性樣本與惡意樣本。
表5 ICGM與ASSCA、OSDM和NCLN方法的性能比較
表6將ICGM與ASSCA就精確度和靈敏度的調(diào)和平均(F1)與準確度(ACC)進行比較。從表6可以看出,ICGM 的整體性能高于 ASSCA,因為ASSCA方法對于API調(diào)用序列的提取僅關(guān)注惡意軟件自身行為方面,忽略了惡意軟件家族的繼承性,但是ICGM方法可以有效利用同一惡意軟件家族行為的相似性來識別惡意軟件家族成員。ICGM方法用傳遞閉包關(guān)系來刻畫軟件家族的惡意行為的繼承性與衍生性,得到了4個由具有特定目的的惡意軟件家族的行為構(gòu)成的傳遞閉包關(guān)系,然后定義并找到了惡意軟件家族中代表性的特征集合與惡意軟件集合,并將代表性的惡意軟件集合作為GMM 樹的葉子節(jié)點。當需要辨別新樣本點時,僅需要將新樣本點與惡意軟件家族的部分葉子節(jié)點進行相似性比較,并且當樣本點插入GMM樹后,僅需更新被插入節(jié)點的后代節(jié)點的高斯分布混合參數(shù)。因此,采用ICGM方法可以提高惡意軟件家族的檢測效率。
表6 ICGM方法與ASSCA方法的F1與ACC值的比較
Ahmed等[26]同樣提出過利用污點傳播技術(shù)來跟蹤分析 Windows操作系統(tǒng)運行時 API的調(diào)用序列,并且運用機器學習算法來提高惡意軟件檢測的準確性,該惡意軟件檢測方法稱為 STAM(spatio-temporal information in API calls with machine learning algorithm)。表 7列舉了 ICGM 與STAM 的檢測時間(T)與存儲空間(S)。從表 7可以看出,ICGM方法的存儲成本明顯低于STAM方法的存儲成本。因為STAM方法需要存儲來自同一個惡意軟件家族的所有訓練樣本的 API調(diào)用序列,而ICGM只需要存儲惡意軟件家族葉子節(jié)點中訓練樣本的API調(diào)用序列。檢測時間包括生成API調(diào)用序列的時間成本與樣本訓練的時間成本。STAM方法的檢測時間約為ICGM方法的1.3倍,因為在檢測惡意軟件時,ICGM方法只需要利用上一次聚類的結(jié)果,每次將一個數(shù)據(jù)樣本劃分到已有GMM樹中或新增GMM樹,這樣新增的數(shù)據(jù)樣本也不會影響原有劃分,并且樣本只需要與NLR進行相似性比較,而不需要與整個惡意軟件家族進行對比。因此ICGM方法不僅能節(jié)省存儲空間,還能減少檢測時間。
綜上,本文提出的基于高斯混合模型的增量聚類算法不僅能節(jié)省惡意軟件檢測的存儲空間,還能提高惡意軟件的檢測準確率與識別效率。
表7 ICGM與STAM方法的檢測時間與存儲空間的比較
為了提高惡意軟件的檢測準確率與識別效率,本文在高斯混合模型中引入增量機制,提出了基于高斯混合模型的增量聚類算法來識別惡意軟件家族,同時執(zhí)行家族識別與惡意軟件聚類。首先,依據(jù)惡意軟件的目的性與繼承性,本文從行為檢測的角度通過追蹤API函數(shù)調(diào)用的邏輯規(guī)則來提取惡意軟件的特征。然后,從惡意行為的角度為每個惡意軟件家族構(gòu)建4個行為傳遞閉包關(guān)系,并建立特征行為與惡意軟件的一對一映射關(guān)系。最后,本文創(chuàng)建并動態(tài)調(diào)整與惡意軟件家族的進化史相一致的GMM 樹,采用基于高斯混合模型的增量聚類方法來識別惡意軟件家族。