傅 偉 錢麗萍 朱曉慧
(北京建筑大學電氣與信息工程學院 北京 100044)
互聯網技術為人們的日常工作和生活提供了便利,但互聯網攻擊事件也層出不窮,包括僵尸網絡、網頁釣魚、網絡竊聽、托管詐騙等,嚴重侵犯用戶隱私和威脅用戶財產安全。CNCERT/CC2018年度報告中指出,77 373個服務器IP地址被木馬或僵尸程序控制,其中境內有6 559 208個主機IP地址被控制。
域名系統(Domain Name System,DNS)是互聯網的重要組成部分,為用戶提供易于記憶的域名和IP地址映射的服務[1]。因其應用的廣泛性以及缺乏內置的安全檢測機制,常被攻擊者用于承載網絡攻擊。僵尸網絡即是依托域名系統,將用戶正常域名破壞性地解析到惡意服務器上,從而達到控制用戶主機的目的[2]。早期的安全檢測系統較容易發現此類惡意域名,會迅速阻斷通信并將其列入黑名單。為對抗黑名單機制,當前攻擊者普遍引入域名生成算法DGA,動態地生成惡意域名,繞過安全系統的檢測,同時也顯著增強了惡意服務器的持久性和隱蔽性[3]。與此同時,尋找高效快速檢測DGA域名的方法成為網絡安全領域的研究熱點之一。
我們可以將域名檢測方法大致分為兩類:基于域名特征提取和基于無顯性特征提取。域名特征包括域名內容特征、域名字符統計特征和域名解析行為間關系特征等。除人工提取的特征外,深度學習框架通過訓練可以提取域名隱性特征[4]。但兩類檢測方法都是基于現有惡意域名進行檢測,對于不斷更新的DGA算法產生的新域名檢測時效性不強。DGA新域名規避某些傳統檢測特征的特性,以及其數據量少、采集困難、獲取周期滯后,給域名檢測算法帶來極大挑戰,因此惡意域名數據集增強意義重大。
目前學術界在惡意域名對抗方面主要集中在檢測方法。在基于域名內容或字符特征的檢測方面,Schiavoni等提出了Phoenix機制,不僅可以根據字符串和IP地址特征區分是否為DGA域名,還可以挖掘隱藏在DGA后的Botnet,實驗采用115萬惡意域名,檢測準確率在94.8%左右[5]。Mowbray等在域名解析過程中,通過分析不常見的二元字符串分布來識別惡意域名[6]。Yadav等利用DNS探測法統計域名一元、二元字符分布來探索域名隱含的特性,檢測的方法是計算域名的K-L距離、Jaccard距離和編輯距離[7]。除了傳統的字符特征統計,文獻[8]將域名劃分成單個單詞,達到擴展功能集尺度的目的,進而提高惡意域名識別準確率。Truong等發現DGA域名和合法域名存在不同的構成規則,據此提出從DNS流量中提取長度和期望值以區分兩種域名,構建的J48分類器平均準確率達到92.3%,假陽性率為4.8%[9]。
在域名解析行為的上下文關系的檢測方面,Wang等[10]基于僵尸主機會在同一域中查詢大量域名且多數域名查詢失敗這一事實,結合Botnet檢測困難和隱蔽性高等特點,提出了DBod的檢測方案。文獻[11]通過分析DNS NXDomain流量,結合DGA域名使用周期短且具有相似查詢方式的特點,從而對DGA域名進行識別檢測。
在無特征提取的檢測方面,Yu等[12]提出一種LSTM+CNN模型的深度學習檢測方法,LSTM模型學習域名字符序列的同時不丟失長期依賴的信息,相比于基于字符特征搭建的隨機森林框架,該模型檢測效果突出。Anderson等[13]利用生成對抗網絡模型,結合自動編碼器生成對抗樣本,以期得到與惡意域名數據集類似的數據集,通過隨機森林分類器驗證了對抗樣本的有效性。
綜上,上述研究方法除文獻[13]外,均未考慮實時檢測新域名問題。本文所做的工作正是為其奠定基礎,通過生成偽DGA域名,擴充惡意域名數據集,滿足黑名單系統和檢測方法的實效性需求。與文獻[13]不同之處在于:1) 本文采用skip-gram模型對域名進行編碼,使得域名字符間的特征關系較好地反映在詞向量中;2) 域名生成模型采用改進的WGAN(Wasserstein GAN);3) 對實驗生成的域名采用多種常見的分類器進行分析評估,使結果更具有說服力。
本文針對域名數據增強問題,提出基于skip-gram數據編碼加WGAN數據對抗生成的深度學習模型框架。
深度學習的快速發展解決了許多復雜問題,卻無法直接識別字符串信息,因此本文在保留域名攜帶信息的前提下對其進行編碼是需要關注的難點之一。Zheng等[14]在處理網絡文本語料時,采用skip-gram模型學習文本間的語義相關性,對文本主題嵌入建模,該方法表現了較好的性能[14]。skip-gram作為自然語言處理領域的重要模型,對文本數據處理具有普適性。模型通過訓練將文本轉化為詞向量,其語義的空間距離代表文本間的相似度,故空間距離可以近似表示文本相似度。深度學習中度量空間距離的方法很多,其中,效果較好的有皮爾遜相關系數,文獻[15]基于皮爾遜相關系數研究評估網絡輿情。皮爾遜相關系數能夠從數學角度衡量文本的相似度。
自生成對抗網絡(Generative Adversarial Networks,GAN)問世以來,基于GAN及其變體模型的數據集擴充的研究越來越多[16]。許春冬等[17]基于CGAN網絡實現文本語音增強的目的,增強后的語音質量更高。蔣鵬飛等[18]采用改進的GAN網絡生成網絡事件序列樣本,實驗結果表明,生成數據有效且具有多樣性。GAN在訓練中存在諸多問題,而GAN的變體模型在文本序列生成的研究中表現出較好的效果。
本文的生成模型采用WGAN,在模型前后分別添加skip-gram編碼器和皮爾遜相關系數解碼器,如圖1所示。

