?

基于抽象匯編指令的惡意軟件家族分類方法

2022-03-08 12:26李玉羅森林郝靖偉潘麗敏
北京航空航天大學學報 2022年2期
關鍵詞:卷積指令語義

李玉,羅森林,郝靖偉,潘麗敏

(北京理工大學 信息與電子學院,北京 100081)

惡意軟件是指在未經用戶許可的情況下收集敏感信息、控制用戶設備、嚴重侵犯用戶個人權益的軟件[1]。目前,惡意軟件檢測方法根據檢測時是否執行目標代碼,分為靜態分析[2-3]和動態分析[4-5]。隨著深度學習在圖像識別領域展現出強大的特征提取能力,并且歸屬于同一家族的惡意軟件變體,其特征圖像的紋理特征也十分相似,因此可視化技術開始應用在惡意軟件任務中。根據可視化的目標,惡意軟件可視化檢測方法分為二進制文件可視化和動態行為可視化。二進制文件可視化將文件按字節排序,生成特征圖像并識別所屬家族[6-8],并未提取深層行為特征,仍依賴于待檢測軟件的二進制代碼,易受到代碼混淆的影響。

為了將惡意行為信息融入特征圖像中,匯編指令逐漸成為可視化研究的重心。鑒于二進制文件存在加殼現象,難以自主生成反匯編文件,因此對于加殼文件需通過動態調試進行脫殼,再進行反匯編。獲得匯編代碼后,Zhang等[9]提出了基于圖像識別惡意的軟件檢測方法(IRMD),從反匯編文件中提取操作碼序列,構建2-gram操作碼特征組,采用卷積神經網絡(CNN)進行識別和分類,證明了操作碼序列具有較強的行為特征表達能力,且同一家族的惡意軟件變體在匯編指令層面具有相似的行為模式。受IRMD啟發,Ni等[10]開發了基于局部敏感哈希的惡意軟件分類方法(MSCS)。MSCS將每個操作碼視為一個序列,以關注軟件的整體行為特征,并引入局部敏感哈希算法生成特征圖像,利用CNN進行軟件的惡意性檢測。與MSCS類似,Sun和Qian[11]通過循環神經網絡(RNN)捕獲指令序列內的時序特征,并對指令序列進行預測,一定程度上減小了變體技術對指令序列的影響。

上述可視化檢測方法將軟件行為融入特征圖像中,但僅從操作碼層面提取行為特征,并未結合操作數,導致指令語義缺失。同時,惡意軟件變體通常在軟件中插入無關的正常指令以隱藏惡意指令和惡意行為,且正常指令與惡意指令僅通過操作碼難以區分,導致基于操作碼序列的檢測方法難以區分出無關指令,受代碼混淆和花指令干擾較大,影響變體分類結果。

經分析,無關指令和惡意指令的區別僅在操作數上有所體現,但操作數的語義與運行環境密切相關,即同一個操作數在不同運行環境下的含義不同,因此難以提取。

針對基于匯編指令的惡意軟件可視化家族分類方法中,操作數語義與運行環境密切相關而難以提取,導致指令語義缺失,難以正確分類惡意軟件變體的問題,本文提出了一種融合抽象匯編指令和家族共性指令序列的惡意軟件家族分類方法(malware family classification method based on abstract assembly instructions,MCAI),利用操作數抽象類型提取進行指令重構,使操作數語義脫離運行環境的約束而易于提取,并結合詞注意力機制和雙向門循環單元(Bi-GRU)構建雙向結構指令嵌入網絡,學習指令的行為語義,并利用深度層次網絡捕獲惡意軟件家族共性指令序列,以減小惡意軟件變體技術對指令序列的干擾,融合原始指令和家族共性指令序列構建特征圖像,并通過CNN實現惡意軟件家族分類。

1 MCAI原理

1.1 MCAI原理框架

MCAI原理如圖1所示,包含指令重構模塊、指令嵌入模塊、家族共性指令序列提取模塊、特征圖像生成模塊和特征圖像分類模塊。指令重構模塊通過操作數抽象類型提取重構指令,使操作數語義脫離運行環境的約束,豐富指令的行為語義,并對重構后的指令進行詞法分析,識別指令內部的各個元素,以便后續特征提??;指令嵌入模塊利用詞注意力機制和Bi-GRU構建指令嵌入網絡,學習指令的行為語義,獲得指令的向量表示,并通過深度層次網絡學習家族共性行為模式,對指令進行預測;特征圖像生成模塊將預測結果和嵌入結果組合成雙通道惡意軟件特征圖像;特征圖像分類模塊利用CNN捕獲圖像的局部特征,并給出家族分類結果。

