顧兆軍,楊文瑾,周景賢
1.中國民航大學(xué) 信息安全測評中心,天津300300
2.中國民航大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,天津300300
3.中國民航大學(xué) 中歐航空工程師學(xué)院,天津300300
域名對僵尸網(wǎng)絡(luò)、釣魚網(wǎng)絡(luò)、勒索軟件等惡意網(wǎng)絡(luò)活動的構(gòu)建起著重要的作用。為了更好地隱蔽網(wǎng)絡(luò)攻擊,惡意域名通常會使用一些方法以躲避安全人員的封堵,域名生成算法(Domain Generation Algorithm,DGA)就是一種常用的手段[1]。通過特定算法和強(qiáng)隨機(jī)性的種子,嵌入在惡意程序中的DGA可以生成大量域名,其中只有一部分域名會被用來注冊。當(dāng)某個惡意域名被甄別并加入黑名單攔截后,攻擊者仍可使用DGA 生成的新的惡意域名進(jìn)行通信和攻擊,因此很難通過黑名單的方式有效實(shí)現(xiàn)對攻擊的攔截。
早期DGA的檢測方法主要包括逆向工程技術(shù)和蜜罐技術(shù)[2],但是這種方法往往耗費(fèi)資源較大,檢測周期較長。近年來,有關(guān)惡意域名檢測方法的研究逐漸轉(zhuǎn)向域名自身語言特征挖掘和流量分析的方向。Yadav等人對擁有同一IP 地址的域名進(jìn)行KL 距離、編輯距離以及Jaccard系數(shù)的測量,證明該方法對Conficker類DGA域名有較好的檢測效果[3]。Fu等人在Yadav等人所使用的三個系數(shù)的基礎(chǔ)上增加了隱馬爾科夫模型和概率上下無關(guān)文法的應(yīng)用,優(yōu)化了DGA檢測模型[4]。Jose等人使用N-gram 等方法對域名特征進(jìn)行提取,并建立隨機(jī)森林分類模型,提高了域名檢測系統(tǒng)的性能[5]。近年來仍不斷有新型DGA域名出現(xiàn)[6],當(dāng)出現(xiàn)新的DGA種類時,由于傳統(tǒng)機(jī)器學(xué)習(xí)依賴于人工特征提取,分類器往往不能很好地適應(yīng)新的DGA域名。為了減少人工提取特征工作,研究人員實(shí)現(xiàn)了深度學(xué)習(xí)在DGA 域名檢測上的應(yīng)用。Xu 等人提出基于N-gram 和卷積神經(jīng)網(wǎng)絡(luò)的NCBDC 域名分類模型,提升檢測模型的魯棒性[7]。陳立國等人提出了基于GRU的DGA域名檢測算法,進(jìn)一步提升了模型的收斂速度[8]。周康等人提出了基于自編碼網(wǎng)絡(luò)和LSTM的惡意域名檢測方法,提高了模型的檢測率和實(shí)時性[9]。由于深度學(xué)習(xí)方法需要大量數(shù)據(jù)支撐,當(dāng)樣本不足時,訓(xùn)練結(jié)果將很難提升,而遷移學(xué)習(xí)可以達(dá)到提升分類效果的作用。段萌等人提出基于遷移學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò)的小樣本圖像識別方法,提高了識別的準(zhǔn)確率和模型的魯棒性[10]。Hu等人基于局部遷移學(xué)習(xí)提出端到端的衛(wèi)星圖像分類方法CPADA,提高了缺乏足夠數(shù)據(jù)的衛(wèi)星圖像的分類效果[11]。邱寧佳等人提出結(jié)合遷移學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)算法,實(shí)現(xiàn)了在少量數(shù)據(jù)標(biāo)注下對微博文本進(jìn)行情感分類[12]。
現(xiàn)有大多數(shù)惡意域名檢測方法通?;诔渥愕挠蛎麛?shù)據(jù)集進(jìn)行特征提取和模型訓(xùn)練,當(dāng)數(shù)據(jù)量不足時,分類效果將大大降低。為了減少人工特征提取成本,解決DGA 域名樣本不足的問題,本文基于多核卷積神經(jīng)網(wǎng)絡(luò)對24類DGA域名檢測方法進(jìn)行研究,并提出了一個基于遷移學(xué)習(xí)的小樣本DGA域名檢測模型。該模型可以實(shí)現(xiàn)減少人工特征提取成本,并解決DGA 域名樣本不足的問題。模型首先使用數(shù)據(jù)量充足的DGA種類進(jìn)行預(yù)訓(xùn)練,并將預(yù)訓(xùn)練過程中所學(xué)到的域名知識遷移到小樣本DGA域名檢測模型中。為了避免遷移學(xué)習(xí)過程中出現(xiàn)過擬合,遷移知識只應(yīng)用于多核卷積神經(jīng)網(wǎng)絡(luò)的初始化。模型實(shí)現(xiàn)了基于遷移學(xué)習(xí)的小樣本DGA域名種類的檢測方法,最終達(dá)到提升小樣本DGA 分類模型的準(zhǔn)確率的目的。
域名生成算法可以采用日期、熱搜詞等進(jìn)行特定變換生成DGA 域名。雖然域名生成算法不同,但是域名生成的整體思路相似,因此神經(jīng)網(wǎng)絡(luò)對不同種類DGA域名所提取的特征有一定的通用性。許多研究在訓(xùn)練分類模型的過程中往往需要使用上千條數(shù)據(jù),然而在獲取域名數(shù)據(jù)時,發(fā)現(xiàn)存在數(shù)據(jù)量極少的DGA 域名種類。當(dāng)某種DGA 數(shù)據(jù)量不足以支撐模型訓(xùn)練時,該模型使用遷移學(xué)習(xí)借鑒其他DGA 種類分類模型參數(shù),有效提高分類效果,實(shí)現(xiàn)了僅使用10條小樣本DGA數(shù)據(jù)完成分類模型的訓(xùn)練。
針對小樣本DGA 域名分類問題,本研究采用遷移學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò)的方法將已有知識遷移到小樣本數(shù)據(jù)集的分類過程中。小樣本DGA域名分類模型整體框架思路如圖1所示。
圖1 小樣本DGA域名分類框架
本研究首先對小樣本域名數(shù)據(jù)集進(jìn)行預(yù)處理,使用one-hot 編碼方式將域名轉(zhuǎn)化為模型可讀的數(shù)據(jù)類型,并將域名字符進(jìn)行嵌入映射到向量空間中。在訓(xùn)練分類模型之前,使用樣本數(shù)據(jù)量充足的DGA 域名種類進(jìn)行預(yù)訓(xùn)練,預(yù)訓(xùn)練過程中所獲得的知識將用于遷移學(xué)習(xí)傳入到小樣本DGA 域名分類模型中。之后,將預(yù)處理得到的數(shù)據(jù)和預(yù)訓(xùn)練獲得的知識傳入多核卷積神經(jīng)網(wǎng)絡(luò)的卷積層進(jìn)行特征提取,并使用池化層對特征進(jìn)行篩選。最后將特征傳入神經(jīng)網(wǎng)絡(luò)線性層進(jìn)行分類,通過迭代使模型達(dá)到一個較好的分類效果并拿到最終的分類結(jié)果。
域名如“google.cn”等由兩個及以上的部分組成,從右至左稱為頂級域名和二級域名,以此推類還有三級域名等級別,不同域名級別以“.”進(jìn)行劃分。目前大部分學(xué)者針對DGA 域名的二級域名進(jìn)行了研究[13-14]。根據(jù)頂級域名的不同,申請域名的限制條件和成本有所區(qū)別,某些DGA 種類常常選用一些較為容易申請的頂級域名如“.xyz”進(jìn)行注冊,同時,不同類別的DGA 所使用的頂級域名也不同。因此,本文將頂級域名加入考慮范圍,使得特征的提取更加全面。
為了方便用戶記憶,正常域名的字符通常會采用更符合發(fā)音習(xí)慣的組合方式,這與DGA 生成的域名有所不同。表1 中列出了幾種常見DGA 的生成域名形式,可以看出某些在正常域名中出現(xiàn)概率極低的字符排列方式會出現(xiàn)在DGA域名中。
表1 三種常見DGA域名
為了將域名傳入神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,首先采用onehot的編碼方式對域名可用字符進(jìn)行處理。然而采用此種編碼方式得到的域名向量只能單純地區(qū)分不同字符,不能表達(dá)字符排列方式的出現(xiàn)概率等信息。在自然語言處理的任務(wù)中,分布式表示因其對詞之間距離的良好表達(dá),以及出色的信息包含能力被廣泛應(yīng)用,因此在編碼完成后采用分布式表示的方法,將域名嵌入到向量空間中。設(shè)域名數(shù)據(jù)集為D(d1,d2,…,dn),每一個dn的字符排列方式記為L(ln1,ln2,…,lnm),根據(jù)字符排列方式出現(xiàn)概率不同,可以通過一個轉(zhuǎn)換矩陣T將域名轉(zhuǎn)換為一個嵌入向量E:
其中,m為域名字符串長度,T為1×k維的轉(zhuǎn)換矩陣,這樣域名就映射到m×k維的向量空間中以表示域名字符間的關(guān)聯(lián)程度。
小樣本DGA檢測模型所使用的預(yù)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖如圖2所示。
圖2 預(yù)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
在卷積神經(jīng)網(wǎng)絡(luò)預(yù)訓(xùn)練過程中,使用樣本數(shù)量充足的DGA種類數(shù)據(jù)集。首先將經(jīng)過處理的域名0編碼補(bǔ)齊為等長度字符串并傳入嵌入層,之后將嵌入層的輸出的向量與卷積核進(jìn)行卷積,使用激活函數(shù)進(jìn)行激活,卷積層所使用的計(jì)算公式如公式(2)所示:
其中,x為嵌入層傳遞輸出,ki為卷積核,b為偏置,激活函數(shù)g使用ReLU函數(shù)。
n-gram 是自然語言處理中常用到的一種編碼方式[15-16],目前已有部分研究使用這種方法提高DGA域名的分類精度[17-19]。若文本長度為l,n-gram 方法可以將文本分割成l+1-n個連續(xù)的n元組,從而保留文本的語序信息。然而隨著n的不斷增大,特征向量空間會不斷增大,特征矩陣也會越來越稀疏。卷積神經(jīng)網(wǎng)絡(luò)中的卷積核可以起到與n-gram 方法類似的作用,通過設(shè)置卷積核的大小可以保留域名字符串的局部語序信息,而且不會帶來特征稀疏的問題,從而省去了降維的過程,避免了在降維過程中信息的丟失。根據(jù)英文字符發(fā)音音節(jié)的經(jīng)驗(yàn),本文的卷積核大小第一維度設(shè)置為n={2,3,4}。
卷積層得到的結(jié)果將傳入池化層,本文采用max pooling 的方法篩選掉不必要的冗余信息,之后將不同卷積核所對應(yīng)的池化結(jié)果進(jìn)行拼接。為了防止模型過擬合,提高模型的泛化能力,在傳入線性層分類之前首先使用Dropout方法對神經(jīng)元進(jìn)行隨機(jī)丟棄,Dropout值取0.5。
本研究使用softmax函數(shù)和交叉熵對經(jīng)過線性層得到的分類結(jié)果進(jìn)行損失計(jì)算,這里應(yīng)用的計(jì)算公式為:
其中,y為線性層的分類結(jié)果,i為域名的種類。為了得到最小損失,使用可以為各個參數(shù)設(shè)置不同的自適應(yīng)性學(xué)習(xí)率的Adam優(yōu)化器更新卷積神經(jīng)網(wǎng)絡(luò)的權(quán)重。
數(shù)據(jù)樣本的大小對神經(jīng)網(wǎng)絡(luò)模型的分類效果有極大的影響,對模型的上限有著決定性的作用。由于DGA是不斷更新的,當(dāng)特征發(fā)生改變的新型DGA域名樣本數(shù)據(jù)量不足時,很難通過模型的優(yōu)化實(shí)現(xiàn)對該類域名的高精度檢測。遷移學(xué)習(xí)可以將模型在某領(lǐng)域已學(xué)習(xí)到的知識應(yīng)用到另一相關(guān)領(lǐng)域當(dāng)中,根據(jù)已有經(jīng)驗(yàn)和極少的樣本就可以完成對該領(lǐng)域的學(xué)習(xí)。
已有研究證明,卷積神經(jīng)網(wǎng)絡(luò)的淺層網(wǎng)絡(luò)所提取的特征通常是較為簡單的底層通用特征[20],因此將預(yù)訓(xùn)練所得到的嵌入層和卷積層參數(shù)作為知識遷移部分傳遞給小樣本DGA 分類模型的特征提取模塊。小樣本DGA域名數(shù)據(jù)經(jīng)過預(yù)處理傳入遷移學(xué)習(xí)后的多核卷積神經(jīng)網(wǎng)絡(luò)并進(jìn)行訓(xùn)練。為了避免參數(shù)固定導(dǎo)致訓(xùn)練效果降低或過擬合的現(xiàn)象出現(xiàn),遷移的知識只應(yīng)用于模型的初始化,在之后的訓(xùn)練過程中,遷移部分的模型參數(shù)仍參與訓(xùn)練更新。
小樣本DGA分類模型使用的損失函數(shù)采用Sigmoid和BCELoss相結(jié)合的方法,計(jì)算公式如下所示:
其中,xn為預(yù)測第n個樣本為正例的得分,zn為第n個樣本為正例的預(yù)測概率,yn表示第n個樣本的類別。優(yōu)化器同樣采用Adam以更新神經(jīng)網(wǎng)絡(luò)權(quán)重,在更新的過程中,為了使損失函數(shù)較為穩(wěn)定的降低,學(xué)習(xí)率階段性衰減,每次衰減為上一次迭代的0.5。
2.1.1 域名數(shù)據(jù)集和測試環(huán)境
域名數(shù)據(jù)集來源于Alexa 網(wǎng)站和360Netlab 網(wǎng)站公開的數(shù)據(jù),域名分為正常域名和DGA域名兩部分。Alexa上提供了各個網(wǎng)站訪問量排名,由于DGA 域名通常生存周期短,訪問量通常不高,所以本文選取Alexa數(shù)據(jù)集中訪問量較大的前10萬條域名數(shù)據(jù)作為正常域名數(shù)據(jù)集。DGA 域名數(shù)據(jù)集來源于360Netlab的開源數(shù)據(jù),該項(xiàng)目目前公布了44種不同類別的DGA域名共125多萬條,包括常見的virut、tinba 等類型,以及suppobox 等基于字典的DGA 種類。由于部分域名種類數(shù)據(jù)數(shù)量過少,不足以支撐分類模型效果的驗(yàn)證,因此本文選用數(shù)據(jù)量較為充足的24類進(jìn)行實(shí)驗(yàn),360網(wǎng)站所提供的24類DGA 域名數(shù)據(jù)大小如表2 所示。小樣本遷移卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練集僅使用10條DGA域名進(jìn)行訓(xùn)練,遷移知識來自除小樣本訓(xùn)練集以外的23個DGA域名類別。
表2 24類DGA域名數(shù)量
本文的測試環(huán)境為Windows10,Intel?CoreTMi7-8565U CPU,8 GB 內(nèi)存。模型的實(shí)現(xiàn)基于Pytorch 深度學(xué)習(xí)框架,版本為1.3.1,開發(fā)環(huán)境為Anaconda4.8.2,Python版本為3.7.4,模型支持GPU加速。
2.1.2 評價指標(biāo)
準(zhǔn)確率(Accuracy)、精確率(Precision)、召回率(Recall)和F值(F1)是常用的幾種機(jī)器學(xué)習(xí)評價指標(biāo),準(zhǔn)確率表示總樣本中預(yù)測正確占比,精確率表示預(yù)測是正類中預(yù)測正確占比,召回率表示所有正類中預(yù)測正確占比,F(xiàn)值為精確率和召回率的調(diào)和平均值,因此,若是精確率和準(zhǔn)確率都較好,F(xiàn)1 值也會較高。本研究將采用這四種方式對模型進(jìn)行評估。這四個指標(biāo)的計(jì)算公式如下列公式所示:
其中,TP為將正類預(yù)測為正類數(shù),TN為將負(fù)類預(yù)測為負(fù)類數(shù),F(xiàn)P為將負(fù)類預(yù)測為正類數(shù),即誤報(bào)數(shù),F(xiàn)N為將正類預(yù)測為負(fù)類數(shù),即漏報(bào),這四個參數(shù)共同組成混淆矩陣。
為了將域名數(shù)據(jù)轉(zhuǎn)化成模型可讀數(shù)據(jù),首先使用one-hot 編碼方式對原始域名進(jìn)行編碼,頂級域名將被保留。之后通過嵌入層將編碼后的數(shù)據(jù)映射到向量空間中,根據(jù)公式(1),通過矩陣變換,編碼數(shù)據(jù)轉(zhuǎn)化為domain_len×Embedding_size的矩陣,其中第一維度為域名字符串長度,第二維度為嵌入維度,在本研究中取值為30。數(shù)據(jù)預(yù)處理的過程及最終結(jié)果如圖3所示。
圖3 數(shù)據(jù)預(yù)處理
基于遷移學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò)的小樣本DGA分類模型使用預(yù)訓(xùn)練的23 種域名分類器進(jìn)行知識遷移,用于特征提取的卷積核大小為n×Embedding_size,其中第一維度n={2,3,4},卷積核個數(shù)為5。最終得到的分類效果如表3 所示。通過知識遷移,大部分DGA 種類都能被較好地分類,20 類DGA 域名分類準(zhǔn)確率在92%以上,其中11 類準(zhǔn)確率在97%以上,其余4 類準(zhǔn)確率在80%到90%之間。
表3 遷移學(xué)習(xí)的小樣本DGA分類結(jié)果 %
在24 類DGA 域名中,pykspa_v1、simda、suppobox和virut 類的遷移效果不夠理想。simda 類和suppobox類域名的構(gòu)成較為符合發(fā)音規(guī)則,如“nopolomojen.eu”,virut類大多數(shù)域名字符串長度都較短,二級域名長度通常只有6個字符,無法提取到充足的分類特征。
為了更直觀地體現(xiàn)遷移學(xué)習(xí)在小樣本DGA分類模型中起到的作用,本文使用樣本充足的多核卷積神經(jīng)網(wǎng)絡(luò)DGA 分類模型和無知識遷移的小樣本DGA 分類模型進(jìn)行對比。圖4至圖7為三種模型得到的四項(xiàng)評價指標(biāo)的對比結(jié)果。
圖4 三種模型分類準(zhǔn)確率對比
圖5 三種模型分類精確率對比
圖6 三種模型分類召回率對比
圖7 三種模型分類F 值對比
當(dāng)數(shù)據(jù)樣本充足時,單層多核卷積神經(jīng)網(wǎng)絡(luò)可以滿足大多數(shù)種類的DGA 域名檢測且識別結(jié)果較好,其中21 類DGA 域名的分類準(zhǔn)確率達(dá)到95%以上,14 類的準(zhǔn)確率、精確率、召回率和F值均在98%以上。而無知識遷移的小樣本DGA 域名分類效果明顯較差,大部分種類的四項(xiàng)評價標(biāo)準(zhǔn)均有明顯下降,僅有少部分DGA 域名仍能達(dá)到訓(xùn)練數(shù)據(jù)充足時的檢測效果,11類域名準(zhǔn)確率達(dá)到92%以上。
對比兩個小樣本DGA 分類模型,通過對充足樣本訓(xùn)練的神經(jīng)網(wǎng)絡(luò)進(jìn)行遷移,23 類DGA 域名的四項(xiàng)評價標(biāo)準(zhǔn)較未遷移之前均有較為明顯的提升。將經(jīng)過遷移學(xué)習(xí)的小樣本分類模型和充足樣本所訓(xùn)練的分類模型進(jìn)行對比,20 類小樣本DGA 分類模型四項(xiàng)評價標(biāo)準(zhǔn)與樣本充足時所訓(xùn)練的模型差值不超過-4%,3類小樣本DGA域名分類模型的準(zhǔn)確率、精確率和F1 值優(yōu)于樣本充足時的訓(xùn)練結(jié)果。pykspa_v1、suppobox 和virut 類DGA域名的遷移模型訓(xùn)練結(jié)果與樣本充足訓(xùn)練結(jié)果相比差距仍較大,但pykspa_v1和virut類小樣本分類結(jié)果較無知識遷移的分類結(jié)果已有明顯提升,suppobox類域名遷移后的效果比未遷移的結(jié)果略差。
此外,在訓(xùn)練過程中,訓(xùn)練數(shù)據(jù)量不足的模型需要花費(fèi)更長的時間迭代更多次數(shù)才能得到模型較優(yōu)參數(shù)。而經(jīng)過知識遷移的模型收斂速度較快,所花費(fèi)時間大約為無知識遷移模型的25%。
本文提出了基于遷移學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)小樣本DGA 域名分類模型,并對24 種DGA 域名進(jìn)行了測試。首先在數(shù)據(jù)預(yù)處理部分保留了頂級域名的特征,并將域名映射在向量空間中完成字符嵌入。預(yù)訓(xùn)練部分使用其他多種類DGA 域名對多核卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。之后將預(yù)訓(xùn)練得到的知識遷移到小樣本DGA分類模型中,并使用處理后的數(shù)據(jù)進(jìn)行訓(xùn)練。實(shí)驗(yàn)結(jié)果表明,大部分經(jīng)過知識遷移的DGA域名分類結(jié)果較無遷移模型有明顯提升,四項(xiàng)評價標(biāo)準(zhǔn)接近數(shù)據(jù)充足時訓(xùn)練的模型,20類域名準(zhǔn)確率在92%以上,11類準(zhǔn)確率達(dá)到97%。由于遷移后的模型對小部分的域名種類效果不夠理想,在接下來的工作中,將在進(jìn)行知識遷移之前分析各類域名的領(lǐng)域分布差異,并對自動檢測新型小樣本域名的無監(jiān)督方法進(jìn)行研究以進(jìn)一步減少人工標(biāo)注成本。