圖1 域名生成模型
2.1.1skip-gram模型
作為深度學習的文本輸入,早期的詞表示方法采用one-hot,其缺點比較明顯,詞向量冗長且不能保留原文語義關系。skip-gram模型作為word embedding的一種無監督學習方法,普適于各種文本,且能將其最小單元的特征映射到向量中[19-20]。模型主要思想是給定中心詞預測上下文單詞。相比于CBOW模型,該方法訓練效率更高,速度更快,更精確地學習到域名特征,大大縮短后期WGAN學習域名的時間。
skip-gram在自然語言處理領域研究的數據單元一般是英文句子的單詞、中文句子的詞語。域名本身與英文單詞相似,所以本文處理的數據單元是最細粒度的字符。
模型分為輸入層、隱層和輸出層。其中輸入層采用one-hot編碼,隱層不使用激活函數,輸出層采用softmax函數。模型使用負采樣(Negative Sampling)技術。模型目標是最大化窗口內字符的概率,最小化未在窗口內字符的概率。
模型訓練的過程如圖2所示。陰影代表中心詞input-word,方框代表窗口。

圖2 skip-gram模型掃描域名示意圖
首先從左到右選取一個字符當作中心詞,設置窗口大小為2,輸出詞會從窗口中選取,形成(中心詞,輸出詞)訓練樣本,如(g,v)(g,k)。通過輸入神經網絡上述成對的樣本進行訓練。圖2中(g,v)樣本對出現兩次,如果g作為輸入數據,則輸出v的概率比輸出q的概率大,這只是針對單個單詞的訓練結果。模型訓練的數據集是所有域名通過掃描得到的所有樣本對。
模型損失函數如式(1)。
(1)
式中:x和y分別是字符x和y的向量表示,Z是上述訓練過程掃描得到的樣本數據集,Z′是負采樣數據集。
綜上所述,利用滑動窗口得到的樣本對,充分體現字符間的聯系。與此同時,窗口的大小設置成2,有效防止了字符距離過遠而產生錯誤聯系的問題。
2.1.2字符編碼
模型通過學習樣本對進行不斷訓練,隱層的權重不斷更新,最終會生成一個權重矩陣。隱層矩陣是[26×4]維,4維是設置的每個單詞映射的詞向量維度,26是字符總數,也就是字典的size。模型訓練結束后字典每個鍵都對應隱層的權重。
域名數據集每個字符都對應一個[1×4]的詞向量,字符之間關系均體現在每個詞向量中。所以將數據集中的每個字符對應映射即可,域名的編碼結果樣例如圖3所示。

