呂 臻,張 宇
(1. 浙江省嘉興市公安局科技信息通信處,浙江 嘉興 314001;2. 貴州省遵義市公安局科技信息通信處,貴州 遵義 563000)
隨著矛與盾的升級,病毒檢測和病毒變形的對抗越來越激烈。檢測方式由最初的md5匹配,到簡單的特征檢測,再到具有啟發(fā)能力的機器學(xué)習(xí)檢測。然而病毒的變形方式也越來越多樣化,從修改 md5到切片免殺再到多態(tài)變形[2]。
如何有效的識別病毒并把病毒家族化,對于未知樣本的聚類,家族識別是我們需要面對的挑戰(zhàn)。
一個二進(jìn)制病毒可以轉(zhuǎn)化為一個灰度圖[3],轉(zhuǎn)換為灰度圖之后,我們就把病毒識別的問題轉(zhuǎn)換為了圖片識別分類問題。深度學(xué)習(xí)中的CNN正好是解決圖片分類問題的好方法[4]。傳統(tǒng)的特征提取檢測引擎,特征提取的代價很高,往往無法高效的檢測新增樣本和樣本的變種[5]。傳統(tǒng)的機器學(xué)習(xí)的方法,也同樣存在特征提取的問題,特征的好壞往往是主導(dǎo)檢測效果的主要原因[6]。
CNN神經(jīng)網(wǎng)絡(luò)卻很好的解決了上述問題,特征自動提取,所以特征的通用性和魯棒性更好。
在這個過程中,我們依然有一些困難。比如:訓(xùn)練樣本種類樣本數(shù)量差距較大、計算量較大,需要更多的訓(xùn)練樣本。
在之前的研究中很多人已經(jīng)開始了二進(jìn)制文件轉(zhuǎn)圖的工作[3],一般是通過整體文件轉(zhuǎn)化為圖片,然后根據(jù)家族進(jìn)行分類。 我們這里的方法,是取了文件256個字節(jié)的入口點代碼作為圖片像素。依然可以有效的區(qū)分病毒家族。我們舉例幾種多態(tài)變形家族的例子:
圖1 parite家族病毒不同變種的入口點灰色圖Fig.1 Grey diagram of entry points for different variants of parite family virus
圖2 wannacry病毒家族不同變種的入口點灰色圖Fig.2 Grey diagram of entry points for different variants of wannacry virus family
圖3 Virut感染型病毒家族不同變種的入口點灰色圖Fig.3 Grey diagram of entry points for different variants of Virut infectious virus family
通過上面的例子可以看出,二進(jìn)制轉(zhuǎn)出的圖,可以肉眼識別出家族關(guān)系和不同家族之前的區(qū)別。為了發(fā)現(xiàn)更多更深層次的特征關(guān)聯(lián),我們后面使用CNN進(jìn)行特征提取。
應(yīng)用 CNN去識別分類病毒圖像的過程中有幾個困難的地方,一個是樣本數(shù)量不均衡[7,8],一個是需要有監(jiān)督訓(xùn)練 。
本文提出:
a.采取新的損失函數(shù),來解決樣本數(shù)量不均衡的問題。
b.聚類---打標(biāo)簽---分類的思路 來解決監(jiān)督訓(xùn)練樣本數(shù)量不夠的問題。
(1)樣本數(shù)量不均衡:
在我們的訓(xùn)練樣本中有著樣本不均衡的情況,比如,virut、sality病毒的數(shù)量就很多每一類都5w+的數(shù)量,而 btc.xmr 類型病毒數(shù)量就會少很多,只有大概80多個。在多分類問題中,各種類樣本數(shù)量比例應(yīng)該在 1:1 左右會有比較好的效果,這時樣本數(shù)量是均衡的。但是在我們的實際情況看,樣本很難是均衡的。訓(xùn)練出的結(jié)果也不會很好,所以我們修改了sofmax函數(shù),來解決這個問題。
加權(quán)softmax函數(shù):
Softmax回歸模型,該模型是logistic回歸模型在多分類問題上的推廣,在多分類問題中,類標(biāo)簽y可以取兩個以上的值。
在 softmax回歸中,我們解決的是多分類問題(相對于 logistic回歸解決的二分類問題),類標(biāo)y可以取k個不同的值(而不是2個)。因此,對于訓(xùn)練集(注意此處的類別下標(biāo)從1開始,而不是0)。例如,在MNIST數(shù)字識別任務(wù)中,我們有k個不同的類別。
Softmax代價函數(shù)與 logistic 代價函數(shù)在形式上非常類似,只是在 Softmax損失函數(shù)中對類標(biāo)記的k個可能值進(jìn)行了累加。注意在 Softmax回歸中將x分類為類別 j的概率為:
由于傳統(tǒng)的 softmax會平均對待每一類,那么對于樣本數(shù)量比較少的類型就會有不好的效果,我們對于每個類別的概率前面進(jìn)行加權(quán)計算。
權(quán)重ωk的計算方式如下:
這里的maxS是訓(xùn)練集合中,樣本數(shù)量最大集合的樣本數(shù)量。kS是第K個類別的樣本數(shù)量,β是用來控制權(quán)重的一個系數(shù),這個系數(shù)我們通過遍歷法來選擇一個較為好用的,我們的經(jīng)驗值是25.
(2)監(jiān)督訓(xùn)練樣本不夠
我們通過 Kmeans算法,在收集到的海量樣本中,同樣采用圖片作為特征進(jìn)行聚類,聚類后人工審核打標(biāo)簽,然后將打過標(biāo)簽的樣本類型加入訓(xùn)練。
流程圖如下:
圖4 訓(xùn)練流程圖Fig.4 Training flow chart
這個部分我們討論應(yīng)用 VGG網(wǎng)絡(luò)來進(jìn)行我們的病毒圖片分類。
(1)網(wǎng)絡(luò)結(jié)構(gòu)
VGGNet[9]是牛津大學(xué)計算機視覺組(Visual Geometry Group)和Google DeepMind 公司的研究員一起研發(fā)的的深度卷積神經(jīng)網(wǎng)絡(luò),在 ILSVRC 2014上取得了第二名的成績,將 Top-5錯誤率降到7.3%。
好學(xué)校要把學(xué)生的全面發(fā)展和個性發(fā)展結(jié)合起來,才能使學(xué)生發(fā)現(xiàn)自己的長處并培養(yǎng)自己的長處,最后使自己成為一個人格健全、積極上進(jìn)和快樂幸福的人。好教育就是讓學(xué)生做最好的自己。我們最近也在做一些事情來配套跟進(jìn)。
GGNet 探索了卷積神經(jīng)網(wǎng)絡(luò)的深度與其性能之間的關(guān)系,通過反復(fù)堆疊3′3的小型卷積核和2′2的最大池化層,VGGNet成功地構(gòu)筑了16~19層深的卷積神經(jīng)網(wǎng)絡(luò)。VGGNet相比之前state- of-the-art的網(wǎng)絡(luò)結(jié)構(gòu),錯誤率大幅下降,并取得了ILSVRC 2014比賽分類項目的第2名和定位項目的第1名。
同時 VGGNet 的拓展性很強,遷移到其他圖片數(shù)據(jù)上的泛化性非常好。VGGNet 的結(jié)構(gòu)非常簡潔,整個網(wǎng)絡(luò)都使用了同樣大小的卷積核尺寸(3′3)和最大池化尺寸(2′2)。
深度學(xué)習(xí)中最大的問題是過擬合[10],所以我們每層網(wǎng)絡(luò)中加入dropout,來避免過擬合。每層網(wǎng)絡(luò)中的單元被隨機丟棄。我們增加兩個Droput層來防止過擬合。(VGG19并不包含dropout層)。結(jié)構(gòu)如下:
圖5 CNN網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.5 CNN network structure diagram
(2)加入加權(quán)softmax函數(shù)
為了解決之前說的訓(xùn)練樣本不平衡問題,我們把修改的加權(quán) softmax函數(shù)作為網(wǎng)絡(luò)的最后一層。下圖中的NET1、NET2均為上面這個CONV+droput的結(jié)構(gòu)。
網(wǎng)絡(luò)總體結(jié)構(gòu)如下:
圖6 判別網(wǎng)絡(luò)總體結(jié)構(gòu)圖Fig.6 General structure diagram of discriminant network
我們會比較SVM、LR、和CNN網(wǎng)絡(luò)檢測病毒圖片的能力和 CNN 使用普通的 softmax 和 加權(quán)softmax在檢測能力上的比對。并描繪在實際應(yīng)用中,通過CNN檢測linux樣本引擎的roc曲線。
SVM:使用 libsvm,參數(shù) g和 c通過 easy.py計算
CNN:tensorflow + keras
操作系統(tǒng):windows 7
數(shù)據(jù):
實驗中的數(shù)據(jù)集包含了10個病毒類別,不同類型病毒之間的樣本數(shù)量是高度不平衡的。每一種類型的名字和樣本數(shù)量在下表中列出。我們把數(shù)據(jù)分為3塊,60%的樣本作為訓(xùn)練集合,20%的樣本作為驗證集合,最后20%的樣本作為測試集合。
表1 測試集結(jié)果Tab.1 Test set results
我們發(fā)現(xiàn) CNN算法比SVM算法在病毒圖識別中有著更高的精度,CNN加權(quán)算法相比CNN算法,在樣本比例不平衡的情況下,對于小樣本集合有著一定的優(yōu)化作用。
不足之處,在二進(jìn)制轉(zhuǎn)換圖片的過程中,發(fā)現(xiàn)僅僅使用入口函數(shù)的256個字節(jié)還是很多病毒分不開,今后會對此做出改進(jìn)。
CNN引擎檢測 linux平臺惡意文件的 ROC曲線圖,如圖7所示。
我們通過二進(jìn)制轉(zhuǎn)圖,在通過 CNN和加權(quán)的softmax,可以有效的檢測病毒樣本,也獲得不錯的精度??梢酝ㄟ^CNN自動提取代碼特征,解決了二進(jìn)制病毒識別中特征提取困難的問題。
圖7 ROC曲線圖Fig.7 ROC curve graph
今后的工作中,我們會對于自動提取的特征進(jìn)行人工分析,看是否存在可以解釋的特征。
本次試驗中,雖然對于家族檢測效果較好,但是對于加殼文件沒有進(jìn)行測試,通常加殼是躲避殺軟查殺的主要方式。今后的工作中,我們會對加殼文件進(jìn)行測試。
對于樣本不平衡問題,加權(quán) softmax方法有著較好的效果,但還需進(jìn)一步探究不同情況下β對于加權(quán)softmax的影響。