李 怡,李 進
(空軍工程大學防空反導學院,西安,710051)
近年來,互聯網上的惡意代碼數量呈井噴式增長,已成為互聯網安全的主要威脅之一。《2020年中國網絡安全報告》[1]顯示:2020年瑞星“云安全”系統共截獲病毒樣本總量1.48億個,病毒感染次數3.52億次,病毒總體數比2019年同期上漲43.71%。與此同時,為了躲避殺毒軟件的檢測,攻擊者采用各種混淆技術對惡意代碼進行變種,使其隱蔽性大大增強,安全檢測難度加大,因此對惡意代碼及其變種進行高效檢測是互聯網安全目前面臨的巨大挑戰。
惡意代碼檢測主要分為靜態檢測和動態檢測。靜態檢測[2]指不實際運行樣本,通過反編譯工具將惡意代碼反匯編為可讀的二進制源代碼,從中提取操作碼和API等靜態特征對其進行分析。動態檢測[3]指在安全可控的虛擬環境中運行樣本,根據惡意代碼對操作系統的資源調度行為進行分析。然而這些傳統方法需要依賴大量人工特征工程,比較耗時,也無法有效檢測惡意代碼變體。近年來,研究人員在傳統檢測方法的基礎上,將惡意代碼二進制文件可視化為圖像,然后結合深度學習對惡意代碼家族進行分類。卷積神經網絡[4]是深度學習中最具代表性的技術之一,近年來在自然語言處理、文本處理和圖像識別等領域發展迅速,它可以自動學習輸入數據的特征而不需要人工參與。Cui等人[5]提出了一種基于CNN的惡意軟件變體檢測模型,將惡意代碼轉化為灰度圖,并使用BAT算法解決了惡意代碼樣本家族數量不平衡的問題。王國棟等人[6]提出基于CNN-BiLSTM的惡意代碼家族檢測模型,該模型可以從惡意代碼灰度圖中自動學習特征,大大降低了人工提取特征的成本,同時BiLSTM可以關注更多的局部和全局特征。但隨著惡意代碼變種越來越多樣化,淺層卷積神經網絡已不足以提取復雜的紋理特征,于是一些深層卷積神經網絡被用于惡意代碼家族檢測中,如:Alexnet[7]、VGGNet[8]、GoogleNet[9]和ResNet[10]等,這些網絡結構通過不斷加深網絡深度和寬度,使其能夠提取更深層次的特征。蔣考林等人[11]提出一種基于多通道圖像特征和AlexNet神經網絡的惡意代碼檢測方法,多通道圖像比二階灰度圖能體現更多的紋理特征。王博等人[12]利用VGGNet生成惡意樣本分類模型,對惡意代碼RGB圖像進行分類檢測,識別準確率有一定提升。不斷加深網絡深度,一定程度上可以提高惡意代碼識別效率,但同時也會引起模型梯度爆炸,參數量劇增等問題,需要耗費大量的計算開銷。
針對上述現有惡意代碼檢測模型識別率不高且模型參數過大的問題,本文提出一種基于Ghost-DenseNet-SE的惡意代碼家族檢測方法。同時,為進一步提高對惡意代碼家族準確分類的能力,在DenseNet中引入通道域注意力機制,得到特征更顯著的特征圖。通道注意力機制的加入也會增加模型參數量,并使用Ghost模塊替換Dense Block的卷積層,以達到保證模型檢測精度的前提下減少模型參數,最終實現惡意代碼家族檢測模型的輕量化,使其能更好地部署在資源有限的平臺上。
DenseNet是Huang G[13]等人提出的一種具有密集連接的卷積神經網絡。該網絡結構主要由稠密塊 (Dense Block)和過渡層(Transition Layer)組成,模型結構見圖1。DenseNet網絡結構中包含了多個Dense Block模塊,其中每個Dense Block由BN-Relu-Conv(3×3)組成;每兩個相鄰的Dense block之間的Transition Layer由BN-Relu-Conv(1×1)(filternum:m)-doupout-Pooling(2×2)組成。

圖1 DenseNet結構
1.1.1 稠密塊(Dense Block)
在Dense Block模塊中,任意兩層之間有著密切的聯系,其內部結構見圖2,將所有層的特征進行相互拼接,即對任意一層之前的所有層的輸出結果進行疊加作為該層的輸入,然后把該層的結果和之前層的輸出結果作為下一層的輸入傳輸下去。

