?

一種基于FastText 的惡意代碼家族分類方法

2024-01-10 17:05張宇迪馮永新趙運弢
沈陽理工大學學報 2024年1期
關鍵詞:家族準確率向量

張宇迪,馮永新,趙運弢

(沈陽理工大學信息科學與工程學院,沈陽 110159)

隨著網絡普及率越來越高,網絡信息交互越來越多,網絡攻擊者會編寫影響范圍更廣、更具隱蔽性的惡意代碼以達到破壞網絡、竊取信息等非法目的[1],該類惡意代碼大多使用變形或多態技術躲避計算機殺毒軟件的檢測。 惡意代碼家族是指具有相似功能、相同來源和不同演進程度的惡意代碼集合[2],其分類研究可以視為對不同惡意代碼的相似性、關聯性判斷,有助于研究人員發現同類型的變異代碼并快速了解惡意代碼感染策略、威脅級別[3]等信息,進而采取針對性措施防止惡意代碼對網絡的破壞。

目前已存在多種惡意軟件和快速更新的反檢測技術[4],惡意代碼的檢測可根據是否實際運行代碼樣本分為靜態檢測和動態檢測。 與動態檢測技術相比,靜態檢測技術具有能耗低、風險低、速度快和能識別非觸發性、潛伏性的惡意行為等優點。 在針對API 序列的靜態檢測技術中,人工神經網絡與詞向量的結合顯示出獨特優勢[5]。 例如,使用長短時記憶網絡(LSTM)和循環神經網絡(RNN)提取相關特征的模型和使用Apigraph技術[6]加強訓練的Android 和Windows 惡意代碼檢測系統。 王博等[7]將二進制序列分割成RGB三通道,采用VGGNet 模型針對惡意程序變種的代碼復用進行分類檢測,該模型的準確率可達96.16%。 楊宇夏等[8]將N-grams 特征與惡意代碼灰度圖相結合,用于解決樣本大小不一的問題并從文本和灰度圖兩個維度同時提取特征,實驗結果表明該文提出的融合特征模型準確率可達98%。 王棟等[9]基于VGG 模型構建了一維卷積分類網絡模型ID-CNN-IMIR,相較于其他深度學習模型具有更好的性能,準確率可達98.94%。 靜態分析的缺點是容易受到混淆的影響,可直接分析原始程序代碼的語法和語義,進而提取到更深層次的特征。

在針對 API 序列的靜態檢測中, 常用word2vec 模型將 API 序列映射為詞向量。word2vec 首先生成詞典,再將此詞典中的所有API 函數映射為詞向量。 所生成的詞向量僅是樣本語義到向量的簡單映射,局限于API 函數的順序特征且依賴詞典,缺乏對詞典外的API 函數表征能力。 惡意代碼隨著混淆技術的發展,執行程序的復雜程度大大提升,如何進一步表征API 序列的內在特征變得尤為重要。

1 面向惡意代碼檢測的FastText 框架分析與設計

在惡意代碼家族分類中,受文獻[10]啟發,本文對收集的API 數據進行向量化。 由于卷積神經網絡(CNN)和長短時記憶(LSTM)網絡在特征提取方面效果突出,二者相結合的深度學習模型對局部特征的提取更加完備,因此采用基于詞嵌入的CNN + LSTM 作為主要網絡模型。 針對word2vec 只是對樣本語義的簡單映射[11],對低頻和相似API 函數映射不準確的不足,采用基于Ngram 特征的FastText 框架結合負采樣技術進行向量化,使用CNN +LSTM 的深度學習模型進行訓練,稱為FastText +CNN + LSTM 模型。 FastText模型是Facebook 公司一個開源的NLP 工具[12],主要應用于文本序列的向量化和快速分類。 其詞向量的訓練既可以有監督也可以無監督,訓練完成后的詞向量可進一步應用于其他模型或特征選擇等任務。 FastText 模型本質上是對word2vec 中詞袋模型(CBOW)的改進,并配合一個預訓練好的線性分類器[13]使用,可采用邏輯回歸模型、支持向量機等。 本文首先通過實驗研究FastText 框架中每個API 函數被分解的最小字段長度n取值對模型整體性能的影響,確定最佳的n值,并與傳統的embedding +CNN+LSTM 模型和word2vec模型進行對比,最后通過十折交叉實驗對模型性能進行驗證。