圖1 MCAI原理框圖Fig.1 Functional block diagram of MCAI

1.2 指令重構模塊

匯編指令是程序在操作系統層面的基本執行單元,因此能夠反映程序的操作和意圖。通過反匯編器,可以獲得樣本的反匯編代碼p。其中,p由多條指令Ii組成,i∈[1,k]。若惡意軟件已被加殼,需先經過脫殼處理,再進行上述反匯編過程。

x86指令語法規定,匯編指令Ii由一個操作碼和多個操作數組成。操作碼表示指令的行為類型,操作數體現了指令的操作目標。因此,匯編指令中的每一個組成元素都是指令行為的一部分,僅通過操作碼或操作數無法完整描述指令行為。然而,操作數的語義存在不確定性,同一個地址在不同的軟件中可能表示不同的函數,因此在過去的檢測和分類方法中,如基于RNN的惡意軟件可視化分類方法(RMVC)、MCSC等,僅保留了操作碼序列作為特征,導致無法區分出惡意軟件變體內的正常指令,影響分類效果。為了充分利用操作數信息,使操作數的語義脫離運行環境的限制,方法對操作數類型進行抽象,定義了內存地址(MEM)、寄存器(REG)、立即數(IMM)、標號(MARK,包括函數名、跳轉地址等)和無操作數占位符(NULL)5類操作數類型,用操作數類型代替操作數完成指令重構。

由于每條匯編指令內操作碼數量不一致,對操作數數量進行規范化處理,即通過NULL實現指令對齊,使每條指令的操作數數量均為2個,補齊后的指令集如圖2所示。

圖2 操作數類型抽象Fig.2 Operand type abstracting

對規范化的指令I′i進行詞法分析,識別指令內部的各個元素,并構造指令行為描述序列si。其中,si由3部分組成,分別為操作碼和2個抽象操作數類型。

1.3 指令嵌入模塊

指令嵌入網絡將每個指令行為描述序列嵌入至其向量表示中,并學習指令的行為語義,以便特征提取網絡可以提取行為特征。指令嵌入網絡由word2vec[12]、Bi-GRU[13]和詞注意力模塊[14]構建,如圖3所示。

圖3 指令嵌入網絡Fig.3 Instruction embedding network

利用word2vec構建詞嵌入網絡,訓練si中每一個單詞xi,j的向量表示。

在詞向量基礎上,利用Bi-GRU構建句子嵌入網絡以訓練每條指令的向量表示。鑒于指令內部的序列信息為雙向關聯,因此采用Bi-GRU分別從前向和后向捕獲指令內部的序列信息,并通過詞注意力機制為指令內的各個元素自動化分配權重,以進一步突出指令的關鍵信息,增強指令的行為語義。

指令嵌入網絡從3個方面學習指令的行為語義信息。word2vec提取每個單詞的基本上下文信息,Bi-GRU分別從前向和后向學習了輸入指令內部各元素的順序信息,詞注意力模塊從指令內元素的上下文中學習元素的權重,并加權得到指令最終的嵌入結果。

1.4 家族共性指令序列提取模塊

屬于同一家族的惡意軟件具有相同的行為特征,在匯編代碼中體現為具有相似的指令序列,并且指令序列中具有較強的時序性。雙向循環神經網絡(Bi-RNN)[15]具有較強的時序特征提取能力,通過Bi-RNN可以學習惡意軟件家族的通用行為特征。

為了更好地說明Bi-RNN的學習過程,圖4中用標號代替指令,每一個標號對應一條指令。

圖4 家族共性指令序列學習Fig.4 Family common instruction sequence learning

Bi-RNN采用滑動窗口的方式學習指令的時序特征。在t時刻,Bi-RNN學習虛線框內的指令序列并預測圓圈內的指令內容,得到pt。在t+1時刻,滑窗右移一個指令,再次學習窗口內的指令序列并預測圓圈的指令內容,得到pt+1。隨著滑窗的移動,指令的預測值組成一個新的指令序列,即為原指令序列的預測結果,損失函數即為指令的預測值和指令的真實值之間的差異。在反向傳播階段,為了快速降低損失函數值,滑動窗口的預測結果將會是窗口中最常見的指令,從而使Bi-RNN學習到該家族通用的指令序列。因此,即使惡意軟件通過變體技術調整的部分指令,Bi-RNN也可以根據指令序列的上下文信息還原指令序列,有效減小了惡意軟件變體技術對指令序列的影響,如圖5所示。

圖5 家族共性指令序列預測Fig.5 Family common instruction sequence prediction

