姜倩玉,王鳳英,賈立鵬
(山東理工大學計算機科學與技術學院,山東淄博 255022)
互聯網的高速發展促進了社會的發展與進步,但開放式的互聯網也具有較大的安全隱患。互聯網中存在的惡意代碼對國家安全、社會穩定以及經濟都有嚴重的危害,因此研究出高效快捷的惡意代碼檢測方法刻不容緩。
檢測惡意代碼的技術在不斷進步,惡意代碼對抗技術也處于發展的過程中。為了應對各類惡意代碼檢測工具,惡意代碼開發者開始通過對抗學習[1]等方法對惡意代碼進行混淆,惡意代碼分析的難度逐漸變大。因此基于特征碼[2]、改進主動學習[3]、深度學習[4-5]以及惡意代碼可視化[6-9]等惡意代碼檢測方法被不斷提出,其中,惡意代碼可視化方法逐漸被廣大研究學者所采用。但是以往提取的惡意代碼灰度圖特征較片面,無法全面描述惡意代碼,且現存的方法在處理海量惡意代碼時往往需要花費較多時間。為解決單一特征和方法存在的準確率和效率低的問題,本文提出了一種基于感知哈希算法和特征融合的惡意代碼檢測方法。將感知哈希算法用于惡意代碼分類檢測的優勢是速度快,且惡意代碼家族間相似性越高判斷越精確,而家族間差異性較大時則分類精度不明顯,因此將感知哈希與機器學習算法結合起來,能夠快速且準確地完成對惡意代碼的分類檢測。
本文的主要工作如下:
1)將感知哈希算法用于惡意代碼分類檢測,對各類惡意代碼家族進行感知哈希相似度對比,并根據結果設置閾值進行家族快速分類檢測,大約有67%的惡意代碼樣本能夠通過感知哈希算法檢測出來。
2)對于無法通過感知哈希算法檢測的惡意代碼,進一步提取其全局特征Gist 與局部二值模式(Local Binary Pattern,LBP)特征,并進行融合處理,采用機器學習算法分類檢測;
3)在malimg 數據集上分別對檢測準確率和速度進行測試,分析實驗結果表明,本文所提方法檢測效率更高。
與本文相關的研究工作主要有兩個方面:惡意代碼灰度圖像檢測以及感知哈希在圖像相似性檢測方面的應用。
近幾年,惡意代碼可視化的檢測方法逐漸被研究者廣泛采用。將惡意代碼可視化為灰度圖像之后可以通過提取圖像的紋理特征來檢測惡意代碼。2011 年,文獻[8]首次將二進制文本轉化為灰度圖像的思想應用到惡意代碼分類中,實驗證明,同一家族的灰度圖像的紋理特征相似性較高,非同一家族的灰度圖像的紋理特征差異性較大,通過提取的圖像的Gist 特征,實現對惡意代碼的分類,但是Gist 特征忽略局部細節特征,導致若某些家族內部相似度過高而準確率會下降的問題。2018 年文獻[9]提取惡意代碼灰度圖像的LBP 特征,實驗準確率有了明顯的提高;但是如果惡意代碼樣本中包含干擾信息,會影響惡意代碼灰度圖像的局部紋理特征。文獻[10]將惡意代碼灰度圖像的全局特征與局部特征融合后進行檢測,對檢測含有混淆干擾信息的惡意代碼效果較好;但是在針對大量惡意代碼檢測時速度較低。為有效提高分類檢測速度,本文將感知哈希算法用于惡意代碼檢測。
為能實現快速有效識別圖像的目標,圖像哈希技術應運而生。感知哈希作為哈希算法的一類,被許多研究學者用來檢測相似圖片[11]。感知哈希的作用在于生成每張圖像的“指紋”,通過比較不同圖像的指紋信息來判斷圖像的相似性,結果越接近就說明圖片越相似。本文主要采用感知哈希中的差異哈希(Difference Hash,DHash)來完成惡意代碼灰度圖像的匹配。通過感知哈希算法計算圖像的DHash,并與DHash 庫中的惡意代碼樣本進行對比,設置閾值判斷樣本所屬的惡意代碼家族種類,對于無法通過感知哈希檢測模塊判斷家族的惡意代碼,進一步采用機器學習算法進行檢測,得到惡意代碼所屬的家族種類。
感知哈希算法包括均值哈希算法、基于離散余弦變換(Discrete Cosine Transform,DCT)的感知哈希算法和差異哈希算法。三者在速度和準確率方面各有優劣,其中DHash 相較于其他兩種算法,在速度和準確率上比較均衡。本文將DHash 算法用于惡意代碼灰度圖家族的檢測。哈希編碼的二進制形式能夠很好地節省內存空間,并加快檢測速度[12]。在感知哈希檢測階段通過哈希相似度算法,比較未知惡意代碼家族檢測樣本的哈希編碼與數據集中25 類惡意代碼家族哈希編碼之間的差異,設置閾值返回與待分類樣本的相似圖集,根據相似圖集內的家族對該樣本進行分類。
Gist 是用于場景識別的圖像描述符。它基于低維特征即空間包絡。灰度圖像通過強度和局部縮放對比度進行歸一化,然后在多個尺度上分割成網格。Gist 為每個單元計算一系列Gabor濾波器,并融合所有單元響應來創建特征向量。
Gist 描述符首先通過將圖像過濾到多個低層視覺通道中來提取特征。每個子通道內的中心環繞操作在不同尺度s的濾波器輸出映射Oi(s)之間進行,并生成特征映射Mi(c,s),其中c和s分別是中心和環繞尺度。Gabor 濾波器在四個空間中心尺度(c=1,2,3,4)和四個不同角度(γi=0°,45°,90°,135°)上從方向通道應用于灰度圖像。然后為每個方向計算特征,如式(1)所示:
本文采用4 × 4 規則的網格劃分圖像,4 尺度8 方向的Gabor濾波器,可以獲得512維Gist特征。
LBP 是一種用來描述圖像局部紋理特征的算子。它首先由Ojala 等[13]在1994 年提出。本文采用原始的LBP 算子定義,區域內特征值計算方法如式(2)所示:
其中:(xo,yo)為該區域內中心點o的坐標;it是區域內第t個像素點的灰度值,p為區域內像素點的個數。式(2)表示將區域中心點o的像素值分別與該鄰域內其他點的像素值進行比較,由s(x)進行判斷:若o的像素值小,s(x)值為1;否則為0,將產生的8 位二進制數轉化為十進制即為該區域中心像素的LBP值。s(x)函數定義如式(3)所示:
通過直方圖得到圖像的LBP特征v,如式(4)所示。
其中:i=1,2,…,T,T是像素點總數;LBPi為像素點i的LBP 特征表示;hist表示求解直方圖。
本文提出的基于感知哈希算法和特征融合的惡意代碼檢測系統總體設計結構如圖1所示。
圖1 惡意代碼檢測系統總體設計結構Fig.1 Overall design structure of malware detection system
特征信息庫建立模塊中,將數據集中全部惡意代碼灰度圖樣本通過感知哈希算法,計算DHash并存入DHash庫;此外提取惡意代碼樣本的Gist 特征與LBP 特征,并分別存入Gist庫與LBP 庫。樣本信息提取模塊過程中,提取待分類檢測的樣本的DHash、Gist特征和LBP特征。家族分類檢測模塊以特征信息庫為依據,對待分類樣本分別進行感知哈希檢測和機器學習檢測,并輸出最終分類檢測結果。
惡意代碼檢測的系統整體流程如圖2所示。
對待分類樣本通過感知哈希算法提取DHash 值,在DHash 庫中根據相似性判斷公式檢索與之相似的惡意代碼,并通過設置閾值返回相似樣本,根據返回樣本所屬的家族對該樣本進行惡意代碼家族分類,感知哈希檢測閾值的設置如4.2 節所示。當返回樣本為空時則判定感知哈希檢測模塊不能確定樣本性質,繼續采用機器學習檢測模塊對該樣本進一步檢測,提取樣本的Gist 特征與LBP 特征,并進行融合,通過隨機森林(Random Forest,RF)算法進行檢測分類。
圖2 惡意代碼檢測系統流程Fig.2 Flow of malware detection system
基于感知哈希與特征融合的惡意代碼分類算法步驟如下:
步驟1 通過感知哈希算法計算待分類惡意代碼灰度圖的DHash;
步驟2 通過相似性判斷公式篩選與檢測樣本相似的惡意代碼圖像;
步驟3 若能通過閾值判斷出檢測樣本的家族類別則結束,否則繼續步驟4;
步驟4 提取惡意代碼圖像Gist特征;
步驟5 提取惡意代碼圖像LBP特征;
步驟6 選取LBP比例參數r,得到融合特征;
步驟7 訓練隨機森林分類器,優化參數;
步驟8 通過RF對惡意代碼進行分類。
3.2.1 感知哈希檢測模塊
通過感知哈希算法將灰度圖轉化成哈希序列,通過將惡意代碼待分類樣本與DHash 庫中的25 類家族樣本進行圖像的哈希序列對比,并通過設置閾值對待分類樣本進行判斷。
感知哈希算法的步驟如下:
步驟1 縮小圖片。將圖片縮小為9×8的像素。
步驟2 計算相鄰像素間的差異值。
步驟3 比較差異值。若前一個像素的顏色強度大于第二個像素,那么差異值就設置為“True”,即1;如果不大于第二個像素,就設置“False”,即0。
步驟4:構造hash值。生成16位DHash值。
感知哈希算法的偽代碼如下。
輸入:圖像image;
輸出:DHash值。
對于待分類惡意代碼灰度圖像,通過感知哈希算法計算出該圖像的DHash,并與其他惡意代碼灰度圖像的DHash 進行相似性判斷,判斷公式如式(5)所示:
對于待檢測樣本通過感知哈希檢測模塊返回相似惡意代碼灰度圖集,根據返回的圖集內樣本所屬的惡意代碼家族,將待檢測樣本歸屬于此類家族。若返回的圖集為空,認定感知哈希檢測模塊不能檢測該樣本,則進入機器學習檢測模塊。
3.2.2 機器學習檢測模塊
由于惡意代碼家族是指具有較明顯的相同特征的惡意代碼種類,同一家族個體間的差異較小,不同家族個體間的差異性明顯。惡意代碼開發者通過偽裝或混淆惡意程序以應對病毒檢測工具,但這些惡意程序在一些特征上仍保留著原本的特點,仍和其他變異體屬于同一家族。惡意代碼所屬的家族不同,經過可視化后形成的灰度圖像也不相同,但同一家族可視化后的圖像具有比較明顯的共同特征。以三類惡意代碼家族的灰度圖像為例,每個家族分別展示了其中的3 張圖片,如圖3所示。
圖3 三類惡意代碼家族的灰度圖像Fig.3 Grayscale images of three malware families
從以上三類惡意代碼家族灰度圖像的展示可看出,屬于同一家族的惡意代碼圖像紋理特征相似性較高,不同家族的圖像紋理特征差異性明顯,并且同一家族的紋理特征總體上較相似,差異性主要體現在局部。因此,為了避免在相似性或者差異性都較高的惡意代碼家族分類準確率不穩定的情況,本文將惡意代碼灰度圖像的全局特征與局部特征進行融合,能夠更全面地體現惡意代碼家族的特征,保證檢測的準確率。
對于未能通過感知哈希檢測模塊判斷出家族類別的樣本,進一步提取圖像的全局特征Gist 與局部特征LBP 進行融合,融合公式如式(6)所示:
其中:merge為融合函數;LBPr表示選取比例為r的LBP 特征,例如LBP0.5表示隨機選擇惡意代碼灰度圖像中50%的LBP 特征與Gist 融合。對融合后的特征采用隨機森林(Random Forest,RF)進行檢測,輸出檢測分類結果。
實驗環境為Intel Core i5-8265U 1.60 GHz 的CPU,8 GB RAM,Windows 10、64 位的操作系統。采用Python3.5 編程實現,機器學習框架選擇Scikit-learn。
本實驗數據集來自文獻[14]提供的數據集malimg,數據集中包含25 個家族,共9 339 個樣本。每個家族的數據集都是惡意代碼的灰度圖像。
在實驗過程中,對于待分類惡意代碼灰度圖像,通過感知哈希算法計算出該圖像的DHash,并與DHash 庫中其他家族惡意代碼灰度圖像的DHash進行對比判斷,通過式(5)得到待分類樣本圖像與其他圖像的相似性對比結果。
為驗證不同家族內的感知哈希相似性對比情況,實驗對25 個家族分別進行了測試。以Adialer.C 家族與其他24 個家族的對比情況為例,選取Dialplatform.B 家族和Alueron.gen!J 家族中的50 張圖片,感知哈希相似性對比情況如圖4 所示。實驗得知不同家族的相似性大部分集中在0.45 以上,極少數分布于0.4 附近。實驗所測不同家族相似度最小值為0.397。
圖4 不同家族相似性對比Fig.4 Comparison of similarities between different families
為驗證同一家族內的感知哈希相似性對比情況,對25 類家族分別進行測試,以Adialer.C家族和Agent.FYI家族為例,同一家族內相似性對比情況如圖5 所示。實驗得知同一家族內的相似性集中在0~0.45,且部分家族的相似性在0.2~0.45。
考慮感知哈希檢測模塊的準確性和有效性,實驗測試了當閾值為0.3 和0.35 下的檢測效果。當閾值為0.3 時能夠通過感知哈希模塊檢測的惡意代碼比例大約為50%,其余50%的樣本會通過機器學習模塊進行檢測。當閾值為0.35 時能夠通過感知哈希模塊檢測的惡意代碼比例大約為67%,其余33%的樣本會通過機器學習模塊進行檢測。在保證準確性和效率的基礎上,為能有效地擴大檢測比例,本文選擇0.35 為判斷閾值進行分類檢測(由于本實驗的局限性,實驗選擇0.35作為感知哈希檢測的閾值,留有0.397-0.35=0.047的余地)。對于待檢測樣本通過感知哈希檢測模塊返回相似惡意代碼灰度圖集,根據返回的圖集內樣本所屬的惡意代碼家族,將待檢測樣本歸屬于此類家族。這也說明同一惡意代碼家族的DHash較為接近,不同家族的DHash的差異性比較明顯,通過感知哈希檢測模塊能夠準確地判斷出惡意代碼所屬的家族類別。
圖5 同一家族相似性對比Fig.5 Comparison of similarities in the same family
按照感知哈希與特征融合分類算法,將Gist 特征與不同比例的LBP 特征進行融合,LBP 的比例設置為0.1、0.3、0.5、0.7和1,分類方法為RF,優化RF中的estimators參數為25。
4.4.1 實驗準確率分析
實驗分別在Gist、LBP以及Gist與不同比例的LBP融合特征下進行測試,實驗對比結果如表1所示。
表1 本文方法不同特征實驗準確率結果對比Tab.1 Comparison of experimental accuracy results of different features by the proposed method
為驗證本文提出的方法能夠提高惡意代碼分類準確率,在本實驗中,通過Gist 與不同比例的LBP 融合后的特征分別進行5次實驗取平均值。由表1分析得,在Gist特征下準確率為90%,LBP 特征下準確率為92.1%,當Gist與100%LBP 融合后準確率最高為98.2%。這說明了相較于單一特征,Gist 與LBP 融合后特征效果更好,平均準確率可達98.2%。分析malimg 數據集可知,Autorun.K 家族與Yuner.A 家族之間以及Swizzor.gen!E 家族和Swizzor.gen!I 家族之間相似性較大,若僅采用全局特征Gist,會造成分類準確率下降的問題。對于惡意代碼數據集中普遍存在的信息干擾問題,若只采用局部特征LBP 同樣也會造成準確率低的問題,因此將Gist 特征與LBP特征融合后能避免此類問題,提高準確率。
實驗還比較了在不同分類器下,Gist 與不同比例的LBP融合的檢測結果,結果如表2、3所示。
分析表2、3可得,在K最近鄰(K-Nearest Neighbors,KNN)算法和邏輯回歸算法下,將Gist與全部比例的LBP 融合,得到的實驗效果最好。這也證明了,全局特征與局部特征融合后的效果要優于單一特征下的效果。
表2 KNN下不同特征實驗準確率結果對比Tab.2 Comparison of experimental accuracy results of different features by KNN
表3 邏輯回歸下不同特征實驗準確率結果對比Tab.3 Comparison of experimental accuracy results of different features by logistic regression
為進一步驗證本文所提出的基于感知哈希算法和特征融合的惡意代碼分類檢測方法的有效性,在Microsoft 數據集上進行了Gist、LBP 以及Gist-LBP 融合特征的實驗對比,此數據集來源于Microsoft 在Kaggle 上的項目Microsoft Malware Classification Challenge[15],數據集包括7 個家族的10 868 個樣本,樣本包括bytes 文件和asm 文件,通過二進制轉矩陣(Binary to Matrix,B2M)算法將bytes 文件轉成灰度圖像后進行實驗測試,數據集詳細信息如表4所示。
表4 Microsoft數據集Tab.4 Microsoft dataset
對于該數據集,分別在Gist、LBP 和Gist-LBP 融合特征下進行測試,準確率分別為94.1%、96.7%、97.9%。由實驗結果知,將Gist與LBP 融合后的特征對惡意代碼進行測試,得到的效果最好,證明了將全局特征與局部特征融合后的效果要優于單一特征下的效果。
此外,與僅采用Gist 特征的文獻[12]和僅采用LBP 特征的文獻[13]進行對比,采用KNN方法,結果如表5所示。
表5 KNN下與采用單一特征的方法與本文方法的實驗準確率結果對比 單位:%Tab.5 Comparison of experimental accuracy results of methods using a single feature and the proposed method by KNN unit:%
4.4.2 實驗檢測速度分析
為驗證本文提出的方法能夠提高惡意代碼分類效率,實驗對25 類惡意代碼家族分別測試了在感知哈希檢測模塊和機器學習檢測模塊下的檢測速度。每類家族分別進行了10次測試取平均檢測速度,結果如表6所示。
表6 感知哈希模塊和機器學習模塊下檢測時間對比 單位:sTab.6 Detection time comparison under perceptual hash module and machine learning module unit:s
在機器學習檢測模塊中,平均每個惡意代碼樣本的檢測時間是4.32 s,而感知哈希檢測模塊中,平均每個惡意代碼樣本的檢測時間是0.28 s,檢測速度提高了93.5%,因此對于能夠通過感知哈希檢測模塊檢測的樣本,將大大縮短檢測時間。相較于僅采用機器學習檢測,本文提出的基于感知哈希算法和特征融合的惡意代碼檢測方法分類檢測效率更高。
為解決傳統惡意代碼灰度圖特征的局限性并為進一步提高檢測效率,本文提出了基于感知哈希算法和特征融合的惡意代碼檢測方法。首先,通過感知哈希檢測模塊判斷惡意代碼樣本的所屬家族,對于無法通過感知哈希模塊判斷的樣本再進一步提取全局特征Gist與局部特征LBP,根據Gist與不同比例的LBP 融合后的特征進行測試。結果表明當Gist與全部比例的LBP融合后效果最好,準確率可達98.2%;此外本文提出的方法相較于機器學習檢測,檢測速度提高了93.5%。將本文實驗結果也與其他采用單一特征的文獻進行了對比,實驗結果表明本文所采用的融合特征的準確率更高。在下一步的工作中,將繼續研究惡意代碼的方法與特征,進一步提高惡意代碼的分類準確率。