陳佳捷,彭伯莊,吳佩澤
(中國南方電網數字電網研究院有限公司,廣州 510000)
互聯網的快速崛起給網絡空間帶來新的發展機遇,但同時也帶來越來越嚴重的網絡安全問題。高速互聯網在實現設備與服務互連的同時,也為網絡黑客從海外實施遠程匿名攻擊提供了便捷途徑,在目前網絡安全犯罪成本較低的情況下,黑客在各類社交網絡傳播惡意代碼的頻率逐年升高。惡意代碼由攻擊者創建旨在損害網絡系統安全性或泄露被攻擊者隱私信息,其包括蠕蟲病毒、特洛伊木馬等常見的計算機病毒,以及間諜軟件、廣告軟件和行為記錄軟件等惡意軟件。目前,惡意代碼的數量正在呈爆發性增長。根據卡巴斯基報告[1],2019 年第一季度,網站META 區域受到加密挖掘惡意軟件、網絡釣魚和勒索軟件等持續攻擊,該季度惡意軟件攻擊超過1.5億次,平均每天達到160萬次,相較2018年第一季度增長108%。
惡意代碼的檢測方法主要包括基于簽名的檢測方法、啟發式檢測方法以及行為式檢測方法等,其中基于簽名的檢測方法應用最為廣泛。該方法主要基于模式匹配的思想,為每種已知惡意代碼產生一個唯一的簽名特征標記并創建惡意代碼庫,通過將未知代碼的簽名特征與惡意代碼庫進行對比來識別惡意代碼。其檢測速度較快且準確率高,但對于未出現過的病毒無法進行檢測。此外,大量惡意軟件為避免被查殺進行加殼和混淆處理,增大了其檢測與識別難度。
針對上述問題,本文提出一種結合動態行為和機器學習的惡意代碼檢測方法。建立自動化分析Cuckoo 沙箱[2]解析惡意代碼網絡日志以獲取其行為信息,將Cuckoo 沙箱和改進DynamoRIO 系統相結合作為虛擬環境,提取惡意代碼樣本應用程序接口(Application Programming Interface,API)調用序列特征以全面獲取其文件操作、進程操作和注冊表操作等行為信息,并基于雙向門循環單元(Bidirectional Gated Recurrent Unit,BGRU)網絡構建惡意代碼檢測模型。
對惡意代碼的有效檢測是保證網絡空間安全的重要手段,現有惡意代碼檢測方法主要包括基于靜態的檢測方法和基于動態的檢測方法。在基于靜態的檢測方法中,利用簽名的惡意代碼檢測方法應用最廣泛,其主要采用預定義的方式進行防護,雖然可識別通用應用程序中的惡意軟件,但需要對簽名數據庫進行定期維護。目前,基于機器學習的惡意代碼檢測方法還使用了操作碼特征[3]與二進制文件特征。文獻[4]基于操作碼序列以可執行文件向量來表示惡意軟件,并采用機器學習算法檢測惡意代碼。文獻[5]基于n-gram 和SVDD 技術提出一種未知惡意代碼檢測方法SSPV-SVDD,其對單個惡意代碼家族的識別準確率達到97%。文獻[6]提出一種基于可執行文件加殼算法的分類方法來檢測惡意代碼,先縮放給定可執行文件的熵值,將特定存儲位置的熵值轉換為符號表示,再使用樸素貝葉斯和支持向量機檢測加殼算法并對符號分布進行分類,該方法的準確率和查全率分別達到95.35%和95.83%。文獻[7-8]采用可視化方法將惡意代碼轉換為圖像并使用神經網絡進行訓練,成功對惡意代碼進行分類。
靜態二進制檢測方法在很大程度上受到混淆技術限制,雖然簡單混淆的代碼在一定程度上能被檢測,但現有檢測方法在處理混淆代碼時存在NP 難題[9]。由于動態檢測方法能有效檢測惡意樣本的行為信息,因此對于惡意代碼動態檢測技術的研究受到廣泛關注。文獻[10]提出一種惡意軟件檢測算法,利用目標可執行文件的動態收集所得指令跟蹤記錄來構建子圖表示馬爾可夫鏈,創建指令跟蹤圖間的相似度矩陣,并將其發送到支持向量機進行分類。文獻[11]采用動態指令序列n-gram 提取特征,利用K 均值算法與EM 聚類算法對惡意代碼進行分類,實驗結果表明EM 聚類算法優于K 均值算法,且兩種算法的分類精度均超過90%。
網絡行為是影響惡意樣本動態行為的重要因素。目前基于網絡行為的惡意代碼檢測主要采用傳統方法,即由人工設計特征字段,通過頻數統計方式提取特征,并構建傳統機器學習模型或卷積神經網絡(Convolutional Neural Network,CNN)模型進行分類。文獻[12]提出端到端的監督學習模型,從不同協議和網絡流量層中提取多類特征,通過計算得到特征向量來檢測惡意軟件。除此之外,文獻[13]將流量數據視為圖像并提出一種基于CNN 的惡意軟件流量分類方法,將表示學習方法應用于惡意軟件流量分類。本文基于API 調用序列及網絡行為來提取特征,采用詞嵌入方式將網絡流量轉換為語句向量,并構建BGRU 深度學習模型對惡意代碼進行檢測。
本文提出一種結合動態行為和機器學習的惡意代碼檢測方法,其流程如圖1 所示。為全面記錄惡意代碼的行為信息,先構建Cuckoo 沙箱和DynamoRIO 系統獲取動態行為,再針對惡意代碼樣本的API 調用序列與網絡行為提取并融合特征,得到對應的特征向量并以此訓練BGRU 分類模型,從而實現對惡意代碼的檢測。

