王 偉,羅鵬宇
(1.中國電子科技網絡信息安全有限公司,四川 成都 610041;2.中國電子科技集團公司第三十研究所,四川 成都 610041)
隨著互聯網應用的持續發展和終端用戶數量的爆炸式增長,網絡化的生活和虛擬化的資產使得互聯網已成為人們日常生活中必不可少的一部分。域名系統(Domain Name System,DNS)[1]是網絡中最常見的基礎設施,但由于存在缺陷常常被僵尸網絡[2]、釣魚網站[3]等惡意網絡行為利用。攻擊者會按照目標定位、偵查跟蹤、武器構造、載荷投遞、漏洞利用等常規的殺傷鏈[4]步驟進行攻擊,并執行遠程命令與服務器進行連接來完成“C2控制”,期間攻擊者會使用一種名叫domain-flux[5]的技術。domain-flux技術主要通過不同的算子生成大量不同域名生成算法(Domain Deneration Algorithm,DGA)家族[6]的原始域名,被感染主機會查詢大量的DGA惡意域名并僅和攻擊者注冊的少部分有效域名建立連接,攻擊者通過這種方式訪問遠程服務器以達到躲避安全檢測的目的。由于DGA域名數量巨大且惡意網絡難以被識別,因此精確檢測與封堵DGA域名意義重大,且隨著《中華人民共和國網絡安全法》[7]的頒布,網絡安全[8]的保障工作早已迫在眉睫。
為了檢測DGA域名,蔣鴻玲等人[9]提出了基于多層感知器訓練算法模型來檢測惡意域名,通過6個維度構造算法特征,并通過對比各個不同模型結果的ROC曲線面積(Area Under Curve,AUC)值來找出最優的分類算法,此方法具有較好的特征提取思路,但特征略微單一,無法穩定地檢測和識別惡意域名。Yadav等人[5]提出了通過jaccard[10]距離來比較惡意域名與正常域名之間的bigram集,并使用可編輯距離來衡量一個惡意域名轉換為正常域名所需的字符更改數,此方法對于字符混雜性高的惡意域名具有很高的區分度,但無法區別字符混雜度較低的惡意域名。裴蘭珍等人[11]提出了一種面向字符的采用卷積神經網絡(Convolutional Neural Networks,CNN)深度學習的DGA域名檢測模型,該模型由字符嵌入層、特征檢測層和分類預測層組成,在對歷史沉淀數據的檢測中具有簡潔高效的特點,但無法應對智能化域名生成機制所產生的DGA域名。
為了對抗智能化DGA域名生成機制,Woodbridge等人[12]提出了基于長短期記憶網絡(Long Short-Term Memory,LSTM)的DGA域名檢測方式,該方法避免了手工創造特征的繁瑣,通過智能化網絡的方式快速提煉數據之間的關系和訓練算法模型,且能夠快速地檢測DGA域名,但該方法無法深度刻畫DGA域名特征和識別后發的惡意域名。羅赟騫等人[13]提出一種融合深度學習中CNN模型和循環神經網絡(Recurrent Neural Network,RNN)模型的集成模型檢測方法,該集成檢測方式通過對輸入字符進行自動編碼后,分別從空間和時間的角度提取字符特征,具有較好的耦合性,但由于模型體量太大且時間復雜度較高,無法做到實時檢測。
為了解決實時檢測的問題,Sharifnya等人[14]提出了一個用于檢測DGA僵尸網絡的新型信譽系統,該系統通過計算可疑矩陣來評估主機的可疑分值,對分值較低的主機進行惡意標識。該方法具有較高的檢測率且能做到實時檢測,但無法識別domain-flux技術生成的變種DGA域名。趙科軍等人[15]使用基于word-hashing的深度模型檢測DGA僵尸網絡,首先基于word-hashing技術將域名轉為二元語法字符串,其次利用詞袋模型把域名映射到高維向量空間,最后利用神經網絡訓練分類模型。該方法具有新穎的特征提取思路,并能從數據集中發現抽象化的特征,但由于訓練樣本太少導致模型不具備代表性。Yu等人[16]提出了一種基于深度學習的DGA檢測方式,通過收集19個家族的DGA數據,將每一個家族的數據進行清洗過濾后,分別訓練不同的算法模型,通過對比不同算法模型的訓練結果來抉擇不同DGA家族最適宜的分類模型。該方法提供了較好的分類思路,對于不同的DGA家族可以采用不同的算法檢測模型,且同一家族可以采用多種不同的分類算法來提高檢測性能。袁辰[17]提出了一種基于對抗網絡的惡意域名檢測方法,通過訓練生成式對抗網絡(Generative Adversarial Networks,GAN)模擬domain-flux技術來生成域名字符向量,并借鑒one-hot和n-gram的思想給出域名序列以用于LSTM訓練檢測模型。該方法通過模擬DGA惡意域名的生成對DGA惡意域名進行預測和檢測,具有較新穎的設計思路,但通過GAN網絡生成的DGA域名具有較大的不確定性,導致用于訓練LSTM模型的DGA域名和實際的檢測場景可能會有較大的差異。
為了解決數據波動的問題,Dahal等人[18]提出了一種基于自動編碼器模型的DGA域名識別方法,模型由37層的輸入層、16層的編碼層和2層的輸出層構成,通過輸入收集的alexa[19]白樣本數據以及標注的11個黑樣本家族DGA域名數據來訓練編碼器模型。該方法的有效檢測率能達到88%,且相較于LSTM模型,對于未標注的DGA惡意域名具有較好的檢測能力,但由于模型復雜性較高且隨著數據量的增加,模型的體量呈幾何級數增長,使得該模型不具備可移植性。王震[20]提出了一種基于支持向量機(Support Vector Mac,SVM)算法的DGA域名檢測模型,通過機器學習的方式提取域名長度、域名熵、元音字母比例、連續輔音字母比例、數字比例5個維度的特征來區分DGA域名和正常域名,并在此基礎上增加隱馬爾科夫特征來進一步識別長度較短的DGA域名。此方法具有較高的檢測率和較好的檢測思維,但由于黑樣本數據集太少且特征覆蓋面不足的原因,無法檢測變種度較高的DGA惡意域名。
DGA域名的檢測是一個復雜且重要的問題,相對其他惡意程序,由DGA域名引發的僵尸網絡危害程度更高、防御難度更大,因此僵尸網絡已成為安全領域學術研究和討論的熱點問題,而現有的DGA域名檢測技術在時間性上無法及時檢測DGA域名,在延伸性上無法有效識別后發的DGA域名,在精確性上也無法準確識別惡意變種的DGA域名。針對以上問題,本文提出一種基于機器學習算法建模的DGA惡意域名檢測方法,通過數據標注、數據預處理、特征提煉和算法建模等流程來訓練DGA檢測模型。該算法模型體量輕、耦合性高,能對未知的域名做自動評估與自動歸類,并能準確地檢測與識別DGA域名。
數據集是一堆數據的集合,覆蓋了模型所需的所有數據,數據集的質量決定了算法模型的上限,豐富的數據集能涵蓋較多的樣本集,有助于特征工程提取有價值的特征用于模型訓練。本文數據集由Alexa數據集、DGA家族數據集、中文拼音[21]數據集3部分構成,如表1所示。Alexa數據集是Alexa官方發布的包含幾十億網站鏈接的全世界網站排名數據,該數據集具有一定的權威性,DGA數據集包含bamital、cryptolocker、emotet、rovnix、tinba等在內的50個DGA家族數據,由于不少域名如鏈家官網(cd.lianjia.com)、安居客官網(chengdu.anjuke.com)等是按照漢語拼音來構造的,因此加入了中文拼音數據集以全量覆蓋樣本集。