圖2 Dense Block內部結構
對于L層網絡而言,第l層的輸入由式(1)得出:
xl=H([x0,x1,…,xl-1])
(1)
式中:x0,x1,…,xl-1分別表示第0層到第l-1層所對應的特征圖;
[x0,x1,…,xl-1]表示對第0層到第l-1層的所對應的特征圖進行級聯;
Hl(?)表示包含BN,Relu和Conv 3種操作的復合函數。
在Dense Block中每個復合函數Hl(?)可以輸出k個特征圖,則第l層會輸入k0+k(l-1)特征圖,其中k0表示輸入層的的通道數channel。k也稱為網絡的生長率(groeth rate),它是一個超參數,用來避免網絡增長過快。
1.1.2 過渡層
過渡層用來連接兩個相鄰的密集塊,通過池化來降低特征圖的大小,讓模型變得更緊湊。為了進一步壓縮模型尺寸,引入壓縮因子θ,取值范圍為(0,1]。當密集塊輸出m個特征圖時,過渡層通過卷積可以產生θm個特征。θ<1時,特征圖數目壓縮為原來的θ倍;θ=1時,不壓縮。
通道域注意力機制常被用于卷積神經網絡中,對圖像中的重要信息部分進行可視化[14]。該機制的核心架構單元為Squeeze-and-Excitation(SE) Block[15],內部結構如圖3所示。首先使用Squeeze(擠壓)操作作用于經過卷積池化操作的特征圖,使其在通道上得到特征圖的全局信息;然后使用Excitation(激勵)操作來獲得通道之間的依懶性,得到不同通道的權重,該操作采用Sigmoid(門函數);最后對最終特征圖進行Scale操作。

圖3 Squeeze-and-Excitation Block內部結構
Squeeze操作是對圖像進行全局平均池化操作,即對得到的每個特征圖進行空間維度上的壓縮,結果得到該層C個特征圖的全局信息。見式(2):
(2)
Excitation操作是對Squeeze得到的1×1×C征圖先進行全連接層操作,在全連接層操作中引入縮放因子(reduction ratio)來減少通道數量從而減少計算量;再將其結果經過Sigmoid(門函數)得到C個特征圖的權重,通過權重來表示通道之間的依賴程度,最終使得神經網絡能夠自主學習到不同通道的關鍵信息,見式(3):
x=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
(3)

Scale操作是將原特征通道值與Excitation相乘得到的不同權重,從而加強對原特征圖的關鍵通道域的注意,得到新特征圖并輸入到下一層,如式(4)所示:
XC=Fscale(uC,sC)=sC·uC
(4)
Ghost模塊是Han等人從特征圖的冗余問題出發,提出的一種輕量化卷積模塊[16]。該卷積模塊通過一系列線性操作來生成更多的特征映射,在不改變輸出特征圖大小的情況下,既保證了模型的精度,又減少了模型參數,達到了網絡模型輕量化的效果。
Ghost模塊分兩步進行,內部結構如圖4所示。第1步先通過普通卷積生成少量真實的冗余特征圖Y;第2步對第1步生成的少量真實冗余特征圖進行線性變換,獲得另一部分冗余特征圖Y′;最后將兩部分冗余特征圖拼接在一起,組成完整的冗余特征圖。

圖4 Ghost模塊內部結構

惡意代碼二進制位字符串可以分為多個長度為8 bit的子字符串,這些子字符串中的每一位都可以被視為一個像素,因為這8 bit可以解釋為0~255范圍內的無符號整數,其中0為黑色,255為白色。選取連續的3個子字符串,分別對應于彩色圖像中的R、G、B3個通道,即第1個8 bit字符串轉化為R通道的值,第2個8 bit字符串轉化為G通道的值,第3個8 bit字符串轉化為B通道的值;重復這一操作使得所有數據都被選完(最末段端數據量不足3字符串的,用0補足)。利用該原理,二進制惡意代碼便轉化為十進制數字的一維向量,固定256為行寬向量,高度根據文件大小變化。最終,惡意代碼被解釋為RGB圖像,具體流程如圖5所示。

