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