圖3 編碼結果樣例
2.1.3字符解碼
由于本文域名字符級編碼采用的是skip-gram,解碼時會涉及空間距離,采用皮爾遜相關系數度量字符間的相似性。該方法相比于歐氏距離,在數據不規范的時候也能給出較好的結果[21]。具體計算公式如式(2)。
(2)
式中:s為生成數據向量,t為字符映射表中的向量。ρs,t是向量s、t的協方差與標準差的商。值在[-1,1],絕對值越接近1越相關,越接近0越不相關。
將生成對抗網絡輸出的數據分別計算與各個字符的皮爾遜相關系數,取最相關的數據解碼成字符,剔除其中不合理字符,然后組成域名。
2.2.1WGAN
在GAN模型中,生成器盡可能準確學習原始數據分布并生成類似數據,判別器作為一個二分類器盡可能區分真實數據和生成數據,二者在訓練中不斷提高自身的能力,最終達到納什平衡,這正是生成對抗網絡最大的特點。然而,在實際訓練過程中,GAN出現訓練不穩定、梯度消失等問題。文獻[22]對GAN出現的問題給出了理論的解釋,即模型用于衡量數據相似性的損失函數Jensen-Shannon散度會出現常數,此時無法繼續作出調整。WGAN則優化了損失函數,用Earth-Mover距離替換Jensen-Shannon散度以衡量真假數據間的差距,同時將算法做了部分調整,優化了樸素GAN訓練不穩定、梯度消失等問題[23]。
本文使用WGAN模型將目標函數描述為式(3)。
minGmaxDV(D,G)=
Ex~pdata(x)[D(x)]+Ez~pz(z)[1-D(G(z))]
(3)
式(3)可以分成兩個函數:最大化函數和最小化函數,分別如式(4)-式(5)。
maxDV(D,G)=
Ex~pdata(x)[D(x)]+Ez~pz(z)[1-D(G(z))]
(4)
式(4)是最大化函數。在訓練過程中,對于判別器D,輸入真實的域名,D(x)的值越大越好。輸入生成的域名,D(x)的值越小越好,前面加負號則變大,兩個公式都變大,所以有maxDV(D,G)。
minGV(D,G)=Ez~pz(z)[1-D(G(z))]
(5)
式(5)是最小化函數。對于生成器G,生成的域名輸入到判別器,判別器的輸出越大越好,判別器盡可能認為數據是真實的。前面加個負號則越來越小,所以有minGV(D,G)。
2.2.2生成模型參數
經過反復訓練調整,得到最終的WGAN網絡模型:
生成網絡:由輸入層、2層隱藏層和輸出層組成。輸入數據符合高斯分布的噪聲,激活函數采用ReLU函數。隱藏層的節點分別是200和150。輸出層節點設置為12維,采用tanh激活函數。采用更能體現數據分布差異的Earth-Mover距離代替使用GAN模型的目標函數,推導之后體現在代碼中是去掉log,即式(5)。
判別網絡:由輸入層、2層隱藏層和輸出層組成。其輸入數據一部分來自生成器生成的數據,一部分來自數據集中的真實數據,數據通過節點分別是200和150的隱藏層進行訓練。輸出層不采用sigmoid函數,真實數據和生成數據分別計算。目標函數為式(4)。
由于Adam算法會引起訓練不穩定等問題,故本文采用RMSProp算法作為優化器。訓練過程中,每更新5次判別網絡,更新1次生成網絡。學習率設為0.000 2。此外,權值裁減至[-0.01,0.01]。
本文使用的實驗平臺及配置信息如表1所示。

表1 實驗平臺及配置
Conficker.C惡意域名數據集和Alexa良性域名數據集是全球公認并使用較多的數據集。Alexa會根據各個網站的鏈接數和用戶訪問量定期更新域名,越靠前的網站,相應的知名度也會越高,作為良性域名數據集更具有說服力。本文實驗數據集選取近50萬Conficker.C惡意域名,同時選取最新Alexa排名前100萬的良性域名。前期skip-gram模型編碼只使用Conficker.C惡意域名訓練,后期分析生成數據有效性的過程中,使用生成惡意數據、Conficker.C數據和Alexa數據。
DGA算法主要針對的是二級域名,因此本文研究的主體是二級域名。例如xinlang.com中xinlang部分。實驗前需要對數據集進行簡單的處理,基于python語言,獲取二級域名。
本文目的為運用skip-gram與WGAN模型完成偽DGA域名的生成,達到對惡意域名級的擴充。因此實驗的核心任務是域名的生成以及對生成域名的有效性、合理性驗證。實驗步驟如下:
1) 域名編碼。skip-gram訓練Conficker.C數據集,將字符映射成對應的詞向量,然后完成對域名數據集的編碼工作。
2) 域名的生成。設計、訓練WGAN讀取步驟1)結果作為輸入數據,每訓練5次判別器,訓練1次生成器。每迭代500次便輸出一次數據進行解碼,解碼的域名存儲在文本中。
3) 生成數據的有效性分析。針對生成惡意域名的有效性判定尤為重要,為驗證實驗結果的有效性,本文采用特征選擇及機器學習相結合的方法進行驗證:
(1) 特征選擇:選用域名總長度、大小寫字母及數字的數量、連詞號的數量、n-gram的頻率(n=2,3,4)、元音字母的頻率、輔音字母的頻率特征。
(2) 機器學習:選取隨機樹、隨機森林和J48決策樹三種分類算法。
4) 比對數據集劃分。以下是三種數據集分類的描述。
(1) 首先用Conficker.C惡意域名正樣本和Alexa的良性域名負樣本通過上述步驟處理后用Weka平臺進行分類,其結果作為后面分類的標準。
(2) 用WGAN模型生成的惡意域名正樣本和Alexa的良性域名負樣本,同樣經過上述數據處理部分,選擇相同的數據特征進行分類,其結果和(1)進行比較,從而判斷生成樣本的有效性。
(3) Conficker.C惡意域名、生成惡意域名正樣本和Alexa的良性域名負樣本進行混淆分類,分類結果與(1)和(2)比較。
為了直觀分析編碼結果,本文運用PCA技術,將字符詞向量維度降至2維,其空間距離代表字符間的相似度。如圖4所示,字符按相似程度分別聚簇,其中字符‘q’、‘o’與右上角字符比左下角字符更聚集,相似度更高。相較于向量正交的one-hot編碼(26維),skip-gram編碼(4維)的詞向量維度低,降低計算復雜度,提升速度。

