張 華, 陳淑珍
(1.福建警察學院 計算機與信息安全管理系, 福建 福州 350007;2.福建警察學院 網(wǎng)絡安全與電子物證研究所, 福建 福州 350007)
隨著互聯(lián)網(wǎng)不斷進步, 網(wǎng)絡傳輸數(shù)量越來越大, 大數(shù)據(jù)、 云平臺等網(wǎng)絡形式發(fā)展較為完善,但仍容易受到惡意代碼攻擊, 惡意代碼直接影響網(wǎng)絡正常運行[1-2]。 僵尸程序、 特洛伊木馬、 蠕蟲等對互聯(lián)網(wǎng)造成威脅的代碼均屬于惡意代碼。惡意代碼具有偽裝性強以及傳播速度極快的特點, 及時發(fā)現(xiàn)惡意代碼并實時處理對網(wǎng)絡安全運行具有重要意義[3-4]。
神經(jīng)網(wǎng)絡算法是目前廣泛應用于各領域的高效算法[5-6], 眾多研究學者已將神經(jīng)網(wǎng)絡算法應用于各種檢測方法中。 BP 神經(jīng)網(wǎng)絡算法是一種基于誤差逆?zhèn)鞑サ膽煤軓V泛的神經(jīng)網(wǎng)絡算法,將BP 神經(jīng)網(wǎng)絡算法應用于惡意代碼檢測系統(tǒng)中, 利用神經(jīng)元激發(fā)獲取激發(fā)路徑, 令神經(jīng)網(wǎng)絡僅學習被激發(fā)路徑的權(quán)重, 改善傳統(tǒng)神經(jīng)網(wǎng)絡算法訓練時間過長、 收斂較難的缺陷, 降低惡意代碼檢測系統(tǒng)檢測誤差, 提升檢測效率[7-9]。
惡意代碼攻擊會對網(wǎng)絡造成破壞性影響, 其中包括流量異常、 協(xié)議異常以及內(nèi)容異常等, 這些異??赡軉为毘霈F(xiàn), 也可能同時出現(xiàn), 以往惡意代碼檢測系統(tǒng)檢測實時性較差, 且誤報率與漏報率較高, 檢測效率低[10-12]。 為有效檢測網(wǎng)絡中出現(xiàn)的惡意代碼, 研究基于BP 神經(jīng)網(wǎng)絡算法的惡意代碼檢測系統(tǒng), 提取惡意代碼特征, 利用BP 神經(jīng)網(wǎng)絡學習, 實現(xiàn)對系統(tǒng)檢測范圍內(nèi)所有惡意代碼的快速檢測。
本文研究的惡意代碼檢測系統(tǒng), 主要包括數(shù)據(jù)包捕獲模塊、 協(xié)議分析模塊、 預處理模塊、BP 神經(jīng)網(wǎng)絡檢測模塊以及響應模塊, 還包括事件產(chǎn)生器、 事件分析器、 事件數(shù)據(jù)庫以及響應單元等部分。 采用該形式設計的惡意代碼檢測系統(tǒng)可適應不同網(wǎng)絡, 能夠提升惡意代碼檢測系統(tǒng)的互操作性和互用性。 基于BP 神經(jīng)網(wǎng)絡算法的惡意代碼檢測系統(tǒng)(簡稱 “本文系統(tǒng)”) 總體結(jié)構(gòu)如圖1 所示。
由圖1 可以看出, 采用本文系統(tǒng)進行惡意代碼檢測大體流程如下: 通過過濾數(shù)據(jù)包獲取惡意代碼檢測系統(tǒng)所需數(shù)據(jù)包, 數(shù)據(jù)包捕獲模塊獲取系統(tǒng)所需數(shù)據(jù)包后發(fā)送至協(xié)議分析模塊; 協(xié)議分析模塊接收數(shù)據(jù)包后依據(jù)TCP / IP 協(xié)議按照從下至上順序解析數(shù)據(jù)包, 并轉(zhuǎn)換至傳輸層連接記錄形式, 將符合要求的數(shù)據(jù)發(fā)送至預處理模塊; 預處理模塊依據(jù)數(shù)據(jù)包類型利用數(shù)學向量代替數(shù)據(jù)信息作為輸入信號傳輸至BP 神經(jīng)網(wǎng)絡; BP 神經(jīng)網(wǎng)絡檢測模塊提取惡意代碼特征并利用BP 神經(jīng)網(wǎng)路算法檢測網(wǎng)絡中惡意代碼, 該算法僅針對激發(fā)路徑權(quán)值調(diào)整訓練樣本, 同時實時更新惡意代碼特征庫, 將檢測結(jié)果發(fā)送至響應模塊處理;響應模塊具有擴展功能, 通過擴展功能對檢測的惡意代碼做出相應處理, 最后實現(xiàn)對惡意代碼的有效檢測。
BP 神經(jīng)網(wǎng)絡檢測模塊在提取惡意代碼特征前, 需對惡意代碼進行分析。 因此, 利用動態(tài)二進制與靜態(tài)反匯編技術(shù)結(jié)合分析惡意代碼[13-15]。惡意代碼特征提取結(jié)構(gòu)圖如圖2 所示。
由圖2 可知, 通過不同方法分析代碼可獲取惡意代碼不同特征。
(1) 動態(tài)二進制分析
依據(jù)代碼特征, 基于動態(tài)二進制插樁平臺Pin 編寫指令提取插件, 通過以上過程記錄動態(tài)指令流并獲取所分析數(shù)據(jù), 進行動態(tài)污點分析(動態(tài)跟蹤惡意代碼運行過程); 在動態(tài)污點分析基礎上通過API 函數(shù)提取API 調(diào)用關(guān)系并生成污點文件, 然后將文件輸出到行為特征提取模塊。 根據(jù)動態(tài)文件從惡意代碼家族的所有行為特征中挖掘出最大公共部分, 最后儲存到惡意代碼特征提取庫。
圖2 惡意代碼特征提取結(jié)構(gòu)圖
(2) 靜態(tài)反匯編分析
將上述動態(tài)二進制分析獲取Dump 樣本作為輸入, 但大多惡意代碼進行了加殼處理, 通過對代碼文件進行脫殼處理, 實現(xiàn)從惡意代碼的PE文件中獲取靜態(tài)特征; 選取反匯編工具IDA Pro實施靜態(tài)分析, 將可執(zhí)行代碼轉(zhuǎn)換成容易分析的匯編代碼, 并通過所記錄動態(tài)信息以及靜態(tài)分析結(jié)果提取惡意代碼特征集分析網(wǎng)絡代碼。 靜態(tài)特征提取的具體過程如下。
1) 查殼與脫殼。 通常惡意代碼采用加殼工具(UPX、ASPACK) 處理隱藏真實意圖, 這里采用查殼軟件掃描代碼判斷是否加殼, 如果檢測到代碼已加殼, 則使用脫殼軟件對代碼進行脫殼,然后輸出到反匯編模塊。
2) 反匯編模塊。 該模塊將可執(zhí)行的二進制代碼轉(zhuǎn)換成匯編代碼。 由于惡意代碼一般以可執(zhí)行文件形式存在, 若要分析代碼結(jié)構(gòu), 需要進行反匯編。 本文采用靜態(tài)反匯編工具IDA Pro 將惡意代碼樣本或目標代碼反編譯成匯編文件, 并將匯編文件輸出到特征提取模塊, 提取出惡意代碼靜態(tài)特征。
提取惡意代碼特征后, 利用BP 神經(jīng)網(wǎng)絡算法實現(xiàn)惡意代碼檢測。 BP 神經(jīng)網(wǎng)絡是一種前饋性神經(jīng)網(wǎng)絡, 由輸入層、 隱含層和輸出層通過全互聯(lián)方式組成。 BP 神經(jīng)網(wǎng)絡可通過學習調(diào)整網(wǎng)絡中的連接權(quán)值, 即通過學習不斷調(diào)整網(wǎng)絡實際輸出與期望輸出之間的誤差, 誤差信號由輸出層反向逐層修正神經(jīng)元間的連接權(quán)值。 網(wǎng)絡實際輸出受輸入影響, 且BP 神經(jīng)網(wǎng)絡除輸入單元外基本處理單元呈現(xiàn)非線性關(guān)系。 而差異輸入可激發(fā)不同神經(jīng)元, 所激發(fā)神經(jīng)元又能組成激發(fā)路徑,最后通過激發(fā)路徑權(quán)值調(diào)整訓練樣本, 實現(xiàn)網(wǎng)絡逐漸趨向收斂, 提高檢測準確率。
設BP 神經(jīng)網(wǎng)絡中輸入層包含神經(jīng)元數(shù)量為n , 兩個隱含層包含神經(jīng)元數(shù)量分別為p1以及p2, 輸出層包含神經(jīng)元數(shù)量為m 。 BP 神經(jīng)網(wǎng)絡選取sigmoid 函數(shù)作為神經(jīng)元的激活函數(shù)。
BP 神經(jīng)網(wǎng)絡學習算法如下。
1) 獲取網(wǎng)絡實際輸出。 設神經(jīng)網(wǎng)絡中各輸入模式用X = x1, x2, …, xn表示, 所獲取網(wǎng)絡實際輸出為Y = y1, y2, …, yn。
2) 獲取BP 神經(jīng)網(wǎng)絡計算誤差。 設BP 神經(jīng)網(wǎng)絡中訓練集存在樣本數(shù)量為k , 期望輸出用R獲取神經(jīng)網(wǎng)絡的誤差函數(shù), 可得神經(jīng)網(wǎng)絡訓練集內(nèi)全部樣本的總誤差為
3) 修正神經(jīng)網(wǎng)絡權(quán)值。 誤差函數(shù)的極小值選取梯度下降法獲取。 以Δqij表示權(quán)值qij的更新量, 如式(1):
式(1)中, λ 表示學習速率。
BP 神經(jīng)網(wǎng)絡針對差異輸入可激發(fā)不同神經(jīng)元, 最終利用所激發(fā)神經(jīng)元組成激發(fā)路徑[14]。將BP 神經(jīng)網(wǎng)絡應用于惡意代碼檢測系統(tǒng)中的具體步驟如下。
1) 激發(fā)全部輸入神經(jīng)元。
2) 比較隱含層中全部神經(jīng)元, 激發(fā)存在最大絕對值輸出的神經(jīng)元, 設一次前向過程競爭所激發(fā)神經(jīng)元數(shù)量為nb, 需保證所輸出nb個神經(jīng)元絕對值為最大, 其中b 表示經(jīng)過b 次競爭獲取最大絕對值輸出的神經(jīng)元, nb需要在神經(jīng)元競爭前設置為正整數(shù); 隱含層在競爭最大數(shù)量為B時, 表示其具有隱含層數(shù)量為B 。
3) 激發(fā)全部輸出神經(jīng)元。 利用上述過程獲取神經(jīng)元激發(fā)總數(shù)量, 如式(2):
式(2)中, Nin與Nout分別表示輸入層神經(jīng)元數(shù)量以及輸出層神經(jīng)元數(shù)量。 利用最終N(r) 個激發(fā)神經(jīng)元所組成的激發(fā)路徑實現(xiàn)基于神經(jīng)網(wǎng)絡的惡意代碼檢測[15]。
基于神經(jīng)網(wǎng)絡的惡意代碼檢測因僅針對激發(fā)路徑權(quán)值調(diào)整訓練樣本, 因此降低該算法計算復雜度以及收斂速度。
為有效檢測本文系統(tǒng)檢測惡意代碼的有效性, 在CPU 為英特爾i7, 內(nèi)存與硬盤分別為4 G和160 G 的計算機中驗證本文方法檢測性能。 選取Matlab 神經(jīng)網(wǎng)絡工具箱作為仿真平臺, 搭建實驗環(huán)境。 該工具箱中有包括BP 神經(jīng)網(wǎng)絡在內(nèi)的大量神經(jīng)網(wǎng)絡, 工作性能良好。
實驗選取500 個正常代碼和500 個不同類型的惡意代碼作為訓練樣本集, 從EMBER 大型開源數(shù)據(jù)集[16]中選取實驗用惡意代碼, 選取該數(shù)據(jù)集中的5 000 條瀏覽記錄作為系統(tǒng)檢測樣本。本文系統(tǒng)檢測惡意代碼界面如圖3 所示。
為直觀展示本文系統(tǒng)檢測性能, 采用本文系統(tǒng)檢測5 000 條瀏覽記錄中存在惡意代碼情況,并將本文系統(tǒng)與梯度下降系統(tǒng)、 自適應系統(tǒng)進行對比, 3 種系統(tǒng)在不同學習率情況下的學習次數(shù)如表1 所示。
通過表1 實驗結(jié)果可以看出, 采用本文系統(tǒng)在不同學習率情況下的學習次數(shù)均為最低, 尤其是學習率為0.50 時, 本文系統(tǒng)的學習次數(shù)僅為32 次, 而梯度下降系統(tǒng)以及自適應系統(tǒng)的學習次數(shù)高達235 和165 次。 實驗結(jié)果表明, 本文系統(tǒng)具有較高的收斂效率, 采用的BP 神經(jīng)網(wǎng)絡算法復雜度低, 可有效提升計算效率以及檢測精準度。檢測正確率、 漏報率以及誤報率是直觀評價檢測系統(tǒng)檢測性能的重要指標, 其中正確檢測惡意代碼樣本數(shù)除以樣本總數(shù)為檢測正確率; 將惡意代碼檢測為正確代碼數(shù)量除以樣本總數(shù)為檢測漏報率; 將正確代碼檢測為惡意代碼數(shù)量除以樣本總數(shù)為檢測誤報率。 3 種系統(tǒng)識別5000 條瀏覽記錄中存在惡意代碼的檢測正確率、 漏報率以及誤報率結(jié)果如圖4 所示。
表1 3 種系統(tǒng)學習次數(shù)對比
圖3 本文系統(tǒng)檢測界面圖
通過圖4 實驗結(jié)果可以看出, 本文系統(tǒng)檢測5 000 條瀏覽記錄中的惡意代碼檢測正確率較高,檢測數(shù)量為5 000 條時, 檢測正確率為99.0%,而梯度下降系統(tǒng)和自適應系統(tǒng)檢測正確率僅為95.1%和96.1%, 本文系統(tǒng)檢測正確率明顯高于另兩種系統(tǒng); 檢測瀏覽記錄數(shù)量為5 000 條時,本文系統(tǒng)的惡意代碼檢測漏報率和誤報率分別為0.30%和0.70%, 采用梯度下降系統(tǒng)的惡意代碼檢測漏報率和誤報率分別為1.40% 和1.37%,自適應系統(tǒng)的惡意代碼檢測漏報率和誤報率分別為2.47%和2.46%。 分析實驗結(jié)果可知, 本文系統(tǒng)具有較高的檢測性能。
圖4 3 種系統(tǒng)檢測結(jié)果對比
通過表2 實驗結(jié)果可以看出, 采用本文系統(tǒng)檢測網(wǎng)絡中不同類型的惡意代碼, 訓練及檢測時間均明顯低于梯度下降系統(tǒng)及自適應系統(tǒng), 且采用本文系統(tǒng)檢測網(wǎng)絡中不同類型的惡意代碼的檢測時間均保持在0.1 ms 以下, 而采用梯度下降系統(tǒng)及自適應系統(tǒng)的檢測時間基本在0.1 ms 以上, 相差較大。 惡意代碼檢測系統(tǒng)的實時性是評價惡意代碼檢測性能的重要指標, 只有實時檢測惡意代碼并及時作出響應才能阻止惡意代碼造成的嚴重后果。 實驗結(jié)果表明本文系統(tǒng)具有較高的檢測實時性。
統(tǒng)計3 種系統(tǒng)檢測不同類型惡意代碼的訓練時間以及檢測時間, 對比結(jié)果如表2 所示。
表2 3 種系統(tǒng)檢測不同類型惡意代碼時間對比 ms
續(xù)表2
惡意代碼是指可能影響網(wǎng)絡正常運行的危險代碼, 因大部分惡意代碼在網(wǎng)絡中無作用行為,因此檢測較為困難。 研究基于BP 神經(jīng)網(wǎng)絡算法的惡意代碼檢測系統(tǒng), 利用BP 神經(jīng)網(wǎng)絡算法依據(jù)所提取惡意代碼特征有效檢測網(wǎng)絡中惡意代碼, 提升惡意代碼檢測正確率。 實驗結(jié)果表明,采用本文系統(tǒng)不僅可有效檢測網(wǎng)絡中存在的惡意代碼, 誤報率和漏報率較低, 且實時性較好, 說明本文系統(tǒng)在實際網(wǎng)絡惡意代碼檢測中有著較高的實用價值。