龔子超,鄒福泰
(上海交通大學 網絡空間安全學院,上海 200240)
目前,惡意軟件已經成為網絡空間中最具威脅性的惡意行為。惡意軟件利用各種反分析技術與多態、混淆、加殼技術,會使檢測手段的誤報率與漏報率上升[1]。傳統的惡意軟件技術主要利用特征工程的手段進行特征提取與分類判別,會存在更新換代速度跟不上惡意軟件出現速度的問題。
本文提出了基于二進制文件圖像化的圖像分類技術,在已有的惡意軟件數據集上表現優異,但是對于加殼后的樣本會出現很高的誤差。在此基礎上,本文將加殼過程對其圖像化后的影響類比為生成對抗樣本的影響,并且利用生成對抗網絡對檢測網絡進行增強,一定程度上改善了準確率。第1 章介紹研究背景;第2 章介紹深度學習和生成對抗網絡結構;第3 章給出模型的實驗結果;第4 章總結并且給出下一步的研究方向。
自從進入互聯網時代以來,互聯網用戶急劇增加,具有危害性的惡意行為越來越多。這些惡意行為最主要的載體是惡意樣本。最早主流的檢測惡意樣本的系統(最主要的是病毒掃描程序)基于語法簽名比對來實現。如果在樣本中找到數據庫中存在的簽名,就把該程序宣布為惡意軟件。然而,這種方式存在一定缺陷:一是簽名數據庫的簽名沒有普適性,對于新的惡意代碼沒有識別能力;二是攻擊者可以通過多態等技術規避商業病毒掃描程序,因為語法簽名無法了解指令的語義。因此,文獻[1]提出了一種基于語義的惡意代碼檢測技術,通過對常見的代碼混淆技術的理解與分析,解釋了通過語義檢測的可行性。
越來越多的研究表明,靜態分析惡意代碼存在很大的局限性,而執行樣本后其對行為動作能夠很大程度反映其是否是惡意代碼,因此動態分析成為惡意代碼檢測的新方向。文獻[1]中代碼執行了惡意文件并生成了這些文件調用的應用程序接口(Application Programming Interface,API),然后使用相似矩陣分析API 調用序列的相似性。文獻[2]提出了使用動態分析方法提取各種行為特征來對樣本進行識別。這些方法的分類精度良好,但是計算復雜度高。在動態分析中,沙箱是分析者最有力的武器。通過沙箱建立虛擬環境,可以高效地批量分析惡意樣本的行為特征。
機器學習也是常用方法之一。機器學習中的支持向量機、隨機森林、樸素貝葉斯和決策樹等,是最常用于該領域的算法。這些分類算法需要大量樣本進行訓練來建立分類模型。
自從深度學習興起后,使用深度學習進行惡意軟件檢測分類也成為熱點話題。最常見的方式是使用之前機器學習的經驗,抽取樣本的各類特征,使用深度學習模型而非機器學習模型進行訓練,有時能得到更好的效果。文獻[3]將抽取的各類型靜態特征使用深度神經網絡進行分類,準確率高于99.9%。文獻[4]則將動態分析后得到的特征使用循環神經網絡和卷積神經網絡進行了訓練。
惡意樣本圖像化是一種將惡意樣本映射為圖像的編碼技術,目標是將樣本轉化為一張能表示其特征的圖像,從而將惡意樣本識別問題轉化為圖像的二分類問題。
對于二進制樣本,將其文件內容按字節讀取,每8 位存為一個向量,再轉化為[0,255]范圍內的灰度整數。這樣的流程會產生與樣本對應的灰度圖[5-6]。經過這樣的流程處理,會發現惡意二進制文件樣本產生的灰度圖與正常的二進制文件樣本產生的灰度圖存在一定的肉眼上的區別,如圖1 所示。這樣的圖像差異會在深度網絡中呈現出較高的區分度。

圖1 不同樣本進行灰度圖化的結果
但是,這樣的技術對于惡意軟件常用的混淆加密技術會有一定的出入。如圖2 所示,經過加殼算法處理的樣本在人類視覺上已經很難做以區分,實際上這些圖像輸入到之前訓練好的網絡中的判別效果不甚理想,因此需要改進圖像分類模型。