圖1 本文方法的流程Fig.1 Procedure of the proposed method
安全分析人員利用動態沙箱技術可從實際行為中分析并檢測出惡意代碼,并有效降低誤報率。CWSandbox、Anubis、BitBlaze、Norman 以及ThreatExpert等分析系統利用動態插樁技術實現了對惡意樣本行為的有效監控。因此,本文結合沙箱技術與動態插樁技術分析記錄樣本的行為信息。
本文采用Cuckoo 沙箱技術和DynamoRIO 系統動態二進制插樁工具來獲得樣本行為信息。Cuckoo沙箱和DynamoRIO 系統獲取惡意代碼樣本API 序列信息的機制不同。Cuckoo 沙箱技術是一種封閉式沙箱技術,Cuckoo 沙箱可將二進制樣本置于虛擬環境中自動化運行并記錄其API 序列信息與網絡通信信息。為解決惡意代碼的反調試問題,本文對Cuckoo 沙箱源碼的vmdetect.yar 規則進行改進,從而獲取API 序列信息及網絡通信信息,同時避免惡意代碼檢測出虛擬環境而停止運行。DynamoRIO 系統是一種有效的二進制插樁工具,其較Pin 運行速度更快。本文以基本塊為單位,對各類指令進行分析,并基于回調機制對DynamoRIO 系統進行完善,使其能獲取完整的API 序列調用信息,通過將Cuckoo 沙箱和DynamoRIO 系統相結合,以更全面地獲取惡意代碼樣本行為信息。
2.2.1 Cuckoo 沙箱
Cuckoo 沙箱是Google 公司開發的一個開源的自動化惡意代碼分析系統,可分析office 文檔、pdf 文件、可執行文件以及電子郵件等多種文件類型,能用于Windows、Linux 和Android 等系統的惡意軟件檢測,其結構如圖2 所示。Cuckoo 沙箱由一個處于核心位置的主機(中央管理軟件)和多個Guest 計算機(用于分析的虛擬或物理計算機)組成。主機是沙箱運行的核心組件,主要負責樣本執行與分析過程的調度以及Guest 計算機的管理。Guest 計算機處于隔離環境,每次樣本分析都會從一個處于純凈狀態的快照開始,可保證惡意代碼樣本被安全地執行與分析,從而確保分析的正確性,避免多個分析之間的相互干擾。