表1 模型使用的數據集
域名是具有一定意義的字符串,同IP地址一樣用于在互聯網上標識不同的單位、機構或機器,域名通常由域名前綴、域名主體、域名后綴3部分構成。域名后綴是指代表一個域名類型的符號,不同的域名后綴有不同的含義,如“.cn”代表中國,“.jp”代表日本,“.com”代表公司等。域名主體和域名后綴組合在一起如“qq.com”即為一級域名,域名前綴和一級域名組合在一起如“www.qq.com”和“mail.qq.com”就為二級域名。域名主體通常由企業名稱構成,兩個不同的一級域名如“taobao.com”和“taobao.cn”的域名主體相同,代表著相同的域名關鍵信息。由于域名前綴和域名后綴種類繁多,且攻擊者會變換不同的域名前綴和域名后綴來改變域名以達到迷惑攻擊的目的,導致過多的域名前綴和域名后綴對關鍵信息提取有較大的干擾作用,故僅保留單個域名的域名主體作為信息輸出。
本文使用Python編程語言的tldextract第三方包來提取單個域名的域名主體,tldextract有一個公共后綴列表用以匹配所有的域名,使得tldextract可以準確地從域名和子域名中分離出其頂級域名和域名主體。
特征工程是指將數據集進行數據規約、數據加工、數據轉化的一個數據處理過程。特征工程是嫁接數據預處理輸出和算法模型輸入之間的中間橋梁,具有“承上啟下”的作用。特征工程作為數據預處理的輸出,能對有限的數據集進行關鍵信息概括和重要信息提取,同時特征工程作為算法建模的輸入,能將低維度特征的文字信息通過多個算子處理和轉換為機器可識別的高維度特征。特征工程的信息提取精度決定了算法模型的性能瓶頸和上限,好的特征工程能極大地提升模型的精度上限,有效減少模型的訓練時長和降低模型的體量載荷。本文分別從語義性、連貫性和可讀性上來構建算法特征,包括字符特征、字符序列特征、隱馬爾科夫鏈特征、可讀性特征和語音特征5大類特征。
圖1展示了字符特征的子特征分類。字符特征總共由9個子類構成:
(1)域名字符長度;
(2)域名中元音字母的占比;
(3)域名中輔音字母的占比;
(4)域名中數字的占比;
(5)域名中重復字母的占比;
(6)域名中連續數字的占比;
(7)域名中連續輔音字母的占比;
(8)域名中連續兩字符為一元音和一輔音的字符占比;
(9)域名信息熵。
域名的信息熵計算公式為:


式中:p(xi)為隨機事件為xi的概率。信息量是一個具體事件發生所帶來的信息,信息熵為該隨機變量所有可能的取值情況,熵越大,對應的信息量越大。
圖1為字符特征的子特征分類。

圖1 字符特征分類
字符序列特征是一種基于統計語言模型的特征,其基本思想是將文本里面的內容按照字符大小為N的滑動窗口進行分割,形成長度為N的字符序列,并對所有的字符序列進行頻率統計,以此計算出整個域名數據集的N元字符序列集。基于馬爾科夫鏈[22]假設,當前字符的頻率p(wi)只與其前N-1個字符有關,即得到鏈式規則為:

基于對N元字符序列集的統計分析,合法域名的N元序列頻率較高,DGA域名由于字符組合奇異等原因其N元序列頻率相對較低,同時結合時間復雜性和空間占用率等因素分析,發現2元字符序列和3元字符序列區分性較強,2元字符序列和3元字符序列公式為:

式中:C(wi)為字符序列在字符序列集中的統計量。
將求得的2元序列向量和3元序列向量進行求和平均等函數計算,把多元向量化為一元向量作為特征屬性值,以此來體現合法域名和DGA域名之間的差異性。
隱馬爾科夫[23]是一種關于時序的概率模型,含有未知參數的馬爾科夫鏈會生成不可觀測的狀態隨機序列,隱馬爾科夫模型則用于觀測和描述這個狀態隨機序列的生成過程。隱馬爾科夫模型中,S={s1,s2,…,sn}是所有可能的狀態集合,O={o1,o2,…,om}是所有可能的觀測狀態集合。
將域名中出現的字符視為長度為T的狀態序列I={i1,i2,…,iT},Q={q1,q2,…,qT}是其對應的觀測序列,即可計算出域名中字符Ai到Ai+1的概率隱含狀態轉移概率矩陣為:

式中:aij為在時刻t處于狀態si條件下,下一時刻t+1轉移到狀態sj的概率。以域名的字符為例,abw為當前位置字符為b而下一位置字符為w的概率,其表達式為:

B為可觀測值轉移概率矩陣,其表達式為:

式中:bij為在時刻t處于狀態si的條件下生成觀測值oj的概率。以域名字符為例,bq1為當前這一字符為q,但這個字符串為DGA域名的概率,其表達式為:

π是初始狀態概率向量:

式中:πi為在時刻t=1處于狀態si的概率,以域名字符為例,πb為域名初始首字符為b的概率。
所以隱馬爾科夫模型可以由隱含狀態轉移概率矩陣A、可觀測值轉移矩陣B和初始狀態概率向量π表示為λ=(A,B,π)。
結合時序性和空間性來生成的隱馬爾科夫特征對域名具有很強的分辨能力,常規普通域名由于字符之間往往具有可循的規律,其隱馬爾科夫特征值較高,而DGA域名的混雜程度和突發性較強,其隱馬爾科夫特征值對比常規域名具有較大的偏差。
Gibberish特征[24]是通過單詞之間的邏輯語義性來檢測一句話是可讀的人類語言還是由機器隨機生成的,使用這個特征是基于DGA域名相較于正常域名而言其可讀性較差的經驗。首先統計一篇足夠長的訓練語料中字母之間的出現次數來算得頻數方陣C:

由頻數方陣來計算出條件概率方陣P:

對于需要判斷的文本,將其拆解為2-gram詞組:

對于每個詞組,在條件概率方陣中查找其對應的條件概率,并得出整個文本的概率平均值G為:

將此概率平均值作為這個詞組的Gibberish特征值,若此Gibberish特征值較低,則說明該詞組字符間的次序性與概率分布有偏差,可能為隨機生成的DGA域名。
語音匹配算法[25]常用于搜索超大文本語料庫和修正拼寫錯誤,主要思路是以一個關鍵詞作為算法輸入,然后輸出一個經過語音算法處理的語音字符串,這個語音字符串用于表示關鍵詞的語音特征和語音信息,語音相似的輸入單詞其對應輸出的語音字符串也相似。在DGA域名識別領域引入語音特征,將域名作為關鍵詞輸入,借助語音算法簡潔高效的特性來對域名進行編碼和抽象化,高度抽象化的常規域名和DGA域名在結構上具有明顯的不同。圖2為語音算法邏輯。

圖2 語音算法邏輯
算法建模步驟會把特征工程產出的高緯度特征和算法模型進行結合,并通過算法計算來得出最終的輸出結果。本文采用梯度提升樹(Gradient Boosting Decision Tree,GDBT)來進行算法建模。GBDT的核心思想是在迭代過程中擬合每棵子樹的殘差來降低樹的損失函數。在迭代過程中每棵子樹通過計算平方誤差來判別其最佳劃分點,并把當前子樹的殘差值作為下一個迭代目標,以此迭代,直到殘差接近或達到某個閾值時停止迭代。對于訓練數據集D={(x1,y1),(x2,y2),…,(xn,yn)},二元GBDT分類算法的損失函數L為:

式中:f(x)為單個回歸樹(Regression Tree,CART)的輸出結果。CART樹的初始值f0(x)為:

對每一輪迭代t、訓練樣本i對應的負梯度誤差為:

式中:?為單個回歸樹輸出結果的偏導數。
對于所有的概率殘差{(x1,Et1),…,(x2,Eti)}擬合一棵分類樹,并計算各個葉子節點的最佳負梯度擬合值:

式中:Rtj為第t輪迭代樹的葉節點區域;J為分類樹t的葉子節點個數;c為常量函數。使用近似值替代最佳負梯度擬合值,則有:

用本輪的擬合函數更新強學習器ft(x)為:

以此迭代,得到最終的強學習器f(x)為:

f(x)是由預測概率值和真實概率值的差值來擬合的函數,最后將預測概率值轉換為對應的類別,則有:

GBDT算法可以靈活處理各種類型的數據,相較于支持向量機等算法而言,GBDT僅用較少的調參就可以達到較好的預測效果,且算法的容錯性高,異常波動數據對算法的影響較小,圖3為GBDT和整個算法框架流程。

圖3 算法框架流程
測試數據集來源于網上開源黑樣本數據集、流量日志抓包還原后并經過安全專家分析的數據集和行業安全公司提供的權威數據集共3部分。測試數據集經過實體抽取、特征值計算后,加載算法模型進行預測評估,結合混淆矩陣評價指標得到表2的測試結果。

表2 不同測試集的測試結果
算法模型在3個不同來源的數據集上的檢測效果均較好,同時為了避免數據偏差和數據耦合性,使用random_data數據集隨機抽取部分數據并測試,測試結果表明檢測性能穩定在7 000條每秒,召回率穩定在97%上下,準確率穩定在98%左右,此檢測方式的測試結果與其他評估方法的對比如表3所示。

表3 不同評估方法的準確率對比
綜上所述,基于機器學習建模的DGA域名檢測方法具有較好的檢測率,且相較于其他評估方法,此模型克服了DGA域名更替速度快而導致的數據偏差的問題,解決了不同的DGA家族域名繁雜、模型數據波動的問題,同時此模型使用了自然語言處理的特征思維,具有較強的可解釋性,且易于更新與部署,適應網絡安全業務與算法的融合。
本文研究了基于機器學習建模的DGA惡意域名檢測模型,實現了對DGA域名的自動化智能檢測,通過分析現有DGA域名檢測方法的不足,提出了一種基于機器學習建模的檢測方式。此方式融合了自然語言特征和機器學習檢測思想,同時結合了域名實體提取技術,使得模型具有以下優點:在及時性上,模型能及時響應與發現網絡異常并準確識別與攔截DGA惡意域名;在可解釋性上,模型融合了字符特征和時序特征,能形象概括字符間的共性和差異;在準確性上,模型準確刻畫與提煉每個DGA家族的特征行為,兼顧對每個家族域名的準確檢測。此智能檢測方式有效地減輕了人工勞動的同時,實現了對DGA域名的精準封堵,并利用機器學習技術對DGA域名進行高緯識別,有利于機器學習算法在網絡安全領域的應用,并對網絡安全的防御起到引導作用。