圖4 字符可視化映射
如圖5所示,由于采用改進的WGAN模型,生成的惡意域名并沒有出現字符大量重復的情況,從域名長度、字符間轉換等表面特征看,生成的惡意域名與真實惡意域名相似度較高。

圖5 真實惡意域名與生成惡意域名示例
圖6是從一元字符頻率的角度來分析二者的區別,圖中圓圈代表真實樣本,星星代表生成樣本。由圖可知,真實樣本的各個字符的頻率在0.04范圍內較小的波動。生成樣本較真實樣本存在波動,但其上下波動的幅度不大。故生成樣本與真實樣本具備一定的相似度。

圖6 真實樣本和生成樣本的一元字符頻率折線圖
為驗證生成域名的有效性,本文選取機器學習中的J48決策樹、隨機森林、隨機樹用于實驗的對比分析算法。隨機樹通過n個特征的信息增益的最大節點迭代構造樹和分類。隨機森林是通過決策樹的投票情況來分類,決策樹是由隨機數據集和特征集構成。J48決策樹根據分治策略,逐個加入特征進行分類。表2、表4、表6、表8、表10展示的是樣本通過不同分類器的正確率、錯誤率、精確率、F-Measure、ROC面積。表3、表5、表7、表9、表11展示的是分類正確錯誤數量以及模型的構建時間。

表2 Conficker.C正樣本和Alexa負樣本

表3 樣本分類結果及模型構建時間

表4 生成的正樣本和Alexa樣本(1 ∶1)

表5 樣本分類的結果及模型構建時間

表6 生成的正樣本和Alexa樣本(1 ∶2)

表7 樣本分類的結果及模型構建時間

表8 混淆樣本(1 ∶1)和Alexa分類結果

表9 樣本分類的結果及模型構建時間

表10 混淆樣本(2 ∶1)和Alexa分類結果

表11 樣本分類的結果及模型構建時間
表2、表3是真實惡意域名與真實良性域名的分類結果。表中所有分類器的正確率都達到了99%以上。隨機森林的正確率最高,它的構建模型時間也最長。表2的結果為下面各數據集的分類提供基準,同時可以表明特征選擇的規則是有效的。
表4、表5是生成的惡意域名和良性域名的分類結果,分類器和提取的特征同表2、表3。從表中可以看出,三個分類器的正確率都比較高,尤其是隨機樹和隨機森林達到了98%以上。而表6、表7在上述基礎上,樣本總數減少且比例由原來1 ∶1變成1 ∶2,仍呈現出較好的分類結果。說明在選取相同特征的前提下,生成的惡意域名可以充當真實惡意域名。
表8、表9是真實惡意域名、生成惡意域名作為正樣本和Alexa域名作為負樣本進行分類,結果顯示隨機樹、隨機森林都達到98%以上,J48表現的稍微遜色一些,但是也達到96%。表10、表11將混淆樣本中生成惡意域名和真實域名的比例由1 ∶1變成2 ∶1,同時樣本總數增加且比例由1 ∶1變成2 ∶1,分類正確率依舊較高。說明生成的惡意域名能夠較好的隱藏在真實惡意域名中不被區分出來。生成的惡意域名可以作為真實惡意域名進行機器學習的檢測和訓練。
綜上三組對比實驗,以第一組為基準,后兩組將生成的惡意域名分別與良性域名、混淆域名作分類進行橫向對比,同時每組實驗中分別添加樣本數及比例不同的分類實驗進行縱向對比,結果均表現出較高的分類正確率,說明了生成惡意域名的有效性。
惡意域名識別問題一直是網絡安全領域的重要研究點。本文提出skip-gram和WGAN的結合模型,能夠生成和預測DGA域名,并通過實驗驗證此方法的合理性。擴充后的數據集不僅可以豐富黑名單系統內的域名,也可以作為域名檢測算法的訓練樣本。下一步研究工作將繼續放在合適的編碼和解碼上,同時研究如何優化生成對抗網絡模型以達到更好的效果。