圖2 Cuckoo 沙箱結構Fig.2 Cuckoo sandbox structure
采用Cuckoo 沙箱運行惡意代碼樣本后,可獲得以下信息:1)惡意代碼內部函數與Windows API 調用跟蹤信息(API 日志);2)惡意代碼執行期間文件創建、刪除與下載的操作信息;3)以PCAP 形式對惡意代碼網絡行為的跟蹤信息(網絡日志);4)惡意代碼樣本的靜態數據以及釋放文件的行為信息;5)程序執行期間桌面操作截圖;6)文件操作、注冊表操作、互斥操作和服務操作等系統操作信息;7)機器全內存空間的轉儲信息。
惡意代碼通常具有反調試功能,為有效記錄惡意代碼樣本的行為信息,本文對Cuckoo 沙箱源碼的vmdetect.yar 規則文件改進如下:

由Cuckoo 沙箱可得到存儲格式為json 的惡意代碼樣本行為信息報告。此外,為進一步提取樣本動態特征,本文基于FakeNet 模擬網絡環境,將Cuckoo 沙箱記錄的網絡日志以pcap 格式進行存儲,作為惡意代碼樣本的網絡行為報告。
2.2.2 DynamoRIO 系統
由于目前惡意代碼大部分已采用抗檢測技術,當檢測到虛擬環境或沙箱時會隱藏自身惡意行為,或者采用反Hook 及繞過API 層直接調用系統的方式,導致采用動態檢測方法分析API 記錄時出現漏報或誤報。
DynamoRIO[14]是一種代碼運行控制系統,該系統高效透明且控制全面,能有效監控應用程序中每個已執行的指令。DynamoRIO 系統也是一個跨平臺的二進制檢測平臺,可適用于移植性程序。由于DynamoRIO 系統采用回調機制處理二進制可執行代碼,因此通過設置回調,可利用DynamoRIO 系統輕松操控目標程序的二進制可執行代碼。
本文對DynamoRIO 系統的drstrace 和drltrace 進行改進,進而獲取二進制程序的行為信息,具體流程如圖3 所示。改進后的DynamoRIO 系統以基本塊為單位分析各指令,并對調用指令類型進行判斷。如果屬于系統調用,則分別采用drsys_syscall_name()函數和drsys_iterate_args()函數獲取系統調用的名稱與參數信息;如果屬于API 調用,則分別采用dr_module_preferred_name()函數和drwrap_get_arg()函數獲取API 調用的名稱與參數信息。參數按照類型分為直接參數和間接參數兩種。直接參數可從函數的棧中直接獲取,例如立即數。間接參數需要根據函數棧中的地址間接尋址,從內存讀取參數信息。本文將DynamoRIO 系統作為提取惡意代碼樣本行為信息的補充實驗環境,并使用FakeNet 模擬網絡環境。