1.1 基礎框架

FastText 的組成主要分為輸入層、隱藏層和輸出層三部分。 通過輸入層將樣本文本轉為對應的N-gram 特征向量[14],在隱藏層中進行輸入向量的疊加平均,輸出層采用歸一化指數函數[15](Softmax)預測結果。 本文使用FastText 輸入層對API 調用序列進行向量化,該層主要結構如圖1 所示。

圖1 FastText 輸入層結構圖Fig.1 FastText input layer structure diagram

FastText 模型的輸入層由兩部分向量組成[16],分別是分詞詞典中對每個API 函數的詞嵌入(embedding)向量{wj,1,wj,2,…,wj,n}和經過Ngram 特征取詞后的embedding 向量{wt,1,wt,2,…,wt,n},其中j和t分別為同個API 函數兩個分向量的編號,n為兩個分向量的維度,通過兩個向量相加操作得到模型需要的詞向量{wj,1+wt,1,wj,2+wt,2,…,wj,n+wt,n}。 由上述過程可以看出,Fast-Text 模型對API 序列處理具有N-gram 特征。

為達到分類的效果,FastText 模型的目標是將極大似然轉換為對數似然,并最小化該目標函數。 目標函數的計算方法為

式中:Yi表示第i個惡意樣本對應的標簽值;k為負樣本數;f表示使用Softmax 函數預測類別;是權重矩陣[17];Xi為第i個樣本特征向量。Xi表達式為

式中:func 是疊加平均函數,計算輸入API 函數序列的特征向量;是權重矩陣;(v1,v2,…,vn-1,vn)是輸入樣本中的N-gram 取詞后的詞向量。

1.2 面向API 序列的負采樣FastText 模型優化

FastText 根據前后API 序列預測當前位置API 函數出現概率,其訓練需要通過輸入樣本不斷調整神經元的權重提高對目標預測的準確率。當文本較復雜時,需要消耗較大的算力調整模型,并且向量化的API 函數數量眾多,會導致對低頻API 的映射精確度下降[18]。 因此,本文引入負采樣技術對FastText 模型進行優化。 負采樣技術通過引入負例,每次只更新與目前待訓練API 有關的部分神經元,降低了運算量并改善了輸出詞向量的質量。

負采樣優化首先確定中心API 函數并設置窗口長度,以中心API 函數的前后序列作為正樣本,采用詞匯表中其余API 函數為負樣本,通過二元邏輯回歸求解每個API 函數對應的待訓練參數[19]和中心API 對應前后序列每個API 的詞向量[20]。 將正負樣本采用二元回歸模型進行分類,根據鏈式法則和激活函數以梯度上升法對二元回歸模型的可訓練參數進行優化。 基于負采樣優化的FastText 模型及其訓練流程如圖2 所示。

圖2 FastText 模型及其優化流程示意圖Fig.2 FastText model and its optimization process diagram

負采樣優化的FastText 首先從輸入API 序列(長度為m)中隨機抽取一個樣本{x1k,x2k,…,xCk},其中C為樣本維度數,經過FastText 模型處理生成一個詞匯表,以中心API 函數和其前后序列包含的API 函數作為正樣本,通過負采樣技術在詞匯表中抽取負樣本。 每個正樣本經權重矩陣初始化后在隱藏層進行求和運算,得到詞向量;再與輸出權重矩陣進行相乘得到中心API 前后序列的輸出向量;經激活后得到該向量的概率分布,最大概率索引的API 為FastText 預測的API 函數。由此,最小化輸出向量的目標函數由式(1)轉變為

式中:AContext為正本集合;P(wt|AContext(wt))表示wt為正樣本的概率。

優化后正樣本的似然函數為

式中:AContext和BNEG分別表示正負樣本集合;Xw為正樣本中各API 函數的向量和;θa為隱藏層與輸出層間待優化的映射參數;Lw(a)用于判別分類情況,模型判定為正樣本時為1,否則為0。