圖2 不同樣本加殼后進行灰度圖化的結果
本文采取卷積神經網絡結構[7]。卷積神經網絡已經被證明在圖像領域有著出色發揮[6],且可以同時處理整張圖片。
本文的分類模型運行分為以下幾個步驟。
(1)所有的灰度圖都被調整為96×96×1 的形狀,使用最近鄰插值法。
(2)使用3 層深度學習網絡進行判別任務:每一層先經過一次二維卷積層,使用非飽和函數LeakyReLU 作為激活函數,之后引入批標準化層[8](Batch_Normalization)和Dropout 層來解決深度學習過程中的過擬合問題[9]。
(3)深度學習網絡輸出為布爾型變量,結果為1 代表著樣本檢測結果為惡意樣本,為0 則為良性樣本。經過(2)中的處理,經過兩個全連接層得到最后的結果。
而在加入生成對抗網絡[7,10]的模型中,判別器采用了上述結構。在生成器這邊,輸入為100 維的隨機噪聲,經過一層全連接后,再進行上采樣、卷積、批規范化、激活函數2 次,然后進行一次卷積,最后通過激活函數為tanh 的激活層輸出(-1,1)范圍內的數據,代表了生成的噪聲圖像的灰度。
訓練過程中先訓練判別器,一半使用真實圖片,另一半使用真實圖片與產生的噪聲進行按位與后產生的圖像進行訓練。之后,再對整個進行訓練,輸入為隨機噪聲和真實圖片。
作為基準的惡意軟件數據集從“VirusShare Malware Sharing Platform”處獲取。該平臺提供了最新的各種惡意樣本,包括windows 可執行文件、JavaScript、Android 樣 本(APK)、Java 以 及PDF等,本文從中獲取到數十萬個樣本。良性樣本的獲取則是通過從各大軟件下載平臺上爬取的。為了保證用戶滿意度,這些文件都會經過嚴格的檢測來確保良性,共爬取了近萬個良性樣本。為了使正負樣本均衡,本文從惡意樣本與良性樣本中各隨機抽取6 000 個作為訓練用。
本次實驗使用的平臺信息如表1 所示,具體的模型參數見表2 和表3。

表1 實驗平臺信息

表2 用于惡意樣本檢測的卷積網絡參數

表3 生成對抗網絡生成器的網絡參數
在單獨的判別器中,使用Logistic loss 作為損失函數,定義如下:

同時,在訓練過程中使用準確率(accuracy)、假陽率(False Positive Rate,FPR)、假陰率(False Negative Rate,FNR)評估模型的能力,詳細定義如下。
在二分類任務訓練過程中,存在如下4 種情況:
(1)True Positive(TP):預測為正例,實際為正例的數量;
(2)False Positive(FP):預測為正例,實際為負例的數量;
(3)True Negative(TN):預測為負例,實際為負例的數量;
(4)False Negative(FN):預測為負例,實際為正例的數量。
于是,各指標計算公式如下:

在加入了生成對抗網絡的網絡中,訓練判別器時一半使用真實樣本,一半使用生成器生成的樣本作混淆,同時使用上述的Logistic loss 作為損失函數。記生成器為g(x),則該過程中判別器損失為:

在訓練整個模型時,此時訓練器不再進行訓練,關注的點為生成器的訓練。生成器的訓練目標為混淆判別器的判別結果,因此損失函數為:

由于目標是改善其中判別器的精度,因此只有判別器的性能需要關注。此處的性能評估方法與上述模型一樣,不再贅述。
在卷積神經網絡的訓練上,采取將數據集分為0.8:0.2 的比例分別作為訓練集和測試集。訓練過程中,損失函數與精確度的變化趨勢如圖3 所示。

圖3 卷積神經網絡訓練中參數變化
經過訓練后,該模型在測試集上的精確度為99.5%,損失函數穩定在0.02 左右,FPR為1.07%,FNR為0.97%,證明該方法在惡意軟件識別上具有一定的可行性。
但是,如果將這個模型用于檢測經過加殼的樣本,檢測的精確度只有72.7%,損失函數會在1~3不停波動,證明無法勝任對加殼樣本識別的任務,需要發現新的手段或者對該模型進行改進。
而對生成對抗網絡的訓練中,將未加殼樣本作為訓練集,將加殼后的數據作為測試集,訓練過程中各參數變化趨勢如圖4 所示。

圖4 生成對抗網絡訓練中參數變化
經過訓練后,該模型在測試集上的精確度為90%左右,比起上述卷積神經網絡在加殼樣本上的表現好。
通過對比可以發現,生成對抗網絡雖然會在未加殼樣本上的表現有所下降,但是由于對抗樣本對生成器的加強,會在加殼樣本上的表現優于卷積神經網絡,說明該方法在加殼樣本識別方面具有一定的可行性。
本文主要研究基于生成對抗網絡的惡意代碼識別模型在加殼惡意樣本識別中的應用和效果,闡述惡意樣本圖像化在樣本識別中的優劣勢,設計和訓練了基于生成對抗網絡和卷積神經網絡的惡意代碼識別模型。模型在搜集的數據集上的表現對比顯示,卷積神經網絡在未加殼的樣本識別上表現優異,但是在加殼后的樣本識別上表現不佳。在此基礎上,生成對抗網絡經過訓練可以使其鑒別器在加殼樣本上的表現獲得改善。
綜上所述,基于生成對抗網絡的惡意代碼識別模型將加殼惡意代碼識別問題類比于生成對抗樣本攻擊識別網絡的問題,一定程度地改善了識別模型的精確度。然而,該模型的魯棒性較差,普遍性也需要進一步考證,因此提高模型的魯棒性和普適性是需要進一步研究的方向。