羅赟騫,鄔 江,王艷偉,楊 鶴
(中電長城網(wǎng)際系統(tǒng)應(yīng)用有限公司,北京 102209)
惡意軟件是為了進(jìn)行未經(jīng)授權(quán)的惡意活動而感染計算機的軟件,如僵尸網(wǎng)絡(luò)、勒索軟件、間諜軟件等。惡意軟件通常與命令和控制中心(Command & Control,C2)之間建立通信連接,從而使控制者通過C2服務(wù)器遠(yuǎn)程控制目標(biāo)主機。為了提高惡意軟件與C2服務(wù)器之間通信的可靠性,惡意軟件常常采用動態(tài)域名生成算法(Domain Generation Algorithm,DGA)自動生成海量域名,然后從中選擇一個或多個有效域名解析出IP地址,實現(xiàn)與C2服務(wù)器的通信,規(guī)避常規(guī)的黑名單檢測。DGA域名是惡意軟件的一個重要特征,對其進(jìn)行有效檢測可以準(zhǔn)確、及時地發(fā)現(xiàn)惡意軟件,對于提升安全檢測水平進(jìn)而提高網(wǎng)絡(luò)空間安全防護(hù)能力具有重要的現(xiàn)實意義。
DGA域名檢測經(jīng)過了黑名單過濾、淺層機器學(xué)習(xí)檢測階段,正在向深層機器學(xué)習(xí)檢測階段發(fā)展,傳統(tǒng)的黑名單檢測方法需要人工補充DGA域名,難以適應(yīng)DGA域名迅速增長帶來的挑戰(zhàn)[1]。淺層機器學(xué)習(xí)檢測通過精心構(gòu)造特征,采用淺層機器學(xué)習(xí)方法構(gòu)建檢測模型,實現(xiàn)對DGA域名的自動化檢測。但是,由于需要人工構(gòu)造特征,要求特征構(gòu)造者具有豐富的經(jīng)驗,并且當(dāng)DGA域名變種時,需要對特征進(jìn)行重新構(gòu)造。深度學(xué)習(xí)方法可以自動提取特征,解決了淺層機器學(xué)習(xí)面臨的問題,可以采用該方法實現(xiàn)對DGA域名的有效檢測。文獻(xiàn)[2]提出采用長短時間記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)模型實現(xiàn)對DGA域名的檢測;文獻(xiàn)[3]提出采用集成卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)模型對惡意字符串進(jìn)行檢測;文獻(xiàn)[4]比較了Alex Net、VGG、Squeeze Net、Inception、Res Net結(jié)合遷移學(xué)習(xí)進(jìn)行DGA域名檢測時的性能;文獻(xiàn)[5]采用實際的域名數(shù)據(jù),對CNN模型和LSTM模型的檢測性能進(jìn)行了比較。上述檢測方法只是采用單種深度學(xué)習(xí)模型對DGA域名進(jìn)行檢測,然而不同的深度學(xué)習(xí)模型自動提取特征的角度不同,如果將不同類型的深度學(xué)習(xí)模型集成在一起,可以從多個角度提取特征,從而提升檢測效果。本文將采用CNN模型和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)模型相集成的CNN-RNN模型對DGA域名進(jìn)行檢測。
CNN模型由卷積層和池化層組成[6]。卷積層具有局部連接和權(quán)重共享的特征,可以減少模型的復(fù)雜性;池化層可以減小數(shù)據(jù)量,從而減小參數(shù)規(guī)模,降低計算復(fù)雜度,也可以防止過擬合。CNN模型可以有效地捕捉輸入的局部特征。
(1)卷積層
在卷積層中,上一層的特征圖被一個可學(xué)習(xí)的卷積核進(jìn)行卷積,然后通過一個激活函數(shù),可以得到輸出特征圖,每個輸出特征圖可以組合卷積多個輸入特征圖的值。卷積層的公式為:
(1)
(2)池化層
池化層將生成輸入特征圖的下采樣版本。池化層的公式為:
(2)
與深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNN)一樣,RNN模型將輸入序列x1,x2,x3,…,xt映射為隱含狀態(tài)序列h1,h2,h3,…,ht。但是,與DNN不同的是,隱含狀態(tài)ht是通過x1,x2,x3,…,xt的函數(shù)進(jìn)行計算的,而不是由xt單獨計算的。將ht置于一個序列的條件上進(jìn)行計算,而不是在單獨的現(xiàn)有輸入上進(jìn)行計算,可以捕獲輸入數(shù)據(jù)中的時間特征。RNN模型在理論上很完美,但隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的增加,存在梯度消失或爆炸的問題,在RNN模型基礎(chǔ)上改進(jìn)的LSTM和GRU(Gated Recurrent Unit)等模型解決了這個問題。
(1)LSTM模型
LSTM模型是由許多LSTM單元組成的,一個LSTM單元中包含了輸入門、輸出門和遺忘門。通過這種特殊結(jié)構(gòu),使LSTM能夠選擇輸入的哪些信息被遺忘,哪些信息被記住。某時刻t,LSTM單元各組成部分的計算如下[7]:
it=σ(Wixt+Uiht-1+bi)
(3)
ft=σ(Wfxt+Ufht-1+bf)
(4)
(5)
(6)
ot=σ(Woxt+Uoht-1+bo)
(7)
ht=ot⊙tanh(ct)
(8)
其中,xt表示t時刻的輸入向量;ht表示隱藏狀態(tài);it、ft、ct、ot分別表示輸入門、遺忘門、記憶單元狀態(tài)和輸出門;Wi、Wf、Wc、Wo為輸入數(shù)據(jù)的權(quán)重矩陣;Ui、Uf、Uc、Uo為隱藏狀態(tài)的權(quán)重矩陣;bi、bf、bc、bo為偏置;σ表示sigmoid激活函數(shù);⊙為元素乘。
(2)GRU模型
GRU模型與LSTM相比,合并了LSTM中的遺忘門和輸入門,模型中只存在更新門和重置門,計算如下[8]:
zt=σ(Wzxt+Uzht-1+bz)
(9)
rt=σ(Wrxt+Urht-1+br)
(10)
(11)
(12)
其中,xt表示t時刻的輸入向量;ht表示隱藏狀態(tài);zt、rt分別表示了更新門、重置門;Wz、Wr、Wh為輸入數(shù)據(jù)的權(quán)重矩陣;Uz、Ur、Uh為隱藏狀態(tài)的權(quán)重矩陣;bz、br、bh為偏置;σ表示sigmoid激活函數(shù)。
CNN-RNN模型由字符嵌入層、特征提取層和分類層三部分組成。字符嵌入層主要實現(xiàn)將輸入的字符進(jìn)行數(shù)字化編碼,特征提取層結(jié)合CNN和RNN模型實現(xiàn)對輸入數(shù)據(jù)特征的自動提取,分類層根據(jù)提取的特征使用三層全連接神經(jīng)網(wǎng)絡(luò)實現(xiàn)對DGA域名的自動分類預(yù)測。其整個模型架構(gòu)如圖1所示。
圖1 CNN-RNN集成檢測模型
(1)字符嵌入層
字符嵌入層對輸入的字符進(jìn)行預(yù)處理,包括字符串填充和截斷、字符編碼等。字符嵌入層只處理固定長度為L的字符串,如果輸入字符串長度大于L,那么需要將超出L的字符串截斷;如果輸入字符串長度小于L,那么需要將字符串進(jìn)行補齊。為了能夠?qū)⒆址畱?yīng)用于神經(jīng)網(wǎng)絡(luò),還需要將輸入的單個字符串編碼為長度為d的向量;d是一個可變參數(shù),這里取值為128。
(2)特征提取層
特征提取層采用深度學(xué)習(xí)模型,對字符嵌入層輸出的二維矩陣進(jìn)行自動處理,將高維的輸入數(shù)據(jù)編碼為低維的特征編碼,保留輸入數(shù)據(jù)中絕大多數(shù)的信息。本文在文獻(xiàn)[3]的基礎(chǔ)上,提出一種結(jié)合CNN模型和Bi-RNN模型的集成特征提取模型。
CNN模型采用3種不同長度過濾器的CNN模型檢測局部特征,本文使用的過濾器長度為3、4、5,卷積核的數(shù)量為256。CNN卷積模型等效于傳統(tǒng)的n-grams特征提取。每個CNN模型輸出的結(jié)果將采用求平均的方法,輸出長度為256的一維向量。
Bi-RNN模型常用于自然語言處理,可以實現(xiàn)字符數(shù)據(jù)的正向和反向處理。與單獨的RNN模型相比,Bi-RNN可以捕獲更多的時序信息。Bi-RNN模型將輸出長度為256的一維向量。
CNN模型和Bi-RNN模型的輸出結(jié)果將進(jìn)入融合層,融合層將4個長度為256的一維向量連接成長度為1 024的一維向量。
Bi-RNN模型在實施時采用Bi-LSTM模型和Bi-GRU模型。
(3)分類層
分類層采用3層全連接神經(jīng)網(wǎng)絡(luò)對輸入特征進(jìn)行分類預(yù)測,判斷輸入字符串是惡意的還是良性的。模型進(jìn)行訓(xùn)練時,使用Binary-cross熵衡量分類器的損失值。
(13)
文中使用的數(shù)據(jù)是文獻(xiàn)[2]在github上開源提供的公開數(shù)據(jù)[9]。惡意域名是模擬DGA算法生成的30多種類型約75萬個DGA域名,良性域名是來至Alexa的前100萬個域名。實驗時,隨機抽取11萬個DGA域名和11萬個良性域名組成22萬個樣本。
實驗時,使用上節(jié)中字符嵌入層的方法對輸入字符串進(jìn)行預(yù)處理,輸入字符的最大編碼長度為53,字符的編碼長度為128,字符嵌入層輸出大小為53×128的矩陣編碼數(shù)據(jù)。
將文獻(xiàn)[3]中提出的方法作為基線參考,分析比較了本文提出的集成檢測模型的性能。比較的三種特征提取模型如表1所示。
表1 三種特征提取模型
表1中CNN(n,m)表示過濾器長度為n,卷積核的數(shù)量為m的一維卷積Convolution1D;mean(256)表示對卷積的輸出進(jìn)行axis=1方向的均值計算,輸出長度為256的向量;Merge(1 024)表示將第一層中各個深度學(xué)習(xí)模型的輸出連接成長度為1 024位的向量。
采用精度(Precision)、召回率(Recall)、ROC(Receiver Operating Characteristic Curve)評估本文提出的模型的效果。
精度是精確性的度量,指被分為正例的示例與實際正例的比例。精度的計算公式為:
(14)
召回率是覆蓋面的度量,度量有多少正例被實際分為正例。召回率的計算公式為:
(15)
ROC實現(xiàn)了對TPR(True Positive Rate)和FPR(False Positive Rate)的權(quán)衡度量,TPR和FPR計算如下:
(16)
(17)
ROC是通過對分類器返回分?jǐn)?shù)在不同閾值下計算的TPR和FPR進(jìn)行評估而產(chǎn)生的。例如,針對某個分類器ROC在0.0~1.0的閾值范圍內(nèi),計算每個閾值下的FPR和TPR。曲線下面積(Area Under Curve,AUC)是比較ROC曲線的常用單一度量,顧名思義,就是ROC曲線下的面積。AUC=1表示完美的分類,AUC=0.5表示隨機的分類。AUC可以對分類性能進(jìn)行綜合評價。
實驗的硬件運行環(huán)境為Intel?CoreTMi7-6700 CPU@3.40 GHz×4,32 GB內(nèi)存;操作系統(tǒng)為Ubuntu 16.04 LTS;程序開發(fā)環(huán)境為Anaconda4.4.0,Python版本為2.7.14,Tensorflow版本為1.8.0;使用Keras[10]進(jìn)行開發(fā),版本為2.1.6。
用于模型的訓(xùn)練樣本數(shù)據(jù)占全部樣本數(shù)據(jù)的80%,用于模型的測試樣本數(shù)據(jù)占20%。模型訓(xùn)練時可以采用HoldOut檢驗法和交叉驗證方法選擇最優(yōu)模型,但由于計算資源有限,在模型訓(xùn)練時采用HoldOut檢驗法,選擇最優(yōu)模型時使用95%的訓(xùn)練樣本數(shù)據(jù)構(gòu)建模型,使用5%的訓(xùn)練樣本數(shù)據(jù)進(jìn)行模型驗證。模型訓(xùn)練時,如果模型的AUC值連續(xù)5次沒有發(fā)生變化,就停止訓(xùn)練過程。實驗時,分別運行模型10次,獲取相關(guān)指標(biāo)的統(tǒng)計值。
三種模型在預(yù)測精度、召回率和AUC值比較如表2~表4所示。
由表2~表4可知,從三個預(yù)測指標(biāo)看,CNN-BiLSTM和CNN-BiGRU模型的預(yù)測性能要優(yōu)于文獻(xiàn)[3]中的模型,說明CNN-RNN模型的有效性。CNN-BiLSTM模型在精度指標(biāo)方面要優(yōu)于CNN-BiGRU模型,在AUC指標(biāo)方面整體上也優(yōu)于CNN-BiGRU模型,只是在召回率指標(biāo)方面略遜于CNN-BiGRU模型。
表2 三種模型的精度比較
表3 三種模型的召回率比較
表4 三種模型的AUC值比較
在模型訓(xùn)練性能方面,文獻(xiàn)[3]中CNN-BiLSTM模型和CNN-BiGRU模型的平均訓(xùn)練時間分別為2 880 s、4 484 s、4 428 s。CNN-BiLSTM模型和CNN-BiGRU模型訓(xùn)練時間相近,但遠(yuǎn)長于文獻(xiàn)[1]中模型的訓(xùn)練時間。
本文提出了一種將CNN模型和RNN模型相集成的DGA域名檢測方法。實驗結(jié)果表明,這種集成檢測方法與原有模型檢測方法相比,能夠有效提高檢測效果,但由于模型構(gòu)建較復(fù)雜,增加了訓(xùn)練時間,下一步的研究工作將考慮對RNN模型進(jìn)行改進(jìn),以減少模型訓(xùn)練時間,如采用SRU(Simple Recurrent Unit)模型。