本文模型所用損失函數可進一步表示為

通過隨機梯度上升法迭代更新FastText 訓練詞向量時所需參數組為Xw和θa,Loss函數用于計算參數組的損失函數和梯度,Xw是正樣本中心API 函數所對應的前后窗口中所有向量的加和。在迭代過程中,θa的梯度加和會影響前后序列中API 函數對應的向量,每個API 函數對應的詞向量也會根據Xw和θa進行更新。

在惡意代碼家族分類的應用中,本文所提出的FastText + CNN + LSTM 模型相較于傳統word2vec 模型具有以下優點:

1)由于引入了N-gram 特征,使模型對低頻API 函數的映射加強了局部表征能力,提升了對低頻和相似API 函數的映射準確度,進而提升了模型性能;

2)對未收錄在token 詞典中的API 函數仍可從字符級的N-gram 特征中構造詞向量,因而可以對詞典外API 函數進行向量化,增加了模型的普適性。

2 FastText +CNN +LSTM 惡意代碼家族分類模型的構建

本文在FastText 框架下搭建模塊化的深度學習分類模型FastText +CNN +LSTM,該框架的惡意代碼家族分類模型面向Windows 系統文件,主要分為數據預處理模塊、惡意代碼特征預提取模塊和深度學習模塊。 FastText 惡意代碼家族分類模型示意如圖3 所示。

圖3 FastText 惡意代碼家族分類模型示意圖Fig.3 Schematic diagram of FastText malicious code family classification model

2.1 數據預處理模塊

數據預處理模塊的主要功能是獲取樣本文件并從文件PE 頭中提取該樣本的API 調用序列,最終在FastText 中完成向量化。 PE 頭中提取特征保存為.json 格式,再轉存到Windows 系統的.csv文件中;根據預先標注信息為數據添加標簽;使用NLP 工具進行分詞、生成token 詞典等;使用Fast-Text 生成詞向量。

傳統的word2vec 會把token 詞典中的每個單詞視為一個基本單位,然后針對每一個基本單位訓練該單位所對應的唯一多維向量,word2vec 忽略了單詞內部形態特征的聯系。 例如在Windows系統創建網絡鏈接和重定向到網絡中常調用的API 函數“WNetAddConnection2A”和“WNetAddConnection2W”,兩個API 函數功能完全一致,字符組成(內部形態)極為相近,但word2vec 框架分別對其生成對應的向量,單詞內部形態信息因為分別進行的向量化而丟失,導致對包含兩個API函數的樣本學習時產生偏差。

通過計算不同框架對相似API 函數映射向量的距離和相似度,可以清晰對比兩種模型處理相似API 函數的性能區別。 表1 列出了n=7 時FastText 框架對上述兩個API 函數取子詞順序,并對比了word2vec 框架和FastText 框架對兩個API 函數的映射詞向量、向量間歐氏距離和向量間相似度。 表中“ <”和“ >”分別代表前綴和后綴,是邊界符號。

表1 word2vec 詞向量與FastText 詞向量對比表Table 1 Comparison of word2vec word vector and FastText word vector

通過表1 中拆解兩個API 函數所對應的子詞信息可以看出,二者只有最后兩個子詞不同,本文模型先將API 函數對應的子詞映射為向量,再與詞典中的embedding 信息所映射的向量相加,映射成該API 函數在FastText 框架下的向量,送入后續模型進行訓練。 因此,字符組成上相近的API 函數對應的詞向量也較為相近,FastText 生成的兩個詞向量相似度高于word2vec。 通過表1 中計算兩者歐氏距離可發現,FastText 生成的相似API 詞向量具有更小的多維空間距離,相較于word2vec 減小了約60%,相似度提升約6%,說明FastText 可有效處理相似API 函數之間的映射問題。

惡意代碼程序的API 序列包含操作較多,若將其轉換為one-hot 編碼,稀疏性通常較大,不僅會導致算力浪費,還會影響模型的性能。 因此,數據集向量化后需經過詞嵌入層進行初步降維。 嵌入層的核心思想是將高維的稀疏向量映射到低維的密集向量。 在惡意代碼API 序列生成的字典中,經過FastText 框架預處理后,共有1 860 個單詞(API 函數),嵌入層的輸出維度與FastText 相同,輸出維度為50,該層接受的序列最大長度為200。

