肖達(dá),劉博寒,崔寶江,王曉晨,張索星
?
基于程序基因的惡意程序預(yù)測技術(shù)
肖達(dá)1,2,劉博寒1,2,崔寶江1,2,王曉晨1,2,張索星1,2
(1. 北京郵電大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,北京 100876;2. 移動(dòng)互聯(lián)網(wǎng)安全技術(shù)國家工程實(shí)驗(yàn)室,北京 100876)
隨著互聯(lián)網(wǎng)技術(shù)日益成熟,惡意程序呈現(xiàn)出爆發(fā)式增長趨勢。面對無源碼惡意性未知的可執(zhí)行文件,當(dāng)前主流惡意程序檢測多采用基于相似性的特征檢測,缺少對惡意性來源的分析?;谠摤F(xiàn)狀,定義了程序基因概念,設(shè)計(jì)并實(shí)現(xiàn)了通用的程序基因提取方案,提出了基于程序基因的惡意程序預(yù)測方法,通過機(jī)器學(xué)習(xí)及深度學(xué)習(xí)技術(shù),使預(yù)測系統(tǒng)具有良好的預(yù)測能力,其中深度學(xué)習(xí)模型準(zhǔn)確率達(dá)到了99.3%,驗(yàn)證了程序基因理論在惡意程序分析領(lǐng)域的作用。
程序基因;動(dòng)態(tài)分析;基本塊;惡意程序預(yù)測
在互聯(lián)網(wǎng)技術(shù)日益成熟的今天,網(wǎng)絡(luò)安全態(tài)勢卻不容樂觀,各類惡意程序數(shù)量呈井噴式增長,各種信息安全事件屢見不鮮。2017年5月和6月,名為“WannaCry”和“Petya”的勒索軟件利用操作系統(tǒng)漏洞感染了全球100多個(gè)國家和地區(qū)的數(shù)十萬臺(tái)主機(jī)系統(tǒng),造成的損失難以預(yù)計(jì)。根據(jù)《騰訊安全2017年度互聯(lián)網(wǎng)安全報(bào)告》數(shù)據(jù)顯示,騰訊電腦管家在2017年全年共攔截病毒30億次,發(fā)現(xiàn)6.3億臺(tái)主機(jī)感染病毒或木馬[1]。相似的,根據(jù)瑞星公司發(fā)布的《2017年中國網(wǎng)絡(luò)安全報(bào)告》顯示,瑞星“云安全”系統(tǒng)在2017年全年共截獲病毒樣本總量5 003萬個(gè),病毒感染次數(shù)29.1億次,病毒總體數(shù)量比2016年同期上漲15.62%[2]。此外,惡意程序還呈現(xiàn)出變種多、抗檢測技術(shù)更新快的發(fā)展情況。當(dāng)前主流的惡意程序識(shí)別技術(shù)已經(jīng)難以滿足惡意程序迅猛發(fā)展的安全性需求,如何對未知二進(jìn)制程序進(jìn)行系統(tǒng)性分析,準(zhǔn)確快速識(shí)別程序的惡意性成為當(dāng)前研究的熱點(diǎn)。目前主流的惡意識(shí)別技術(shù)主要是靜態(tài)分析技術(shù)和動(dòng)態(tài)分析技術(shù)。
靜態(tài)分析技術(shù)主要是通過二進(jìn)制程序靜態(tài)反匯編技術(shù),提取程序的反匯編指令、文件格式等特征。Santos等[3]將操作碼序列的長度與出現(xiàn)的頻率的乘積作為特征向量,通過計(jì)算兩向量之間的余弦相似度識(shí)別惡意代碼變體。孫博文等[4]通過字符串等離散信息,提取程序大小、可見字符串等特征,并利用特征融合和集成學(xué)習(xí)對惡意軟件進(jìn)行分類,取得了較好的準(zhǔn)確率。白金榮等[5]針對PE文件引用的API、資源目錄表、節(jié)區(qū)頭屬性等特征,采用Bagging等分類算法構(gòu)建模型分類器,達(dá)到了99%的準(zhǔn)確率。但靜態(tài)分析技術(shù)具有一定的局限性,如無法識(shí)別用戶函數(shù)、無法抵御惡意程序中常用的對抗加殼、多態(tài)、混淆等抗分析技術(shù)。
動(dòng)態(tài)分析技術(shù)主要利用QEMU[6]、Pin[7]等動(dòng)態(tài)插樁工具沙箱獲取系統(tǒng)調(diào)用、指令流序列程序行為。曹夢晨[8]利用Pin插樁平臺(tái)實(shí)現(xiàn)了無感知沙箱可提取程序的網(wǎng)絡(luò)行為、文件行為、注冊表行為等信息。Li等搭建了CSS(crystal security sandbox)[9]沙箱對Adware、Trojan和Worm三大惡意軟件記錄惡意軟件的文件、注冊表等惡意行為,最后使用SVM分類模型建立惡意軟件識(shí)別分類器。Ivan等[10]利用開源的沙箱Anubis對惡意程序進(jìn)行程序行為監(jiān)控,在沙箱生成的XML日志文件中提取特征再建立稀疏矢量模型,最后使用 KNN、SVM、多層感知器神經(jīng)網(wǎng)絡(luò)(MIP)等分類算法建立分類模型,準(zhǔn)確率最高達(dá)96.8%。動(dòng)態(tài)分析技術(shù)具有對常見抗靜態(tài)分析技術(shù)的規(guī)避能力,但由于程序具體執(zhí)行環(huán)境復(fù)雜,提取信息繁多,很難從海量的指令數(shù)據(jù)流中提取出具有識(shí)別作用的特征數(shù)據(jù)。
上述研究大多數(shù)針對惡意程序具有的結(jié)構(gòu)相似性或惡意程序系統(tǒng)調(diào)用的相似性來對惡意程序進(jìn)行分析,分析結(jié)果一般是程序的惡意性與否或執(zhí)行的危險(xiǎn)行為列表,并未從程序行為來源進(jìn)行分析。2014年,Chan P P F等[11]提出可以利用程序運(yùn)行時(shí)的堆內(nèi)存信息檢測。Java程序功能的相似性,并稱之為動(dòng)態(tài)軟件胎記(software birthmark making)。Liu K等[12]提出使用系統(tǒng)調(diào)用序列與程序依賴數(shù)據(jù)來作為軟件基因,以對抗軟件程序的盜版技術(shù),檢測算法的抄襲。此時(shí),軟件基因主要用于檢測軟件的同源性。2018年,韓金等針對Android操作系統(tǒng)的惡意軟件提出了惡意軟件基因[13]的概念,該研究提出從同源性的角度看待程序惡意行為,利用靜態(tài)分析的方法提取了資源段和代碼段惡意軟件基因,并采用機(jī)器學(xué)習(xí)方法構(gòu)建惡意程序分類器對惡意程序分類。該理論針對程序基因的提取,基于對程序資源段和代碼段靜態(tài)分析,但PC端程序的資源段并不固定,且PC端的程序代碼段中多采用加殼、混淆等抗分析技術(shù),因此該理論不適用于對PC端惡意程序的分析。
由于當(dāng)前PC端程序大多數(shù)為無源碼、惡意性未知的可執(zhí)行文件,本文針對該類程序提出程序基因的概念,從程序真實(shí)執(zhí)行的匯編指令層面定義并研究程序基因。程序基因旨在研究程序基因與程序行為間的關(guān)系,即程序基因具有的行為表達(dá)能力、遺傳性質(zhì)等,希望對無源碼的可執(zhí)行文件提取程序基因,基于程序基因?qū)Τ绦蛐袨榧巴葱赃M(jìn)行數(shù)據(jù)挖掘和人工智能分析,以解決當(dāng)前日益嚴(yán)峻的程序惡意性、惡意程序分類、APT攻擊溯源等問題。本文從程序惡意性入手,通過對千余個(gè)Windows平臺(tái)的惡意程序及正常程序提取程序基因,建立惡意程序預(yù)測模型,以驗(yàn)證程序基因理論在分析惡意程序中的佐證作用。本文的創(chuàng)新點(diǎn)如下。
1) 針對無源碼的二進(jìn)制可執(zhí)行文件,定義了通用的匯編指令層程序基因概念,并基于程序動(dòng)態(tài)監(jiān)控技術(shù),實(shí)現(xiàn)了通用的程序基因提取方法,提取的指令是程序?qū)嶋H執(zhí)行的匯編指令,規(guī)避了加殼等反分析手段的影響,與程序行為更加貼近。
2) 提出了基于程序基因的惡意程序預(yù)測方法,采用多種機(jī)器學(xué)習(xí)模型和深度學(xué)習(xí)模型,具有較高的預(yù)測能力。
為研究無源碼、惡意性未知程序的行為及程序行為來源問題,本文提出了程序基因概念,并將程序基因定義為具有一定功能、能反映某些行為的匯編指令片段,是控制程序行為的基本遺傳單位。
基因在生物學(xué)上的定義是控制生物性狀的基本遺傳單位,而程序的性狀反映在程序表現(xiàn)出的獨(dú)特行為上,二進(jìn)制程序?qū)嵸|(zhì)上執(zhí)行的是大量的匯編指令,匯編指令的順序、類型決定了程序行為。與生物學(xué)上的基因相比,程序基因與其具有極大的相似性。首先,程序基因穩(wěn)定存儲(chǔ)于程序文件中,并在程序執(zhí)行過程發(fā)揮作用實(shí)現(xiàn)程序自身的功能行為。其次,程序基因可以通過程序的更新、二次開發(fā)、引用等一系列行為在程序引用鏈中遺傳,具有該程序基因的程序在執(zhí)行時(shí)會(huì)產(chǎn)生特定的行為。從分子組成上來看,基因由4種脫氧核糖核苷酸組成,脫氧核糖核苷酸中堿基的排列順序構(gòu)成了生物的多樣性;而程序基因由多種排列各異的匯編指令組成,不同的匯編指令組合,反映了程序的不同行為。通過研究程序基因有助于分析程序功能,對程序的相似性與同源性判定也有一定作用。
根據(jù)程序基因的定義,程序基因是具有一定功能能反映某些行為的匯編指令片段。在一個(gè)二進(jìn)制程序中,匯編指令片段從粒度上可分為:鏡像文件、程序節(jié)段、函數(shù)、指令流、基本塊和匯編指令6個(gè)層次[7]。其中,鏡像文件包含二進(jìn)制程序相應(yīng)的所有數(shù)據(jù)結(jié)構(gòu),包括程序自實(shí)現(xiàn)代碼、加載的動(dòng)態(tài)鏈接庫等全部代碼;程序節(jié)段是PE文件中的程序段,如代碼段、數(shù)據(jù)段、資源段等;函數(shù)是實(shí)現(xiàn)程序某項(xiàng)特定功能的代碼片段;指令流是單入口多出口的指令序列;基本塊是單入口單出口的指令序列,是順序無跳轉(zhuǎn)的最大匯編指令序列;匯編指令是程序執(zhí)行最基本的單元,由操作碼和操作數(shù)組成。出于對程序基因穩(wěn)定性和遺傳性的考慮,本文以基本塊為程序基因的提取粒度。由于本文研究的樣本包含大量惡意程序,其中可能存在修改注冊表、加密磁盤等不可逆惡意行為,因此借助項(xiàng)目組之前研究的PinFWSandBox[14]無感知沙箱對程序行為及指令流進(jìn)行監(jiān)控,該沙箱可以有效地監(jiān)控并回滾惡意行為以保護(hù)主機(jī)安全性。
2.2.1 基于Pin的程序指令流快照提取
Pin是Intel公司提供的一個(gè)程序插樁平臺(tái),能在可執(zhí)行程序的任意位置插入代碼,以便對程序進(jìn)行動(dòng)態(tài)監(jiān)控分析[7]。Pin平臺(tái)為用戶提供了之前提及鏡像文件等6個(gè)粒度的API,通過調(diào)用這些API,編寫動(dòng)態(tài)鏈接庫(DLL, dynamic link library)文件類型的插件,稱為Pintool。Pin平臺(tái)根據(jù)Pintool中編寫的插樁代碼,對可執(zhí)行程序翻譯并執(zhí)行,實(shí)現(xiàn)Pintool中編寫的功能。其具體工作流程如圖1所示。
圖1 Pin平臺(tái)工作流程
可以看出Pin的工作流程可分為翻譯階段和執(zhí)行階段。在翻譯階段,Pin不會(huì)對相同的被插樁代碼段重復(fù)翻譯,僅在第一次翻譯時(shí)根據(jù)Pintool中的函數(shù)干涉程序的執(zhí)行流程。在程序的執(zhí)行階段,在每一次被插樁代碼段執(zhí)行前后都會(huì)調(diào)用Pintool中的分析函數(shù),以便在執(zhí)行時(shí)得到相應(yīng)的寄存器狀態(tài)、指令操作、內(nèi)存讀寫情況等行為信息。在本文的指令流快照提取模塊中,Pintool以Pin平臺(tái)提供基本塊插樁API,達(dá)到在基本塊粒度提取指令流快照的目的。
2.2.2 基于Pin的指令流快照存儲(chǔ)
由于程序?qū)嶋H執(zhí)行時(shí)匯編指令的數(shù)量龐大,重復(fù)性高,若詳細(xì)記錄每一條匯編指令會(huì)造成大量存儲(chǔ)空間的浪費(fèi)。本文采用以基本塊為基本存儲(chǔ)單位,每個(gè)基本塊僅在第一次執(zhí)行時(shí)記錄其全部匯編指令,其余情況下僅以索引號(hào)的形式記錄基本塊執(zhí)行順序,以節(jié)省存儲(chǔ)空間,并通過重放執(zhí)行基本塊流的方式恢復(fù)程序執(zhí)行的實(shí)際指令流。通過編寫Pintool插件中的分析函數(shù)代碼生成程序指令流快照日志,日志共分為3個(gè)部分。
1) 程序加載的鏡像文件日志,命名格式為“待提取程序名稱_image_list.fw”,該日志記錄了加載的全部自實(shí)現(xiàn)函數(shù)及動(dòng)態(tài)鏈接庫的起始地址、結(jié)束地址和名稱。
2) 基本塊執(zhí)行序列日志,命名格式為“待提取程序名稱_process.fw”,該日志以基本塊索引號(hào)的形式記錄了程序在實(shí)際運(yùn)行過程中的基本塊執(zhí)行順序。
3) 基本塊指令序列日志,命名格式為“待提取程序名稱_bbl_list.fw”,該日志在Pin平臺(tái)的翻譯階段內(nèi)進(jìn)行記錄,詳細(xì)記錄了每一個(gè)BBL的索引號(hào)、所在的鏡像文件號(hào)、指令地址及包含的全部匯編指令。
經(jīng)過上述兩部分的提取,可得到待提取程序?qū)嶋H運(yùn)行的全部匯編指令流,以此可作為“原始程序基因庫”。由于“原始基因庫”中包含了大量程序基本塊數(shù)據(jù),其中一部分基本塊是每一個(gè)二進(jìn)制程序都會(huì)存在的,如函數(shù)對棧的初始化、函數(shù)結(jié)束調(diào)用時(shí)對棧的銷毀等,這部分基因?qū)ε卸ǔ绦虻男袨槠鸬阶饔煤苄?,因此,可根?jù)基本塊調(diào)用頻率設(shè)定閾值對這部分基因進(jìn)行剔除,剔除以后可以得到程序基因庫。
利用第2節(jié)構(gòu)建的程序基因庫,本節(jié)針對程序惡意性進(jìn)行研究,構(gòu)建了惡意程序預(yù)測模型,實(shí)現(xiàn)對未知二進(jìn)制程序惡意性的預(yù)測,從而驗(yàn)證程序基因在對程序行為研究的可行性。
該模型的輸入是程序基因庫提取得到的程序基本塊數(shù)據(jù)。首先,利用-gram序列提取方法,構(gòu)造步長不同的操作碼序列。其次,計(jì)算各操作碼序列對整體的信息增益,從而提取出貢獻(xiàn)信息量較多的操作碼特征。然后,利用Word2vec方法對操作碼特征進(jìn)行抽象編碼,以得到具有良好語義相關(guān)性的特征詞。最終利用多種機(jī)器學(xué)習(xí)算法及深度學(xué)習(xí)算法實(shí)現(xiàn)了基于程序基因的惡意程序預(yù)測模型。
本模型創(chuàng)新性在于模型對動(dòng)態(tài)提取得到的大量匯編指令級數(shù)據(jù)進(jìn)行分析,通過信息增益方法解決了動(dòng)態(tài)分析技術(shù)中數(shù)據(jù)量龐大不利于分析的問題;類比于文本挖掘技術(shù),本模型將程序基因作為文本處理,采用語義相關(guān)性較好的Word2vec抽象編碼方法提取特征詞,利用上述特征構(gòu)建了基于多種機(jī)器學(xué)習(xí)方法的分類器,取得了良好的準(zhǔn)確性。
程序基因庫中包含大量匯編指令語句,在匯編指令語句中,操作碼決定了操作執(zhí)行的行為,而匯編指令的邏輯順序?qū)?zhí)行結(jié)果有很大影響,因而本項(xiàng)目采用相對受編譯器影響較小的操作碼作為研究的特征,選取-gram預(yù)測模型提取操作碼。
在程序指令流快照提取過程中,并未完全記錄全部匯編指令執(zhí)行序列,因此需要對記錄的日志進(jìn)行重放,以獲取完整的操作碼順序,流程如下[15]。
1) 讀取基本塊指令序列日志,并以字典的方式記錄該日志內(nèi)容,將基本塊序號(hào)及基本塊匯編指令以鍵值對方式存儲(chǔ)。
2) 遍歷基本塊執(zhí)行序列日志的全部內(nèi)容,并按照存儲(chǔ)的邏輯結(jié)構(gòu)從1)生成的字典中提取匯編指令的操作碼,并按照閾值對基本塊進(jìn)行篩選。
3) 根據(jù)-gram模型中值的大小分別對2)中生成的操作碼序列進(jìn)行提取,并記錄-gram提取到的每一條操作碼序列項(xiàng)出現(xiàn)的次數(shù),本文的取值分別為1、2、3、4。
經(jīng)過上述3個(gè)步驟,可以提取得到基于-gram的4類操作碼序列。
通過3.2節(jié)中的操作碼序列提取過程將得到大量的操作碼序列,但由于操作碼數(shù)量過于龐大,不利于后續(xù)的計(jì)算分析,本文利用各操作碼的信息增益對特征進(jìn)行篩選,得到信息增益較大的操作碼特征,在保證預(yù)測結(jié)果準(zhǔn)確的前提下,盡可能減少計(jì)算量。
則對于任意特征x,預(yù)測系統(tǒng)的條件熵為
從而可以得到
根據(jù)信息增益的定義,得到對于特征的信息增益公式為
為了統(tǒng)計(jì)各特征的信息增益,首先分別對每個(gè)-gram序列特征在惡意和非惡意程序中出現(xiàn)的次數(shù)和出現(xiàn)的樣本數(shù)進(jìn)行統(tǒng)計(jì),然后利用信息增益公式求得每個(gè)-gram序列特征值,從而按照閾值篩選特征。
為了方便對3.3節(jié)中篩選得到的特征進(jìn)行計(jì)算,需要對特征進(jìn)行語義抽象表示以轉(zhuǎn)化成為向量。本文采用了Word2vec方法,Word2vec[17]是一種由“輸入層—隱藏層—輸出層”構(gòu)成的3層神經(jīng)網(wǎng)絡(luò)模型,可將輸入的自然語言中的詞轉(zhuǎn)換為任意維度的行向量,并將語言文本轉(zhuǎn)換為相同維度向量空間的向量運(yùn)算,在Word2vec內(nèi)部采用了2種人工神經(jīng)網(wǎng)絡(luò)的分類算法——CBOW(continuous bag of words)[18]和Skip-gram[19]模型,最終得到每一個(gè)詞的最優(yōu)向量,且在多個(gè)特征詞間具有良好的語義相似度。本文中Word2vec的處理對象是由3.2節(jié)篩選后的4種-gram操作碼序列,使用python語言的gensism模塊,首先遍歷全部樣本中的特征,為其生成維數(shù)為300的詞向量字典,再利用該字典將全部樣本轉(zhuǎn)換為向量并保存,為后續(xù)模型訓(xùn)練與測試提供數(shù)據(jù)支持。
利用3.4特征抽象節(jié)中抽象表示得到的二維向量樣本,則整個(gè)樣本集可視為一個(gè)三維向量。但由于機(jī)器學(xué)習(xí)算法限制,需保證機(jī)器學(xué)習(xí)算法的輸入必須為二維向量。因此,在構(gòu)建分類器前要將得到的三維向量降維處理,利用前文提到的Word2vec具有良好的特征詞間語義相似度性質(zhì),可對各樣本的二維向量進(jìn)行簡單的運(yùn)算操作降為一維向量。本文采用對每個(gè)樣本的詞向量特征累加求平均值的方法,可在最大限度上保證原文本特征不丟失。在將樣本空間降維成為二維向量后,本文利用python的Scikit-learn 庫分別構(gòu)建了基于向量機(jī)、樸素貝葉斯、決策樹、隨機(jī)森林、近鄰和邏輯回歸6種分類模型的惡意程序分類器。
在模型構(gòu)建中,為充分評估模型的預(yù)測性能,減小過擬合問題,引入了折交叉驗(yàn)證(-fold cross validation)[20]方法。折交叉驗(yàn)證通過將全部樣本分組訓(xùn)練并取平均的方法來減少檢驗(yàn)方差,降低性能對數(shù)據(jù)劃分的敏感性。本文中采取的折交叉驗(yàn)證方法如下。
第1步:不重復(fù)地將樣本集中的樣本隨機(jī)分為5份。
第2步:每次選取其中一份作為測試集,其余4份作為訓(xùn)練集以訓(xùn)練預(yù)測模型。
第3步:重復(fù)第3步5次,使每個(gè)子集都有一次機(jī)會(huì)作為測試集,其余作為訓(xùn)練集。針對每次訓(xùn)練得到的模型測試,保存相應(yīng)的測試結(jié)果。
第4步:計(jì)算5組測試結(jié)果的平均值作為該預(yù)測模型的評估指標(biāo)。
在得到測試集樣本后,由于其本身同樣具有惡意性屬性標(biāo)簽,可驗(yàn)證本預(yù)測模型的準(zhǔn)確性,將預(yù)測結(jié)果與標(biāo)簽比較可計(jì)算出準(zhǔn)確率(accuracy)、精確率(precision)、召回率(recall)、1分?jǐn)?shù)(1score)為模型性能指標(biāo)。其中,分類結(jié)果參數(shù)定義如表1所示。
表1 分類結(jié)果參數(shù)定義
準(zhǔn)確率標(biāo)識(shí)惡意樣本中被預(yù)測為惡意樣本的比例;精確率為在全部被預(yù)測為惡意樣本中真正是惡意樣本的比例;召回率標(biāo)識(shí)被正確判定的惡意樣本占所有惡意樣本的比例;1分?jǐn)?shù)是準(zhǔn)確率和召回率的加權(quán)調(diào)和平均。得到計(jì)算公式如下:
本文另選取卷積神經(jīng)網(wǎng)絡(luò)[21](CNN,convolutional neutral network)模型對提取得到的-gram操作碼序列特征進(jìn)行訓(xùn)練學(xué)習(xí),以構(gòu)成基于深度學(xué)習(xí)的惡意程序分類器。卷積神經(jīng)網(wǎng)絡(luò)是神經(jīng)網(wǎng)絡(luò)的一種,由輸入層、卷積層、池化層、輸出層4個(gè)基本元素構(gòu)成,相比于其他神經(jīng)網(wǎng)絡(luò),CNN使用卷積運(yùn)算代替矩陣運(yùn)算,并以通過稀疏交互(sparse interactions)、參數(shù)共享(parameter sharing)、等變表示(equivariant representations)3個(gè)重要思想幫助改進(jìn)學(xué)習(xí)系統(tǒng)。
對于本文提取的-gram操作碼序列,首先需要為-gram操作碼建立索引,并存儲(chǔ)操作碼與索引之間的鍵值關(guān)系,該步驟本文采用keras預(yù)處理模塊preprocessing中的Tokenizer來實(shí)現(xiàn),可得到單詞索引序列。
在CNN模型工作流程中,模型會(huì)對輸入的文本進(jìn)行向量轉(zhuǎn)換,稱為embedding層,而在3.4節(jié)中-gram操作碼序列已通過Word2vec抽象成為詞向量,因此可用3.4節(jié)中得到的詞向量矩陣代替模型的embedding層繼續(xù)訓(xùn)練模型。以1-gram操作碼序列為例,本文采用的CNN模型結(jié)構(gòu)如圖2所示。
圖2 1-gram CNN模型具體結(jié)構(gòu)
依據(jù)第2、3節(jié)構(gòu)建的程序基因提取方法及惡意程序預(yù)測分類器構(gòu)建方法,本文以Python語言實(shí)現(xiàn)了上述流程,并使用互聯(lián)網(wǎng)上公開的惡意及非惡意樣本對實(shí)現(xiàn)的分類器進(jìn)行性能檢驗(yàn)。
首先,采集使用的原始樣本數(shù)據(jù),其中惡意樣本來源于惡意樣本網(wǎng)站https://www.virusign. com/,正常程序來源于Windows XP、Windows 7 64位操作系統(tǒng)的系統(tǒng)程序,利用網(wǎng)絡(luò)資源爬取系統(tǒng)共收集惡意程序1 038個(gè)、正常程序901個(gè),根據(jù)收集樣本來源將樣本標(biāo)記為正常程序和惡意程序。接下來,使用基于Pin的指令流快照提取系統(tǒng)提取得到程序基因庫,并使用-gram方法對基因庫中的操作碼部分提取形成基于-gram的操作碼序列。然后,使用Word2vec對操作碼序列進(jìn)行抽象語義描述轉(zhuǎn)換為特征向量。最后分別輸入到基于機(jī)器學(xué)習(xí)和基于深度學(xué)習(xí)的惡意程序預(yù)測分類器中,進(jìn)行訓(xùn)練和測試。在結(jié)果評價(jià)方面,使用折交叉驗(yàn)證的結(jié)果展示各惡意程序預(yù)測分類器的性能。
在此實(shí)驗(yàn)中,對支持向量機(jī)、樸素貝葉斯、決策樹、隨機(jī)森林、近鄰和邏輯回歸6種模型構(gòu)成的分類器進(jìn)行測試,以-gram的提取長度為1、2、3、4得到的操作碼序列進(jìn)行4次實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表2~表5所示。
將表2~表5轉(zhuǎn)換成為圖形表示可更形象地突出各機(jī)器學(xué)習(xí)模型的優(yōu)勢,以準(zhǔn)確率為標(biāo)準(zhǔn),各預(yù)測模型對比如圖3和圖4所示。
圖3 預(yù)測模型準(zhǔn)確率對比
表2 n=1時(shí)基于機(jī)器學(xué)習(xí)的惡意程序分類器分類能力
表3 n=2時(shí)基于機(jī)器學(xué)習(xí)的惡意程序分類器分類能力
表4 n=3時(shí)基于機(jī)器學(xué)習(xí)的惡意程序分類器分類能力
表5 n=4時(shí)基于機(jī)器學(xué)習(xí)的惡意程序分類器分類能力
圖4 預(yù)測模型準(zhǔn)確率趨勢
以-gram的提取長度為1、2、3、4得到的操作碼序列對深度學(xué)習(xí)預(yù)測模型進(jìn)行4次實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表6所示。
為了便于分析深度學(xué)習(xí)的性能,對比本文構(gòu)建的2種惡意程序預(yù)測模型,選取基于決策樹、隨機(jī)森林、近鄰和邏輯回歸模型的機(jī)器學(xué)習(xí)分類器與深度學(xué)習(xí)進(jìn)行對比,結(jié)果如圖5和圖6所示。
表6 基于深度學(xué)習(xí)的惡意程序分類器分類能力
圖5 深度學(xué)習(xí)模型準(zhǔn)確率對比
在基于機(jī)器學(xué)習(xí)的惡意程序分類器性能測試中,除樸素貝葉斯模型外,其余模型的準(zhǔn)確率均超過85%;當(dāng)-gram步長為3時(shí),取得最優(yōu)效果,全部模型準(zhǔn)確率均超過90%。在此處取得最優(yōu)的原因是本文所研究的程序基因中各操作碼排列具有很強(qiáng)的相關(guān)性,在步長較短時(shí)會(huì)丟失部分相關(guān)性特征,從而降低準(zhǔn)確率;而當(dāng)步長為4時(shí),可能出現(xiàn)部分過擬合現(xiàn)象,導(dǎo)致在步長為3時(shí)取得最優(yōu)效果。
圖6 深度學(xué)習(xí)模型準(zhǔn)確率趨勢
在基于深度的惡意程序分類器性能測試中,分類器在步長為2時(shí)取得最優(yōu)值,準(zhǔn)確率高達(dá)99.3%,其余情況準(zhǔn)確率均超過90%,總體上來講,基于深度學(xué)習(xí)的分類模型優(yōu)于基于機(jī)器學(xué)習(xí)的分類模型,其原因是在構(gòu)建分類器輸入時(shí),由于機(jī)器學(xué)習(xí)分類器的輸入是二維數(shù)組,從而對得到的特征向量采用平均值法降維處理,雖然利用Word2vec得到的特征詞具有良好的語義相關(guān)性,但仍有部分特征丟失,導(dǎo)致深度學(xué)習(xí)模型整體上優(yōu)于機(jī)器學(xué)習(xí)模型。
通過上述實(shí)驗(yàn)數(shù)據(jù)分析本文提出的2種基于程序基因的惡意程序預(yù)測模型在準(zhǔn)確率上均表現(xiàn)出了較強(qiáng)的分類能力,可以證明基于程序基因?qū)Τ绦驉阂庑灶A(yù)測是可行有效的。
本文針對二進(jìn)制無源碼程序,首次提出了程序基因的概念,并基于項(xiàng)目組前期研發(fā)的無感知沙箱基礎(chǔ)上,設(shè)計(jì)了一套系統(tǒng)化的程序基因提取方法。針對定義的程序基因,本文提出了基于程序基因的惡意程序預(yù)測技術(shù),實(shí)現(xiàn)了基于程序基因的惡意程序預(yù)測系統(tǒng)原型,通過對千余個(gè)惡意程序樣本、正常程序樣本預(yù)測實(shí)驗(yàn),基于程序基因的惡意程序預(yù)測模型具有很強(qiáng)的識(shí)別能力,可以為程序惡意性分析、程序惡意行為檢測提供佐證。在后續(xù)工作中,本項(xiàng)目組將進(jìn)一步完善程序基因的理論體系,探索更多、更細(xì)致的識(shí)別程序行為的基因;在惡意程序預(yù)測方面,增加更多可供判斷程序?qū)傩缘奶卣?,?yōu)化當(dāng)前使用的模型,增大樣本庫容量;在其他領(lǐng)域,積極探索程序基因理論在惡意程序同源性、惡意程序行為識(shí)別分析等相關(guān)領(lǐng)域的應(yīng)用。
[1] 2017年度互聯(lián)網(wǎng)安全報(bào)告[EB/OL]. https://slab.qq.com/news/ authority/1708.html
2017 Internet security report [EB/OL]. https://slab.qq.com/news/ authority/1708.html
[2] 阮斌. 《2017年中國網(wǎng)絡(luò)安全報(bào)告》發(fā)布[J]. 計(jì)算機(jī)與網(wǎng)絡(luò), 2018(5).
RUAN B. 2017 China cyber security report released[J]. Computer & Network, 2018(5).
[3] SANTOS I, BREZO F, NIEVES J, et al. Idea: opcode- sequence-based malware detection[C]// International Conference on Engineering Secure Software and Systems. Springer-Verlag, 2010:35-43.
[4] 孫博文, 黃炎裔, 溫俏琨, 等. 基于靜態(tài)多特征融合的惡意軟件分類方法[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào),2017,3(11):68-76.
SUN B W, HUANG Y Y, WEN Q K, et al. Malware classification method based on static multiple-feature fusion[J]//Chinese Journal of Network and Information Security,2017,3(11):68-76.
[5] 白金榮, 王俊峰, 趙宗渠. 基于PE靜態(tài)結(jié)構(gòu)特征的惡意軟件檢測方法[J]. 計(jì)算機(jī)科學(xué), 2013, 40(01):122-126.
BAI J R, WANG J F, ZHAO Z Q. Malware detection approach based on structural feature of PE file[J]//Computer Science, 2013, 40(01): 122-126.
[6] QEMU [EB/OL]. https://wiki.qemu.org/Main_Page.
[7] Pin-a dynamic binary instrumentation tool[EB/OL]. https:// software. intel. com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool
[8] 曹夢晨. 基于沙箱指令流快照的惡意程序智能識(shí)別技術(shù)研究[D].北京郵電大學(xué),2017.
CAO M C. Research on malware intelligent recognition technology based on sandbox instruction flow snapshot[D]// Beijing University of Posts and Telecommunications,2017.
[9] LI H J, TIEN C W, TIEN C W, et al. AOS: An optimized sandbox method used in behavior-based malware detection[C]//International Conference on Machine Learning and Cybernetics. IEEE, 2011: 404-409.
[10] FIRDAUSI I, LIM C, ERWIN A, et al. Analysis of machine learning techniques used in behavior-based malware detection[C]// Second International Conference on Advances in Computing, Control and Telecommunication Technologies. 2010:201-203.
[11] CHAN P P F, HUI L C K, YIU S M. Dynamic software birthmark for java based on heap memory analysis[M]// Communications and Multimedia Security. Springer Berlin Heidelberg, 2011:94-107.
[12] LIU K, ZHENG T, WEI L. A software birthmark based on system call and program data dependence[C]//Web Information System and Application Conference. IEEE, 2015:105-110.
[13] 韓金, 單征, 趙炳麟, 等. 基于軟件基因的Android惡意軟件檢測與分類[J]. 計(jì)算機(jī)應(yīng)用研究, 2019(6).
HAN J, SHAN Z, ZHAO B L, et al. Detection and classification of Android malware based on malware gene[J]//Application Research of Computers, 2019(6).
[14] 趙晶玲, 陳石磊, 曹夢晨, 等. 基于離線匯編指令流分析的惡意程序算法識(shí)別技術(shù)[J]. 清華大學(xué)學(xué)報(bào)(自然科學(xué)版), 2016(5): 484-492.
ZHAO J L, CHEN S L, CAO M C, et al Malware algorithm recognition based on offline instruction-flow analyse. Journal of Tsinghua University(Science and Technology), 2016, 65(5): 484-492.
[15] 陳晨. 基于操作碼行為深度學(xué)習(xí)的惡意代碼檢測方法[D]. 黑龍江: 哈爾濱工業(yè)大學(xué), 2013.
CHEN C. Malicious code detection based on opcode behavior deep learning[D]. Heilongjiang: Harbin Institute of Technology, 2013.
[16] BERRAR D, DUBITZKY W. Information gain[M]. Springer New York, 2013.
[17] RONG X. Word2vec parameter learning explained[J]. Computer Science, 2014.
[18] MIKOLOV T, CHEN K, CORRADO G, et al. Efficient estimation of word representations in vector space[J]. Computer Science, 2013.
[19] MIKOLOV T, SUTSKEVER I, CHEN K, et al. Distributed Representations of Words and Phrases and their Compositionality[J]. NIPS'13 Proceedings of the 26th International Conference on Neural Information Processing Systems 2013. 3111-3119.
[20] 周志華. 機(jī)器學(xué)習(xí): = Machine learning[M]. 北京: 清華大學(xué)出版社, 2016.
ZHOU Z H. Machine learning[M]. Beijing: Tsinghua University Press, 2016.
[21] CHUA L O, ROSKA T. CNN paradigm[J]. IEEE Transactions on Circuits & Systems I Fundamental Theory & Applications, 1993, 40(3):147-156.
Malware prediction technique based on program gene
XIAO Da1,2, LIU Bohan1,2, CUI Baojiang1,2, WANG Xiaochen1,2, ZHANG Suoxing1,2
1. School of Cyberspace Security, Beijing University of Post and Telecommunications, Beijing 100876, China 2. National Engineering Lab for Mobile Network Security, Beijing 100876, China
With the development of Internet technology, malicious programs have risen explosively. In the face of executable files without source, the current mainstream malware detection uses feature detection based on similarity, with lack of analysis of malicious sources. To resolve this status, the definition of program gene was raised, a generic method of extracting program gene was designed, and a malicious program prediction method was proposed based on program gene. Utilizing machine learning and deep-learning algorithms, the forecasting system has good prediction ability, with the accuracy rate of 99.3% in the deep-learning model, which validates the role of program gene theory in the field of malicious program analysis.
program gene, dynamic analysis, basic block, malware prediction
TP309.5
A
10.11959/j.issn.2096-109x.2018069
肖達(dá)(1981-),男,黑龍江寧安人,北京郵電大學(xué)大學(xué)講師,主要研究方向?yàn)樾畔踩腿斯ぶ悄堋?/p>
劉博寒(1995-),男,遼寧錦州人,北京郵電大學(xué)碩士生,主要研究方向?yàn)橄到y(tǒng)安全、漏洞利用和惡意行為檢測。
崔寶江(1973-),男,山東東營人,博士,北京郵電大學(xué)教授,主要研究方向軟件安全、漏洞挖掘、大數(shù)據(jù)安全和區(qū)塊鏈安全。
王曉晨(1996-),女,山東陽信人,北京郵電大學(xué)研究生,主要研究方向?yàn)樾畔踩?/p>
張索星(1994-),男,江蘇蘇州人,北京郵電大學(xué)碩士生,主要研究方向?yàn)閻阂獬绦驒z測、逆向工程和漏洞利用。
2018-06-20;
2018-07-20
崔寶江,cuibj@bupt.edu.cn
國家自然科學(xué)基金資助項(xiàng)目(No.U1536122, No.61502536)
The National Natural Science Foundation of China (No.U1536122, No.61502536)