圖3 DynamoRIO 系統操作流程Fig.3 Operation procedure of DynamoRIO system
本節對上文中得到的行為信息進行特征提取并向量化(將API 序列轉換為數字向量,用于分類模型輸入)。惡意代碼樣本的行為信息表現在文件、進程、注冊表以及網絡等方面。而API 調用序列可表征惡意代碼樣本的文件操作、進程操作和注冊表操作等。例如,修改注冊表通常需要通過RegOpenKey Ex、RegSetValue、RegCloseKey 3 個API 調用組合來實現。因此,可利用這種API 調用組合來提取特征,從而得到惡意代碼樣本的文件操作、進程操作和注冊表操作等信息。此外,還可通過Cuckoo 沙箱獲取惡意代碼樣本的網絡日志,進而得到其網絡行為信息。為全面描述惡意代碼樣本的行為信息,本文從API調用序列和網絡行為兩方面提取特征。
2.3.1 API 調用序列
本文基于API 調用序列執行特征向量化。為了更有效地記錄惡意代碼樣本的行為記錄,在向量化之前,先對Cuckoo 沙箱報告進行分析。Cuckoo 沙箱的分析日志以json 格式存儲,并通過調用來提取進程記錄的順序信息。在Cuckoo 沙箱報告中,API 調用序列存儲于behavior/processes/calls 字段下,可根據processtree 字段繪制進程調用樹,并結合processes/calls字段解析得到Cuckoo 沙箱的API 執行序列。然后對DynamoRIO 系統報告進行分析,從中提取API 信息,并將此結果與Cuckoo 沙箱的結果進行合并。
程序在執行過程中會多次循環調用相同的API序列以執行同一命令。由于本文目標是通過提取API 調用序列來檢測惡意代碼,因此無需大量重復的API 調用。基于此,本文去掉了冗余的API 調用序列,然后將其向量化。圖4 為惡意代碼樣本報告中API提取示例(md5:ffff3f7dad938ac9c8cb2d2d4e25a310)。惡意代碼樣本根據calls 中的API 提取序列信息,并重復調用GetFileType(見方框處)。因此,本文將該冗余API 信息刪除。

圖4 惡意代碼樣本報告中API 提取示例Fig.4 Examples of API extraction in malicious code sample report
本文使用Word2vec[15]將API 序列全部轉換為數字向量。Word2Vec 由兩層神經網絡組成,是Google公司于2013 年所推出用于構建單詞向量的工具。單詞向量是在文檔中供計算機處理的單詞數值向量。將文本語料庫輸入Word2Vec 中,輸出即為文本語料庫中每個單詞的向量。與TF-IDF 等傳統單詞向量構造方法相比,Word2Vec 構造的單詞向量包含更豐富的語義信息(具有相似語義的單詞,其詞向量表現出高度的相似性)。本文通過Word2Vec 將API序列轉換為固定長度的向量,并將向量長度設置為50。
2.3.2 網絡行為信息
為解析網絡日志數據包pcap 文件,提取其特征并將其向量化后輸入神經網絡,本文基于文本分類的思想(不考慮文檔整體,以文檔中段落和語句為處理對象),對網絡流量進行處理。
首先對pcap 文件進行解析,將其中的數據包作為處理對象,并根據每個數據包構造關鍵語句(特征向量),語句中每個單詞均為數據包中的一個字段。然后利用詞嵌入方法[16]從該語句中提取語義和語法特征。由于段落的語義通常可由關鍵語句決定,因此本文選擇語句(數據包)的語義,而不是整個段落(網絡流)的語義。此外,每個數據包固有的字段順序起到類似語法規則的作用,這些語法規則對于構建惡意數據流量(基于簽名的檢測)或構建數據良性流量(異常檢測)的語句模式起到決定性作用。值得注意的是,根據單個或多個數據包的行為和特征可以判斷是否為惡意數據流量,因此這種基于數據包的語句特征提取方式可用于惡意代碼樣本的判定。
通常,每個數據包的字段為1 個字節的數據包頭、數據包頭的1 個字段或者有效載荷的數據塊。本文將數據包頭中的字段視為1 個單詞,由于數據包中字段長度不同,因此得到的單詞長度也不同。將數據包中字段長度固定為n個字節,如果數據包中字段長度小于n個字節,則將其用零填充,具體如圖5 所示。由于大部分TCP 數據包含有14 個字節的MAC 報頭、20 個字節的IP 報頭和20 個字節的TCP報頭[17],因此本文設置n=54。

