齊彩云,胡勇
(四川大學電子信息學院,成都 610065)
目前,惡意軟件是信息安全領域的一個重要挑戰。根據McAfee[1]的數據,在2018年第一季度,檢測到超過7億個惡意程序。2018年4月10日,Spring官方宣布Spring Data Commons存在遠程代碼執行漏洞(CVE-2018-1273),攻擊者可構造包含有惡意代碼的SPEL表達式實現遠程代碼攻擊,直接獲取服務器控制權限。GandCrab勒索病毒于2018年1月面世以來,短短一年內歷經多次版本更新。從今年9月份V5版本面世以來,出現了多個版本變種,并將感染主機桌面背景替換為勒索信息圖片。2018年5月,Talos團隊發現一款名為VPNFilter的惡意軟件。該惡意軟件具有多種功能,可支持情報收集和破壞性網絡攻擊操作,可感染71款甚至更多物聯網設備。
雖然越來越多的惡意軟件出現,但是大多數新的惡意程序是已知的惡意樣本變種的,這些惡意軟件可以分為不同的類型,因而每個相同類型的惡意軟件都具有高度相似的行為特征。因此,屬于同一類型的惡意樣本之間的這些共同的特征可以用于對未知程序的檢測和分類。Nataraj等人將惡意代碼二進制文件映射為圖像,利用Gabor濾波器多尺度和多方向的特點提取圖像的全局特征,然后使用最近臨近算法對惡意代碼那進行分類。Kancherla等人將惡意代碼圖像的強度特征和小波特征與Gabor濾波器提取的全局特征結合,然后使用這三種特征對惡意代碼進行分類。Hanks等人將惡意代碼圖像的熵值映射到曲線上,然后計算曲線的相似度對惡意代碼分類。Farrokhmanesh等人將惡意代碼映射為灰度圖,使用三種哈希算法提取惡意代碼的指紋,然后計算圖像指紋之間的距離對惡意代碼分類。由于存在惡意代碼二進制文件重新分配問題,所以上述惡意代碼分類方法分類效果并不理想。
卷積神經網絡是一種基于“輸入-輸出”直接端到端的學習方法,直接利用圖像像素信息作為輸入,最大程度保留了輸入圖像的所有信息,通過卷積操作進行特征的提取和高層抽象,模型輸出直接是識別的結果。模型中的參數可以通過反向傳播和梯度下降方法進行訓練。卷積神經網絡經過訓練后可以自動學習原始數據的特征,并且可以提取學習到的特征并分類。卷積神經網絡的下采樣層和卷積層之間不是全連接的方式,層與層之間也是非線性映射的,通過局部感知野、權值共享、池化三個方面可以減少需要訓練的參數。近幾年,卷積神經網絡在圖像識別、自然語言處理、語音識別等方面應用廣泛,并表現出了很大的發展潛力。在2012年,Image圖像分類挑戰賽[10]上就用到了卷積神經網絡,其分類效果遠遠超過其他方法。因此,由于卷積神經網絡有良好的圖像分類性能,現在已經應用到了網絡流量的檢測與分類研究中[7-8]。文獻[11]提出了一種基于離差標準化的卷積神經網絡(MMN-CNN,Min-Max Normalization Convolutional Neural Network)對流量進行分類,設計了6種不同網絡結構的卷積神經網絡,將所設計的6種不同卷積層結構的卷積神經網絡分別采用平均池化和最大池化進行性能對比,最終選擇輸入層為16×16,卷積層為3×3以及采用最大池化方法的模型,最終準確率高達99.3%。文獻[12]提出了一種基于卷積神經網絡的流量識別技術研究,將輸入層設置為24×24,并根據TCP數據包的有序性和UDP數據包的無序性,對原始的網絡數據進行了擴展,進一步提高了識別率.文獻[13]提出了一種基于深度學習的惡意URL識別,通過正常URL樣本訓練得到URL中的字符的分布表示,將URL轉化成二維圖像,然后通過訓練CNN模型對二維圖像進行特征抽取,最后使用全連接層進行分類,并取得了精度為0.973和F1為0.918的結果。
根據以上研究成果,本文提出了一種基于卷積神經網絡的惡意軟件檢測與分類方法[2-3],即使惡意代碼二進制文件重新分配,在預處理階段也可以將這些二進制數據形成和原惡意代碼相似的圖像,所以該方法可以更準確的將惡意代碼分類,并且提高分類精度。實驗表明,所提出的CNN模型的性能更高,其準確率為99.96%,這表明了其作為準確分類模型的可行性。
在2015年由微軟主辦的基于機器學習的數據分析競賽Kaggle機器學習挑戰賽上,將惡意軟件數據集進行了分類,本文將其惡意軟件數據集作為提出的基于卷積神經網絡的惡意軟件檢測及分類系統的學習和驗證數據[4]。表1顯示了總共10868個惡意軟件,包括9種不同類型,大約200GB。

