張柏翰,凌 捷
廣東工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,廣州510006
蓬勃發(fā)展的互聯(lián)網(wǎng)為人們的工作和生活提供諸多便利,同時(shí)也可能被不法分子利用,成為其牟利犯罪的工具。諸如計(jì)算機(jī)病毒、蠕蟲、木馬、僵尸網(wǎng)絡(luò)、勒索軟件等在內(nèi)的惡意軟件長(zhǎng)期以來(lái)都是不法分子用以破壞操作系統(tǒng)、竊取用戶重要數(shù)據(jù)的利器,互聯(lián)網(wǎng)應(yīng)用的普及則加劇了惡意軟件的傳播。根據(jù)ΜcAfee Labs 在2019年8月發(fā)布的威脅報(bào)告[1],惡意軟件總數(shù)在2019年第一季度已經(jīng)突破9億;而在惡意二進(jìn)制可執(zhí)行文件方面,從2017 年至2019 年間,單季度最高新增量高于110 萬(wàn)。對(duì)惡意軟件的檢測(cè)和查殺一直是網(wǎng)絡(luò)空間安全研究領(lǐng)域的重要課題之一。
惡意軟件檢測(cè)方法可根據(jù)是否需要運(yùn)行軟件分為靜態(tài)分析方法和動(dòng)態(tài)分析方法。靜態(tài)分析方法只對(duì)二進(jìn)制可執(zhí)行文件中的代碼進(jìn)行分析,動(dòng)態(tài)分析方法則對(duì)可執(zhí)行文件運(yùn)行時(shí)的行為進(jìn)行分析。無(wú)論哪種分析方法,傳統(tǒng)手段都需要大量人工工作和專家經(jīng)驗(yàn),效率較低。而且攻擊者使用多態(tài)組合、仿冒、壓縮、混淆等方法,有意讓惡意軟件避開檢測(cè)軟件的檢測(cè)[2],這無(wú)疑增加了人工分析的難度。近年來(lái)機(jī)器學(xué)習(xí)尤其是深度學(xué)習(xí)在圖像處理、文本處理等領(lǐng)域的成功實(shí)踐,為從事惡意軟件分析工作的研究人員帶來(lái)啟示。當(dāng)前網(wǎng)絡(luò)空間中惡意軟件樣本龐大的數(shù)量,以及二進(jìn)制可執(zhí)行文件本身龐大的可提取特征的數(shù)量,使得深度學(xué)習(xí)方法非常適合于惡意軟件分類工作。
2015 年,微軟開放了一個(gè)數(shù)量上萬(wàn)的帶標(biāo)簽的惡意代碼樣本集,供研究者們使用[3]。在已有的工作中,Zhang等[4]、Dinh等[5]、Burnaev等[6]、Drew等[7]、Patri等[8]以及Gsponer 等[9]使用該數(shù)據(jù)集研究基于機(jī)器學(xué)習(xí)的對(duì)惡意軟件家族進(jìn)行多分類的方法。Κebede等[10]、Κim[11]、Rahul 等[12]同樣研究惡意軟件的分類問(wèn)題,不過(guò)他們使用的是容易取得更好效果的神經(jīng)網(wǎng)絡(luò)模型。以上研究工作的目的均是對(duì)惡意軟件按所屬家族分類。而在惡意PE(Portable Executable)文件檢測(cè)中,也即關(guān)于PE文件的“善”“惡”的二分類問(wèn)題方面的最新研究中,有許多基于機(jī)器學(xué)習(xí)的方法被提出。文獻(xiàn)[13]使用共享近鄰聚類算法檢測(cè)新惡意軟件。文獻(xiàn)[14]基于生成對(duì)抗網(wǎng)絡(luò)構(gòu)建惡意軟件檢測(cè)器模型。文獻(xiàn)[15]構(gòu)建集成了卷積神經(jīng)網(wǎng)絡(luò)和長(zhǎng)短期記憶網(wǎng)絡(luò)的檢測(cè)器模型。文獻(xiàn)[16]使用深度置信網(wǎng)絡(luò)構(gòu)建檢測(cè)器模型。文獻(xiàn)[17]針對(duì)缺乏確定性質(zhì)樣本的情況,提出了一種基于半監(jiān)督深度神經(jīng)網(wǎng)絡(luò)的惡意樣本標(biāo)記方法。文獻(xiàn)[18]基于許多新類型的惡意軟件都是現(xiàn)有惡意軟件的變體這一事實(shí),將可執(zhí)行文件轉(zhuǎn)為灰度圖,并使用基于卷積神經(jīng)網(wǎng)絡(luò)(Convolution Neutral Network,CNN)的分類器進(jìn)行同源性分類,以訓(xùn)練好的分類器來(lái)識(shí)別。文獻(xiàn)[19]描述了一種端到端惡意PE 文件檢測(cè)模型ΜalConv,其直接將未經(jīng)處理的原始PE 文件作為特征向量,并由使用了嵌入層和一維卷積層的神經(jīng)網(wǎng)絡(luò)模型提取特征,從而做出“善惡”的判別。該文獻(xiàn)作者Raff 等人表示他們的模型在惡意PE文件的檢測(cè)上具有不錯(cuò)的效果,然而文獻(xiàn)[20]的作者Κolosnjaji 等人針對(duì)該模型提出一種基于梯度下降的生成對(duì)抗樣本的算法,由該算法生成的對(duì)抗樣本逃避ΜalConv 檢測(cè)的成功率可達(dá)到60%。文獻(xiàn)[21]基于Endgame 公司開放的惡意PE 文件特征數(shù)據(jù)集Ember[22],用10個(gè)全連接層建立二分類模型DeepΜalNet,對(duì)PE文件的善惡進(jìn)行判斷,輸出PE文件為惡意軟件的概率。DeepΜalNet 非端到端檢測(cè)模型,其接收的數(shù)據(jù)為PE文件經(jīng)過(guò)預(yù)處理后得到的特征向量。該模型對(duì)惡意PE 文件具有不錯(cuò)的檢出效果,且目前尚未有人提出針對(duì)此種模型的對(duì)抗攻擊方法。然而在本文實(shí)驗(yàn)過(guò)程中,發(fā)現(xiàn)其存在參數(shù)數(shù)量過(guò)多和泛化性較差的問(wèn)題。
在數(shù)據(jù)集方面,Virusshare、Virustotal、Μalshare等網(wǎng)站提供大量惡意軟件樣本供學(xué)習(xí)和研究使用,Μicrosoft也開放惡意PE樣本集供研究,其中每個(gè)PE文件具有所屬惡意軟件家族的標(biāo)簽。至于正??蓤?zhí)行文件樣本,由于政策等因素,互聯(lián)網(wǎng)上并未有組織或個(gè)人開放大量可用原始樣本。也正因此,大量的關(guān)于惡意軟件的分類研究工作均集中在對(duì)惡意軟件所屬家族的歸類問(wèn)題上。Endgame 公司于2017 年開放了一個(gè)用于研究惡意軟件檢測(cè)的數(shù)據(jù)集,其中包含由100 萬(wàn)個(gè)PE 文件樣本通過(guò)特征工程轉(zhuǎn)化而來(lái)的100 萬(wàn)個(gè)長(zhǎng)為2 381 的32 位浮點(diǎn)數(shù)特征向量。本文在該數(shù)據(jù)集上設(shè)計(jì)并開展了驗(yàn)證性實(shí)驗(yàn)。
本文將針對(duì)文獻(xiàn)[21]設(shè)計(jì)的惡意PE 文件檢測(cè)器模型所存在的泛化性較差的問(wèn)題,改進(jìn)模型結(jié)構(gòu),提高模型的泛化能力,并使模型在后續(xù)剪枝工作中保持可用性。
本文使用具有多個(gè)全連接層的神經(jīng)網(wǎng)絡(luò)構(gòu)成惡意軟件檢測(cè)器模型。檢測(cè)器接收的數(shù)據(jù)為將PE文件進(jìn)行預(yù)處理后得到的特征向量,預(yù)處理的方法將在后文介紹。實(shí)驗(yàn)中曾在模型中加入一維卷積層和循環(huán)神經(jīng)層,但與單純使用全連接層的模型相比其效果不佳。由此推測(cè),由本文所述數(shù)據(jù)預(yù)處理程序提取的特征向量不具備時(shí)序性,因而本文最后選擇深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)作為惡意軟件檢測(cè)器模型的基礎(chǔ)架構(gòu)。
特征向量輸入模型后,會(huì)經(jīng)過(guò)多個(gè)模塊M 。這里模塊M 是一個(gè)數(shù)據(jù)處理流程:模塊M 接收輸入數(shù)據(jù)或由上一個(gè)模塊處理后得到的輸出數(shù)據(jù)X ,經(jīng)過(guò)批歸一化層(Batch Normalization,BN),使得向量X 各維數(shù)值x0,x1,…,xn均值趨于0,方差趨于1;然后數(shù)據(jù)經(jīng)過(guò)一個(gè)具有n 個(gè)神經(jīng)元的全連接層,此全連接層采用relu作為激活函數(shù);最后使用定向Dropout方法,在每一個(gè)訓(xùn)練步驟中挑選一定數(shù)量的權(quán)重參數(shù),使其失活,通過(guò)這種方法防止神經(jīng)網(wǎng)絡(luò)過(guò)度依賴某些神經(jīng)元,導(dǎo)致訓(xùn)練得到模型過(guò)度擬合數(shù)據(jù)集而泛化性差。
數(shù)據(jù)從最后一個(gè)模塊輸出后,再進(jìn)入一個(gè)只有一個(gè)神經(jīng)元的全連接層,即輸出層。該層以sigmoid 函數(shù)作為激活函數(shù),得到介于0 和1 之間的32 位浮點(diǎn)數(shù),表示判定輸入樣本為惡意PE文件的概率。
需要指出的是,本文設(shè)計(jì)的模型使用定向Dropout方法替代DeepΜalNet所用的普通Dropout方法,并通過(guò)實(shí)驗(yàn)驗(yàn)證其有效性。
全連接層由一個(gè)線性函數(shù)加一個(gè)激活函數(shù)組成,如式(1)所示。假設(shè)ni-1為第i 個(gè)模塊接收的輸入向量Xi的維數(shù)。第i 個(gè)全連接層的權(quán)重矩陣為Wi,其由ni個(gè)維度為ni-1的向量構(gòu)成,bi為偏置向量,維數(shù)為ni。a為激活函數(shù),目的是對(duì)線性函數(shù)的輸出作非線性變換。
在本文設(shè)計(jì)的檢測(cè)器模型中,除了輸出層外的每個(gè)全連接層使用的激活函數(shù)皆為relu 函數(shù)。實(shí)驗(yàn)曾嘗試使用sigmoid、leaky-relu、erelu、prelu等函數(shù)作為模塊M中全連接層使用的激活函數(shù)。實(shí)驗(yàn)中發(fā)現(xiàn),relu及其變種函數(shù)的效果最好,因此本文最終使用relu 作為模塊M 中全連接層的激活函數(shù)。而在輸出層中,本文使用sigmoid作為激活函數(shù)。
在訓(xùn)練模型時(shí),若各層網(wǎng)絡(luò)接收的輸入數(shù)據(jù)的分布不一致,則后層網(wǎng)絡(luò)需為了適應(yīng)輸入數(shù)據(jù)的變化而不停調(diào)整,如此將導(dǎo)致學(xué)習(xí)速度降低,模型無(wú)法很好地收斂。因而本文設(shè)計(jì)的模型中引入BN機(jī)制,利用反向傳播使各網(wǎng)絡(luò)層的數(shù)據(jù)分布一致。
DeepΜalNet 模型使用Dropout 方法防止過(guò)擬合。這種在模型的每一步訓(xùn)練中隨機(jī)選擇權(quán)重并令其失活的正則化方法在一定程度上可以防止模型過(guò)度依賴部分權(quán)重,但也導(dǎo)致模型訓(xùn)練成型后所有權(quán)重的重要性一致,即沒有一個(gè)可以顯式擇取的最優(yōu)子網(wǎng)絡(luò),因而不利于模型后續(xù)剪枝中保持高可用性。而本文的實(shí)驗(yàn)中使用一種稱為“定向Dropout”的方法代替Dropout。下一節(jié)將解釋這種正則化方法。
定向Dropout正則化方法由Aidan等人提出[23],是一種“基于重要性的剪枝方法”,其在每個(gè)網(wǎng)絡(luò)層中,對(duì)神經(jīng)元的權(quán)重或是神經(jīng)元的線性輸出值按大小排序(采用L1或L2范數(shù)),然后選出較小的一部分,從這部分權(quán)重或神經(jīng)元中再隨機(jī)選出一部分,使其失活。這是一種優(yōu)化的Dropout方法,不僅可以使模型更好地避免過(guò)擬合,提高模型的泛化能力,同時(shí),可以使模型在訓(xùn)練后得到一個(gè)最優(yōu)子網(wǎng)絡(luò),有利于模型的后續(xù)剪枝操作。
如同Dropout 正則化,定向Dropout 也分為針對(duì)權(quán)重和針對(duì)神經(jīng)元的兩種,分別稱為權(quán)重剪枝和單元剪枝,它們篩選出重要權(quán)重的方法可分別用式(7)和式(8)表示,其中argmax-k 表示選出前k 個(gè)權(quán)重或單元。權(quán)重剪枝針對(duì)同一個(gè)神經(jīng)元里的所有權(quán)重,將它們按一范數(shù)從大到小排序,然后選出前k 個(gè)作為保留權(quán)重,對(duì)其余權(quán)重行Dropout方法。單元剪枝則針對(duì)同一個(gè)神經(jīng)層中的所有神經(jīng)元,將它們根據(jù)各自的權(quán)重向量的二范數(shù)從大到小排序,選出前k 個(gè)作為保留神經(jīng)元,對(duì)其余神經(jīng)元同樣行Dropout方法。之所以不將殘余權(quán)重或神經(jīng)元直接摒除,是因?yàn)樗鼈冎锌赡苡幸恍?huì)在后續(xù)訓(xùn)練步驟中重新顯現(xiàn)重要性而進(jìn)入前k,因此只對(duì)它們行隨機(jī)失活法,保證公平性。記模型參數(shù)數(shù)量為 ||θ ,候選失活參數(shù)占比為γ,對(duì)候選失活部分的隨機(jī)Dropout 比例為α,則在每次定向Dropout 時(shí)保留活性的參數(shù)數(shù)量為(1-γα) ||θ 。
在本文的實(shí)驗(yàn)中使用針對(duì)權(quán)重的定向Dropout正則化方法替代Dropout方法,并測(cè)試其效果。
EndGame公司開放的Ember數(shù)據(jù)集,是由對(duì)100萬(wàn)個(gè)PE文件(包含正??蓤?zhí)行文件和惡意可執(zhí)行文件)提取的特征向量和它們的標(biāo)簽組成。其中,標(biāo)簽0表示樣本為正??蓤?zhí)行文件,標(biāo)簽1 表示樣本為惡意可執(zhí)行文件,標(biāo)簽-1 代表可執(zhí)行文件未知善惡。在本文的實(shí)驗(yàn)中,使用數(shù)據(jù)集中60 萬(wàn)條帶有非-1 標(biāo)簽的數(shù)據(jù)(其中包括標(biāo)簽為0和1的數(shù)據(jù)各30萬(wàn)條)作為訓(xùn)練模型時(shí)使用的數(shù)據(jù)集,另外20 萬(wàn)條(其中包括標(biāo)簽為0 和1 的數(shù)據(jù)各10萬(wàn)條)作為測(cè)試模型時(shí)使用的數(shù)據(jù)集。
在測(cè)試模型時(shí),除了使用Ember 數(shù)據(jù)集做測(cè)試,也使用另外兩個(gè)樣本集來(lái)測(cè)試模型的泛化能力。一個(gè)是從Virusshare.com 下載的包括59 011 個(gè)惡意PE 文件的樣本集。在正??蓤?zhí)行文件樣本方面,由于許多軟件受版權(quán)法律保護(hù),網(wǎng)上也沒有開放數(shù)量較大的正??蓤?zhí)行文件樣本集。本文的實(shí)驗(yàn)采用The Universitiy Of Arizona開放的項(xiàng)目lynx-project(獲取地址為https://www2.cs.arizona.edu/projects/lynx-project/Samples/),其中包含39個(gè)善意PE文件,這些文件使用了一系列惡意代碼常用的編碼方法,包括使用VΜProtect、ExeCryptor 和Themida等工具對(duì)代碼進(jìn)行混淆,以及添加自修改邏輯從而防篡改的方法。本文的實(shí)驗(yàn)中使用這個(gè)項(xiàng)目來(lái)測(cè)試檢測(cè)模型的誤報(bào)率。
對(duì)每個(gè)PE 文件提取用于檢測(cè)器模型判別PE 文件善惡的信息,描述如下:
文件總體摘要信息。包括文件的虛擬大小,導(dǎo)入、導(dǎo)出函數(shù)數(shù)量,符號(hào)數(shù)量,是否有簽名、重定向、RSRC節(jié)、TLS節(jié)。
PE 頭部信息。這些信息提取自符合COFF(Object Common File Format)規(guī)范的PE 文件頭部的字段。提取的數(shù)據(jù)包括時(shí)間戳、目標(biāo)機(jī)器、子系統(tǒng)、鏡像特征、DLL 特征、魔數(shù)、鏡像版本、鏈接器版本、代碼部分字節(jié)數(shù)、文件頭部大小、提交堆的大小。
導(dǎo)入函數(shù)信息。包括文件導(dǎo)入的庫(kù)名以及從導(dǎo)入的庫(kù)中引用的函數(shù)名。使用哈希函數(shù)將每個(gè)名稱字符串轉(zhuǎn)成256或1 024個(gè)二進(jìn)制位數(shù)表示。
導(dǎo)出函數(shù)信息。包括一系列導(dǎo)出函數(shù)的名稱字符串。同樣使用哈希函數(shù),將每個(gè)字符串轉(zhuǎn)成長(zhǎng)為128的二進(jìn)制位串。
節(jié)信息。PE 文件有多個(gè)節(jié),從每個(gè)節(jié)中提取的信息包括節(jié)名、節(jié)大小、節(jié)的熵值、節(jié)的虛擬地址、節(jié)的特征(如是否可寫內(nèi)存)。將節(jié)名使用哈希函數(shù)轉(zhuǎn)為50位串。將節(jié)名分別與節(jié)大小、節(jié)的熵值、節(jié)的虛擬地址配對(duì),并使用哈希函數(shù)分別轉(zhuǎn)為50 位串。將入口節(jié)的特征用哈希函數(shù)分別轉(zhuǎn)為50位串。
數(shù)據(jù)目錄信息。數(shù)據(jù)目錄包括導(dǎo)出表、導(dǎo)入表、資源目錄、異常目錄、安全目錄、重定位基本表、調(diào)試目錄、描述字串、機(jī)器值、TLS 目錄、載入配值目錄、綁定輸入表、導(dǎo)入地址表、延遲載入描述、COΜ 信息。導(dǎo)出每個(gè)數(shù)據(jù)目錄的大小和虛擬地址。
字節(jié)統(tǒng)計(jì)信息。將文件中每個(gè)不同大小的字節(jié)(0~255)出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計(jì),并除以文件總字節(jié)數(shù),進(jìn)行歸一化。
字節(jié)熵的統(tǒng)計(jì)信息。對(duì)文件使用固定大小的滑動(dòng)窗口,將其按一定步長(zhǎng)在文件上滑動(dòng),每滑動(dòng)一步,計(jì)算窗口中的信息熵。在本文的實(shí)驗(yàn)中,滑動(dòng)窗口的大小為2 048 Byte,滑動(dòng)步長(zhǎng)為1 024 Byte。
可打印字符串的統(tǒng)計(jì)信息。選出的每個(gè)字符串需至少包含5個(gè)可打印字符。統(tǒng)計(jì)信息包括字符串總數(shù),字符串平均長(zhǎng)度,每條字符串的出現(xiàn)次數(shù),字符串的信息熵。
將上文所述的文件總體摘要信息、PE頭部信息、導(dǎo)入函數(shù)信息、導(dǎo)出函數(shù)信息、節(jié)信息、數(shù)據(jù)目錄信息、字節(jié)統(tǒng)計(jì)信息、字節(jié)熵的統(tǒng)計(jì)信息、可打印字符串的統(tǒng)計(jì)信息打包,并轉(zhuǎn)為由2 381個(gè)32位浮點(diǎn)數(shù)構(gòu)成的特征向量。其中,提取的各類文件信息對(duì)應(yīng)的浮點(diǎn)數(shù)個(gè)數(shù)如表1所示。
表1 PE文件特征向量概況
本文所述實(shí)驗(yàn)使用易于搭建模型并測(cè)試、編碼較簡(jiǎn)易的Κeras 框架來(lái)搭建惡意軟件檢測(cè)模型,訓(xùn)練模型時(shí)使用Nvidia P100計(jì)算卡做運(yùn)算。
實(shí)驗(yàn)中,首先依文獻(xiàn)[21]所述搭建惡意軟件檢測(cè)器模型DeepΜalNet,并在Ember 數(shù)據(jù)集上訓(xùn)練,使模型收斂。如圖1 為文獻(xiàn)[21]所述檢測(cè)器模型DeepΜalNet 的結(jié)構(gòu)圖,其中包含10 個(gè)全連接層,在每個(gè)全連接層之后,使用BN和Dropout以避免模型過(guò)擬合,同時(shí)加速模型的收斂過(guò)程。模型的詳細(xì)參數(shù)可參考https://github.com/vinayakumarr/dnn-ember。
圖1 DeepΜalNet網(wǎng)絡(luò)結(jié)構(gòu)圖
本文設(shè)計(jì)的檢測(cè)器模型同樣基于DNN,但與Deep-ΜalNet不同的是,本文模型在每個(gè)模塊中先使用BN機(jī)制處理模塊接收的向量,然后使用定向Dropout 算法擇取全連接層中的一部分權(quán)重使其失活,之后才讓數(shù)據(jù)流過(guò)模塊中的全連接層。在定向Dropout中使用的γ 和α參數(shù)大小分別為0.66 和0.75。本文設(shè)計(jì)的檢測(cè)器模型結(jié)構(gòu)如圖2 所示。其中m 表示模塊個(gè)數(shù),在實(shí)驗(yàn)中測(cè)試了擁有10 個(gè)模塊的模型和擁有4 個(gè)模塊的模型的效果,前者各模塊包含的神經(jīng)元數(shù)與DeepΜalNet 相同,后者各模塊包含的神經(jīng)元數(shù)分別為2 381、4 762、2 381、1 024、128。
圖2 本文模型網(wǎng)絡(luò)結(jié)構(gòu)圖
實(shí)驗(yàn)使用Ember數(shù)據(jù)集中的標(biāo)簽為0和1的數(shù)據(jù)各30萬(wàn)條,共60萬(wàn)條數(shù)據(jù),作為訓(xùn)練模型用的數(shù)據(jù)集。使用交叉熵?fù)p失函數(shù)作為模型目標(biāo)優(yōu)化函數(shù),并使用Adam作為梯度下降的優(yōu)化器,設(shè)置其學(xué)習(xí)率為0.01。為了加速模型收斂過(guò)程,防止模型在部分?jǐn)?shù)據(jù)上過(guò)擬合,實(shí)驗(yàn)中將60 萬(wàn)條訓(xùn)練數(shù)據(jù)打散,并設(shè)置模型每一次梯度下降過(guò)程中使用的批的大小為32 768。讓每個(gè)模型在訓(xùn)練集上訓(xùn)練500 epoch(周期),并在每個(gè)epoch后使用測(cè)試集對(duì)模型進(jìn)行驗(yàn)證,計(jì)算并記錄模型在測(cè)試集上的準(zhǔn)確率。將模型在測(cè)試集上的準(zhǔn)確率與epoch的關(guān)系繪制為坐標(biāo)曲線,從而觀察模型的訓(xùn)練情況。
本文在對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行評(píng)估時(shí)采用的度量指標(biāo)包括平均預(yù)測(cè)概率、召回率(模型在惡意軟件樣本集上的預(yù)測(cè))、誤報(bào)率(模型在正常軟件樣本集上的預(yù)測(cè))。所述“平均預(yù)測(cè)概率”即指模型將樣本集中的文件預(yù)測(cè)為惡意的概率的平均值。在本文實(shí)驗(yàn)中,經(jīng)過(guò)訓(xùn)練的惡意軟件檢測(cè)模型可接收一個(gè)二進(jìn)制可執(zhí)行文件的字節(jié)內(nèi)容,運(yùn)算后返回一個(gè)介于0和1的浮點(diǎn)數(shù),數(shù)值越接近1,則表示文件為惡意的概率越大。召回率,或稱“查全率”,表示模型在惡意樣本集中預(yù)測(cè)為“惡意”的樣本數(shù)占惡意樣本集總數(shù)的百分比。誤報(bào)率表示模型在正常樣本集中預(yù)測(cè)為“惡意”的樣本數(shù)占正常樣本集總數(shù)的百分比。本文的實(shí)驗(yàn)分析中未采用二分類機(jī)器學(xué)習(xí)問(wèn)題中常用的準(zhǔn)確率、F1分?jǐn)?shù)以及AUC作為度量指標(biāo),是因?yàn)槭芟抻跍y(cè)試集中有限的正常樣本數(shù)量(本文實(shí)驗(yàn)僅采用39個(gè)正常軟件樣本),這些指標(biāo)并不能準(zhǔn)確反映本文實(shí)驗(yàn)中模型的性能。另外,本文實(shí)驗(yàn)重點(diǎn)關(guān)注模型對(duì)惡意軟件的識(shí)別能力以及面對(duì)加殼文件時(shí)的判別能力,故將平均預(yù)測(cè)概率作為評(píng)價(jià)模型性能的重要指標(biāo)之一。
圖3 各模型在驗(yàn)證集上的準(zhǔn)確率變化情況
在訓(xùn)練過(guò)程中,在完成每一個(gè)測(cè)試步驟后,使用Ember測(cè)試集驗(yàn)證模型的性能。圖3展示了DeepΜalNet以及本文設(shè)計(jì)的模型(分別具有10 個(gè)模塊和4 個(gè)模塊)在前100 個(gè)訓(xùn)練周期中的準(zhǔn)確率變化情況。實(shí)驗(yàn)中,DeepΜalNet 以及本文模型在100 個(gè)訓(xùn)練周期基本達(dá)到穩(wěn)定狀態(tài);在超過(guò)500個(gè)訓(xùn)練周期以后,各模型在Ember測(cè)試集上的準(zhǔn)確率都在0.96左右。
實(shí)驗(yàn)中用Virusshare 惡意樣本集中的59 011 個(gè)惡意PE 文件測(cè)試訓(xùn)練好的模型。表2 展示各個(gè)模型對(duì)Virusshare 樣本集中惡意PE 文件的平均預(yù)測(cè)概率,表3則展示各模型在不同閾值下在Virusshare 上的查全率。實(shí)驗(yàn)中還將閾值與預(yù)測(cè)概率大于某個(gè)閾值的文件數(shù)量的對(duì)應(yīng)關(guān)系繪制成坐標(biāo)曲線,如圖4 所示,該曲線在第一象限與縱軸和橫軸圍成的面積越大,則說(shuō)明檢測(cè)器模型對(duì)惡意PE 文件的識(shí)別效果更好。從結(jié)果上看,本文模型對(duì)惡意PE 文件的平均打分更高,打分為1.0 的PE文件數(shù)量比DeepΜalNet 多出20 000 個(gè),這意味著在設(shè)置盡可能高的閾值的情況下,相比DeepΜalNet,本文設(shè)計(jì)的檢測(cè)器模型能檢測(cè)出更多的惡意PE文件。分析其中原因,是因?yàn)楸疚哪P褪褂枚ㄏ駾ropout 方法削弱了許多不重要的權(quán)重,減少了不必要的隱藏特征對(duì)判別過(guò)程的干擾,而DeepΜalNet使用普通Dropout方法則僅僅是讓模型不過(guò)度依賴于部分節(jié)點(diǎn),從而防止過(guò)擬合。可以說(shuō),本文模型在經(jīng)過(guò)訓(xùn)練后得到了一個(gè)最優(yōu)子網(wǎng)絡(luò)。
表2 DeepΜalNet和本文模型Μt在Virusshare和lynx-project上的平均預(yù)測(cè)概率
表3 DeepΜalNet和本文模型Μt在Virusshare上的查全率
圖4 各模型的閾值與正例數(shù)關(guān)系
實(shí)驗(yàn)中還使用了lynx-project正常樣本集的39個(gè)善意PE文件對(duì)幾個(gè)訓(xùn)練好的模型進(jìn)行測(cè)試。表2給出這些模型對(duì)lynx-project的平均預(yù)測(cè)概率,表4展示各模型在不同閾值下在lynx-project 上的誤報(bào)率。實(shí)驗(yàn)結(jié)果顯示,DeepΜalNet 對(duì)這39 個(gè)樣本給出的平均預(yù)測(cè)概率為0.95,其中預(yù)測(cè)概率大于0.90 的樣本達(dá)到34 個(gè),誤報(bào)率十分大。相應(yīng)地,本文模型對(duì)lynx-project的平均預(yù)測(cè)概率為0.31,比DeepΜalNet 在lynx-project 上的平均預(yù)測(cè)概率小0.64。前文已述,lynx-project樣本集中的可執(zhí)行文件皆采用過(guò)Themida等加殼工具進(jìn)行加殼,而這些加殼工具及其變種通常也被用于為惡意軟件加殼??蓤?zhí)行文件在經(jīng)過(guò)加殼工具的混淆操作后,其原始程序代碼成為高熵值的字節(jié)序列,除了PE文件頭、脫殼存根程序以及某些未經(jīng)過(guò)混淆處理的節(jié)外,其中基本已無(wú)可用于分析文件善惡的信息。實(shí)驗(yàn)分析認(rèn)為,由于訓(xùn)練后的DeepΜalNet 將被加殼的可執(zhí)行文件的一些共同特征(比如高字節(jié)熵值)作為將文件判定為惡意軟件的重要特征并賦予較高權(quán)重,或者說(shuō),由于其未將被加殼文件的這些相關(guān)特征的權(quán)重降低,導(dǎo)致其對(duì)lynx-project中的大多數(shù)被加殼文件的預(yù)測(cè)結(jié)果十分接近于1。而本文模型在訓(xùn)練過(guò)程中不斷削弱范數(shù)較小的權(quán)重,從而達(dá)到精煉特征的效果,因而降低了加殼文件的一些共有特征對(duì)本文模型判別可執(zhí)行文件善惡的影響。該實(shí)驗(yàn)結(jié)果進(jìn)一步表明本文模型相較DeepΜalNet 更好地避免了過(guò)擬合。
表4 DeepΜalNet和本文模型Μt在lynx-project上的誤報(bào)率
根據(jù)以上實(shí)驗(yàn)結(jié)果可知,相比同樣采用Ember訓(xùn)練集進(jìn)行訓(xùn)練的DeepΜalNet 模型,本文設(shè)計(jì)的惡意軟件檢測(cè)模型在Ember訓(xùn)練集上訓(xùn)練后,其在Ember驗(yàn)證集上的準(zhǔn)確率與DeepΜalNet同為0.96。在泛化能力的測(cè)試中,相比DeepΜalNet,本文模型對(duì)Virusshare 惡意PE樣本集的平均預(yù)測(cè)概率提高0.048,對(duì)lynx-project 正常PE樣本集的平均預(yù)測(cè)概率降低0.64。實(shí)驗(yàn)結(jié)果表明本文設(shè)計(jì)的模型相比DeepΜalNet 模型具有更好的泛化能力。
本文針對(duì)常用的惡意軟件檢測(cè)模型存在的泛化能力較差的問(wèn)題,提出一種改進(jìn)的基于DNN 的惡意軟件檢測(cè)方法,在模型中引進(jìn)定向Dropout 方法對(duì)模型權(quán)重進(jìn)行剪枝,弱化重要性較低的權(quán)重,減少它們對(duì)模型預(yù)測(cè)過(guò)程的影響。與同樣基于DNN且使用Ember作為訓(xùn)練數(shù)據(jù)集的DeepΜalNet 相比,本文方法不僅在Ember數(shù)據(jù)集上有同樣高的驗(yàn)證準(zhǔn)確率,且在使用別的樣本集做測(cè)試時(shí),本文方法的查全率更高而誤報(bào)率更低。結(jié)果表明,本文方法的模型泛化性更好,而更好的泛化能力能讓模型避免為應(yīng)對(duì)新惡意軟件而過(guò)于頻繁地重訓(xùn)練。
未來(lái)的工作中,需對(duì)本文提及的對(duì)二進(jìn)制可執(zhí)行文件的預(yù)處理方法進(jìn)行改進(jìn),以提取更多有助于模型識(shí)別惡意軟件的特征,同時(shí)需探索更優(yōu)模型結(jié)構(gòu),進(jìn)一步提高模型的預(yù)測(cè)準(zhǔn)確率,并保證模型具有良好的泛化性和魯棒性。