2.2 惡意代碼特征預提取模塊

詞嵌入層降低了原始單詞向量的維數,但向量維數仍然較高,LSTM 無法準確提取向量中的重要特征[21],導致算力的浪費和模型性能的低下。 因此,數據在深度學習模塊之前需要在特征預提取模塊中處理,以提取API 向量的初步特征,有助于提升訓練速度和特征提取的精確度。 該模塊采用一維卷積層[22],其卷積核大小為3 ×3,步長為1,激活函數為ReLU,輸出矩陣維度為200 ×128。

卷積層的參數誤差引起的估計平均值偏差,是API 詞向量卷積運算的主要誤差。 采用最大池化層可以有效地避免該誤差[23],并保留更多紋理信息用于后續學習。 惡意代碼的API 序列中的非異常操作并不罕見,在良性代碼中也很常見,而該特性會影響模型性能,在惡意代碼分類領域加強背景紋理信息對于準確識別具有重要作用。 在進一步提取最大池化層的特征后,網絡所需的參數數量和算力將大大減少,也有利于防止網絡的過擬合。 卷積層采用下采樣卷積,池化層的池化窗口為2 ×2。

3 實驗

3.1 實驗環境

本文所實現的靜態惡意代碼家族分類針對Windows 系統下的樣本程序,神經網絡模型采用Keras 搭建。 實驗采用的硬件環境為因特爾酷睿CPU(i7-10875H)、16 GB 內存。 軟件環境為Windows10 系統、Python3.8、Tensorflow2.5.0 和Keras 2.5.0。

3.2 數據集與預處理

本文使用Ember 數據集,可以用于以靜態方式訓練惡意代碼家族分類的機器學習模型,是惡意代碼家族分類領域中常見的數據集。 數據集包含Ramnit、Lethic、Sality、Emotet 和Ursnif 五個惡意代碼家族及其變種,以及2018 年及之前掃描的超過100 萬個PE 文件的集合。 PE 文件的功能被拆解并保存為.json 格式,包括90 萬個訓練樣本和20 萬個測試樣本。 數據集中的樣本分布如表2 所示。

表2 數據集樣本分布Table 2 Dataset sample distribution

首先,讀取包含API 函數和標簽的數據集,使用jieba 分詞工具提取API 函數并將其轉換為獨立的單詞,為后續提取字符集的N-gram 特征提供基礎。 使用Tokenizer 工具將分詞后的文本轉換為詞典,本文生成的token 詞典如表3 所示。

表3 token 詞典Table 3 Token dictionary

在FastText 框架下對輸入樣本進行向量化,本文生成詞向量如表4 所示。

表4 詞向量Table 4 Word vector

FastText 生成的詞向量矩陣如表5 所示。

表5 FastText 詞向量矩陣Table 5 FastText word vector matrix

3.3 實驗結果與分析

在惡意代碼家族分類的研究中,模型對不同惡意代碼家族的分類精確率不同,主要是因為數據集本身的不均衡性和不同家族的惡意代碼為了達成主要目的所需API 函數不同。

根據實驗結果,首先研究FastText + CNN +LSTM 模型提取的N-gram 特征中n值對不同惡意代碼家族識別精確度的影響, 然后對比word2vec+CNN +LSTM 模型和FastText +CNN+LSTM 模型性能,最后對本文模型進行十折交叉驗證。

FastText + CNN + LSTM 模型N-gram 取詞時,n值在[1,10]區間內模型對數據集中五個惡意代碼家族的分類精確率影響如圖4 和圖5所示。

圖4 n 在[1,5]區間取不同值對模型的影響Fig.4 The influence of taking different values of n in the [1,5] interval on the model

圖5 n 在[6,10]區間取不同值對模型的影響Fig.5 The influence of taking different values of n in the [6,10] interval on the model