圖5 惡意代碼可視化過程
本文提出的基于Ghost-Densenet-SeNet的惡意代碼家族檢測模型,首先利用惡意代碼可視化技術將惡意代碼轉化為RGB圖像,然后用提出的模型對圖像數據集進行訓練,最終實現對惡意代碼家族的分類識別。本文使用密集連接網絡DenseNet作為主干網絡,既緩解了傳統卷積神經網絡因不斷加深網絡深度和寬度而帶來的梯度消失和參數量劇增問題;同時鼓勵特征復用,能夠提取惡意代碼圖像更豐富的特征。然后在DenseNet中引入通道域注意力機制,得到特征更顯著的特征圖,進一步提高對惡意代碼家族準確分類的能力。最后使用Ghost模塊去重構Dense Block的卷積層以減少模型參數,使得模型能更好地部署在資源有限的移動端。
在將圖像數據集輸入到模型中時,先做一次卷積操作,然后進入第1個Dense Block,一共使用了3個Dense Block。每2個Dense Block之間連接1個Transition Layer,共2個Transition Layer。在最后一個Dense Block之后引入SE,得到特征更顯著的特征圖,SE中共兩個全連接層,在第1個全連接層中引入縮放因子ratio來減少通道數,具體數值通過實驗調優來設置。為減少因引入SE而增加的模型參數,使用由1個點卷積和1個5×5的通道卷積組成的Ghost模塊替換除第1層卷積之外,所有Dense Block中的3×3標準卷積。最后在SE后連接1個全局平均弛化和1個有25個神經元的全連接層,以實現對惡意代碼家族的分類。
本文的惡意代碼家族檢測模型訓練與檢測過程相關算法如表1所示。

表1 惡意代碼家族檢測模型訓練與檢測過程相關算法
本文選取公開數據集Malimg,此數據集包括25個不同家族的惡意樣本,共9 339個,具體樣本種類和數量分布如圖6所示。

圖6 Malimg惡意代碼樣本種類和數量分布
卷積神經網絡要求輸入的圖像大小要相同,而不同大小的惡意代碼二進制可執行文件轉化成的RGB圖像尺寸不同,因此在輸入神經網絡之前需要先將圖像處理為大小一致的圖片。本文所使用的模型要求輸入的RGB圖像尺寸為224×224,為了確保圖像紋理信息的完整性,本文先對圖像的邊界部分使用0 byte填充使其成為正方形,然后等比例縮放至224×224大小。圖7顯示了部分惡意代碼家族二進制文件預處理后的圖像示例,由上到下依次是:Adialer.C家族,VB.AT家族和Skintrim.N家族。從這些圖像示例中可以看出,同一家族的惡意代碼在圖像紋理性上具有相似性,而不同家族的惡意代碼在圖像紋理性上具有差異性。



圖7 部分惡意代碼家族圖像
在實驗過程中,本文使用以下5個評價指標對本文提出的惡意代碼檢測模型進行評估:A為準確率(Accuracy),P為精確率(Precision),R為召回率(Recall),F1為F1-score,L為損失率(Loss)。
TP為正類樣本被模型預測為正類的比例;TN為負類樣本被模型預測為負類的比例;FP為負類樣本被模型預測為正類的比例;FN為正類樣本被模型預測為負類的比例。
(5)
(6)
(7)
(8)
(9)

本次實驗在Centos7系統環境下進行,硬件配置:Intel(R) Xeon(R) Silver 4110 CPU @ 2.10 GH,GPU型號為 Quadro RTX 5000/Pcle/SSE2,CUDA 11.0。軟件平臺為PyCharm,使用Phthon3.8編程,訓練與測試框架為深度學習開源框架Keras2.4.3和 TensorFlow2.4.1。
3.4.1 壓縮比影響實驗
本實驗將惡意代碼圖像數據集按照8∶1∶1的比例隨機劃分為訓練集、驗證集和測試集。Epoch設置為100,Batch Size設置為32。實驗模型采用加入通道域注意力機制的密集連接網絡DenseNet,其學習率、壓縮比、損失函數等參數的設置都會影響惡意代碼檢測的精度。模型采取交叉熵損失函數來衡量真實值與預測值之間的差異,采用Adam優化器對網絡進行優化,學習率選用經驗值0.001,最終通過softmax函數進行分類。通道域注意力機制中的超參數ratio通過實驗獲取最合適的值。壓縮比ratio對惡意代碼檢測性能的影響如表2所示:

表2 壓縮比r對檢測結果的影響
經上述實驗,通過權衡模型的準確率和參數量,最終將超參數ratio設置為4。本文提出的方法實驗結果如圖8所示,隨著測試次數的增加,精確度和交叉熵損失值會收斂到一定值,模型逐漸收斂、平穩。在這100次迭代過程中,選取測試集中準確率最高的值為模型的準確率,相應的損失值即為該模型的損失值,本模型的準確率可達到99.14%。


圖8 Ghost-DenseNet-SE檢測模型實驗結果
3.4.2 模型性能對比
為了進一步驗證本文所提的加入通道域注意力機制的DenseNet模型對惡意代碼家族有更高的識別準確率,將其與文獻[11]中的AlexNet檢測模型與文獻[12]中的VGGNet檢測模型進行比較。采用準確率、召回率、F1-score和損失值等作為評價指標,實驗結果如表3、圖9所示。

表3 各模型實驗結果對比


圖9 各模型實驗結果對比
從上述表和圖可以看出,在實驗數據不變的情況下,結合通道域注意力機制和密集連接網絡DenseNet的惡意代碼家族檢測模型效果最好,準確率高達99.17%,對比文獻[11]中的AlexNet和文獻[12]中的VGGNet分別提高了1.37%和3.01%,召回率和F1-score也均高于文獻中的兩種模型,模型收斂速度也更加迅速;同時DenseNet-SE的損失值也最低,表明該模型的檢測結果與真實值更接近。在沒有加入注意力機制之前,僅采用DenseNet,準確率也高于其余兩種模型,這是由于Dense Block采用密集連接方式,使所有層之間的特征都相互聯系,加強了特征傳播,因此DenseNet網絡對惡意代碼圖像特征的提取能力更強。在DenseNet中加入注意力機制后,準確率提高了0.97%,說明該機制為通道分配不同的權重,能夠得到信息更顯著的特征通道。因此DenseNet-SE模型在惡意代碼家族識別準確率和收斂速度上有更優越的性能。
實驗除對各模型準確率進行對比外,還對各模型參數進行對比。在提高惡意代碼檢測精度的前提下,減小模型體積也是優化模型的目標之一,模型參數對比結果如表4所示。

表4 各模型參數量對比
由上表可以清晰地看出,DenseNet網絡對于AlexNet準確率雖只提高了0.4%,但是模型參數卻大大減少,對比VGGNet模型參數量也明顯減少。這還是由于DenseNet各層間密集連接的方式,傳統CNN有L個連接,而DenseNet只有L(L+1)/2個連接。通道域注意力機制的引入,會導致模型參數量增加,在此基礎上用輕量化Ghost模塊重構Dense Block的卷積層,參數量減少了39%,模型體積得到了有效的壓縮,同時準確率只下降了0.03%,幾乎無損精度。結合輕量化Ghost卷積,密集連接網絡DenseNet和通道域注意力機制SE的惡意代碼家族檢測模型最終綜合性能優于其它檢測模型,證明了本文所提方法的有效性。
本文針對現有惡意代碼家族檢測模型存在識別準確率不高,且模型參數太大,難以在實際環境中運行等問題,提出一種基于Ghost-DenseNet-SE的惡意代碼家族檢測方法。將DenseNet作為主干網絡,該網絡對各層使用密集連接的方法,解決了由于加深網絡帶來的模型退化問題,減少了模型參數,又加強了特征傳遞。在提高模型準確率方面,同時探索了計算機視覺中的通道域注意力機制,發現該機制通過為特征通道分配不同的權重,能夠對惡意代碼RGB圖像紋理特征的關鍵信息進行增強,進而提高原有模型的檢測效果。在減少模型復雜度方面,使用輕量化Ghost模塊對Dense Block的卷積層進行重構,減少了參數量,壓縮了模型體積。實驗結果表明,本文提出的方法在提高惡意代碼家族檢測精度的同時,又能減少參數量,降低模型復雜度,一定程度上解決了大批量惡意代碼檢測過程中的資源浪費問題。但本文方法還存在一定不足,模型訓練時內存開銷太大,后續工作將進一步研究保證模型檢測精度與計算參數的同時,較少的模型內存開銷使其能更好地部署在資源有限的移動端上。