圖5 數據流量向量化示意圖Fig.5 Schematic diagram of data flow vectorization
由于API 調用序列及網絡流量中數據包信息均具有前后關系,因此經過特征提取與向量化處理后,特征向量也具有前后依賴關系,這與人腦思維類似。例如,人們閱讀文章時能在理解前文所閱讀單詞的基礎上理解當前閱讀的單詞。循環神經網絡[18](Recurrent Neural Network,RNN)具有遞歸結構,可以連續保留先前的信息,但是隨著時間的延長,其會失去保存與處理信息的能力,且存在梯度消失的問題。對此,研究人員提出RNN 的特殊選擇方法,其中最具代表性的是LSTM[19]和GRU[20],這兩種方法均可通過門控機制獲取長期的依賴關系。GRU 結構更簡單且計算復雜度更低,其運行速度要快于LSTM[21]。
具體而言,兩個關鍵模塊構成基于GRU 的網絡。一個模塊是包含第j個GRU 隱藏單元且具有相應權重矩陣Wr和Ur的復位門。當復位門關閉(=0)時,先前狀態ht-1被忽略,當前隱藏狀態ht僅由當前輸入xt來定義,這表示可能丟棄全部對當前隱藏狀態無用的信息。另一個模塊是更新門其被設計為利用相應權重矩陣Wz和Uz來調節由先前狀態ht-1傳輸到當前隱藏狀態ht的信息的傳輸權重。為基于先前狀態ht-1和當前輸入xt的候選激活態,其相應的權重矩陣為Wh和Uh。
第j個GRU 隱藏單元的整個數據流量計算公式如下所示:

其中:σ(·)為sigmoid 激活函數,本文中σ(x)=(x∈?);tanh(·)為雙曲正切函數,本文中tanh(x)=(x∈?);⊙為Hadamard 乘積,也稱逐元素乘積,表示兩個矩陣相應元素的乘積。
在提取單詞的語義特征時,未來信息與語句S中的歷史信息同樣重要,而上述基于正序的體系結構僅考慮了歷史信息。對此,本文使用BGRU 網絡,該網絡引入一個未來層解決上述問題,其結構如圖6所示。在未來層中,數據的輸入順序與輸入層相反。BGRU 網絡使用兩個隱藏層分別從過去和未來提取信息,這兩個隱藏層連接到同一個輸出層,BGRU 網絡充分利用了輸入序列的上下文信息。

圖6 BGRU 網絡結構Fig.6 BGRU network structure
本文分類模型的結構如圖7 所示。其中,左GRU 層通過饋送語句S的正序來學習當前輸入xt的歷史信息,而右GRU 層通過饋送語句S的逆序來獲得當前輸入xt的未來信息。

圖7 本文分類網絡結構Fig.7 Structure of the proposed classification network
語句S第i個單詞最終輸出的表達式如下:

本文通過RNN 模型分別學習到API_Cuckoo(從Cuckoo 沙箱中提取的API)、API_DynamoRIO(從DynamoRIO 系統提取的API)和Net_pcap(網絡流量pcap 包)3 種序列特征。由于這3 種序列特征均具有前后依賴的關系,因此本文采用雙向的BGRU 網絡作為分類網絡,其可以利用輸入序列的上下文信息更好地學習序列特征的依賴關系。在圖7 中,先將序列按前向順序輸入GRU 層得到前向輸入隱藏層信息h_forward,再將序列按后向順序輸入GRU 層得到后向輸入隱藏層信息h_backward,然后將兩者結合后作為BGRU 的輸出。通過BGRU 網絡,本文學習到API_Cuckoo、API_DynamoRIO 和Net_pcap 3 種序列特征,然后通過Concat 拼接輸出向量,最終基于全連接層和Softmax 層得到檢測結果。
本文結合Cuckoo 沙箱和改進DynamoRIO 系統作為虛擬環境,對惡意代碼樣本的API 調用序列及網絡行為特征進行提取與融合,以全面獲取惡意代碼文本的行為信息。為構建神經網絡模型,選擇系統的開發框架為pytorch[22],開發語言為python 3.6。實驗環境為Ubuntu 18.04.2 LTS 操作系統,NVIDIA GeForce GTX 1080 GPU 和8 GB 內存。
本文構建包含大量樣本的數據集以對所提方法進行有效評估,數據集所用惡意代碼樣本來自惡意軟件樣本的公開存儲庫VirusShare,良性應用程序樣本來自經過安全檢查的Windows 7 操作系統平臺,包括常見的exe、DLL 等PE 格式文件。數據集共有18 153 個樣本,其中包含12 170 個惡意代碼樣本和5 983 個良性應用程序樣本。
為確保惡意代碼樣本標簽的可信度,通過在線病毒掃描網站Virustotal 將惡意代碼樣本與反病毒引擎的標簽進行標記(在Virustotal 中通過調用相關API 進行樣本上傳,每個樣本平均被58 個反病毒引擎掃描)。為保證樣本標簽的準確性,以大量反病毒引擎的掃描結果為篩選依據,根據惡意性判定頻率篩選惡意代碼樣本。本文實驗頻率閾值設定為0.8,僅保留超過80%反病毒引擎判定為惡意性的惡意樣本,良性應用程序樣本均完全通過Virustotal 網站的惡意性檢測。
在本文實驗中,使用準確率(A)、精確率(P)、召回率(R)以及F1 值作為分類模型的性能評價指標。在分類問題中,度量指標的混淆矩陣由TP、TN、FP和FN 4 個值構成,其中:TP 表示將正類樣本預測為正的數量;TN 表示將負類樣本預測為負的數量;FP 表示將負類樣本預測為正的數量;FN 表示將正類樣本預測為負的數量。
4)F1 值。精確率與召回率之間常出現矛盾,F1 值是兩者的綜合,被定義為精確率與召回率的調和平均值,即當參數α為1 時,即為F1 值的常見形式,即F1 值越高說明模型分類性能越好。
為評估本文方法的有效性以及參數設置對實驗結果的影響,以下分別進行隱含層節點數的選擇實驗、消融實驗以及模型對比實驗。
3.3.1 隱含層節點數的選擇實驗
BGRU 較BLSTM 結構更簡單且計算復雜度更低,其隱含層節點數對模型的復雜度和分類效果有一定的影響。本文基于樣本API 調用序列與網絡行為的融合特征對模型進行訓練,并通過選擇實驗得到隱含層節點數分別為50、100、150 和200 時本文模型的準確率、精確率、召回率以及F1 值,結果如表1所示。可以看出,當隱層結點數為100 時,模型各指標均為最優,其原因是當隱層結點數過少時,網絡不具有必要的學習能力和信息處理能力。當隱層結點數過多時,網絡結構的復雜性大幅增加,網絡在學習過程中更易陷入局部極小點且學習速度減慢。因此,本文設置隱含層節點為100。

表1 不同隱含層節點數的選擇實驗結果Table 1 Results of selection experiment with different hidden layer nodes%
3.3.2 消融實驗
為進一步探究不同序列特征對模型分類性能的影響,本文基于BGRU 模型進行消融實驗,實驗結果如表2 所示。可以看出,單獨基于Cuckoo 沙箱得到的API 調用序列(API_Cuckoo)的分類效果比單獨基于DynamoRIO 系統得到的API 調用序列(API_DynamoRIO)更好,將兩者結合后,所得API_CkDR分類效果更好。將序列特征融入后形成API_Net_all,盡管準確率低于API_CkDR,但其精確率、召回率和F1 分數都要高于API_CkDR。