由圖4 和圖5 可以看出,本文模型對于Lethic家族的識別精確率最高,不同的n值對該家族影響較小,精確率始終為98%以上。 該模型對Emotet 家族和Ursnif 家族的分類性能受n值影響較大,在n取值為2 和4 時精確率最高,分別為95%和92%。 該模型在Ramnit 家族和Sality 家族上的識別精確率略低于其他家族,兩個家族的分類精確率受n取值的影響較大,在n取7 時對兩個家族的識別精確率同時達到最大,分別為85%和81%。 綜合考慮模型總體準確率和對每個惡意代碼家族的識別精確率,設置n=6,此時模型綜合性能最符合實際需要。

本文為對比所選框架與傳統word2vec 框架的性能,匯總了幾種模型的準確率和損失函數,如表6 所示。

表6 模型性能對比表Table 6 Model performance comparison

由表6 可以看出,FastText +CNN +LSTM 的準確率和損失函數兩項數據在訓練集和測試集上的表現均優于其余兩種模型,其準確率相較embedding + CNN + LSTM 方法提升約25%,相較word2vec+CNN+LSTM 提升約4.4%,最終在訓練集上的準確率為99.75%。 word2vec +CNN +LSTM 和FastText +CNN +LSTM 準確率對比如圖6 所示。

圖6 準確率對比圖Fig.6 Accuracy comparison chart

由圖6 可見,word2vec 框架在訓練過程中性能始終低于FastText,主要是因為該框架只是對API 序列的簡單映射,造成對詞典外和低頻API函數映射失真。 由于FastText 引進字符級N-gram特征,訓練相對平穩,模型的性能相較word2vec有所提升,最終準確率穩定在99.75%。

圖7 為word2vec + CNN + LSTM 模型和FastText+CNN+LSTM 模型的損失函數對比圖。

圖7 損失函數對比圖Fig.7 Comparison diagram of loss function

由圖7 可見,在40 次迭代前,二者的損失函數值均快速下降,但是在第40 次迭代時兩個模型性能的提升速度均有所放緩,FastText + CNN +LSTM 模型的性能均高于word2vec + CNN +LSTM 模型,最終損失函數為0.004 6。

圖8 為FastText +CNN +LSTM 模型十折交叉驗證結果。

圖8 FastText+CNN+LSTM 模型十折交叉驗證結果Fig.8 FastText+CNN+LSTM model 10-fold cross validation results

由圖8 可以看出,開始時模型性能較低,在第二個子集末期模型準確率可達90%,在約四個子集后模型準確率可達95%以上,最終模型的準確率為99%。 從十折交叉驗證的整體情況可知,該模型由于引入了字符級N-gram 特征,模型收斂速度較快,且可以在性能較高的位置收斂,收斂準確率可滿足惡意代碼家族分類的實際需要。

4 結論

為解決惡意代碼家族分類領域常見模型中對API 調用序列向量化不準確、對低頻及詞典外API函數映射失真等問題而導致模型準確率無法進一步提升的問題,本文提出了一種基于FastText 的惡意代碼家族分類方法。 通過提取樣本代碼所調用API 序列的字符級N-gram 特征,在負采樣技術優化的FastText 中生成詞向量,使用詞嵌入層進行初步降維,并使用CNN +LSTM 模型進行特征提取和訓練,最終在Softmax 全連接層中輸出樣本所屬類別的概率。 通過對實驗結果的分析,本文模型的性能高于傳統 embedding 模型和word2vec 模型,在與word2vec 模型對比訓練過程后證明FastText 模型的訓練過程平穩且收斂性更優,說明該模型在惡意代碼家族分類領域具有較強的適應性,緩解了word2vec 框架對低頻和不均衡API 函數映射失真的問題,進一步提升了惡意代碼家族分類的準確率。

猜你喜歡
家族準確率向量
向量的分解
乳腺超聲檢查診斷乳腺腫瘤的特異度及準確率分析
不同序列磁共振成像診斷脊柱損傷的臨床準確率比較探討
2015—2017 年寧夏各天氣預報參考產品質量檢驗分析
聚焦“向量與三角”創新題
HK家族崛起
《小偷家族》
高速公路車牌識別標識站準確率驗證法
皿字家族
家族中的十大至尊寶
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合