韓雨男,周博超,張 權(quán)
(中北大學(xué) 信息與通信工程學(xué)院,山西 太原 030051)
域名生成算法(DGA)最大的特點(diǎn)是字符產(chǎn)生的隨機(jī)性,這也使得DGA域名的生成在不斷地更新,這些域名會(huì)在短時(shí)間內(nèi)使用,然后逐步淘汰生成新的域名. 惡意軟件感染了主機(jī)后,通常和命令與控制(C&C)服務(wù)器連接,攻擊者與惡意軟件使用同一套DGA算法,生成相同的備選域名列表,發(fā)動(dòng)攻擊時(shí)選用少量進(jìn)行注冊(cè),便可以建立通信. 單個(gè)活動(dòng)的DGA可以在短時(shí)間內(nèi)生成成千上萬(wàn)的域,人工篩選標(biāo)注域名將是個(gè)巨大的工程,傳統(tǒng)的域名黑名單[1]的檢測(cè)方式將無(wú)法可靠地檢測(cè)DGA變體和阻斷這些域的連接. 域名生成算法被越來(lái)越多的惡意軟件所使用,惡意攻擊會(huì)對(duì)個(gè)人、 企業(yè)、 國(guó)家的信息安全造成巨大的威脅,為了解決這個(gè)問(wèn)題,相應(yīng)的檢測(cè)方法也需要與時(shí)俱進(jìn)[2].
近年來(lái),伴隨著深度學(xué)習(xí)的再一次崛起,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)[3],循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN),以及長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)相繼被提出[4-5],DGA域名檢測(cè)方法也有了新的突破. 受文獻(xiàn)[6]分布式拒絕服務(wù)攻擊檢測(cè)方法的啟發(fā),本文使用長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò),分兩步對(duì)DGA域名進(jìn)行檢測(cè),第一步是基于信息熵的初步檢測(cè),第二步是基于改進(jìn)和優(yōu)化的3層LSTM網(wǎng)絡(luò)模型的深度檢測(cè). 實(shí)驗(yàn)結(jié)果顯示,該方法具有更高的準(zhǔn)確率和更低的誤報(bào)率,同時(shí)檢測(cè)耗時(shí)更少.
2016年,Woodbridge等[7]首次將深度學(xué)習(xí)應(yīng)用到DGA域名檢測(cè)中,利用深度學(xué)習(xí)可以自動(dòng)提取特征的優(yōu)勢(shì)[8],解決了傳統(tǒng)機(jī)器學(xué)習(xí)所面臨的困難. Saxe J等[9]使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)對(duì)DGA域名進(jìn)行檢測(cè),將原始短字符串作為輸入,學(xué)習(xí)同時(shí)使用字符嵌入和CNN來(lái)提取特征. 文獻(xiàn)[10]利用門控循環(huán)單元(Gated Recurrent Unit,GRU)檢測(cè)惡意域名,相較于LSTM網(wǎng)絡(luò)節(jié)省了訓(xùn)練時(shí)間,但在遇到隨機(jī)性偏低的惡意域名時(shí)誤報(bào)率會(huì)上升. Curtin等[11]提出了將循環(huán)神經(jīng)網(wǎng)絡(luò)架構(gòu)和域注冊(cè)輔助信息相結(jié)合的模型,該模型能夠有效地識(shí)別由困難的 DGA 家族生成的域名,但該模型專門針對(duì)基于英文單詞的DGA家族,對(duì)于看起來(lái)不像自然域名的DGA家族檢測(cè)效果較差. 王堃宇[12]提出一種利用LSTM和CNN的惡意域名檢測(cè)方法,提取域名作為特征標(biāo)簽,通過(guò)多種神經(jīng)網(wǎng)絡(luò)的混合使用,顯著提高了識(shí)別惡意域名的準(zhǔn)確率和AUC值,但是沒(méi)有考慮誤報(bào)率的問(wèn)題.
上述方法都是基于深度學(xué)習(xí)網(wǎng)絡(luò)來(lái)構(gòu)建DGA域名檢測(cè)模型,深度學(xué)習(xí)的優(yōu)點(diǎn)在于無(wú)需特征工程[13],但是對(duì)于網(wǎng)絡(luò)安全的應(yīng)用,提取惡意域名特征的方法更具有說(shuō)服力,綜合不同的檢測(cè)方法可以從不同的角度提取特征,從而提升DGA域名檢測(cè)的性能. 另外,基于深度學(xué)習(xí)模型的訓(xùn)練需要消耗較多的時(shí)間,而通過(guò)基于信息熵的初步檢測(cè)方法可以快速篩選出大部分正常域名,從而提升整體檢測(cè)效率. 因此,深度學(xué)習(xí)模型和信息熵相組合的新方法,既發(fā)揮了LSTM的自身學(xué)習(xí)特性,也吸收了信息熵的客觀擬合特征信息的特點(diǎn).
總體檢測(cè)算法流程如圖 1 所示,本文所用方法主要包括兩個(gè)部分,基于信息熵的初步檢測(cè)和基于LSTM模型的深度檢測(cè). 首先,對(duì)域名中的字符串進(jìn)行特征提取,并進(jìn)行熵值計(jì)算,將計(jì)算結(jié)果與預(yù)設(shè)的閾值進(jìn)行對(duì)比來(lái)實(shí)現(xiàn)初步檢測(cè); 然后,把不在閾值范圍內(nèi)的域名設(shè)為疑似DGA域名,將其作為輸入導(dǎo)入基于LSTM的模型進(jìn)行深度檢測(cè),通過(guò)模型來(lái)判斷可疑域名是否為DGA域名.
圖 1 檢測(cè)算法流程圖Fig.1 Flow chart of detection algorithm
熵的定義為隨機(jī)變量中的不確定度度量[14],信息熵的計(jì)算采用香農(nóng)公式[15]
H(d)=-∑lg(P(Xi))×P(Xi),
(1)
式中:d為域名字符串;Xi為該域名中的某個(gè)字符;P(Xi)為該字符出現(xiàn)的概率.
DGA域名生成算法生成的惡意域名是隨機(jī)的,域名字符串的混亂程度越高,熵值就越大,而正常域名的熵值比較小,所以信息熵可以作為初步判斷標(biāo)準(zhǔn).
對(duì)域名進(jìn)行特征分析,識(shí)別到域名中的點(diǎn)號(hào),通過(guò)點(diǎn)號(hào)對(duì)域名進(jìn)行分割,選取二級(jí)域名部分字符串進(jìn)行檢測(cè). 選取字符頻率作為域名特征,通過(guò)對(duì)其計(jì)算得到熵值,與預(yù)先設(shè)定的閾值進(jìn)行比較,當(dāng)計(jì)算的信息熵高于設(shè)置的閾值時(shí),則認(rèn)為域名是疑似DGA域名,并傳遞給基于LSTM的深度檢測(cè). 基于信息熵的檢測(cè)方法有較大的局限性,不能將其結(jié)果作為判斷域名是DGA的最終標(biāo)準(zhǔn),只是利用其對(duì)疑似DGA域名進(jìn)行排查,所以,為了盡可能將DGA域名排查出來(lái),需要將閾值設(shè)定得小一些,使初步檢測(cè)有較高的識(shí)別率,同時(shí)允許有較高的誤報(bào)率.
長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)對(duì)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的隱藏層進(jìn)行了改進(jìn),原始RNN的隱藏層只有一個(gè)狀態(tài)h, 它對(duì)短距離的輸入很敏感,而LSTM網(wǎng)絡(luò)增加了單元狀態(tài)c, 用來(lái)保存長(zhǎng)期的狀態(tài),在長(zhǎng)期訓(xùn)練中解決了梯度消失和爆炸的問(wèn)題. 本文使用的LSTM網(wǎng)絡(luò)單元結(jié)構(gòu)[16-17]如圖 2 所示.
圖 2 LSTM網(wǎng)絡(luò)單元結(jié)構(gòu)Fig.2 Unit structure of LSTM network
ft=σ(Wf×[ht-1,xt]+bf),
(2)
it=σ(Wi×[ht-1,xt]+bi),
(3)
(5)
Ot=σ(Wo×[ht-1,xt]+bo),
(6)
ht=Ot⊙tanhCt,
(7)
式中:xt是t時(shí)刻的輸入值;W是權(quán)重矩陣;b是偏置項(xiàng);σ是激活函數(shù).
本文搭建3層LSTM網(wǎng)絡(luò)層,3層LSTM層后設(shè)置1層全連接層,選擇初步檢測(cè)的疑似DGA域名作為有效信息流入,可以提取時(shí)間序列在時(shí)間步長(zhǎng)上的時(shí)間依賴特征,epoch設(shè)置為100,embedding size設(shè)置為128, internal size設(shè)置128,batch size設(shè)置為64,時(shí)間步長(zhǎng)timestep設(shè)置為100,選用的優(yōu)化算法為AdaBound,初始學(xué)習(xí)率設(shè)置為0.001,后端通過(guò)激活函數(shù)采用sigmoid函數(shù)和tanh函數(shù),然后加入全連接層,在全連接層后加入dropout層以防止模型過(guò)擬合,提高泛化性能,丟失率設(shè)置為 0.2,最后加入Softmax 函數(shù)對(duì)輸出進(jìn)行分類.
SGD算法利用梯度下降與固定的學(xué)習(xí)率,在更新參數(shù)時(shí)對(duì)各個(gè)維度上梯度的放縮是一致的,但向模型的最小值方向更新的速度比較慢,并且在訓(xùn)練數(shù)據(jù)分布極不均衡時(shí)訓(xùn)練效果很差,模型可能停留在局部最優(yōu)解附近來(lái)回震蕩,前期收斂慢是算法最大的缺陷.
SGDM算法在SGD算法的基礎(chǔ)上加入了動(dòng)量機(jī)制,為了抑制SGD的震蕩,SGDM在梯度下降過(guò)程中加入慣性,即在陡峭的地方下降速度快,在平緩的地方下降速度慢. 引入的一階動(dòng)量是各個(gè)時(shí)刻梯度方向的指數(shù)移動(dòng)平均值.
v1=λv0-η?L(θ0),
(8)
v2=λv1-η?L(θ1),
(9)
式中:v0=0;λ為衰減權(quán)重;θ0和θ1為優(yōu)化參數(shù)的對(duì)象,θ1=θ0+v1,θ2=θ1+v2.
Adam算法[19]設(shè)定一個(gè)初始的學(xué)習(xí)率,神經(jīng)網(wǎng)絡(luò)會(huì)根據(jù)梯度值自適應(yīng)地選擇需要訓(xùn)練的參數(shù)的學(xué)習(xí)步長(zhǎng),相比SGD算法,Adam算法省去了手動(dòng)調(diào)節(jié)學(xué)習(xí)率的麻煩,在學(xué)習(xí)初期會(huì)讓結(jié)果收斂得更快. 但是,Adam算法也有泛化性較差的缺點(diǎn),在訓(xùn)練末期會(huì)出現(xiàn)極大或極小的學(xué)習(xí)率,導(dǎo)致結(jié)果不收斂,而SGD算法可以執(zhí)行嚴(yán)格收斂,當(dāng)知道最優(yōu)學(xué)習(xí)率的值的時(shí)候,SGD算法表現(xiàn)得會(huì)比Adam算法好.
AdaBound算法可以對(duì)自適應(yīng)學(xué)習(xí)率進(jìn)行動(dòng)態(tài)裁剪[20],隨著訓(xùn)練步數(shù)的變大,優(yōu)化函數(shù)會(huì)從Adam動(dòng)態(tài)轉(zhuǎn)換為SGD,該算法既結(jié)合了快速的初始過(guò)程,也具有了SGD算法的良好泛化屬性. 具體計(jì)算過(guò)程如下:
(16)
式中:mi和vi表示更新的速度,訓(xùn)練樣本總數(shù)為k,i=0,…,k;θ表示優(yōu)化的參數(shù)對(duì)象;η表示學(xué)習(xí)率,學(xué)習(xí)率在區(qū)間(ηl,ηu)范圍內(nèi);J(θi)表示損失函數(shù); ?J(θi)表示損失函數(shù)計(jì)算θ的梯度.
通過(guò)對(duì)比多組超參數(shù)的實(shí)驗(yàn)結(jié)果,可以發(fā)現(xiàn)學(xué)習(xí)率為0.001,β1=0.9,β2=0.999時(shí),實(shí)驗(yàn)效果最好.
本實(shí)驗(yàn)用到的惡意域名數(shù)據(jù)來(lái)自360netlab的公開(kāi)數(shù)據(jù)集[21],正常域名數(shù)據(jù)來(lái)自Alexa[22]統(tǒng)計(jì)排名靠前的域名. 數(shù)據(jù)集包含多類DGA家族惡意域名,例如chinad,corebot,dircrypt,dnschanger等,數(shù)據(jù)集按照4∶1的比例分成訓(xùn)練集和測(cè)試集兩部分,訓(xùn)練集總共有2 433 189個(gè)樣本,其中合法的有800 097個(gè),非法的有1 633 092個(gè),測(cè)試集總共有608 297個(gè)樣本,其中合法的有199 903個(gè),非法的有408 394個(gè).
為了方便統(tǒng)計(jì),本實(shí)驗(yàn)把多分類問(wèn)題簡(jiǎn)化成了二分類問(wèn)題,對(duì)域名的標(biāo)簽做了二值化處理,所有正常域名的標(biāo)簽改成0,所有子類家族惡意域名的標(biāo)簽改成1.
本實(shí)驗(yàn)的程序開(kāi)發(fā)環(huán)境是Anaconda3,python版本是3.6,框架使用的是pytorch1.7.0版本,操作系統(tǒng)使用的是Windows10(64位),處理器使用的是Intel(R) Core(TM) i7-9700K@ 3.60 GHz,顯卡使用的是NVIDIA GeForce RTX 2070 SUPER.
二分類模型在預(yù)測(cè)中有4種預(yù)測(cè)結(jié)果: 第一種,真正例(TP),預(yù)測(cè)是非法的,實(shí)際是非法的; 第二種,真負(fù)例(TN),預(yù)測(cè)是合法的,實(shí)際是合法的; 第三種,假正例(FP),預(yù)測(cè)是非法的,實(shí)際是合法的; 第四種,假負(fù)例(FN),預(yù)測(cè)是合法的,實(shí)際是非法的.
本文使用誤報(bào)率和準(zhǔn)確率作為對(duì)模型性能評(píng)判的指標(biāo). 誤報(bào)率是指把合法域名預(yù)測(cè)為非法域名的樣本占所有合法域名樣本的比例,準(zhǔn)確率是指預(yù)測(cè)對(duì)的樣本占總樣本的比例. 計(jì)算公式為
(17)
(18)
正常域名和DGA域名的熵值分布如圖 3 所示. 正常域名的熵值集中分布在2.8左右,DGA域名的熵值則集中分布在4.3左右,兩者之間存在交集,因?yàn)榛谛畔㈧氐某醪綑z測(cè)不是為了準(zhǔn)確預(yù)測(cè)出DGA域名,所以實(shí)驗(yàn)中把閾值設(shè)置得低一些,允許對(duì)正常域名有誤判,但是不能丟失過(guò)多的DGA域名.
圖 3 正常域名和DGA域名的熵值分布Fig.3 Entropy distribution of normal domain name and DGA domain name
為了選取合適的閾值,得到較高的識(shí)別率,本文通過(guò)測(cè)試集進(jìn)行測(cè)試,主要閾值的數(shù)據(jù)指標(biāo)如表 1 所示.
表 1 主要閾值的識(shí)別率和誤報(bào)率Tab.1 Recognition rate and false positive rate of main thresholds
由實(shí)驗(yàn)結(jié)果得,基于信息熵初步檢測(cè)時(shí),信息熵的閾值設(shè)置為3.2,可以得到較高的識(shí)別率,可以有效地檢測(cè)出疑似DGA域名,并為基于LSTM神經(jīng)網(wǎng)絡(luò)的深度檢測(cè)壓縮了25%的數(shù)據(jù)樣本,減少了耗時(shí).
為了驗(yàn)證LSTM網(wǎng)絡(luò)層數(shù)對(duì)檢測(cè)效果的影響,分別構(gòu)建了2層LSTM,3層LSTM,4層 LSTM模型進(jìn)行對(duì)比實(shí)驗(yàn),優(yōu)化函數(shù)選擇了SGDM,訓(xùn)練周期設(shè)置為100. 圖 4 和圖 5 顯示了不同層數(shù)的LSTM網(wǎng)絡(luò)在測(cè)試集上的檢測(cè)結(jié)果.
圖 5 不同層數(shù)LSTM模型檢測(cè)的誤報(bào)率Fig.5 False positive rate of LSTM model detection with different layers
由圖 4 和圖 5 可以看出,不同層的LSTM模型經(jīng)過(guò)100次訓(xùn)練后,3層LSTM模型在檢測(cè)的準(zhǔn)確率和誤報(bào)率上表現(xiàn)得更好,并且當(dāng)網(wǎng)絡(luò)層數(shù)過(guò)多時(shí)會(huì)造成訓(xùn)練時(shí)間的增長(zhǎng).
為了進(jìn)一步提高檢測(cè)的速度和效果,本文將 3層 LSTM模型和不同優(yōu)化函數(shù)結(jié)合,進(jìn)行對(duì)比實(shí)驗(yàn). 優(yōu)化函數(shù)分別使用了SGDM,Adam,AdaBound. Adam的參數(shù)設(shè)置為η=0.001,圖 6 和圖 7 顯示了3種優(yōu)化函數(shù)模型在測(cè)試集上的檢測(cè)結(jié)果.
圖 6 3種優(yōu)化模型檢測(cè)的準(zhǔn)確率Fig.6 Detection accuracy of three optimization models
圖 7 3種優(yōu)化模型檢測(cè)的誤報(bào)率Fig.7 False positive rate detected by three optimization models
由圖 6 和圖 7 可以看出,在使用Adam優(yōu)化函數(shù)的時(shí)候,雖然指標(biāo)優(yōu)化得快,但是最后的泛化性屬性表現(xiàn)不好,而Adabound結(jié)合了其他兩種優(yōu)化函數(shù)的優(yōu)勢(shì),提高了優(yōu)化速度,節(jié)約了訓(xùn)練時(shí)間,在最后指標(biāo)趨于穩(wěn)定時(shí),泛化性屬性還優(yōu)于SGDM.
加入學(xué)習(xí)率衰減因子(Learning Rate Decay),可以讓學(xué)習(xí)率隨著迭代周期的增加而變小,通過(guò)減小梯度下降時(shí)的搜索步長(zhǎng)來(lái)減緩震蕩,損失值設(shè)置0.05,0.035,0.020,0.010等4個(gè)閾值,衰減倍數(shù)設(shè)置為2,5,10,20.
表 2 加入衰減因子與不加入衰減因子的對(duì)比Tab.2 Comparison between adding attenuation factor and not adding attenuation factor
由表 2 可以看出,在加入衰減因子后,模型的準(zhǔn)確率提高了 0.06%,誤報(bào)率下降了 0.22%,訓(xùn)練輪數(shù)和訓(xùn)練時(shí)間也減少了一半以上.
為了驗(yàn)證本文所提方法的有效性,引入支持向量機(jī)(Support Vector Machines,SVM)[13]、 FANCI域名檢測(cè)模型[23]、 卷積神經(jīng)網(wǎng)絡(luò)(CNN)[9]、 門控循環(huán)單元(GRU)[10]、 split-glrt-lstm-aug模型[11]、 LSTM-CNN模型[12]算法與本文提出的基于信息熵和LSTM3網(wǎng)絡(luò)模型的組合模型(IE+LSTM3)進(jìn)行對(duì)比實(shí)驗(yàn),在相同的數(shù)據(jù)集的基礎(chǔ)上,選取準(zhǔn)確率和誤報(bào)率作為評(píng)價(jià)指標(biāo),結(jié)果如表 3 所示.
表 3 不同算法模型的對(duì)比實(shí)驗(yàn)結(jié)果Tab.3 Compare experimental results with different algorithm models
從表 3 中可知,5個(gè)深度學(xué)習(xí)模型在DGA域名檢測(cè)中的性能表現(xiàn)要優(yōu)于2個(gè)機(jī)器學(xué)習(xí)模型. SVM算法對(duì)于大規(guī)模訓(xùn)練樣本難以實(shí)施,準(zhǔn)確率和誤報(bào)率的表現(xiàn)都較差. FANCI算法[23]通過(guò)監(jiān)視DNS流量中的NXD響應(yīng)來(lái)檢測(cè)DGA域名,特征僅從包含在NXD響應(yīng)中的域名中提取,不需要從任何其他來(lái)源中提取,實(shí)驗(yàn)結(jié)果顯示,該模型的誤報(bào)率接近深度學(xué)習(xí)模型,準(zhǔn)確率超過(guò)了98%. 基于CNN和GRU的檢測(cè)方法是通過(guò)提取域名字符和序列時(shí)序特征,對(duì)于字符隨機(jī)性大的DGA域名數(shù)據(jù)有較好的檢測(cè)效果,而對(duì)多類DGA家族的檢測(cè)性能一般. split-glrt-lstm-aug模型專門針對(duì)基于英文單詞的DGA家族,對(duì)看起來(lái)不像自然域名的DGA家族檢測(cè)效果較差,檢測(cè)的準(zhǔn)確率沒(méi)有超過(guò)99%. 本文提出的基于信息熵和LSTM3網(wǎng)絡(luò)模型的組合模型相較LSTM-CNN組合模型,在準(zhǔn)確率和誤報(bào)率性能上均有提升,誤報(bào)率降低到2%以下.
從結(jié)果可以看出,基于信息熵和LSTM3模型的檢測(cè)方法在各項(xiàng)性能指標(biāo)上皆優(yōu)于具有代表性的傳統(tǒng)機(jī)器學(xué)習(xí)算法以及深度學(xué)習(xí)算法.
采用相同的數(shù)據(jù)集對(duì)基于LSTM-CNN的網(wǎng)絡(luò)模型、 單一LSTM3網(wǎng)絡(luò)模型和基于信息熵和LSTM3網(wǎng)絡(luò)模型的組合模型進(jìn)行對(duì)比實(shí)驗(yàn),結(jié)果如表 4 所示.
表 4 單一模型和組合模型的對(duì)比實(shí)驗(yàn)結(jié)果Tab.4 Single model and combined model compare experimental results
由表 4 可以看出,基于信息熵和LSTM3網(wǎng)絡(luò)模型相組合的雙重檢測(cè)方法,在保證較高準(zhǔn)確率的前提下,檢測(cè)耗時(shí)減少了25%左右,提高了檢測(cè)效率.
本文在對(duì)現(xiàn)有的DGA域名檢測(cè)方法研究的基礎(chǔ)上,提出了基于信息熵和LSTM模型相結(jié)合的雙重檢測(cè)方法. 本文的初步檢測(cè)利用DGA域名熵值較大的特征排查出疑似DGA域名,再通過(guò)LSTM網(wǎng)絡(luò)對(duì)初步檢測(cè)結(jié)果進(jìn)行最終確定. 實(shí)驗(yàn)結(jié)果表明,與其他模型相比,本文提出的方法可以有效提高檢測(cè)的準(zhǔn)確率和降低檢測(cè)的誤報(bào)率,并且能夠減少檢測(cè)耗時(shí),提高檢測(cè)效率. 下一步將研究更優(yōu)的基于深度LSTM網(wǎng)絡(luò)的檢測(cè)方法,以進(jìn)一步提升算法性能.