姜 天,匡立偉
(1.武漢郵電科學(xué)研究院,湖北 武漢 430073;2.烽火通信科技股份有限公司,湖北 武漢 430073)
僵尸網(wǎng)絡(luò)(botnet)通常由大量被感染惡意代碼的主機(jī)(bot)、命令和控制服務(wù)器(C&C server)以及主控端(Botmaster)構(gòu)成。攻擊者使用主控端向C&C server發(fā)送操作指令,服務(wù)器再將命令下達(dá)到各個被控制主機(jī),進(jìn)而實現(xiàn)對目標(biāo)終端的分布式拒絕服務(wù)(Distributed Denial of Service,DDOS)、垃圾郵件分發(fā)以及惡意軟件下載等網(wǎng)絡(luò)攻擊[1]。為了防止C&C服務(wù)器的域名被黑名單攔截,避免出現(xiàn)主機(jī)域名無法解析的情況,攻擊者會使用一種域名變換技術(shù)(Domain-Flux)來達(dá)到高頻率映射C&C服務(wù)器域名到IP地址的目的[2],域名生成算法(DGA)則是該技術(shù)的具體實現(xiàn)。首先DGA會定期生成大量的隨機(jī)域名,接著C&Cserver選擇其中指定的域名進(jìn)行注冊,注冊完成后被控制主機(jī)能夠解析服務(wù)器的地址。
使用DGA生成惡意域名,一定程度上增強(qiáng)了僵尸網(wǎng)絡(luò)的隱蔽性和靈活性。針對字符級別的DGA域名檢測,文中提出的方法能夠?qū)GA家族進(jìn)行識別和分類,并且能夠有效提升發(fā)現(xiàn)和追蹤僵尸網(wǎng)絡(luò)的能力。
對于字符級別的惡意域名,目前主要分為基于統(tǒng)計特征的機(jī)器學(xué)習(xí)和基于深度學(xué)習(xí)模型兩種檢測方式[3]。
由于正常域名和惡意域名之間的差異主要體現(xiàn)在主機(jī)名上,因此通過人工提取字符的統(tǒng)計特征,然后使用相應(yīng)的機(jī)器學(xué)習(xí)算法即可完成DGA檢測任務(wù)。文獻(xiàn)[4]提取了域名字符的統(tǒng)計特征和n-gram特征,并使用3種機(jī)器學(xué)習(xí)模型來評估域名特征識別性能。實驗結(jié)果表明,使用特征組合的n-gram(n=1,2,3)模型所得的精確率和召回率較高,并且多層感知器(MLP)的DGA域名檢測準(zhǔn)確率高于其他兩種算法。文獻(xiàn)[5]提出一種基于大數(shù)據(jù)平臺的DGA檢測系統(tǒng),其核心由分類分析和聚類分析模塊構(gòu)成。該系統(tǒng)使用預(yù)訓(xùn)練好的隨機(jī)森林模型來分離正常域名和可疑DGA域名,使用X-means算法對DGA域名進(jìn)行無監(jiān)督式聚類檢測。文獻(xiàn)[6]使用隱馬爾可夫模型中的Baum-Welch算法和Viterbi算法對未知域名進(jìn)行分類,實驗結(jié)果顯示,該模型可以實現(xiàn)惡意域名的快速高效檢測。
隨著自然語言處理和計算機(jī)視覺等人工智能領(lǐng)域的發(fā)展,一些深度學(xué)習(xí)模型也逐漸被運(yùn)用在惡意域名檢測任務(wù)中[7]。文獻(xiàn)[8]提出一種基于LSTM的惡意域名分類與檢測模型。通過二分類和多分類實驗結(jié)果的統(tǒng)計數(shù)據(jù)可以看到,該模型能夠較為準(zhǔn)確地識別DGA域名。文獻(xiàn)[9]提出DBD(Deep Bot Detect)檢測模型,該模型由文本預(yù)處理、最優(yōu)特征提取和分類模塊構(gòu)成。DBD模型的訓(xùn)練參數(shù)較少、訓(xùn)練速度快且發(fā)生過擬合的概率較小。文獻(xiàn)[10]使用word-hashing技術(shù),首先將域名轉(zhuǎn)換成高維稀疏向量,然后通過深度神經(jīng)網(wǎng)絡(luò)(DNN)的隱藏層來學(xué)習(xí)bigram特征,最后使用輸出層輸出分類結(jié)果。模型整體的泛化能力強(qiáng),且準(zhǔn)確率比使用自然語言特征分類算法得到的結(jié)果高。
fastText是Facebook AI Research在2016年開源的一個被用于對詞向量和句子分類進(jìn)行高效學(xué)習(xí)訓(xùn)練的工具庫。該工具可以在監(jiān)督和非監(jiān)督模式下訓(xùn)練單詞和句子的向量表示。訓(xùn)練完成后生成的詞向量,可以進(jìn)一步用在其他模型的初始化和特征選擇等任務(wù)中[11]。
fastText作為一種快速文本分類工具,其最大的特點是速度快。相比較其他文本分類模型,諸如邏輯回歸(Logistic Regression)和神經(jīng)網(wǎng)絡(luò)(Neural Network)等,fastText在保留了較高分類準(zhǔn)確度的情況下,還極大地縮短了訓(xùn)練和測試的時間。除此之外,使用fastText也不需要提供預(yù)訓(xùn)練好的詞向量。
一個簡單有效的文本分類框架通常使用詞袋模型(Bag of Words,BoW)來表示獨(dú)立的句子,同時搭配一個訓(xùn)練好的線性分類器(比如邏輯回歸和支持向量機(jī)等)。但由于線性分類器不能在特征和類別信息之間共享參數(shù),這樣會限制模型整體的泛化能力,因此需要將分類器分解為低階矩陣[12]。
fastText將上述思路與神經(jīng)網(wǎng)絡(luò)的分層思想相結(jié)合,構(gòu)成了一種快速文本分類器的設(shè)計方案。圖1展示了fastText的基礎(chǔ)架構(gòu)。
圖1 fastText基礎(chǔ)架構(gòu)
從圖1中可以看出,fastText模型主要由輸入層、隱藏層和輸出層構(gòu)成。首先通過輸入層傳入文本對應(yīng)的n-gram向量,接著在隱藏層進(jìn)行詞向量的疊加平均處理,最后在輸出層采用分層softmax預(yù)測結(jié)果,輸出文檔的判別類別[13]。因此,fastText的目標(biāo)是將極大似然轉(zhuǎn)化為對數(shù)似然,同時使其最小化。式(1)展示了目標(biāo)函數(shù)的計算方法。
其中,Yk表示第k份樣本對應(yīng)的標(biāo)簽值,f表示使用softmax函數(shù)預(yù)測類別,B是一個權(quán)重矩陣,Xk代表文本特征向量。式(2)展示了Xk的計算方法。
func表示疊加平均函數(shù),用來計算文本的特征向量。A是一個權(quán)重矩陣,vN(N=1,2,…)代表文本中的n-gram詞向量。
當(dāng)判別類別過多時,使用標(biāo)準(zhǔn)softmax計算概率值會非常耗時。因此,fastText采用基于哈夫曼樹(Huffman Tree)的分層softmax(Hierarchical softmax),在計算目標(biāo)類別的概率值P(y=j)時,只關(guān)心一條路徑上的所有節(jié)點,而無需考慮其他節(jié)點的狀態(tài)[14]。式(3)是計算從根節(jié)點到達(dá)y2節(jié)點(假設(shè)途經(jīng)一個非葉子節(jié)點n(y2,1))概率值的過程。
?代表sigmoid函數(shù),θn(y,m)表示第m個節(jié)點的參數(shù),X是softmax層的輸入矩陣。以此類推,當(dāng)最終輸出類別為w時,對應(yīng)的概率值可以用式(4)來表示。
其中,L(yw)用來計算節(jié)點w距離根節(jié)點的深度,是一種自定義的函數(shù)。當(dāng)?shù)趌+1個節(jié)點是n(yw,l)的左孩子時,check函數(shù)的返回值為1;當(dāng)?shù)趌+1個節(jié)點是n(yw,l)的右孩子時,check函數(shù)的返回值為-1。
根據(jù)劃分粒度的不同,提取到的特征可以分為詞粒度的n-gram特征和字符粒度的n-gram特征[15]。fastText同時支持兩種切分模式,因此可以根據(jù)實際情況來設(shè)置相關(guān)的參數(shù)。文中提出的方法采用詞粒度的切分方式,將分割開的域名字符當(dāng)做獨(dú)立的單詞,整個域名字符串當(dāng)做一個句子,從而分析域名字符排列順序的合理性。
假設(shè)提取域名“baidu”的bigram特征,那么根據(jù)滑動窗口大小(n=2)進(jìn)行劃分,可以得到[“”,“baidu”]這個序列集合,其中“<”和“>”分別是字符前綴和后綴標(biāo)識符。
fastText使用n-gram來提取文本特征,一方面可以使模型學(xué)習(xí)到局部單詞順序的部分信息,另一方面可以從字符級別n-gram中構(gòu)造單詞的詞向量。這樣即使有不在語料庫中的詞語出現(xiàn),也可以利用預(yù)訓(xùn)練好的字符向量來組合表示[16]。
實驗機(jī)器安裝的操作系統(tǒng)為win10(64位),Python版本為3.5.4,sklearn版本為0.21.2,Keras的版本為2.3.0且以TensorFlow作為后端運(yùn)行,tensorflowgpu的版本號為1.14.0。
實驗過程中模擬fastText的標(biāo)準(zhǔn)三層架構(gòu),依次使用Embedding(嵌入層)、GlobalAveragePooling1D(全局平均池化層)和Dense(全連接層)來拼接成最終的分類模型。使用定義好的評價指標(biāo)來量化各參考模型的分類效果,在分析模型性能的同時討論影響最終結(jié)果的參數(shù)因素和參數(shù)優(yōu)化規(guī)則。
實驗數(shù)據(jù)主要由兩部分組成,一部分是從Alexa網(wǎng)站選取了排名前100萬的域名,并將這些數(shù)據(jù)標(biāo)記為正常樣本(whitesample);另一部分是從安全實驗室Netlab官網(wǎng)上下載的DGA種子文件,文件大小約為84 MB,其中包含了44種不同的惡意域名家族,共計1 256 160個DGA域名。
實驗過程中采用了字符級n-gram切割方式,首先將組成域名的各個獨(dú)立字符轉(zhuǎn)換為ASCII碼序號的表示形式,然后使用散列表(字典)存儲n-gram特征的鍵值對,并且將n-gram特征值添加到每一個字符序列集合的尾部。由于嵌入層需要輸入向量的維度保持一致,因此還需要使用pad_sequences函數(shù)來截取或填充數(shù)據(jù)。實驗過程中保留了域名原來的“{二級域名.頂級域名}”結(jié)構(gòu)。實驗數(shù)據(jù)按照6∶4的比例劃分為訓(xùn)練集和測試集。
實驗過程中除了使用fastText對惡意域名進(jìn)行分類,還另選了兩種深度學(xué)習(xí)模型(LSTM和CNNLSTM)以及一種機(jī)器學(xué)習(xí)模型(XGBoost)來對比測試。圖2展示了提出的基于fastText的域名分類模型結(jié)構(gòu)。
圖2 基于fastText的域名分類模型結(jié)構(gòu)圖
從圖2可知,攜帶n-gram特征的域名字符序列被送入模型后,首先經(jīng)過詞嵌入層轉(zhuǎn)化為多維向量。接著使用一維全局平均池化層作為模型的隱藏層,用來對上一層輸出的向量進(jìn)行特征映射;最后的全連接層用來對特征映射進(jìn)行softmax分類,并輸出分類結(jié)果。
在評估模型的過程中,用到了混淆矩陣中的3個一級指標(biāo),分別是TP(True Positive)、FN(False Negative)和FP(False Positive)。下面分別介紹各個指標(biāo)代表的含義以及相關(guān)二級評價指標(biāo)的計算方法。
TP代表真實值為positive,并且模型將樣本劃分到positive類的個數(shù);FN代表真實值為positive,而模型認(rèn)為是negative的數(shù)量;FP代表真實值為negative,而模型認(rèn)為是positive的樣本數(shù)量。由此可以使用式(5)得到精確率(Precision)的計算結(jié)果。精確率代表在模型預(yù)測為positive的所有結(jié)果中,模型預(yù)測正確的比重。
召回率表示在真實值為positive的所有結(jié)果中,模型預(yù)測正確的比重。式(6)是召回率(Recall)的計算方法。
F1值綜合了精確率和召回率的結(jié)果。式(7)是F1值的計算方法。
除此以外,后續(xù)實驗中還增加了兩個評價指標(biāo)。使用Accuracy(準(zhǔn)確率)來表示被分對的樣本比例,使用Loss(損失)來記錄模型最終的損失值。
表1匯總了4種模型的分類情況,其中精確率、召回率和F1值均是指在45種類別上的平均表現(xiàn)。
表1 模型分類結(jié)果表
從表1中可以明顯看到,使用提出的fastText模型獲得的3個二級指標(biāo)對應(yīng)的值均高于其他模型。其中,fastText的精確率比其他兩種深度學(xué)習(xí)模型的值高約4%,比機(jī)器學(xué)習(xí)模型的值高約13%。fastText的召回率和F1值也較其他模型有很大提升,且模型最終的損失值也維持在0.1以下。
實驗過程中還發(fā)現(xiàn),分層softmax在效果上略差于完全softmax??紤]到分層softmax是完全softmax的一個近似,同時分層softmax可以在大數(shù)據(jù)集上高效地建立模型,但通常會以損失精度的幾個百分點為代價,因此,fastText使用分層softmax得到的精確率略低于97.860%。
綜上所述,fastText之所以能夠具有較高的分類性能,主要得益于模型使用了字符的n-gram特征,以及在隱藏層對多個特征映射作spatial average(空間平均)。而其他模型的隱藏層通常包含大量參數(shù),這樣一方面影響了整個模型的泛化能力,另一方面增加了模型的訓(xùn)練開銷。fastText不僅可以更深層次地學(xué)習(xí)域名字符的分布規(guī)律,同時降低了模型訓(xùn)練的難度。
由于在實驗過程中涉及到超參數(shù)的設(shè)置,而這些參數(shù)的取值也在一定程度上決定了模型最終的分類性能,因此下面討論部分參數(shù)對分類結(jié)果的影響,以及參數(shù)的優(yōu)化規(guī)則。
3.7.1 詞向量維度
Embedding的主要功能是數(shù)據(jù)降維和稠密表示,實驗過程中使用多維向量來轉(zhuǎn)換字符序列和n-gram特征。實驗設(shè)置了幾個依次遞增的詞向量維度作為自變量,圖3展示了詞向量維度分別為50、100、150、200、250、300時的模型準(zhǔn)確率。
圖3 向量維度與準(zhǔn)確率關(guān)系圖
準(zhǔn)確率(Accuracy)反映了全體預(yù)測正確占全部樣本的比例,是一個綜合評價指標(biāo)。圖3統(tǒng)計了不同詞向量維度下的模型準(zhǔn)確率,并且利用四次函數(shù)擬合出準(zhǔn)確率的變化趨勢。從圖3中可以直觀看出,在向量維度等差增長的同時,準(zhǔn)確率也在隨著自變量由快漸慢地增長,當(dāng)維度數(shù)達(dá)到200時基本趨于平穩(wěn)。
由此可知,當(dāng)詞向量維度過低時通常表示能力不夠,模型的準(zhǔn)確率也維持在一個相對較低的水平。當(dāng)詞向量維度過高時,雖然模型的準(zhǔn)確率相對較高,但在訓(xùn)練過程中容易出現(xiàn)過擬合現(xiàn)象,同時伴隨Diminishing Return(收益遞減)[17]的產(chǎn)生。
3.7.2 批處理大小
批梯度下降法(Mini-batches Learning)能最準(zhǔn)確地朝著極值方向更新參數(shù),同時每次迭代選取批處理大小(batch_size)的樣本進(jìn)行更新。圖4展示了批處理個數(shù)分別為64、128、192、256時的模型損失值。
圖4 批處理大小與損失值關(guān)系圖
同樣,使用四次函數(shù)來繪制損失值的變化趨勢,可以看出,損失值隨著自變量的增加而增加,且變化增幅趨于線性。經(jīng)初步分析可知,當(dāng)batch_size取值較小時,其每次迭代下降的方向并不是最準(zhǔn)確的,Loss是在小范圍內(nèi)震蕩下降的,這樣有利于跳出局部最小值,從而尋找下一個Loss更低的區(qū)域[18]。而當(dāng)batch_size取值較大時,雖然減少了訓(xùn)練時間以及加速了網(wǎng)絡(luò)收斂,但是Loss值會很大概率落入局部最小區(qū)域,最終影響模型的分類性能。
文中提出一種基于fastText的惡意域名分類方法。通過提取域名字符以及n-gram特征來生成詞向量,使用隱藏層對向量進(jìn)行全局平均池化,并將softmax與全連接層相結(jié)合來對惡意域名進(jìn)行分類。實驗結(jié)果顯示,fastText模型的各項性能指標(biāo)優(yōu)于其他方法,同時模型復(fù)雜度和訓(xùn)練難度也相對較小。實驗部分討論了影響模型性能的參數(shù)因素,比較了不同取值條件下模型的泛化能力。
下一步會研究如何進(jìn)一步提升模型整體的分類性能,同時考慮如何將fastText更廣泛地應(yīng)用在網(wǎng)絡(luò)安全領(lǐng)域中。