張豪
摘? 要: 傳統(tǒng)的基于機器學(xué)習(xí)的惡意軟件分類方法需要從惡意軟件文件中提取許多特征,這給分類帶來了很高的復(fù)雜性。針對這一問題,提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的惡意軟件分類方法?,F(xiàn)有的惡意軟件樣本由大量字節(jié)組成,該方法首先計算惡意樣本大小并對樣本中字節(jié)數(shù)進行統(tǒng)計。然后將惡意樣本大小特征和字節(jié)統(tǒng)計特征融合并歸一化。最后對基于CNN構(gòu)建的模型訓(xùn)練并對測試樣本進行分類。實驗結(jié)果表明,對比基線實驗中最優(yōu)的XGBoost算法,該方法不僅訓(xùn)練耗時短而且準(zhǔn)確率更高。
關(guān)鍵詞: 惡意軟件分類; 深度學(xué)習(xí); 卷積神經(jīng)網(wǎng)絡(luò)
中圖分類號:TP391? ? ? ? ? 文獻標(biāo)識碼:A? ? ?文章編號:1006-8228(2021)12-48-04
Abstract: Traditional malware classification methods based on machine learning need to extract many features from malware files. This brings high complexity to classification. To solve this problem, a malware classification method based on convolutional neural network (CNN) is proposed. The existing malware samples consist of a large number of bytes. This method first calculates the size of the malware samples and counts the number of bytes in the samples; Then fuses the malicious sample size feature and byte statistics feature and makes the normalization; Finally, the model based on CNN is trained to classify the test samples. The experimental results show that compared with the optimal XGBoost algorithm in the base line experiment, this method not only takes less time to train, but also has higher accuracy.
Key words: malware classification; deep learning; convolutional neural network
0 引言
惡意軟件是指,其目的是對計算機造成損害的軟件,惡意軟件會竊取信息、竊取處理器功率和導(dǎo)致系統(tǒng)故障[1]。目前有幾種惡意軟件檢測技術(shù)?;诤灻臋z測是基于在一組已知的惡意簽名字節(jié)碼上匹配字節(jié)碼[2]。簽名方法速度很快,但純粹是反動的,無法識別新的惡意軟件。行為分析在受控環(huán)境中執(zhí)行程序,并觀察惡意行為,這是緩慢且有風(fēng)險的[3]。啟發(fā)式分析使用文件的特征來確定它是否是惡意軟件[4]。啟發(fā)式分析受到其分類模型有效性的限制。深度學(xué)習(xí)可以用來創(chuàng)建分類模型,所以使用深度學(xué)習(xí)來擴展啟發(fā)式分析,有可能大大提高啟發(fā)式分析的性能。
深度學(xué)習(xí)在計算機視覺、自然語言處理等應(yīng)用領(lǐng)域已經(jīng)取得了巨大的成功。因此,深度學(xué)習(xí)技術(shù)被用來解決復(fù)雜的網(wǎng)絡(luò)安全問題。Popov等人[5]提出了一種基于Word2Vec和機器學(xué)習(xí)的惡意軟件檢測方法。他們把匯編指令序列看成一個文檔中的一個句子,把一個單獨的匯編指令看成一個詞,然后用Word2Vec計算樣本集上不同指令的詞向量。接下來,他們獲取每個樣本的前n個指令,將每個指令構(gòu)建成一個矩陣,最后使用CNN構(gòu)建一個分類模型。測試結(jié)果表明,該方法準(zhǔn)確率達到96%。Trung等人[6]提出了一種基于自然語言處理(NLP)和API的惡意軟件分類方法。他們首先使用動態(tài)分析技術(shù)獲取惡意軟件的API調(diào)用序列,然后使用n-gram、Doc2Vec、TFIDF等自然語言處理方法將API調(diào)用序列轉(zhuǎn)換成向量。接下來,利用SVM、KNN算法等構(gòu)建一個分類模型。測試結(jié)果準(zhǔn)確率在90%-96%之間。Bugra等人[7]提出了一種基于深度學(xué)習(xí)的惡意軟件分類方法,樣本矩陣化的過程類似于Popov等人[5]的過程,然后使用GBM(梯度增強機)[8]構(gòu)建分類模型,達到96%的準(zhǔn)確率。
為了解決現(xiàn)有惡意軟件分類特征提取和模型訓(xùn)練過于復(fù)雜等問題,本文提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的惡意軟件分類方法。惡意軟件樣本由大量字節(jié)組成,其值范圍從0x00到0xFF。因此,每個惡意軟件樣本都可以被視為由字節(jié)寫入的文檔。本文首先計算每個樣本的大小并對每個樣本的字節(jié)進行統(tǒng)計。其次,將字節(jié)統(tǒng)計特征和惡意樣本大小特征融合并歸一化。接下來,基于CNN構(gòu)建模型在訓(xùn)練樣本上訓(xùn)練。最后,使用訓(xùn)練好的模型對測試樣本進行分類。該方法在特征提取階段不使用專家經(jīng)驗和數(shù)據(jù)依賴。該方法在降低特征維數(shù)的同時避免了過擬合。該方法在微軟惡意軟件分類挑戰(zhàn)數(shù)據(jù)集(BIG2015)的公共樣本集上進行了測試[9]。結(jié)果表明,該方法訓(xùn)練耗時短的同時還具有較高的準(zhǔn)確率。
1 基于CNN的分類方法
在這一部分中,將說明所提出基于CNN的惡意軟件分類的流程,如數(shù)據(jù)集選取、數(shù)據(jù)特征提取、分類模型構(gòu)建。
1.1 數(shù)據(jù)集選取
微軟舉辦了一場惡意軟件分類競賽,發(fā)布了微軟惡意軟件分類挑戰(zhàn)(BIG2015) ,BIG 2015數(shù)據(jù)集中的每個樣本由兩個文件組成,一個是去掉PE頭的字節(jié)文件,另一個是樣本匯編代碼文件。本文僅使用字節(jié)文件,該字節(jié)文件由大量的十六進制字節(jié)組成。
1.2 數(shù)據(jù)特征提取
本文對惡意軟件字節(jié)文件的靜態(tài)特征提取包括以下兩個方面:①字節(jié)文件大小;②字節(jié)文件中0x00到0xFF的數(shù)量統(tǒng)計。
通過對BIG2015數(shù)據(jù)集的觀察,每個惡意軟件字節(jié)文件的大小均不相同,所以本文先計算每個字節(jié)文件的大?。ㄒ訫B為單位),將其作為靜態(tài)特征之一,對采用箱線圖對其進行可視化。
從圖1中可以看到,每個惡意家族的大小均不相同且有較大差異,所以可以將字節(jié)文件大小作為惡意軟件特征之一。每個字節(jié)文件都是由0x00、0x01…0xFF組成,所以我們對其進行數(shù)量統(tǒng)計,然后我們將兩個特征進行融合,可以得到字節(jié)文件特征。為了降低計算復(fù)雜度,最后對每個特征進行歸一化處理,字節(jié)文件部分靜態(tài)特征如圖2所示。
1.3 分類模型
本文基于CNN設(shè)計了惡意軟件分類模型,該方法在降低特征維數(shù)的同時避免了過擬合。
本文惡意軟件識別模型如圖3所示,每一層的功能描述如下。
輸入層:對每個惡意軟件的字節(jié)文件進行特征提取,轉(zhuǎn)換成[1×258]維的矩陣;
卷積層:采用了兩個并行的卷積結(jié)構(gòu),每個卷積結(jié)構(gòu)都由1維卷積、BN層、ReLU激活函數(shù)和一維最大池化組成。通過不同卷積池化的參數(shù),提取多種信息特征。卷積層的輸入是[1×258]維,每個卷積結(jié)構(gòu)輸出維度是[8×85]。
連接層:將卷積層的輸出進行拼接,作為MLP層的輸入。連接層的輸出維度為[1×1360]。
預(yù)測輸出層:采用多層感知器(MLP)作為本文模型的預(yù)測輸出。該MLP由三層結(jié)構(gòu)組成,每層結(jié)構(gòu)如下:全連接層(FC)、激活函數(shù)、Dropout層。最后一層的激活函數(shù)為softmax激活函數(shù)。第一FC層的輸出維度是[1×400],第二FC層的輸出維度是[1×200],最后FC層的輸出維度是[1×9]。
2 實驗
2.1 實驗數(shù)據(jù)劃分
微軟惡意軟件分類挑戰(zhàn)發(fā)布的BIG 2015數(shù)據(jù)集,其中包含訓(xùn)練和測試集。但是測試集沒有給出準(zhǔn)確的分類結(jié)果,因此無法在測試集上驗證。但是訓(xùn)練集有九個惡意軟件家族的10868個樣本,每個樣本信息均唯一,所以本文的實驗僅使用BIG 2015標(biāo)注的訓(xùn)練集。本文執(zhí)行BIG2015訓(xùn)練集隨機抽樣來為本文實驗生成新的訓(xùn)練集、驗證集和測試集。首先,將樣本集平均隨機分為十個部分,其中一個作為測試集。剩余九個中的一個用作驗證集,剩余八個用作訓(xùn)練集。最終訓(xùn)練集、驗證集和測試集的比例為8:1:1。經(jīng)過訓(xùn)練后,使用測試集對分類模型進行測試。
2.2 實驗環(huán)境
實驗硬件環(huán)境為:Intel(R) Core(TM) i5-3210M CPU@2.50GHz,RAM 8G,Windows10系統(tǒng)。主要軟件和開發(fā)工具包為:Python 3.7、PyTorch v1.4.0、scikit-learn 0.22.2。
2.3 基線實驗和訓(xùn)練過程
在學(xué)術(shù)領(lǐng)域,已經(jīng)有一些將惡意軟件轉(zhuǎn)換成灰度圖像的研究工作。然后采用深度學(xué)習(xí)方法對灰度圖像進行分類。這些方法取得了良好的效果。Kim等人[10]提出了一種方法,通過深度學(xué)習(xí)分析圖像檢測惡意軟件。他們在微軟惡意軟件分類挑戰(zhàn)的訓(xùn)練集上進行了實驗,最高準(zhǔn)確率為91.76%。Rahul等人[11]也將惡意軟件字節(jié)文件轉(zhuǎn)換為灰度圖像,同樣在BIG 2015數(shù)據(jù)集上進行了測試,平均準(zhǔn)確率達到94.91%。
本文將字節(jié)統(tǒng)計特征和惡意樣本大小特征融合并歸一化。歸一化后的特征用于訓(xùn)練模型。所提出的模型與其他機器學(xué)習(xí)算法(如KNN和XGBoost等)在本文提取的特征下訓(xùn)練,再進行比較。此外,本文算法還與現(xiàn)有取得良好效果的算法進行了對比。
我們?yōu)楸疚哪P陀?xùn)練選擇的優(yōu)化方法是Adam自適應(yīng)學(xué)習(xí)率算法。損失函數(shù)使用交叉熵損失函數(shù)。訓(xùn)練初始學(xué)習(xí)率設(shè)置為0.0001,訓(xùn)練輪數(shù)為50次。每輪單批次大小設(shè)置為128。對于所有的實驗,我們選擇在驗證集上工作最好的模型,然后在測試集上對其進行評估。
2.4 實驗結(jié)果與分析
2.4.1 實驗結(jié)果
本文實驗使用的性能指標(biāo)為訓(xùn)練耗時以及測試集上的準(zhǔn)確率(%)。實驗結(jié)果如表1所列。
2.4.2 實驗結(jié)果分析
從表1的結(jié)果數(shù)據(jù)可以明顯的看出:
⑴ 與所有的機器學(xué)習(xí)算法中最優(yōu)的XGBoost算法相比,本文模型的訓(xùn)練耗時僅為其1/3,但是本文模型的準(zhǔn)確率達到了98.39%,相比XGBoost算法提高了0.91%,由此可得出,與XGBoost算法相比本文模型不僅訓(xùn)練耗時短而且準(zhǔn)確率更高。
⑵ 本文算法與現(xiàn)有的其他深度學(xué)習(xí)三種算法相比,本文的算法準(zhǔn)確率最高。該實驗結(jié)果表明,傳統(tǒng)的惡意軟件灰度圖可視化方法由于填充、截斷等操作,不能完全表示所有特征,容易造成誤報,而本文通過對字節(jié)文件的特征提取方法不僅復(fù)雜度低且具有較高準(zhǔn)確率。
3 結(jié)論
隨著當(dāng)前惡意軟件分類方法中使用的特征類型的不斷增加,特征提取的難度也在增加。因此,分類的復(fù)雜性變得越來越高。本文提出了一種基于字節(jié)文件靜態(tài)特征和CNN的惡意軟件分類方法。本文首先計算每個惡意樣本的大小并對每個樣本中的字節(jié)進行統(tǒng)計。其次,我們將字節(jié)統(tǒng)計特征和惡意樣本大小特征融合并歸一化。最后我們使用基于CNN構(gòu)建的模型訓(xùn)練并對測試樣本進行分類。實驗結(jié)果表明,基于字節(jié)特征和CNN的分類方法不僅訓(xùn)練耗時短且準(zhǔn)確率達到了98.39%?;谠摲椒?,可以對新的惡意軟件樣本進行分類。這將大大提高惡意軟件分析的效率。
參考文獻(References):
[1] Snow E, Alam M, Glandon A, et al. End-to-end Multimodel Deep Learning for Malware Classification[C]//2020 International Joint Conference on Neural Networks (IJCNN). IEEE,2020:1-7
[2] Santos I, Penya Y K, Devesa J, et al. N-grams-based File Signatures for Malware Detection[J].ICEIS (2),2009.9:317-320
[3] Firdausi I, Erwin A, Nugroho A S. Analysis of machine learning techniques used in behavior-based malware detection[C]//2010 second international conference on advances in computing,control, and telecommunication technologies. IEEE,2010:201-203
[4] Bazrafshan Z, Hashemi H, Fard S M H, et al. A survey on heuristic malware detection techniques[C]//The 5th Conference on Information and Knowledge Technology. IEEE,2013:113-120
[5] Popov I. Malware detection using machine learning based on word2vec embeddings of machine code instructions[C]//2017 Siberian symposium on data science and engineering (SSDSE). IEEE,2017:1-4
[6] Tran T K, Sato H. NLP-based approaches for malware classification from API sequences[C]//2017 21st Asia Pacific Symposium on Intelligent and Evolutionary Systems (IES). IEEE,2017:101-105
[7] Cakir B, Dogdu E. Malware classification using deep learning methods[C]//Proceedings of the ACMSE 2018 Conference,2018:1-5
[8] Friedman J H. Greedy function approximation: a gradient boosting machine[J].Annals of statistics,2001:1189-1232
[9] Ronen R, Radu M, Feuerstein C, et al. Microsoft malware classification challenge[J].arXiv preprint arXiv:1802.10135,2018.
[10] Kim H J. Image-based malware classification using convolutional neural network[M] //Advances in computer science and ubiquitous computing. Springer, Singapore,2017:1352-1357
[11] Rahul R K, Anjali T, Menon V K, et al. Deep learning for network flow analysis and malware classification[C]//International Symposium on Security in Computing and Communication. Springer, Singapore,2017:226-235
[12] Roseline S A, Geetha S, Kadry S, et al. Intelligent Vision-Based Malware Detection and Classification Using Deep Random Forest Paradigm[J].IEEE Access,2020.8:206303-206324