表2 消融實驗結果Table 2 Ablation experiment results%
由上述分析可知,基于DynamoRIO 的API 調用序列對Cuckoo 沙箱具有一定的補充作用,其原因是目前惡意代碼大部分采用了抗檢測技術,當檢測到虛擬環境或沙箱時會隱藏惡意行為,從而導致Cuckoo 沙箱的API 記錄出現漏報或誤報的情況。本文通過改進DynamoRIO 系統,能更準確和全面地獲取二進制程序的行為信息,因此,將API_Cuckoo 和API_DynamoRIO結合得到的API_CkDR 分類效果更好。
上述序列特征的融入,從網絡數據流量方面對模型特征進行了有效補充。表2 中精確率的有效提升說明模型對惡意代碼樣本檢測能力得到加強。此外,F1 值的提升說明序列特征融入后,模型具有更好的分類性能。由消融實驗結果可知,本文所提的API_cuckoo、API_DynamoRIO 和Net_pcap 對分類模型有正作用,均為有效特征。
3.3.3 模型對比實驗
由上述實驗結果可知,本文提出的API_Cuckoo、API_DynamoRIO 和Net_pcap 均為有效特征。由于這些網絡特征具有前后依賴關系,而API 及網絡流量的惡意行為取決于特征序列片段的上下文,且上下文在自然語言處理中至關重要,因此為了更好地學習到上述網絡特征的內在關系,本文基于自然處理領域深度學習的研究結果,選擇RNN 模型分別對各序列特征進行學習,以提取其內在信息。
為進一步驗證不同模型的檢測效果,本文基于Cuckoo 沙箱和改進DynamoRIO 系統相結合的虛擬環境,設計并建立單向的LSTM、GRU 和雙向的BLSTM、BGRU 4 種RNN 模型進行對比。針對API_Cuckoo、API_DynamoRIO 和Net_pcap 特征長度不一致的問題,通過本文模型提取出各RNN 隱藏層中的向量來表示特征的內在信息,可將不等長的特征轉化為等長的向量。因此,本文采用4 種RNN 模型進行實驗,以探究不同RNN 結構及單雙方向的神經網絡對實驗結果的影響,實驗結果如表3 所示。

表3 不同模型對比實驗結果Table 3 Comparison experiment results of different models%
由表3 可以看出,雙向神經網絡模型的檢測性能均優于單向神經網絡模型,例如BLSTM 優于LSTM,BGRU 優于GRU。這是因為在提取單詞語義特征時,未來信息與歷史信息同樣重要,而基于正序體系結構的LSTM 和GRU 僅考慮了歷史信息。雙向神經網絡模型引入未來層來解決該問題,利用兩個隱藏層從過去和未來提取信息,并將這兩個隱藏層連接到同一輸出層。由于雙向神經網絡模型能充分利用輸入序列的上下文信息,同時考慮到歷史信息和未來信息,因此其檢測性能更好。由表3 還可以看出,BGRU 的準確率最高,達到96.38%,其與BLSTM 實驗結果接近,但訓練速度是BLSTM 的1.26 倍,BGRU 準確率較GRU 更高。由上述結果可知,雙向深度學習模型對于惡意代碼的檢測性能要優于單向深度學習模型。
此外,本文將BGRU 和BLSTM 的時間復雜度進行對比,發現BGRU 收斂速度較BLSTM 更快。這是因為GRU 參數較少,其更易收斂,且GRU 的結構較LSTM 更簡單,因此BGRU 的訓練與測試時間均較BLSTM 更短。從結構上來看,GRU 只有2 個門(update 和reset),LSTM 有3 個門(forget,input 和output),GRU 直接將隱藏狀態傳給下一個單元,而LSTM 則用記憶單元把隱藏狀態包裝起來。實際上,GRU 和LSTM 的性能在很多分類任務中較接近,但在本文實驗中,由于引入更復雜的雙向網絡模型,GRU 的高速收斂使得模型訓練效果更優,因此GRU的檢測性能要略優于LSTM。
本文提出一種結合動態行為和機器學習的惡意代碼檢測方法。搭建Cuckoo 沙箱記錄惡意代碼網絡行為信息,結合Cuckoo 沙箱和改進DynamoRIO系統提取惡意代碼樣本API 調用序列及網絡行為特征,從而獲取其網絡行為信息,并采用Cuckoo 沙箱獲取的惡意代碼行為信息訓練BGRU 分類模型。實驗結果表明,該方法能全面獲得惡意代碼的行為信息,其采用的BGRU 模型檢測效果較LSTM、BLSTM等模型更好,精確率和F1 值分別達到97.84% 和98.07%。后續將融合靜態信息與API 調用序列的特征構建更復雜的機器學習模型,進一步提高惡意代碼檢測精度。