羅海波,陳星池,董建虎
(廣東東軟學院 計算機學院,廣東 佛山 528225)
動態域名生成算法(Domain Generate Algorithm,DGA)能夠有效地生成偽隨機域名。攻擊者常常會使用域名將惡意程序連接至命令控制服務(Command and Control Server,CC服務器),從而達到操控受害者機器的目的[1]。攻擊者可以輕松更改這些域名和IP,即使CC服務器地址部分失效或者變更也能保持連接,而且這些域名往往與惡意程序中的編碼混合在一起,具有很強的隱蔽性。
截至2019年12月,網上公開的基于DGA算法變種就已經達到44種[2]。惡名昭彰的惡意軟件Zeus和Conficker就是使用了該算法。DGA算法是實現惡意程序的重要技術,分析、復現、檢測偽隨機域名,進而有效地檢測惡意程序,對于國家、企事業、軍民網絡空間安全有其現實意義。
用于應對 DGA算法生成惡意域名的傳統方法有黑名單過濾和通過逆向惡意樣本中的 DGA算法,提前搶注域名來奪取CC服務器的控制權。據研究表明,前者無法對動態生成的 DGA域名實時更新,準確率不高;后者雖然可以通過逆向樣本深入理解該樣本的 DGA算法和生成惡意域名機制,但是需要消耗大量的時間和精力,效率不高[3]。因此,人們的研究方向主要放在對DGA域名的實時檢測,主流技術包括利用機器學習的方法構建 DGA域名分類器、使用深度學習的神經網絡模型進行檢測。
首先介紹了 DGA域名的研究背景和價值,DGA域名的特點、分類和基本定義。然后介紹了人工智能中幾種流行的智能算法,例如XGBoost、樸素貝葉斯、多層感知器和循環神經網絡。接著介紹了幾種特征提取方法,包括 N-Gram模型、統計域名特征模型和字符序列模型。最后對算法和特征提取進行實驗,并對結果進行對比分析,獲取較優的特征提取和算法組合。
使用人工智能構建模型,通過該模型對DGA域名的實時檢測,這里需要涉及到分類(Classify)。分類指的是基于某種定義好的規則,將需要處理的數據集劃分類別。常見的分類任務包括二分類、多分類和多標簽分類,對 DGA域名的實時檢測只需要判斷域名是否正常,所以采用的是二分類。機器學習種常見的二分類算法有:貝葉斯分類、XGBoost算法等。而多層感知機和循環神經網絡作為深度學習中的重要算法,除了可以用來做復雜的圖像識別,應用在文本的二分類方面也有不錯的效果。
下面將在特定的特征為基礎上,分別實現貝葉斯分類、XGBoost算法、多層感知機算法和循環神經網絡算法在DGA域名檢測中的具體應用。
樸素貝葉斯分類器(Naive Bayes Classifier,NBC)是貝葉斯決策理論的一部分,可以也被應用于解決諸如某行業是否值得投資、個人信用等級評定、網絡態勢感知、醫療診斷等統計分析與預測領域[4]。該算法有點在于簡單易懂、學習效率高、在某些領域的分類問題中的效果與決策樹神經網絡相媲美[5]。
假設類別為C,信息的特征值為W,則貝葉斯決策的基本公式為:
若在特定的條件前提下,假設信息體有n個特征W,即Wn={W1,W2,W3, ...,Wn},每個特征相互獨立且互不影響[6]。則有樸素貝葉斯的公式為:
在樸素貝葉斯模型中,P(C)代表每個信息體類別的概率,也即被測信息體類別數除以總信息數量;P(W1,W2,W3,...,Wn)代表被測信息體的n個特征值集合,即是每個特征出現的概率相乘;P(W1,W2,W3, ...,Wn/C)代表指定類別下某個信息體的n個特征值集合,即是被測信息體中出現所有詞的概率相乘。
XGBoost(Extreme Gradient Boosting,XGBoost),也被稱為梯度提升決策樹。近年來比較熱門,經常被應用于一些機器學習的競賽中,其中在Kaggle數據挖掘挑戰賽中,29個冠軍有17個使用了XGBoost算法[7]。其算法學習速度很快,效果也很好,性能比另一個機器學習庫 scikit-learn庫的增強梯度算法要好上不止10倍[8],而且可以應用與Python、R、C++等多個平臺,有很強的擴展性和移植性。
XGBoost所應用的算法就是GBDT(Gradient Boosting Decision T ree)的改進,屬于 Boosting集成學習,也即采用集成學習的方法,由多個相關聯的決策樹聯合決策,目的使組合后的模型具有更強的泛化能力。XGBoost既可以用于分類也可以用于回歸問題。
對于樣本i=1,2,3,...,m,XGBoost的計算公式為:
其中L(yi,ft-1(xi))為XGBoost原始目標損失函數,而是為防止訓練中數據過擬合的正則項。
其中GL,HL,GR,HR分別是當前節點左右子樹的一階二階導數和。
XGBoost算法的主算流程如下:
Part.1首先向分類器輸入訓練樣本數據集合I,I={(x1, y1) ,(x2, y2) ,(x3, y3)...(xm, ym)},初始化訓練參數:迭代數T,損失函數L,正則化系數λ,γ;
Part.2迭代T輪訓練數據;
Setp.1計算i個樣本(1,2,3,…,m)在當前輪損失函數L基于ft-1(xi)的一階導數g和二階導數h,并分別對所有樣本的一階導數和二階導數求和;
Setp.2基于當前節點嘗試分裂決策樹并更新分數score值,默認分數score為0;
Setp.3基于最大的score對應的劃分特征和特征值分裂子樹;
Setp.4若最大score值為0,則當前決策樹建立完畢,計算所有葉子區域的ωtj,得到弱學習器ht(x),更新強學習器ft(x),進入下一輪弱學習器迭代。如果最大score不是0,則會轉到Setp.2繼續嘗試分裂決策樹;
Part.3輸出強學習器f(x);
多層感知器(Multi-Layer Perceptron,MLP)也稱為人工神經網絡。它類似與于人類的神經元結構:樹突、細胞體和軸突[9]。最簡單的MLP只有三層結構,最底層是輸入層,中間是隱藏層,最上層是輸出層,層與層之間是全連接。多層感知器作為深度學習常用的一種算法,常常被用于處理非線性可分離的問題,分類的準確度高,并行分布處理能力強,分布存儲及學習能力強,對噪聲神經有較強的魯棒性和容錯能力,能充分逼近復雜的非線性關系,具備聯想記憶的功能等。
假設輸入為x,最簡單的多層感知器公式為:
其中H(b1+W1x)表示輸入層與隱藏層連接的激活函數,常用函數有sigmoid、anh和relu。求解出來的值作為下一層輸出層函數G(b2+W2x)的輸入,常用的函數有softmax。而b1、W1、b2和W2都是層與層之間連接的權重和偏置參數。
循環神經網絡(Recurrent Neural Network,RNN)在 21世紀初被列入深度學習算法中[10]。因為循環神經網絡參數共享,具有記憶性,被用于處理諸如文字、時間等序列數據。
但循環神經網絡不具備長期依賴信息的學習能力,在長鏈中若相隔時間太長容易產生梯度消失的問題。后來LSTM(Long Short-Term Memory)的出現,通過精妙的門控制將長短期記憶結合起來很好的解決了這一問題[11],讓網絡非常擅長長時間學習文本和言語處理,因此被廣泛應用。
DGA域名識別采用如圖1所示框架。
圖1 DGA 域標識框架Fig.1 DGA domain identification frame
Setp.1加載Alexa前100萬域名數據作為白樣本,360netlab開放的DGA域名為黑樣本,并且對黑白樣本進行數據合并;
Setp.2特征提取。方式1,使用N-Gram模型;方式2,使用統計域名特征模型;方式3,使用字符序列模型;
Setp.3將合并后的數據集的數據分為兩份部分,其中一部分是測試集占40%,另一部分是訓練集占60%;
Setp.4利用分類算法對訓練集進行訓練,得到模型數據,算法 1:樸素貝葉斯,算法 2:XGBoost,算法3:多層感知器,算法4:循環神經網絡;
Setp.5使用模型數據進行預測,進行分類;
Setp.6效果進行驗證。
用于識別 DGA域名的特征提取方法有:N-Gram模型、統計域名特征模型以及字符序列模型等。
特征提?。‵eature Extraction)無論是在文本處理、圖像識別等都有著廣泛的應用。特征提取的方法主要是通過屬性間的關系,組合不同的屬性得到新的屬性,這樣做改變了原來的特征空間。目的就是試圖去減少特征數據集中的屬性,對原來特征數據進行降維,必須保證描述原特征數據的精確性和完整性的同時,更加方便模型學習。
N-Gram是一種基于統計語言的算法模型。其核心思想是將文本內容按照字節進行大小為N的滑動窗口操作,最終形成長度為N的字節片段序列。
在該模型構成的文本向量特征空間中,列表的每一個字節片被稱為gram,并且按照事先設定好的闊值進行過濾和對所有的gram出現頻率進行統計。N-Gram模型常被用于評估語句是否合理[12]、搜索引擎或者輸入法的猜想提示[13],N值越大,
對下一個備選提示詞的選擇就更多,但更加稀疏;而N值越小,對下一個備選提示詞的約束信息更少,但更加精確。文章使用的是2-Gram的特征提取模型。例如域名[‘baidu.com’]經過該模型的處理之后,會變成詞匯表[‘ba’,’ai’,’id’,’du’,’uc’,’co’,’om’]。
2-Gram模型的處理過程如表1所示。
表1 2-Gram 模型處理流程Tab.1 2-Gram processing flow
域名統計特征模型(Domain Statistics),域名最初的誕生就是為了解決用戶請求更方便請求資源的問題,為了更好的體驗正常域名長度一般不會存在過長的狀況。而 DGA域名僅僅是為了保持被惡意軟件主機和 CC服務器通信,為了盡可能避免 DGA生成的域名與正常域名產生沖突,一般 DGA域名長度會比正常域名長。但這不是絕對的,有些 DGA域名為了躲避打擊和檢測,生成 DGA域名長度也會使用較短,所以只憑借域名長度這個特征判斷是不夠的。
從域名的內容方面研究,正常人通常在取域名的時候,會偏好選取容易記憶與理解的幾個字母組合,也即是元音字母比例會比較高。而DGA算法生成的是隨機域名,所以元音字方面的特征不明顯;除了元音字母出現的比例不同,文獻[14]也指出唯一字符數分布區間也有差異。
本次實驗通過統計每個域名的元音字母個數、不重復字符個數、數字個數和域名長度,可以有效的將正常域名和DGA域名進行區分。
統計域名特征模型的處理過程如表2所示。
表2 域統計處理流程Tab.2 Domain statistics processing flow
字符序列統計模型(Character Sequence),每個域名都是由字符組成的序列,將對應的字符直接轉換成對應的ASCII值。相比一些諸如聚類等復雜的特征提取方法,該方法只需要對域名進行簡單的編碼,可令分類模型能夠直接學習數據的原始特性。
字符序列模型的處理過程如表3所示。
表3 字符序列處理流程Tab.3 Character sequence processing flow
Alexa是一家著名的發布世界網站排名的網站,當前擁有最權威、詳細的網站排名信息。而360netlab則記錄著目前公開的所有DGA家族域名數據。本次實驗采取Alexa全球前100萬個的網站域名作為白樣本和 360netlab的開放數據作為黑樣本。
在混淆矩陣中,TP代表真正例,TN代表真負例,FP代表假正例,FN代表假負例。
精確率(Precision)是指預測正確的樣本占真實樣本比例,常常被作為二分類模型的評估指標。計算精確率的公式為:
召回率(Recall)能反映出一個模型對樣本的覆蓋能力,也被稱為靈敏度(Sensitivity)。計算靈敏度的公式為:
F1-Score是精確率和召回率的一個均衡評價,國內外很多機器學習競賽都關注這個 F1-Score值。F1-Score的計算公式為:
ROC(Receiver Operating Characteristic Curve)也被稱為受試者工作特征曲線。數十年前在分析無線電、醫學等領域都有應用,而最近在機器學習領域中也得到了良好的發展。ROC曲線相對于準確率、召回率等這類指標評估標準,它減少了對預測概率設分類闊值步驟,大大提高了模型的泛化能力。ROC是以假正率(False Positive Rate,FPR)為橫坐標,真正率(True Positive Rate,TPR)為縱坐標繪制的曲線。而真正率與召回率的計算公式相同。假正率的計算公式為:
ROC曲線能反映其模型的靈敏性和特效性連續變量的綜合指標,一般曲線越光滑就表示模型與數據的過擬合度越低,曲線越靠左上角就表示該模型的準確性越高。AUC(Area Under the Receiver Operating Characteristic Curve)物理上的含義就是代表ROC曲線下的面積,其值越大也表示模型準確性越高[15]。
圖2展示了基于域統計/字符序列的不同分類器的評價指標實驗結果。從圖上可以看出,在相同的數據集下,基于字符序列特征模型的RNN效果明顯優于其他分類器,并且AUC的檢測準確概率值達到0.93。圖3展示了基于2-Gram特征模型不同分類器的評價指標實驗結果。從圖上可以看出,MLP對DGA域名檢測的準確率最佳,AUC的值可以達到0.94。
圖2 基于域統計/字符序列的分類器指標Fig.2 Classifier comparison based on domain statistics/character sequence
圖3 基于2-Gram的分類器比較Fig.3 Classifier comparison based on 2-Gram
對比圖2和圖3可以看出,基于2-Gram特征模型的F1、靈敏度、精確率等指標均優于基于域統計/字符序列模型。
文章簡要闡述了 DGA域名課題的研究背景和價值,DGA域名的特點、分類和基本定義。本文介紹了機器學習和深度學習中幾種流行的XGBoost、樸素貝葉斯、多層感知器和循環神經網絡算法。介紹了幾種特征提取的方法,包括NGram模型、統計域名特征模型和字符序列模型。經過對比發現,基于2-gram特征模型的多層感知器在 DGA域名檢測中的得到較高的評價,未來研究得主要方向將放在如何進一步提升該組合的DGA域名檢測能力,而在實踐工程中往往也有其他特征提取模型和分類算法,接下來也會嘗試新的可能性,組合不同的特征模型分類算法對DGA域名檢測進行改進。