衛(wèi)清才,宋禮鵬
(1. 中北大學(xué) 大數(shù)據(jù)學(xué)院,山西 太原 030051; 2. 中北大學(xué) 大數(shù)據(jù)與網(wǎng)絡(luò)安全研究所,山西 太原 030051)
隨著聯(lián)網(wǎng)設(shè)備增多,采用域名生成算法(Domain Generation Algorithm, DGA)作為通訊機制的僵尸網(wǎng)絡(luò)規(guī)模和危害不斷擴大,因此如何有效檢測DGA域名成為打擊僵尸網(wǎng)絡(luò)的重要方向[1]. 現(xiàn)有DGA檢測模型雖然已經(jīng)在二分類任務(wù)中有較高的精確率,但在實際應(yīng)用中仍存在兩點不足. 首先,訓(xùn)練必須依賴于正常域名和DGA域名,而DGA域名數(shù)據(jù)獲取困難、 有效期短,因此,模型更新滯后,可用性低. 其次,現(xiàn)有模型只能檢測訓(xùn)練集中使用的DGA域名家族,對未知類型的DGA家族檢測效果很差,這是因為模型在訓(xùn)練過程中需要學(xué)習(xí)訓(xùn)練數(shù)據(jù)的特征,因此,必定會深度擬合訓(xùn)練集所含的DGA域名家族,進而喪失對其他未知DGA域名家族的檢測能力[2-6].
本文針對以上問題提出一種僅利用正常域名及其可信度作為訓(xùn)練數(shù)據(jù)且能有效識別未知DGA域名家族的檢測模型ProfDGA. 該方法的核心思想是讓模型僅學(xué)習(xí)正常域名的特征,這樣模型泛化性能就不受限于DGA域名的特征,進而使模型具備發(fā)現(xiàn)新型DGA家族的能力. ProfDGA通過對經(jīng)驗風(fēng)險函數(shù)的變形,將訓(xùn)練時損失函數(shù)中與DGA域名相關(guān)的變量用正常域名及其可信度替換,這樣模型就可以在不直接依賴DGA域名數(shù)據(jù)的條件下完成訓(xùn)練,僅直接學(xué)習(xí)正常域名特征,這本質(zhì)上是將分類問題轉(zhuǎn)化為異常檢測問題.
通過在僵尸主機與C&C服務(wù)器上運行相同的域名生成算法產(chǎn)生大量隨機的域名,然后C&C服務(wù)器從生成的域名集合中選擇一個域名子集注冊為C&C服務(wù)器地址,而僵尸主機通過遍歷整個域名集合來確定C&C服務(wù)器地址,實現(xiàn)數(shù)據(jù)傳輸,這種技術(shù)被稱為Domain-Flux機制. 通過上述機制,僵尸網(wǎng)絡(luò)的C&C服務(wù)器可以動態(tài)更換域名地址,在繞過了黑名單防御機制的同時隱藏了真實的IP地址,確保了整個網(wǎng)絡(luò)的連通和可控[7]. 鑒于DGA域名在僵尸網(wǎng)絡(luò)中的廣泛應(yīng)用,及其在僵尸網(wǎng)絡(luò)檢測分類中的重要意義,安全研究人員已經(jīng)對DGA域名檢測進行了深入的研究.
為了躲避監(jiān)管并防止他人通過搶注域名的方式劫持網(wǎng)絡(luò),DGA域名的有效時間短,變化速度快. 正是由于DGA域名這一特性,所以模型檢測新型DGA家族的能力有更為重要的價值. 依據(jù)文獻[8],在有數(shù)據(jù)可查的43種DGA家族中16個家族的有效時間小于3 d,有5個DGA家族的域名時效長度為7 d~30 d,僅有Gozi,Pushdo兩個DGA家族的域名有效時長大于30 d,具體的域名有效時長分布如圖1 所示.
圖1 域名有效時長分布
DGA域名檢測按照所用原始數(shù)據(jù)的不同可以分為兩大類:基于域名關(guān)聯(lián)特征的檢測和基于域名自身特征的檢測.
基于域名關(guān)聯(lián)特征的檢測主要是結(jié)合域名的注冊記錄、 結(jié)構(gòu)特征、 DNS記錄等多維度的數(shù)據(jù)進行關(guān)聯(lián)分析. Samuel Schüppen等[2]提出了一種基于隨機森林的分類模型FANCI. 他們從NXDomain記錄及正常域名中提取域名的結(jié)構(gòu)特征、 字符統(tǒng)計特征、 語言學(xué)特征、 響應(yīng)信息等多維數(shù)據(jù)來訓(xùn)練模型. FANCI模型在實驗數(shù)據(jù)集上的準(zhǔn)確率為99.93%,在真實數(shù)據(jù)集上的最高誤報率僅為0.064%. Ryan R. Curtin等[3]通過smashword評分來衡量DGA域名所含單詞與英文單詞的相似度. 他們利用smashword評分并結(jié)合域名注冊信息訓(xùn)練出了基于RNN(Recurrent Neural Networks)的DGA域名檢測模型,該模型對于最難識別的matsnu_dga家族的檢測準(zhǔn)確率為95%,誤報率為0.5%.
基于域名自身特征的檢測是通過挖掘域名中包含的深層信息來區(qū)分正常域名與DGA域名. Jonathan Woodbridge等[4]首次將LSTM網(wǎng)絡(luò)應(yīng)用于DGA域名檢測模型. Woodbridge將訓(xùn)練數(shù)據(jù)預(yù)處理后輸入詞嵌入層進行向量化表示,然后通過一個深層的LSTM網(wǎng)絡(luò)來擬合DGA域名和正常域名的特征,最后通過sigmoid層輸出樣本為正常域名的概率. 該模型在DGA域名二分類任務(wù)中有較好的表現(xiàn),AUC值達到了0.9993,但其對基于詞表組合類型的DGA域名檢測效果較差. Highnam K等[5]針對文獻[4]模型的缺陷,提出了一種基于Bagging思想、 通過組合CNN模型和LSTM模型的集成深度模型Bibo. 該模型并行訓(xùn)練兩個深度學(xué)習(xí)模型并采用Bagging方式將其融合起來實現(xiàn)了對基于詞典的DGA家族的有效檢測. 經(jīng)過對真實網(wǎng)絡(luò)流量的分析,該模型發(fā)現(xiàn)了5個商業(yè)檢測工具都未能識別的DGA域名. Namgung J等[6]則提出了帶注意力機制的基于CNN+BiLSTM模型的檢測模型. 該模型通過一維卷積層代替了域名嵌入表示的過程,并利用注意力機制和雙向BiLSTM模型同時學(xué)習(xí)DGA域名序列雙向的特征信息,最終達到了0.966 6的F1值.
綜上所述,現(xiàn)有模型雖然已有較好的檢測效果,但都是針對訓(xùn)練所用的DGA家族,沒有考慮對未知DGA家族的識別能力. 然而在實際網(wǎng)絡(luò)中,DGA域名種類多、 變化快、 有效時間短,因此,模型識別新型DGA家族的能力有更高的實用價值,更能有效打擊DGA域名.
為了增強模型的泛化性能,本文的核心思路是降低DGA域名對模型訓(xùn)練的影響,即如何在盡量保證模型性能的基礎(chǔ)上,減少訓(xùn)練集中的DGA域名數(shù)據(jù),甚至僅利用正常域名完成模型訓(xùn)練. 為了解決這一問題,本文提出了基于LSTM網(wǎng)絡(luò)并采用Positive-Confidence框架訓(xùn)練的DGA域名分類模型ProfDGA.
針對數(shù)據(jù)集極度不均衡情景下負樣本太少,模型訓(xùn)練不可靠的問題,Takashi Ishida等[9]提出了一種改進的經(jīng)驗風(fēng)險最小化框架,并將其應(yīng)用于MNIST圖像分類任務(wù).
在Positive-Confidence框架中,假設(shè)樣本數(shù)據(jù)為d維向量x∈Rd,樣本類別標(biāo)簽為y∈{-1,+1},數(shù)據(jù)服從未知分布p(x,y).現(xiàn)在要訓(xùn)練一個分類模型g(x),使得經(jīng)驗損失R(g)最小化,其定義為
R(g)=Ep(x,y)[l(yg(x))],
(1)
式中:l(yg(x))是損失函數(shù);Ep(x,y)表示基于p(x,y) 的期望.將R(g)展開得到
(2)
式中:p(x|y)表示隨機變量x基于y的分布.將R(g)進一步變形可以得到
π+E+[l(g(x))]+π-E-[l(-g(x))],
(3)
其中,
π+E+[l(g(x))]=
π-E-[l(g(x))]=
式中:π-表示p(y=-1);E-表示Ep(x|y=-1),即隨機變量基于p(x|y=-1)的期望.同理,π+表示p(y=+1);E+表示Ep(x|y=+1).
存在以下等式變換
π+p(x|y=+1)+π-p(x|y=-1)=
p(x,y=+1)+p(x,y=-1)=p(x)=
(4)
R(g)=π+·E+[l(g(x))]=
(5)
由于在優(yōu)化過程中π+僅影響數(shù)值大小,可以被視為常數(shù),因此,可以得到最終的優(yōu)化目標(biāo)為
(6)
通過對經(jīng)驗風(fēng)險函數(shù)的變形,模型訓(xùn)練時的損失函數(shù)就僅包含正樣本及其對應(yīng)可信度的函數(shù).
LSTM (長短期記憶網(wǎng)絡(luò))[10]是Hochreiter和Schmidhuber設(shè)計發(fā)展的一種深度循環(huán)神經(jīng)網(wǎng)絡(luò). LSTM的提出主要是為了解決普通循環(huán)神經(jīng)網(wǎng)絡(luò)訓(xùn)練長序列過程中的梯度消失和梯度爆炸問題. LSTM通過在內(nèi)部引入門控結(jié)構(gòu)來控制數(shù)據(jù)的傳輸狀態(tài),能夠在訓(xùn)練過程中記住需要長時間保存的信息,忘記不重要的信息,因而在各類序列任務(wù)中有優(yōu)異的表現(xiàn),被廣泛應(yīng)用于自然語言處理、 文本挖掘等領(lǐng)域.
相比于RNN模型,LSTM中存在的門控結(jié)構(gòu)可以實現(xiàn)對序列數(shù)據(jù)的選擇性記憶,因此,可以緩解無效特征對模型的干擾,同時可以實現(xiàn)相隔較遠的信息間的傳遞; 相比于GRU模型,雖然LSTM更為復(fù)雜、 訓(xùn)練速度慢,但其可以實現(xiàn)短期記憶和長期記憶的學(xué)習(xí),在傳遞全局狀態(tài)的同時也會傳遞當(dāng)前細胞狀態(tài),能夠選擇性地使用細胞狀態(tài),因此,靈活性更強,特征學(xué)習(xí)能力也較強. 綜合考慮以上兩方面,本文將LSTM作為基礎(chǔ)模型來進行訓(xùn)練.
針對現(xiàn)有模型的缺陷,本文提出了僅利用正常域名及其可信度作為訓(xùn)練數(shù)據(jù)的ProfDGA模型,模型訓(xùn)練過程如圖2 所示.
圖2 ProfDGA模型訓(xùn)練過程
ProfDGA模型在訓(xùn)練階段,首先對正常域給出一個可信度評分,將正常域名轉(zhuǎn)化為數(shù)值向量后嵌入Embedding層來表示,其次,通過一個LSTM層來學(xué)習(xí)深層特征,最后,通過Dense層輸出模型結(jié)果. 在計算模型損失時,構(gòu)造的損失函數(shù)為
式中:r表示樣本可信度. 通過優(yōu)化器不斷降低模型的損失,就可以在僅利用正常域名及其可信度的情況下完成模型的訓(xùn)練. ProfDGA模型訓(xùn)練流程如算法1和2所示.
算法1 ProfDGA模型訓(xùn)練
輸入:正樣本數(shù)據(jù)x_ train _p,正樣本可信度數(shù)據(jù)r,正樣本標(biāo)簽y_train_p,測試數(shù)據(jù)x_test,測試標(biāo)簽y_test,訓(xùn)練輪次max_epoch.
輸出:ProfDGA模型.
算法描述:
1) 初始化模型model和優(yōu)化器optimizer;
2) 將全部訓(xùn)練數(shù)據(jù)x_ train _p輸入模型model中訓(xùn)練,完成模型的一輪訓(xùn)練,得到模型的輸出out;
3) 將模型輸出out依據(jù)構(gòu)建的公式計算當(dāng)前損失loss=sum(-out-1.*LogSigmoid(-1.*out) * 1./r);
4) 依據(jù)優(yōu)化器optimizer對模型損失進行優(yōu)化;
5) 檢查是否達到定義的最大訓(xùn)練輪次,若不是則返回步驟2),若是則停止訓(xùn)練,進入步驟6);
6) 將全部的測試數(shù)據(jù)x_test輸入訓(xùn)練好的模型model中得到預(yù)測結(jié)果y_pred;
7) 將預(yù)測結(jié)果y_pred與真實標(biāo)簽y_test對比得到模型評估報告.
正樣本可信度r可以通過以下方式給出:將正樣本輸入訓(xùn)練好的可信度評估模型,由其給出樣本為正常域名的可信度估值,即:r=confidence(x_train_p).
可信度評估模型confidence首先會利用數(shù)值化后的正負樣本x_train_p、 x_train_n進行監(jiān)督學(xué)習(xí),在模型擬合了訓(xùn)練數(shù)據(jù)集后對所用的x_train_p樣本進行可信度評分,即模型在訓(xùn)練完成后對訓(xùn)練中所用正樣本進行評分. 可信度評估模型為每個正常域名設(shè)定一個分值,以此表示其為正常域名的概率,采用的方法是通過該模型對其監(jiān)督學(xué)習(xí)過程中所用正常域名進行評分得到,因此,理論上可以采用任意的分類模型,本文使用LogisticRegression模型作為可信度評估模型,在實現(xiàn)任務(wù)目標(biāo)的同時兼顧了模型復(fù)雜性、 運算效率的考量,整個流程如算法 2 所示.
算法2confidence模型訓(xùn)練流程
輸入:正樣本數(shù)據(jù)x_train_p,負樣本數(shù)據(jù)x_train_n,正樣本標(biāo)簽y_train_p,負樣本標(biāo)簽y_train_n.
輸出:可信度評估模型confidence,正樣本可信度r.
算法描述:
1) 初始化可信度評估模型confidence;
2) 將正樣本x_train_p,負樣本x_train_n輸入定義的模型進監(jiān)督學(xué)習(xí)confidence(x_train_p, x_train_n, y_train_p, y_train_n);
3) 利用訓(xùn)練好的評估模型對訓(xùn)練所用正樣本進行可信度評分r=confidence(x_train_p).
本文實驗代碼均使用Python的Pytorch框架和scikit-learn框架編寫,所用硬件環(huán)境及依賴包版本如表1 所示.
表1 實驗配置
在數(shù)據(jù)集方面,本文使用DGArchive[11]數(shù)據(jù)集作為DGA域名數(shù)據(jù)集. DGArchive數(shù)據(jù)集是由Daniel Plohmann[8]維護的一個公開DGA數(shù)據(jù)庫,被廣泛應(yīng)用于各類DGA研究中. 本文使用Tranco[12]數(shù)據(jù)集作為正常域名數(shù)據(jù)集. Tranco數(shù)據(jù)集是由Victor Le Pochat等[13]提出的最新的安全域名排行,該排行綜合分析Aleax[14], Cisco Umbrella[15],Majestic[16],Quantcast[17]4個數(shù)據(jù)源,具備更高的可靠性.
在評估指標(biāo)方面,本文通過分析混淆矩陣來評估模型性能,其定義如表2 所示.
為了更直觀地體現(xiàn)模型性能,本實驗選用精確率、 召回率及F1-Score作為模型評估的指標(biāo).
精確率也稱為查準(zhǔn)率,表示模型預(yù)測為正類的樣本中真正的正類樣本所占比例,其定義為
表2 混淆矩陣
召回率也稱為查全率,表示模型正確預(yù)測為正類的樣本數(shù)與真正正類樣本數(shù)的比例,其定義為
F1-Score是Precision和Recall的調(diào)和平均值,綜合考慮了兩者的關(guān)系,F(xiàn)1-Score越高表示模型綜合性能越好,其定義為
為了驗證所提模型的性能,選擇DGA檢測領(lǐng)域中經(jīng)典的LSTM模型和最新的GRU模型作為本文實驗對照的模型,分別記為LSTMDGA和GRUDGA,將本文提出的模型記為ProfDGA. 整個實驗分為兩部分:同型測試和異型測試.
3.2.1 同型測試
同型測試指模型對與訓(xùn)練集中DGA域名同一家族的DGA的檢測. 該測試主要評估模型對于相同類型AGD的檢測效果,驗證僅使用正常域名和置信度訓(xùn)練模型的可行性. 實驗流程如下:
1) 選取bedep_dga和tranco分別作為正負樣本數(shù)據(jù)集. 隨機將正負樣本數(shù)據(jù)集劃分為訓(xùn)練集、 驗證集和測試集.
2) 利用訓(xùn)練集訓(xùn)練LSTMDGA、 GRUDGA和ProfDGA模型,并通過驗證集調(diào)整模型的超參數(shù). 超參數(shù)搜索采用GirdSearch策略,結(jié)果如表3 所示.
表3 超參數(shù)列表
3) 利用測試集分別評估LSTMDGA、 GRUDGA和ProfDGA模型,用以檢測模型對bedep家族未出現(xiàn)在訓(xùn)練集中的域名的識別能力,結(jié)果如表4 所示.
表4 同型測試結(jié)果
從表4 可以看出,同型測試階段,Woodbridge提出的基于LSTM的DGA模型對于同一家族域名的檢測精確率為98%,F(xiàn)1值為0.975,而新提出的深度模型GRUDGA有著更為優(yōu)異的表現(xiàn),F(xiàn)1值為0.980,達到了DGA域名二分類任務(wù)中的先進水平. 相比而言,本文所提的ProfDGA模型在僅利用正常域名和其可信度的情況下對于bedep家族未見過的域名仍能達到90%的檢測精度和0.945的F1值,有較好的性能.
相較于LSTMDGA模型和GRUDGA模型,ProfDGA模型雖然損失了一定的檢測準(zhǔn)確性,但其優(yōu)勢在于訓(xùn)練過程中僅需要正常域名及其可信度,模型訓(xùn)練不直接依賴于DGA數(shù)據(jù),因此,模型可以完成快速的更新迭代. 此外,更重要的是,只要能通過合適的方法直接對正常域名進行可信度評分,模型的訓(xùn)練就能完全擺脫對DGA數(shù)據(jù)的依賴,而這點有更高的實際應(yīng)用價值.
3.2.2 異型測試
異型測試指模型對與訓(xùn)練集DGA不同家族的域名的檢測. 該測試主要評估模型的泛化能力,體現(xiàn)模型發(fā)現(xiàn)新型DGA家族的能力,這對于模型的實際應(yīng)用有更重要的價值.
本文利用同型測試階段得到的LSTMDGA,GRUDGA和ProfDGA模型去識別其他類型的DGA家族,測試結(jié)果如表5 所示.
表5 異型測試結(jié)果
由表5 可知,在異型測試階段,本文所提出的ProfDGA模型對于新型DGA家族有著優(yōu)異的檢測效果. ProfDGA對多個新型DGA家族均有較強的檢測能力,平均精確率為76.6%,遠高于LSTMDGA的56.3%和GRUDGA的55.5%. 對于downloader,volatilecedar,suppobox這3類DGA,ProfDGA模型的準(zhǔn)確率依次為64.7%,87.6%,80.3%,而LSTMDGA和GRUDGA已經(jīng)完全喪失了檢測能力,三項指標(biāo)均為0. 雖然GURDGA模型對conficker和fobber家族的檢測效果優(yōu)于ProfDGA,但在全部測試的11種DGA家族中,本文所提ProfDGA模型在 9個家族中勝出,泛化性和魯棒性更為優(yōu)異.
綜合表4 和表5 可以看到:雖然在同型測試階段,僅利用正常域名訓(xùn)練的ProfDGA未能達到最好的檢測指標(biāo),但是在異型測試階段,ProfDGA有著遠超LSTMDGA和GRUDGA的優(yōu)異表現(xiàn),平均精確率、 平均召回率、 平均F1-score值分別達到76.6%,69.2%,0.708,而GRUDGA對應(yīng)指標(biāo)為55.5%,21.5%,0.276,LSTMDGA更是僅有56.2%,15.0%,0.217. 對于matsnu家族、 gameover家族, ProfDGA模型的F1-score比LSTMDGA模型分別增加了0.752和0.779,提升效果顯著,比GRUDGA模型分別提高了0.824和0.031. 綜上所述,ProfDGA模型僅利用正常域名及其可信度作為訓(xùn)練數(shù)據(jù),在犧牲一些同型測試檢測精度的情況下,就可以有效增強模型的泛化能力,使其具備檢測未知類型DGA的能力,因此,其在實際應(yīng)用中有更重要的價值.
本文針對現(xiàn)有DGA檢測模型泛化能力弱,只適用于檢測與訓(xùn)練數(shù)據(jù)同一家族DAG域名的問題,提出了只利用正常域名訓(xùn)練,有較強泛化能力的DGA域名檢測模型. 通過實驗驗證了僅利用正常域名及其可信度進行DGA域名識別的可行性,與現(xiàn)有方法相比,所提模型能夠有效發(fā)現(xiàn)新型DGA家族,實際應(yīng)用價值更高.
本文提出的模型雖然有較好的泛化能力,但是模型的檢測精度仍有較大的提升空間,這將是以后需要重點研究的方向.