陳佳捷,彭伯莊,吳佩澤
(中國(guó)南方電網(wǎng)數(shù)字電網(wǎng)研究院有限公司,廣州 510000)
互聯(lián)網(wǎng)的快速崛起給網(wǎng)絡(luò)空間帶來新的發(fā)展機(jī)遇,但同時(shí)也帶來越來越嚴(yán)重的網(wǎng)絡(luò)安全問題。高速互聯(lián)網(wǎng)在實(shí)現(xiàn)設(shè)備與服務(wù)互連的同時(shí),也為網(wǎng)絡(luò)黑客從海外實(shí)施遠(yuǎn)程匿名攻擊提供了便捷途徑,在目前網(wǎng)絡(luò)安全犯罪成本較低的情況下,黑客在各類社交網(wǎng)絡(luò)傳播惡意代碼的頻率逐年升高。惡意代碼由攻擊者創(chuàng)建旨在損害網(wǎng)絡(luò)系統(tǒng)安全性或泄露被攻擊者隱私信息,其包括蠕蟲病毒、特洛伊木馬等常見的計(jì)算機(jī)病毒,以及間諜軟件、廣告軟件和行為記錄軟件等惡意軟件。目前,惡意代碼的數(shù)量正在呈爆發(fā)性增長(zhǎng)。根據(jù)卡巴斯基報(bào)告[1],2019 年第一季度,網(wǎng)站META 區(qū)域受到加密挖掘惡意軟件、網(wǎng)絡(luò)釣魚和勒索軟件等持續(xù)攻擊,該季度惡意軟件攻擊超過1.5億次,平均每天達(dá)到160萬次,相較2018年第一季度增長(zhǎng)108%。
惡意代碼的檢測(cè)方法主要包括基于簽名的檢測(cè)方法、啟發(fā)式檢測(cè)方法以及行為式檢測(cè)方法等,其中基于簽名的檢測(cè)方法應(yīng)用最為廣泛。該方法主要基于模式匹配的思想,為每種已知惡意代碼產(chǎn)生一個(gè)唯一的簽名特征標(biāo)記并創(chuàng)建惡意代碼庫,通過將未知代碼的簽名特征與惡意代碼庫進(jìn)行對(duì)比來識(shí)別惡意代碼。其檢測(cè)速度較快且準(zhǔn)確率高,但對(duì)于未出現(xiàn)過的病毒無法進(jìn)行檢測(cè)。此外,大量惡意軟件為避免被查殺進(jìn)行加殼和混淆處理,增大了其檢測(cè)與識(shí)別難度。
針對(duì)上述問題,本文提出一種結(jié)合動(dòng)態(tài)行為和機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法。建立自動(dòng)化分析Cuckoo 沙箱[2]解析惡意代碼網(wǎng)絡(luò)日志以獲取其行為信息,將Cuckoo 沙箱和改進(jìn)DynamoRIO 系統(tǒng)相結(jié)合作為虛擬環(huán)境,提取惡意代碼樣本應(yīng)用程序接口(Application Programming Interface,API)調(diào)用序列特征以全面獲取其文件操作、進(jìn)程操作和注冊(cè)表操作等行為信息,并基于雙向門循環(huán)單元(Bidirectional Gated Recurrent Unit,BGRU)網(wǎng)絡(luò)構(gòu)建惡意代碼檢測(cè)模型。
對(duì)惡意代碼的有效檢測(cè)是保證網(wǎng)絡(luò)空間安全的重要手段,現(xiàn)有惡意代碼檢測(cè)方法主要包括基于靜態(tài)的檢測(cè)方法和基于動(dòng)態(tài)的檢測(cè)方法。在基于靜態(tài)的檢測(cè)方法中,利用簽名的惡意代碼檢測(cè)方法應(yīng)用最廣泛,其主要采用預(yù)定義的方式進(jìn)行防護(hù),雖然可識(shí)別通用應(yīng)用程序中的惡意軟件,但需要對(duì)簽名數(shù)據(jù)庫進(jìn)行定期維護(hù)。目前,基于機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法還使用了操作碼特征[3]與二進(jìn)制文件特征。文獻(xiàn)[4]基于操作碼序列以可執(zhí)行文件向量來表示惡意軟件,并采用機(jī)器學(xué)習(xí)算法檢測(cè)惡意代碼。文獻(xiàn)[5]基于n-gram 和SVDD 技術(shù)提出一種未知惡意代碼檢測(cè)方法SSPV-SVDD,其對(duì)單個(gè)惡意代碼家族的識(shí)別準(zhǔn)確率達(dá)到97%。文獻(xiàn)[6]提出一種基于可執(zhí)行文件加殼算法的分類方法來檢測(cè)惡意代碼,先縮放給定可執(zhí)行文件的熵值,將特定存儲(chǔ)位置的熵值轉(zhuǎn)換為符號(hào)表示,再使用樸素貝葉斯和支持向量機(jī)檢測(cè)加殼算法并對(duì)符號(hào)分布進(jìn)行分類,該方法的準(zhǔn)確率和查全率分別達(dá)到95.35%和95.83%。文獻(xiàn)[7-8]采用可視化方法將惡意代碼轉(zhuǎn)換為圖像并使用神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,成功對(duì)惡意代碼進(jìn)行分類。
靜態(tài)二進(jìn)制檢測(cè)方法在很大程度上受到混淆技術(shù)限制,雖然簡(jiǎn)單混淆的代碼在一定程度上能被檢測(cè),但現(xiàn)有檢測(cè)方法在處理混淆代碼時(shí)存在NP 難題[9]。由于動(dòng)態(tài)檢測(cè)方法能有效檢測(cè)惡意樣本的行為信息,因此對(duì)于惡意代碼動(dòng)態(tài)檢測(cè)技術(shù)的研究受到廣泛關(guān)注。文獻(xiàn)[10]提出一種惡意軟件檢測(cè)算法,利用目標(biāo)可執(zhí)行文件的動(dòng)態(tài)收集所得指令跟蹤記錄來構(gòu)建子圖表示馬爾可夫鏈,創(chuàng)建指令跟蹤圖間的相似度矩陣,并將其發(fā)送到支持向量機(jī)進(jìn)行分類。文獻(xiàn)[11]采用動(dòng)態(tài)指令序列n-gram 提取特征,利用K 均值算法與EM 聚類算法對(duì)惡意代碼進(jìn)行分類,實(shí)驗(yàn)結(jié)果表明EM 聚類算法優(yōu)于K 均值算法,且兩種算法的分類精度均超過90%。
網(wǎng)絡(luò)行為是影響惡意樣本動(dòng)態(tài)行為的重要因素。目前基于網(wǎng)絡(luò)行為的惡意代碼檢測(cè)主要采用傳統(tǒng)方法,即由人工設(shè)計(jì)特征字段,通過頻數(shù)統(tǒng)計(jì)方式提取特征,并構(gòu)建傳統(tǒng)機(jī)器學(xué)習(xí)模型或卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)模型進(jìn)行分類。文獻(xiàn)[12]提出端到端的監(jiān)督學(xué)習(xí)模型,從不同協(xié)議和網(wǎng)絡(luò)流量層中提取多類特征,通過計(jì)算得到特征向量來檢測(cè)惡意軟件。除此之外,文獻(xiàn)[13]將流量數(shù)據(jù)視為圖像并提出一種基于CNN 的惡意軟件流量分類方法,將表示學(xué)習(xí)方法應(yīng)用于惡意軟件流量分類。本文基于API 調(diào)用序列及網(wǎng)絡(luò)行為來提取特征,采用詞嵌入方式將網(wǎng)絡(luò)流量轉(zhuǎn)換為語句向量,并構(gòu)建BGRU 深度學(xué)習(xí)模型對(duì)惡意代碼進(jìn)行檢測(cè)。
本文提出一種結(jié)合動(dòng)態(tài)行為和機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法,其流程如圖1 所示。為全面記錄惡意代碼的行為信息,先構(gòu)建Cuckoo 沙箱和DynamoRIO 系統(tǒng)獲取動(dòng)態(tài)行為,再針對(duì)惡意代碼樣本的API 調(diào)用序列與網(wǎng)絡(luò)行為提取并融合特征,得到對(duì)應(yīng)的特征向量并以此訓(xùn)練BGRU 分類模型,從而實(shí)現(xiàn)對(duì)惡意代碼的檢測(cè)。
圖1 本文方法的流程Fig.1 Procedure of the proposed method
安全分析人員利用動(dòng)態(tài)沙箱技術(shù)可從實(shí)際行為中分析并檢測(cè)出惡意代碼,并有效降低誤報(bào)率。CWSandbox、Anubis、BitBlaze、Norman 以及ThreatExpert等分析系統(tǒng)利用動(dòng)態(tài)插樁技術(shù)實(shí)現(xiàn)了對(duì)惡意樣本行為的有效監(jiān)控。因此,本文結(jié)合沙箱技術(shù)與動(dòng)態(tài)插樁技術(shù)分析記錄樣本的行為信息。
本文采用Cuckoo 沙箱技術(shù)和DynamoRIO 系統(tǒng)動(dòng)態(tài)二進(jìn)制插樁工具來獲得樣本行為信息。Cuckoo沙箱和DynamoRIO 系統(tǒng)獲取惡意代碼樣本API 序列信息的機(jī)制不同。Cuckoo 沙箱技術(shù)是一種封閉式沙箱技術(shù),Cuckoo 沙箱可將二進(jìn)制樣本置于虛擬環(huán)境中自動(dòng)化運(yùn)行并記錄其API 序列信息與網(wǎng)絡(luò)通信信息。為解決惡意代碼的反調(diào)試問題,本文對(duì)Cuckoo 沙箱源碼的vmdetect.yar 規(guī)則進(jìn)行改進(jìn),從而獲取API 序列信息及網(wǎng)絡(luò)通信信息,同時(shí)避免惡意代碼檢測(cè)出虛擬環(huán)境而停止運(yùn)行。DynamoRIO 系統(tǒng)是一種有效的二進(jìn)制插樁工具,其較Pin 運(yùn)行速度更快。本文以基本塊為單位,對(duì)各類指令進(jìn)行分析,并基于回調(diào)機(jī)制對(duì)DynamoRIO 系統(tǒng)進(jìn)行完善,使其能獲取完整的API 序列調(diào)用信息,通過將Cuckoo 沙箱和DynamoRIO 系統(tǒng)相結(jié)合,以更全面地獲取惡意代碼樣本行為信息。
2.2.1 Cuckoo 沙箱
Cuckoo 沙箱是Google 公司開發(fā)的一個(gè)開源的自動(dòng)化惡意代碼分析系統(tǒng),可分析office 文檔、pdf 文件、可執(zhí)行文件以及電子郵件等多種文件類型,能用于Windows、Linux 和Android 等系統(tǒng)的惡意軟件檢測(cè),其結(jié)構(gòu)如圖2 所示。Cuckoo 沙箱由一個(gè)處于核心位置的主機(jī)(中央管理軟件)和多個(gè)Guest 計(jì)算機(jī)(用于分析的虛擬或物理計(jì)算機(jī))組成。主機(jī)是沙箱運(yùn)行的核心組件,主要負(fù)責(zé)樣本執(zhí)行與分析過程的調(diào)度以及Guest 計(jì)算機(jī)的管理。Guest 計(jì)算機(jī)處于隔離環(huán)境,每次樣本分析都會(huì)從一個(gè)處于純凈狀態(tài)的快照開始,可保證惡意代碼樣本被安全地執(zhí)行與分析,從而確保分析的正確性,避免多個(gè)分析之間的相互干擾。
圖2 Cuckoo 沙箱結(jié)構(gòu)Fig.2 Cuckoo sandbox structure
采用Cuckoo 沙箱運(yùn)行惡意代碼樣本后,可獲得以下信息:1)惡意代碼內(nèi)部函數(shù)與Windows API 調(diào)用跟蹤信息(API 日志);2)惡意代碼執(zhí)行期間文件創(chuàng)建、刪除與下載的操作信息;3)以PCAP 形式對(duì)惡意代碼網(wǎng)絡(luò)行為的跟蹤信息(網(wǎng)絡(luò)日志);4)惡意代碼樣本的靜態(tài)數(shù)據(jù)以及釋放文件的行為信息;5)程序執(zhí)行期間桌面操作截圖;6)文件操作、注冊(cè)表操作、互斥操作和服務(wù)操作等系統(tǒng)操作信息;7)機(jī)器全內(nèi)存空間的轉(zhuǎn)儲(chǔ)信息。
惡意代碼通常具有反調(diào)試功能,為有效記錄惡意代碼樣本的行為信息,本文對(duì)Cuckoo 沙箱源碼的vmdetect.yar 規(guī)則文件改進(jìn)如下:
由Cuckoo 沙箱可得到存儲(chǔ)格式為json 的惡意代碼樣本行為信息報(bào)告。此外,為進(jìn)一步提取樣本動(dòng)態(tài)特征,本文基于FakeNet 模擬網(wǎng)絡(luò)環(huán)境,將Cuckoo 沙箱記錄的網(wǎng)絡(luò)日志以pcap 格式進(jìn)行存儲(chǔ),作為惡意代碼樣本的網(wǎng)絡(luò)行為報(bào)告。
2.2.2 DynamoRIO 系統(tǒng)
由于目前惡意代碼大部分已采用抗檢測(cè)技術(shù),當(dāng)檢測(cè)到虛擬環(huán)境或沙箱時(shí)會(huì)隱藏自身惡意行為,或者采用反Hook 及繞過API 層直接調(diào)用系統(tǒng)的方式,導(dǎo)致采用動(dòng)態(tài)檢測(cè)方法分析API 記錄時(shí)出現(xiàn)漏報(bào)或誤報(bào)。
DynamoRIO[14]是一種代碼運(yùn)行控制系統(tǒng),該系統(tǒng)高效透明且控制全面,能有效監(jiān)控應(yīng)用程序中每個(gè)已執(zhí)行的指令。DynamoRIO 系統(tǒng)也是一個(gè)跨平臺(tái)的二進(jìn)制檢測(cè)平臺(tái),可適用于移植性程序。由于DynamoRIO 系統(tǒng)采用回調(diào)機(jī)制處理二進(jìn)制可執(zhí)行代碼,因此通過設(shè)置回調(diào),可利用DynamoRIO 系統(tǒng)輕松操控目標(biāo)程序的二進(jìn)制可執(zhí)行代碼。
本文對(duì)DynamoRIO 系統(tǒng)的drstrace 和drltrace 進(jìn)行改進(jìn),進(jìn)而獲取二進(jìn)制程序的行為信息,具體流程如圖3 所示。改進(jìn)后的DynamoRIO 系統(tǒng)以基本塊為單位分析各指令,并對(duì)調(diào)用指令類型進(jìn)行判斷。如果屬于系統(tǒng)調(diào)用,則分別采用drsys_syscall_name()函數(shù)和drsys_iterate_args()函數(shù)獲取系統(tǒng)調(diào)用的名稱與參數(shù)信息;如果屬于API 調(diào)用,則分別采用dr_module_preferred_name()函數(shù)和drwrap_get_arg()函數(shù)獲取API 調(diào)用的名稱與參數(shù)信息。參數(shù)按照類型分為直接參數(shù)和間接參數(shù)兩種。直接參數(shù)可從函數(shù)的棧中直接獲取,例如立即數(shù)。間接參數(shù)需要根據(jù)函數(shù)棧中的地址間接尋址,從內(nèi)存讀取參數(shù)信息。本文將DynamoRIO 系統(tǒng)作為提取惡意代碼樣本行為信息的補(bǔ)充實(shí)驗(yàn)環(huán)境,并使用FakeNet 模擬網(wǎng)絡(luò)環(huán)境。
圖3 DynamoRIO 系統(tǒng)操作流程Fig.3 Operation procedure of DynamoRIO system
本節(jié)對(duì)上文中得到的行為信息進(jìn)行特征提取并向量化(將API 序列轉(zhuǎn)換為數(shù)字向量,用于分類模型輸入)。惡意代碼樣本的行為信息表現(xiàn)在文件、進(jìn)程、注冊(cè)表以及網(wǎng)絡(luò)等方面。而API 調(diào)用序列可表征惡意代碼樣本的文件操作、進(jìn)程操作和注冊(cè)表操作等。例如,修改注冊(cè)表通常需要通過RegOpenKey Ex、RegSetValue、RegCloseKey 3 個(gè)API 調(diào)用組合來實(shí)現(xiàn)。因此,可利用這種API 調(diào)用組合來提取特征,從而得到惡意代碼樣本的文件操作、進(jìn)程操作和注冊(cè)表操作等信息。此外,還可通過Cuckoo 沙箱獲取惡意代碼樣本的網(wǎng)絡(luò)日志,進(jìn)而得到其網(wǎng)絡(luò)行為信息。為全面描述惡意代碼樣本的行為信息,本文從API調(diào)用序列和網(wǎng)絡(luò)行為兩方面提取特征。
2.3.1 API 調(diào)用序列
本文基于API 調(diào)用序列執(zhí)行特征向量化。為了更有效地記錄惡意代碼樣本的行為記錄,在向量化之前,先對(duì)Cuckoo 沙箱報(bào)告進(jìn)行分析。Cuckoo 沙箱的分析日志以json 格式存儲(chǔ),并通過調(diào)用來提取進(jìn)程記錄的順序信息。在Cuckoo 沙箱報(bào)告中,API 調(diào)用序列存儲(chǔ)于behavior/processes/calls 字段下,可根據(jù)processtree 字段繪制進(jìn)程調(diào)用樹,并結(jié)合processes/calls字段解析得到Cuckoo 沙箱的API 執(zhí)行序列。然后對(duì)DynamoRIO 系統(tǒng)報(bào)告進(jìn)行分析,從中提取API 信息,并將此結(jié)果與Cuckoo 沙箱的結(jié)果進(jìn)行合并。
程序在執(zhí)行過程中會(huì)多次循環(huán)調(diào)用相同的API序列以執(zhí)行同一命令。由于本文目標(biāo)是通過提取API 調(diào)用序列來檢測(cè)惡意代碼,因此無需大量重復(fù)的API 調(diào)用?;诖耍疚娜サ袅巳哂嗟腁PI 調(diào)用序列,然后將其向量化。圖4 為惡意代碼樣本報(bào)告中API提取示例(md5:ffff3f7dad938ac9c8cb2d2d4e25a310)。惡意代碼樣本根據(jù)calls 中的API 提取序列信息,并重復(fù)調(diào)用GetFileType(見方框處)。因此,本文將該冗余API 信息刪除。
圖4 惡意代碼樣本報(bào)告中API 提取示例Fig.4 Examples of API extraction in malicious code sample report
本文使用Word2vec[15]將API 序列全部轉(zhuǎn)換為數(shù)字向量。Word2Vec 由兩層神經(jīng)網(wǎng)絡(luò)組成,是Google公司于2013 年所推出用于構(gòu)建單詞向量的工具。單詞向量是在文檔中供計(jì)算機(jī)處理的單詞數(shù)值向量。將文本語料庫輸入Word2Vec 中,輸出即為文本語料庫中每個(gè)單詞的向量。與TF-IDF 等傳統(tǒng)單詞向量構(gòu)造方法相比,Word2Vec 構(gòu)造的單詞向量包含更豐富的語義信息(具有相似語義的單詞,其詞向量表現(xiàn)出高度的相似性)。本文通過Word2Vec 將API序列轉(zhuǎn)換為固定長(zhǎng)度的向量,并將向量長(zhǎng)度設(shè)置為50。
2.3.2 網(wǎng)絡(luò)行為信息
為解析網(wǎng)絡(luò)日志數(shù)據(jù)包pcap 文件,提取其特征并將其向量化后輸入神經(jīng)網(wǎng)絡(luò),本文基于文本分類的思想(不考慮文檔整體,以文檔中段落和語句為處理對(duì)象),對(duì)網(wǎng)絡(luò)流量進(jìn)行處理。
首先對(duì)pcap 文件進(jìn)行解析,將其中的數(shù)據(jù)包作為處理對(duì)象,并根據(jù)每個(gè)數(shù)據(jù)包構(gòu)造關(guān)鍵語句(特征向量),語句中每個(gè)單詞均為數(shù)據(jù)包中的一個(gè)字段。然后利用詞嵌入方法[16]從該語句中提取語義和語法特征。由于段落的語義通??捎申P(guān)鍵語句決定,因此本文選擇語句(數(shù)據(jù)包)的語義,而不是整個(gè)段落(網(wǎng)絡(luò)流)的語義。此外,每個(gè)數(shù)據(jù)包固有的字段順序起到類似語法規(guī)則的作用,這些語法規(guī)則對(duì)于構(gòu)建惡意數(shù)據(jù)流量(基于簽名的檢測(cè))或構(gòu)建數(shù)據(jù)良性流量(異常檢測(cè))的語句模式起到?jīng)Q定性作用。值得注意的是,根據(jù)單個(gè)或多個(gè)數(shù)據(jù)包的行為和特征可以判斷是否為惡意數(shù)據(jù)流量,因此這種基于數(shù)據(jù)包的語句特征提取方式可用于惡意代碼樣本的判定。
通常,每個(gè)數(shù)據(jù)包的字段為1 個(gè)字節(jié)的數(shù)據(jù)包頭、數(shù)據(jù)包頭的1 個(gè)字段或者有效載荷的數(shù)據(jù)塊。本文將數(shù)據(jù)包頭中的字段視為1 個(gè)單詞,由于數(shù)據(jù)包中字段長(zhǎng)度不同,因此得到的單詞長(zhǎng)度也不同。將數(shù)據(jù)包中字段長(zhǎng)度固定為n個(gè)字節(jié),如果數(shù)據(jù)包中字段長(zhǎng)度小于n個(gè)字節(jié),則將其用零填充,具體如圖5 所示。由于大部分TCP 數(shù)據(jù)包含有14 個(gè)字節(jié)的MAC 報(bào)頭、20 個(gè)字節(jié)的IP 報(bào)頭和20 個(gè)字節(jié)的TCP報(bào)頭[17],因此本文設(shè)置n=54。
圖5 數(shù)據(jù)流量向量化示意圖Fig.5 Schematic diagram of data flow vectorization
由于API 調(diào)用序列及網(wǎng)絡(luò)流量中數(shù)據(jù)包信息均具有前后關(guān)系,因此經(jīng)過特征提取與向量化處理后,特征向量也具有前后依賴關(guān)系,這與人腦思維類似。例如,人們閱讀文章時(shí)能在理解前文所閱讀單詞的基礎(chǔ)上理解當(dāng)前閱讀的單詞。循環(huán)神經(jīng)網(wǎng)絡(luò)[18](Recurrent Neural Network,RNN)具有遞歸結(jié)構(gòu),可以連續(xù)保留先前的信息,但是隨著時(shí)間的延長(zhǎng),其會(huì)失去保存與處理信息的能力,且存在梯度消失的問題。對(duì)此,研究人員提出RNN 的特殊選擇方法,其中最具代表性的是LSTM[19]和GRU[20],這兩種方法均可通過門控機(jī)制獲取長(zhǎng)期的依賴關(guān)系。GRU 結(jié)構(gòu)更簡(jiǎn)單且計(jì)算復(fù)雜度更低,其運(yùn)行速度要快于LSTM[21]。
具體而言,兩個(gè)關(guān)鍵模塊構(gòu)成基于GRU 的網(wǎng)絡(luò)。一個(gè)模塊是包含第j個(gè)GRU 隱藏單元且具有相應(yīng)權(quán)重矩陣Wr和Ur的復(fù)位門。當(dāng)復(fù)位門關(guān)閉(=0)時(shí),先前狀態(tài)ht-1被忽略,當(dāng)前隱藏狀態(tài)ht僅由當(dāng)前輸入xt來定義,這表示可能丟棄全部對(duì)當(dāng)前隱藏狀態(tài)無用的信息。另一個(gè)模塊是更新門其被設(shè)計(jì)為利用相應(yīng)權(quán)重矩陣Wz和Uz來調(diào)節(jié)由先前狀態(tài)ht-1傳輸?shù)疆?dāng)前隱藏狀態(tài)ht的信息的傳輸權(quán)重。為基于先前狀態(tài)ht-1和當(dāng)前輸入xt的候選激活態(tài),其相應(yīng)的權(quán)重矩陣為Wh和Uh。
第j個(gè)GRU 隱藏單元的整個(gè)數(shù)據(jù)流量計(jì)算公式如下所示:
其中:σ(·)為sigmoid 激活函數(shù),本文中σ(x)=(x∈?);tanh(·)為雙曲正切函數(shù),本文中tanh(x)=(x∈?);⊙為Hadamard 乘積,也稱逐元素乘積,表示兩個(gè)矩陣相應(yīng)元素的乘積。
在提取單詞的語義特征時(shí),未來信息與語句S中的歷史信息同樣重要,而上述基于正序的體系結(jié)構(gòu)僅考慮了歷史信息。對(duì)此,本文使用BGRU 網(wǎng)絡(luò),該網(wǎng)絡(luò)引入一個(gè)未來層解決上述問題,其結(jié)構(gòu)如圖6所示。在未來層中,數(shù)據(jù)的輸入順序與輸入層相反。BGRU 網(wǎng)絡(luò)使用兩個(gè)隱藏層分別從過去和未來提取信息,這兩個(gè)隱藏層連接到同一個(gè)輸出層,BGRU 網(wǎng)絡(luò)充分利用了輸入序列的上下文信息。
圖6 BGRU 網(wǎng)絡(luò)結(jié)構(gòu)Fig.6 BGRU network structure
本文分類模型的結(jié)構(gòu)如圖7 所示。其中,左GRU 層通過饋送語句S的正序來學(xué)習(xí)當(dāng)前輸入xt的歷史信息,而右GRU 層通過饋送語句S的逆序來獲得當(dāng)前輸入xt的未來信息。
圖7 本文分類網(wǎng)絡(luò)結(jié)構(gòu)Fig.7 Structure of the proposed classification network
語句S第i個(gè)單詞最終輸出的表達(dá)式如下:
本文通過RNN 模型分別學(xué)習(xí)到API_Cuckoo(從Cuckoo 沙箱中提取的API)、API_DynamoRIO(從DynamoRIO 系統(tǒng)提取的API)和Net_pcap(網(wǎng)絡(luò)流量pcap 包)3 種序列特征。由于這3 種序列特征均具有前后依賴的關(guān)系,因此本文采用雙向的BGRU 網(wǎng)絡(luò)作為分類網(wǎng)絡(luò),其可以利用輸入序列的上下文信息更好地學(xué)習(xí)序列特征的依賴關(guān)系。在圖7 中,先將序列按前向順序輸入GRU 層得到前向輸入隱藏層信息h_forward,再將序列按后向順序輸入GRU 層得到后向輸入隱藏層信息h_backward,然后將兩者結(jié)合后作為BGRU 的輸出。通過BGRU 網(wǎng)絡(luò),本文學(xué)習(xí)到API_Cuckoo、API_DynamoRIO 和Net_pcap 3 種序列特征,然后通過Concat 拼接輸出向量,最終基于全連接層和Softmax 層得到檢測(cè)結(jié)果。
本文結(jié)合Cuckoo 沙箱和改進(jìn)DynamoRIO 系統(tǒng)作為虛擬環(huán)境,對(duì)惡意代碼樣本的API 調(diào)用序列及網(wǎng)絡(luò)行為特征進(jìn)行提取與融合,以全面獲取惡意代碼文本的行為信息。為構(gòu)建神經(jīng)網(wǎng)絡(luò)模型,選擇系統(tǒng)的開發(fā)框架為pytorch[22],開發(fā)語言為python 3.6。實(shí)驗(yàn)環(huán)境為Ubuntu 18.04.2 LTS 操作系統(tǒng),NVIDIA GeForce GTX 1080 GPU 和8 GB 內(nèi)存。
本文構(gòu)建包含大量樣本的數(shù)據(jù)集以對(duì)所提方法進(jìn)行有效評(píng)估,數(shù)據(jù)集所用惡意代碼樣本來自惡意軟件樣本的公開存儲(chǔ)庫VirusShare,良性應(yīng)用程序樣本來自經(jīng)過安全檢查的Windows 7 操作系統(tǒng)平臺(tái),包括常見的exe、DLL 等PE 格式文件。數(shù)據(jù)集共有18 153 個(gè)樣本,其中包含12 170 個(gè)惡意代碼樣本和5 983 個(gè)良性應(yīng)用程序樣本。
為確保惡意代碼樣本標(biāo)簽的可信度,通過在線病毒掃描網(wǎng)站Virustotal 將惡意代碼樣本與反病毒引擎的標(biāo)簽進(jìn)行標(biāo)記(在Virustotal 中通過調(diào)用相關(guān)API 進(jìn)行樣本上傳,每個(gè)樣本平均被58 個(gè)反病毒引擎掃描)。為保證樣本標(biāo)簽的準(zhǔn)確性,以大量反病毒引擎的掃描結(jié)果為篩選依據(jù),根據(jù)惡意性判定頻率篩選惡意代碼樣本。本文實(shí)驗(yàn)頻率閾值設(shè)定為0.8,僅保留超過80%反病毒引擎判定為惡意性的惡意樣本,良性應(yīng)用程序樣本均完全通過Virustotal 網(wǎng)站的惡意性檢測(cè)。
在本文實(shí)驗(yàn)中,使用準(zhǔn)確率(A)、精確率(P)、召回率(R)以及F1 值作為分類模型的性能評(píng)價(jià)指標(biāo)。在分類問題中,度量指標(biāo)的混淆矩陣由TP、TN、FP和FN 4 個(gè)值構(gòu)成,其中:TP 表示將正類樣本預(yù)測(cè)為正的數(shù)量;TN 表示將負(fù)類樣本預(yù)測(cè)為負(fù)的數(shù)量;FP 表示將負(fù)類樣本預(yù)測(cè)為正的數(shù)量;FN 表示將正類樣本預(yù)測(cè)為負(fù)的數(shù)量。
4)F1 值。精確率與召回率之間常出現(xiàn)矛盾,F(xiàn)1 值是兩者的綜合,被定義為精確率與召回率的調(diào)和平均值,即當(dāng)參數(shù)α為1 時(shí),即為F1 值的常見形式,即F1 值越高說明模型分類性能越好。
為評(píng)估本文方法的有效性以及參數(shù)設(shè)置對(duì)實(shí)驗(yàn)結(jié)果的影響,以下分別進(jìn)行隱含層節(jié)點(diǎn)數(shù)的選擇實(shí)驗(yàn)、消融實(shí)驗(yàn)以及模型對(duì)比實(shí)驗(yàn)。
3.3.1 隱含層節(jié)點(diǎn)數(shù)的選擇實(shí)驗(yàn)
BGRU 較BLSTM 結(jié)構(gòu)更簡(jiǎn)單且計(jì)算復(fù)雜度更低,其隱含層節(jié)點(diǎn)數(shù)對(duì)模型的復(fù)雜度和分類效果有一定的影響。本文基于樣本API 調(diào)用序列與網(wǎng)絡(luò)行為的融合特征對(duì)模型進(jìn)行訓(xùn)練,并通過選擇實(shí)驗(yàn)得到隱含層節(jié)點(diǎn)數(shù)分別為50、100、150 和200 時(shí)本文模型的準(zhǔn)確率、精確率、召回率以及F1 值,結(jié)果如表1所示??梢钥闯觯?dāng)隱層結(jié)點(diǎn)數(shù)為100 時(shí),模型各指標(biāo)均為最優(yōu),其原因是當(dāng)隱層結(jié)點(diǎn)數(shù)過少時(shí),網(wǎng)絡(luò)不具有必要的學(xué)習(xí)能力和信息處理能力。當(dāng)隱層結(jié)點(diǎn)數(shù)過多時(shí),網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜性大幅增加,網(wǎng)絡(luò)在學(xué)習(xí)過程中更易陷入局部極小點(diǎn)且學(xué)習(xí)速度減慢。因此,本文設(shè)置隱含層節(jié)點(diǎn)為100。
表1 不同隱含層節(jié)點(diǎn)數(shù)的選擇實(shí)驗(yàn)結(jié)果Table 1 Results of selection experiment with different hidden layer nodes%
3.3.2 消融實(shí)驗(yàn)
為進(jìn)一步探究不同序列特征對(duì)模型分類性能的影響,本文基于BGRU 模型進(jìn)行消融實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表2 所示??梢钥闯?,單獨(dú)基于Cuckoo 沙箱得到的API 調(diào)用序列(API_Cuckoo)的分類效果比單獨(dú)基于DynamoRIO 系統(tǒng)得到的API 調(diào)用序列(API_DynamoRIO)更好,將兩者結(jié)合后,所得API_CkDR分類效果更好。將序列特征融入后形成API_Net_all,盡管準(zhǔn)確率低于API_CkDR,但其精確率、召回率和F1 分?jǐn)?shù)都要高于API_CkDR。
表2 消融實(shí)驗(yàn)結(jié)果Table 2 Ablation experiment results%
由上述分析可知,基于DynamoRIO 的API 調(diào)用序列對(duì)Cuckoo 沙箱具有一定的補(bǔ)充作用,其原因是目前惡意代碼大部分采用了抗檢測(cè)技術(shù),當(dāng)檢測(cè)到虛擬環(huán)境或沙箱時(shí)會(huì)隱藏惡意行為,從而導(dǎo)致Cuckoo 沙箱的API 記錄出現(xiàn)漏報(bào)或誤報(bào)的情況。本文通過改進(jìn)DynamoRIO 系統(tǒng),能更準(zhǔn)確和全面地獲取二進(jìn)制程序的行為信息,因此,將API_Cuckoo 和API_DynamoRIO結(jié)合得到的API_CkDR 分類效果更好。
上述序列特征的融入,從網(wǎng)絡(luò)數(shù)據(jù)流量方面對(duì)模型特征進(jìn)行了有效補(bǔ)充。表2 中精確率的有效提升說明模型對(duì)惡意代碼樣本檢測(cè)能力得到加強(qiáng)。此外,F(xiàn)1 值的提升說明序列特征融入后,模型具有更好的分類性能。由消融實(shí)驗(yàn)結(jié)果可知,本文所提的API_cuckoo、API_DynamoRIO 和Net_pcap 對(duì)分類模型有正作用,均為有效特征。
3.3.3 模型對(duì)比實(shí)驗(yàn)
由上述實(shí)驗(yàn)結(jié)果可知,本文提出的API_Cuckoo、API_DynamoRIO 和Net_pcap 均為有效特征。由于這些網(wǎng)絡(luò)特征具有前后依賴關(guān)系,而API 及網(wǎng)絡(luò)流量的惡意行為取決于特征序列片段的上下文,且上下文在自然語言處理中至關(guān)重要,因此為了更好地學(xué)習(xí)到上述網(wǎng)絡(luò)特征的內(nèi)在關(guān)系,本文基于自然處理領(lǐng)域深度學(xué)習(xí)的研究結(jié)果,選擇RNN 模型分別對(duì)各序列特征進(jìn)行學(xué)習(xí),以提取其內(nèi)在信息。
為進(jìn)一步驗(yàn)證不同模型的檢測(cè)效果,本文基于Cuckoo 沙箱和改進(jìn)DynamoRIO 系統(tǒng)相結(jié)合的虛擬環(huán)境,設(shè)計(jì)并建立單向的LSTM、GRU 和雙向的BLSTM、BGRU 4 種RNN 模型進(jìn)行對(duì)比。針對(duì)API_Cuckoo、API_DynamoRIO 和Net_pcap 特征長(zhǎng)度不一致的問題,通過本文模型提取出各RNN 隱藏層中的向量來表示特征的內(nèi)在信息,可將不等長(zhǎng)的特征轉(zhuǎn)化為等長(zhǎng)的向量。因此,本文采用4 種RNN 模型進(jìn)行實(shí)驗(yàn),以探究不同RNN 結(jié)構(gòu)及單雙方向的神經(jīng)網(wǎng)絡(luò)對(duì)實(shí)驗(yàn)結(jié)果的影響,實(shí)驗(yàn)結(jié)果如表3 所示。
表3 不同模型對(duì)比實(shí)驗(yàn)結(jié)果Table 3 Comparison experiment results of different models%
由表3 可以看出,雙向神經(jīng)網(wǎng)絡(luò)模型的檢測(cè)性能均優(yōu)于單向神經(jīng)網(wǎng)絡(luò)模型,例如BLSTM 優(yōu)于LSTM,BGRU 優(yōu)于GRU。這是因?yàn)樵谔崛卧~語義特征時(shí),未來信息與歷史信息同樣重要,而基于正序體系結(jié)構(gòu)的LSTM 和GRU 僅考慮了歷史信息。雙向神經(jīng)網(wǎng)絡(luò)模型引入未來層來解決該問題,利用兩個(gè)隱藏層從過去和未來提取信息,并將這兩個(gè)隱藏層連接到同一輸出層。由于雙向神經(jīng)網(wǎng)絡(luò)模型能充分利用輸入序列的上下文信息,同時(shí)考慮到歷史信息和未來信息,因此其檢測(cè)性能更好。由表3 還可以看出,BGRU 的準(zhǔn)確率最高,達(dá)到96.38%,其與BLSTM 實(shí)驗(yàn)結(jié)果接近,但訓(xùn)練速度是BLSTM 的1.26 倍,BGRU 準(zhǔn)確率較GRU 更高。由上述結(jié)果可知,雙向深度學(xué)習(xí)模型對(duì)于惡意代碼的檢測(cè)性能要優(yōu)于單向深度學(xué)習(xí)模型。
此外,本文將BGRU 和BLSTM 的時(shí)間復(fù)雜度進(jìn)行對(duì)比,發(fā)現(xiàn)BGRU 收斂速度較BLSTM 更快。這是因?yàn)镚RU 參數(shù)較少,其更易收斂,且GRU 的結(jié)構(gòu)較LSTM 更簡(jiǎn)單,因此BGRU 的訓(xùn)練與測(cè)試時(shí)間均較BLSTM 更短。從結(jié)構(gòu)上來看,GRU 只有2 個(gè)門(update 和reset),LSTM 有3 個(gè)門(forget,input 和output),GRU 直接將隱藏狀態(tài)傳給下一個(gè)單元,而LSTM 則用記憶單元把隱藏狀態(tài)包裝起來。實(shí)際上,GRU 和LSTM 的性能在很多分類任務(wù)中較接近,但在本文實(shí)驗(yàn)中,由于引入更復(fù)雜的雙向網(wǎng)絡(luò)模型,GRU 的高速收斂使得模型訓(xùn)練效果更優(yōu),因此GRU的檢測(cè)性能要略優(yōu)于LSTM。
本文提出一種結(jié)合動(dòng)態(tài)行為和機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法。搭建Cuckoo 沙箱記錄惡意代碼網(wǎng)絡(luò)行為信息,結(jié)合Cuckoo 沙箱和改進(jìn)DynamoRIO系統(tǒng)提取惡意代碼樣本API 調(diào)用序列及網(wǎng)絡(luò)行為特征,從而獲取其網(wǎng)絡(luò)行為信息,并采用Cuckoo 沙箱獲取的惡意代碼行為信息訓(xùn)練BGRU 分類模型。實(shí)驗(yàn)結(jié)果表明,該方法能全面獲得惡意代碼的行為信息,其采用的BGRU 模型檢測(cè)效果較LSTM、BLSTM等模型更好,精確率和F1 值分別達(dá)到97.84% 和98.07%。后續(xù)將融合靜態(tài)信息與API 調(diào)用序列的特征構(gòu)建更復(fù)雜的機(jī)器學(xué)習(xí)模型,進(jìn)一步提高惡意代碼檢測(cè)精度。