表1 惡意軟件數據集
在使用傳統的基于機器學習的分類器檢測惡意軟件的研究中,可以發現傳統機器學習的特點是需要根據人工選擇的惡意軟件特征來從已有的數據中擬合模型,從而用于分類。因此,本文提出了一種基于深度CNN的惡意軟件檢測系統,自動選擇圖像的最優特征。CNN通過對圖像進行卷積和池化運算來提取圖像的最優特征。它的運算由式(1)定義:

向量v'1的元素為式(1)中第一個卷積層的輸出,并對前一層的輸出向量yl-1進行卷積,filter為m×m的向量W。Max-pooling計算在池化層中進行,從輸入N×N矢量的K×K區域選擇一個最大值代表這一部分的特征,輸出為矢量。
圖1顯示了基于卷積神經網絡的惡意軟件檢測系統的總體結構。首先對惡意軟件映像的二進制文件重復執行3×3卷積和2×2池化計算。最后,使用完全連接層。在圖像分類中主要采用了卷積和池化的運算,并取得了較好的分類效果。在此系統中,輸入惡意軟件的圖像就可以輸出惡意軟件的類型。
本文實驗環境及其配置如下:
●CPU:Intel i7-7700K
●內存:16GB RAM
●GPU:NVIDIA GTX 1080Ti
●編程語言:Python 3.5
●深度學習框架:TensorFlow 1.4.0

圖1 惡意軟件檢測系統
為了評估使用方法的性能,本文使用了K-折交叉驗證。將數據集分成K個大小相等的子樣本。在K個子樣本中,保留一個子樣本作為模型測試的驗證數據,其余子樣本作為訓練數據。這個過程重復的次數與折疊次數相同,每個子樣本都只作為驗證數據使用一次。此外,為了選擇最佳模型,還使用了其他評價指標:精確度、召回率和F1得分。這是因為精度可能是一種誤導性衡量標準。當存在較大的類別不平衡時,可能需要選擇具有較低精度但對問題具有較大預測能力的模型(也就是說精度悖論)。其中模型可以預測多數類別的值,并且在少數或關鍵類別出現錯誤的同時實現高分類準確度。精度(P)是真陽性率(Tp)除以真陽性率(Tp)與假陽性率(Fp)之和所得商。

召回率(R)是真陽性率(Tp)除以真陽性率(Tp)與假陰性率(Fn)之和所得商。

F1的分數是精度的加權平均值,定義如下:

由于本文的目標任務是一個多類別分類問題,所以使用的是F1分數的一個改編版本,稱為宏平均F1分數,它定義為每個類的單獨F1分數的平均值。

其中q是數據集中的類數,F1i是第i類的F1分數。因此,大類不會在小類上占主導地位。
為了保證輸入到卷積神經網絡的數據大小一致,所以本文將圖像降采樣到固定大小,將所需圖像的高度和寬度設置為128×128。如果將圖像的高度和寬度設為較低的值將不能保留所有重要的信息,而設置為較高的值在不提高總體精度的情況下會增加計算時間。例如,將圖像降采樣到16×16像素,則來自KELIHOS v.1類型和VUNDO類型的樣本將會彼此無法區分,如果將圖像降采樣到64×64像素,則該模型正確分類VUNDO類型的樣本的百分比是50.45%,如果將圖像降采樣為128×128像素,則該模型正確分類VUNDO的百分比將達到97.1%。此外,本文進行了5折和10折交叉驗證來評估此惡意軟件檢測模型。表2和表3顯示了對于5次交叉驗證和10次交叉驗證獲得的檢測結果。

表22015 年的數據集使用128×128像素的圖像進行5折驗證

表3 2015年的數據集使用128×128像素的圖像進行10折驗證
表4顯示了其他文獻中的方法獲得的結果,這些方法都是從數據集中提取基于圖像的特征以對惡意軟件進行分類。納拉亞南等人[5]使用PCA提取前10、12和52個主成分,使用不同的機器學習分類算法對惡意軟件進行分類。此外,Ahmadi等人[6]從圖像中提取Haralick特征和LBP特征,并訓練了集成樹用于分類。他們的方法分別使用5倍和10倍交叉驗證進行評估。由評估結果可以看出,本文的方法優于其他方法。

表4 2015年的數據集分類方法的性能比較
本文提出了一種基于灰度圖像可視化的惡意軟件分類的深度學習系統,這是一種應用深度學習將惡意軟件的二進制內容轉換為圖像的模式。該解決方案具有許多優點,允許在實時環境中檢測惡意程序。首先,該系統與執行的文件無關,而是完全基于可執行文件的二進制代碼。其次,將可執行文件轉換為灰度圖像的成本較低。第三,預測時間比其他方法要更短。第四,與以往基于惡意軟件灰度圖像表示的方法相比,該方法具有更高的分類準確率。
盡管本文提出的方法在準確性和分類時間方面能夠優于其他的方法,但它存在一些與惡意軟件作為灰度圖像的可視化相關的問題。雖然可以看到屬于同一類型的惡意軟件的可視化具有相似的模式,但是由于某些壓縮或加密的樣本可能具有完全不同的結構,所以這種方法所達到的效果不佳。針對這種情況,筆者認為可以將卷積神經網絡提取的特征與手動提取的特征相結合作為基于不同類型文件特征的機器學習模型的輸入[9]。