呂 臻,張 宇
(1. 浙江省嘉興市公安局科技信息通信處,浙江 嘉興 314001;2. 貴州省遵義市公安局科技信息通信處,貴州 遵義 563000)
隨著矛與盾的升級,病毒檢測和病毒變形的對抗越來越激烈。檢測方式由最初的md5匹配,到簡單的特征檢測,再到具有啟發(fā)能力的機器學習檢測。然而病毒的變形方式也越來越多樣化,從修改 md5到切片免殺再到多態(tài)變形[2]。
如何有效的識別病毒并把病毒家族化,對于未知樣本的聚類,家族識別是我們需要面對的挑戰(zhàn)。
一個二進制病毒可以轉化為一個灰度圖[3],轉換為灰度圖之后,我們就把病毒識別的問題轉換為了圖片識別分類問題。深度學習中的CNN正好是解決圖片分類問題的好方法[4]。傳統(tǒng)的特征提取檢測引擎,特征提取的代價很高,往往無法高效的檢測新增樣本和樣本的變種[5]。傳統(tǒng)的機器學習的方法,也同樣存在特征提取的問題,特征的好壞往往是主導檢測效果的主要原因[6]。
CNN神經網絡卻很好的解決了上述問題,特征自動提取,所以特征的通用性和魯棒性更好。
在這個過程中,我們依然有一些困難。比如:訓練樣本種類樣本數量差距較大、計算量較大,需要更多的訓練樣本。
在之前的研究中很多人已經開始了二進制文件轉圖的工作[3],一般是通過整體文件轉化為圖片,然后根據家族進行分類。 我們這里的方法,是取了文件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
通過上面的例子可以看出,二進制轉出的圖,可以肉眼識別出家族關系和不同家族之前的區(qū)別。為了發(fā)現更多更深層次的特征關聯(lián),我們后面使用CNN進行特征提取。
應用 CNN去識別分類病毒圖像的過程中有幾個困難的地方,一個是樣本數量不均衡[7,8],一個是需要有監(jiān)督訓練 。
本文提出:
a.采取新的損失函數,來解決樣本數量不均衡的問題。
b.聚類---打標簽---分類的思路 來解決監(jiān)督訓練樣本數量不夠的問題。
(1)樣本數量不均衡:
在我們的訓練樣本中有著樣本不均衡的情況,比如,virut、sality病毒的數量就很多每一類都5w+的數量,而 btc.xmr 類型病毒數量就會少很多,只有大概80多個。在多分類問題中,各種類樣本數量比例應該在 1:1 左右會有比較好的效果,這時樣本數量是均衡的。但是在我們的實際情況看,樣本很難是均衡的。訓練出的結果也不會很好,所以我們修改了sofmax函數,來解決這個問題。
加權softmax函數:
Softmax回歸模型,該模型是logistic回歸模型在多分類問題上的推廣,在多分類問題中,類標簽y可以取兩個以上的值。
在 softmax回歸中,我們解決的是多分類問題(相對于 logistic回歸解決的二分類問題),類標y可以取k個不同的值(而不是2個)。因此,對于訓練集(注意此處的類別下標從1開始,而不是0)。例如,在MNIST數字識別任務中,我們有k個不同的類別。
Softmax代價函數與 logistic 代價函數在形式上非常類似,只是在 Softmax損失函數中對類標記的k個可能值進行了累加。注意在 Softmax回歸中將x分類為類別 j的概率為:

由于傳統(tǒng)的 softmax會平均對待每一類,那么對于樣本數量比較少的類型就會有不好的效果,我們對于每個類別的概率前面進行加權計算。

權重ωk的計算方式如下:

這里的maxS是訓練集合中,樣本數量最大集合的樣本數量。kS是第K個類別的樣本數量,β是用來控制權重的一個系數,這個系數我們通過遍歷法來選擇一個較為好用的,我們的經驗值是25.
(2)監(jiān)督訓練樣本不夠
我們通過 Kmeans算法,在收集到的海量樣本中,同樣采用圖片作為特征進行聚類,聚類后人工審核打標簽,然后將打過標簽的樣本類型加入訓練。
流程圖如下:

圖4 訓練流程圖Fig.4 Training flow chart
這個部分我們討論應用 VGG網絡來進行我們的病毒圖片分類。
(1)網絡結構
VGGNet[9]是牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind 公司的研究員一起研發(fā)的的深度卷積神經網絡,在 ILSVRC 2014上取得了第二名的成績,將 Top-5錯誤率降到7.3%。
好學校要把學生的全面發(fā)展和個性發(fā)展結合起來,才能使學生發(fā)現自己的長處并培養(yǎng)自己的長處,最后使自己成為一個人格健全、積極上進和快樂幸福的人。好教育就是讓學生做最好的自己。我們最近也在做一些事情來配套跟進。
GGNet 探索了卷積神經網絡的深度與其性能之間的關系,通過反復堆疊3′3的小型卷積核和2′2的最大池化層,VGGNet成功地構筑了16~19層深的卷積神經網絡。VGGNet相比之前state- of-the-art的網絡結構,錯誤率大幅下降,并取得了ILSVRC 2014比賽分類項目的第2名和定位項目的第1名。
同時 VGGNet 的拓展性很強,遷移到其他圖片數據上的泛化性非常好。VGGNet 的結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3′3)和最大池化尺寸(2′2)。
深度學習中最大的問題是過擬合[10],所以我們每層網絡中加入dropout,來避免過擬合。每層網絡中的單元被隨機丟棄。我們增加兩個Droput層來防止過擬合。(VGG19并不包含dropout層)。結構如下:

圖5 CNN網絡結構圖Fig.5 CNN network structure diagram
(2)加入加權softmax函數
為了解決之前說的訓練樣本不平衡問題,我們把修改的加權 softmax函數作為網絡的最后一層。下圖中的NET1、NET2均為上面這個CONV+droput的結構。
網絡總體結構如下:

圖6 判別網絡總體結構圖Fig.6 General structure diagram of discriminant network
我們會比較SVM、LR、和CNN網絡檢測病毒圖片的能力和 CNN 使用普通的 softmax 和 加權softmax在檢測能力上的比對。并描繪在實際應用中,通過CNN檢測linux樣本引擎的roc曲線。
SVM:使用 libsvm,參數 g和 c通過 easy.py計算
CNN:tensorflow + keras
操作系統(tǒng):windows 7
數據:
實驗中的數據集包含了10個病毒類別,不同類型病毒之間的樣本數量是高度不平衡的。每一種類型的名字和樣本數量在下表中列出。我們把數據分為3塊,60%的樣本作為訓練集合,20%的樣本作為驗證集合,最后20%的樣本作為測試集合。

表1 測試集結果Tab.1 Test set results
我們發(fā)現 CNN算法比SVM算法在病毒圖識別中有著更高的精度,CNN加權算法相比CNN算法,在樣本比例不平衡的情況下,對于小樣本集合有著一定的優(yōu)化作用。
不足之處,在二進制轉換圖片的過程中,發(fā)現僅僅使用入口函數的256個字節(jié)還是很多病毒分不開,今后會對此做出改進。
CNN引擎檢測 linux平臺惡意文件的 ROC曲線圖,如圖7所示。
我們通過二進制轉圖,在通過 CNN和加權的softmax,可以有效的檢測病毒樣本,也獲得不錯的精度。可以通過CNN自動提取代碼特征,解決了二進制病毒識別中特征提取困難的問題。

圖7 ROC曲線圖Fig.7 ROC curve graph
今后的工作中,我們會對于自動提取的特征進行人工分析,看是否存在可以解釋的特征。
本次試驗中,雖然對于家族檢測效果較好,但是對于加殼文件沒有進行測試,通常加殼是躲避殺軟查殺的主要方式。今后的工作中,我們會對加殼文件進行測試。
對于樣本不平衡問題,加權 softmax方法有著較好的效果,但還需進一步探究不同情況下β對于加權softmax的影響。