預測指令通過查詢嵌入表可得到嵌入結果vpi。

1.5 特征圖像生成模塊

為充分利用CNN的特征提取能力,將Bi-RNN的預測結果分別轉換為單通道圖像,并組成雙通道的惡意軟件特征圖像。特征圖像生成過程如下:

1)將嵌入結果和預測結果的數值歸一化至0~255,對應灰度圖像像素值。

2)順序排列,分別生成單通道圖像M∈R1×k×w。其中,k為樣本內指令個數,w為指令嵌入的輸出維度,實驗中的嵌入維度為256。

3)鑒于樣本內的指令數量不同,因此生成的圖像長度不一致,需要對2個單通道圖像各自放縮。通過雙線性差值法,將2個單通道圖像均放縮大小為3 000×256。其中,256為指令嵌入的輸出維度,3 000為數據集內指令數量的中位數。

4)2個放縮后的單通道圖像組成雙通道惡意軟件特征圖像M∈R2×3000×256。

1.6 特征圖像分類模塊

通過CNN可以捕獲圖像內的局部特征。鑒于圖像中的每一行對應一個指令,為確保一條指令的信息可以被完整的處理,在第一個卷積層中,使用寬卷積核f∈R2×h×256,其中h為卷積核高度,代表一次處理指令的個數,實驗中取h=2,即經過第一個卷積層后,每個通道的卷積結果為列向量。隨后,該卷積結果依次經過其他卷積層和池化層,完成圖像的局部特征提取,并由全連接層和softmax層進行分類。

2 實驗分析

2.1 實驗數據

實驗數據來源于2015 Kaggle微軟惡意軟件分類挑戰賽[16],數據集中包含來自9個家族的10 868個有標記樣本,包含樣本的二進制文件和反匯編文件,是目前惡意軟件研究領域廣泛使用的數據集。數據集家族標簽及樣本數量如表1所示。鑒于本文方法是基于匯編代碼實現的,因此僅使用反匯編文件。訓練集占40%,驗證集占10%,測試集占50%。

表1 數據集家族標簽及樣本數量Table 1 Family label and number of the sample in the dataset

2.2 實驗環境

實驗硬件環境為:Intel(R)Core(TM)i7-6700 CPU@3.40 GHz,RAM 8 GB,Windows10系統。主要軟件和開發工具包為:Python 3.7、TensorFlow v1.14.0、scikit-learn0.22。

2.3 評價方法

實驗采用機器學習領域的規范統計指標:準確率、召回率、精確率及F1,來準確評估分類模型的性能,從而更加全面地體現方法的有效性和可靠性。

2.4 消融實驗

2.4.1 消融實驗目的

本節實驗通過拆分實驗過程,以確認方法中每一個環節的有效性和意義,具體包含如下3點:

1)驗證操作數類型抽象和指令重構意義。

2)驗證指令嵌入網絡對指令行為語義捕獲的貢獻。

3)驗證家族共性指令序列對惡意軟件變體分類能力的提升。

2.4.2 消融實驗過程

為驗證指令重構、指令嵌入和學習通用指令行為序列的效果,對比了5種惡意軟件家族分類方法:

1)以操作碼序列作為樣本特征,采用256位哈希編碼實現操作碼向量化并排列成16×16惡意軟件特征圖像,通過CNN識別惡意軟件家族。

2)以操作碼和操作數組成的原始指令作為樣本特征,采用256位哈希編碼實現指令向量化并排列成16×16圖像,通過CNN識別惡意軟件家族。

3)以操作碼和抽象操作數類型組成的重構指令作為樣本特征,采用256位哈希編碼實現指令向量化并排列成16×16圖像,通過CNN識別惡意軟件家族。

4)以操作碼和抽象操作數類型組成的重構指令作為樣本特征,采用指令嵌入網絡實現指令向量化并排列成圖像,圖像大小為3 000×256,通過CNN識別惡意軟件家族。

5)以操作碼和抽象操作數類型組成的重構指令作為樣本特征,采用指令嵌入網絡實現指令向量化,通過Bi-RNN學習家族共性指令序列并做出指令預測,將重構指令與預測指令合并為雙通道特征圖像,圖像大小為2×3 000×256,通過CNN識別惡意軟件家族,即MCAI。

其中,方法1~方法3網絡結構相關參數見2.5.2節,方法4、方法5中CNN卷積層采用2×2卷積核,池化層采用2×2池化窗口,其余結構見2.5.2節。

2.4.3 消融實驗結果

消融5種惡意軟件家族分類方法1~方法5實驗結果如表2所示。

表2 消融實驗結果Table 2 Results of ablation experiments %

實驗結果表明,消融方法1~方法5在準確率方面分別達到了91.49%、80.99%、92.49%、96.04%和98.51%。方法1僅使用操作碼序列作為樣本特征,準確率達到91.49%,表明操作碼序列可以在很大程度上反映惡意軟件行為。但是在方法2中,結合了原始操作數后,實驗效果顯著下降,表明操作數的含義是每個惡意軟件樣本的特有信息,結合過多的特有信息將導致過擬合。方法3以操作數類型替換原始操作數實現指令重構,準確率有了較為明顯的提升,表明操作數類型有助于指令行為的描述和提取。方法4采用指令嵌入網絡實現指令向量化,相比于方法3中的哈希編碼有較大的提升。經分析,哈希編碼僅關注指令的整體信息,無法提取指令內部各元素之間的關系,而指令嵌入網絡分別從詞、句2個層面提取指令內、外的上下文信息,因此可以更好地學習指令特征,保留指令的行為語義。方法5通過Bi-RNN學習指令通用行為模式,對每條指令進行預測,并將預測結果和原始指令合并為雙通道特征圖像,實現效果優于方法1~方法4,表明Bi-RNN能夠有效學習到指令的序列信息,捕獲指令通用的序列模式。通過合并預測結果和原始指令,加強了屬于同一家族的變體的相似性,可以在一定程度上減小變體技術的影響。

2.5 對比實驗

2.5.1 對比實驗目的

為了驗證MCAI在惡意軟件家族分類任務上的有效性,將MCAI與可視化檢測領域內的優秀算法RMVC[11]、MCSC[10]進行比較。

2.5.2 對比實驗過程

實驗過程如圖6所示。實驗中,設置batch size為128,學習率為0.000 8,設置迭代次數為10 000,L2正則化系數為0.01,詞嵌入維度為256。CNN中,卷積層1采用32個3×256大小卷積核,卷積層2、3均采用64個3×1大小卷積核,所有池化層均采用4×1大小池化窗口,全連接層神經元個數分別為512、256、9。

圖6 對比實驗流程Fig.6 Flowchart of comparative experiments

2.5.3 對比實驗結果

實驗結果如表3所示。圖7~圖9顯示了3種方法的精確率、召回率和F1值??梢钥吹?,本文方法在各項指標上均有所提升。此外,數據集中的Simda家族有42個樣本,占樣本總數的0.39%,處于嚴重不平衡狀態。從實驗結果中看出,RMVC在不平衡數據上的效果較差,受數據分布的影響較大;MCSC則表現較好,能一定程度應對數據不平衡問題;而本文方法在Simda家族上的分類結果達到了96%,對數據不平衡問題有較強的魯棒性。

表3 對比實驗結果Table 3 Comparative experimental results %

圖7 對比實驗精確率Fig.7 Precision of comparison experiment

圖8 對比實驗F1 值Fig.8 F1-score of comparison experiment

圖9 對比實驗召回率Fig.9 Recall of comparison experiment

3 結 論

針對基于匯編指令的惡意軟件家族分類方法操作數語義與運行環境密切相關而難以提取,導致指令語義缺失,難以正確分類惡意軟件變體的問題,本文提出了一種融合抽象匯編指令和家族共性指令序列的惡意軟件家族分類方法。

1)通過操作數類型抽象重構匯編指令,使操作數語義脫離運行環境的約束,解決了操作數語義依賴于運行環境而難以提取的問題,進一步增強了指令行為描述的充分性和完整性。

2)通過word2vec、Bi-GRU和詞注意力機制構建指令嵌入網絡,實現指令向量化,并分別從指令內和指令間學習上下文信息,使指令的向量表示中包含更豐富的行為語義。

3)通過Bi-RNN學習指令的序列信息,捕獲家族共性指令序列,并對每條指令給出預測指令,能夠一定程度上發現并還原變體技術對指令的干擾和微調,減小代碼混淆等變體技術對指令序列的影響。同時,結合預測指令和原始指令構建雙通道惡意軟件特征圖,加強了屬于同一家族的變體的相似性,進一步提升了家族分類效果。

猜你喜歡
卷積指令語義
基于全卷積神經網絡的豬背膘厚快速準確測定
基于FPGA的卷積神經網絡加速優化方法
基于圖像處理與卷積神經網絡的零件識別
一樣,不一樣
《單一形狀固定循環指令G90車外圓仿真》教案設計
基于深度卷積網絡與空洞卷積融合的人群計數
新機研制中總裝裝配指令策劃研究
漢語依憑介詞的語義范疇
太空第一人
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合