劉伯成,王浩宇,李向軍,*,肖聚鑫,肖楚霽,孔 珂
(南昌大學(xué)a.軟件學(xué)院,江西 南昌 330047;b.計(jì)算機(jī)科學(xué)與技術(shù)系,江西 南昌 330031)
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,網(wǎng)絡(luò)已經(jīng)服務(wù)于在各個(gè)行業(yè),域名的數(shù)量更是與日俱增,惡意域名的檢測(cè)變得愈來(lái)愈困難且更加重要。域名生成算法(Domain Generation Algorithm,DGA)常常被惡意軟件利用,以提高其與C&C服務(wù)器的通信可靠度,從而避免常規(guī)的黑名單檢測(cè)。由此可見(jiàn),DGA域名是惡意軟件的重要特征之一,通過(guò)對(duì)這一特征的有效分析、檢測(cè),及時(shí)準(zhǔn)確地確定惡意軟件也成為保證C&C服務(wù)器正常通信的重要環(huán)節(jié)。通信安全檢測(cè)能力的提升對(duì)于構(gòu)建穩(wěn)定、安全的網(wǎng)絡(luò)空間也極具現(xiàn)實(shí)意義。
DGA檢測(cè)初期,安全工作人員通常采用的方法是基于黑名單過(guò)濾[1],機(jī)器學(xué)習(xí)、特征統(tǒng)計(jì)[2-8]等方法。這些方法往往存在一定的弊端,黑名單過(guò)濾方法雖準(zhǔn)確率較高,但需要人工對(duì)黑名單之外的DGA域名補(bǔ)充,難以解決DGA域名飛速增長(zhǎng)帶來(lái)的問(wèn)題;機(jī)器學(xué)習(xí)檢測(cè)需通過(guò)技術(shù)人員實(shí)驗(yàn)構(gòu)造特征值,采用相應(yīng)的機(jī)器學(xué)習(xí)方法設(shè)計(jì)檢測(cè)算法,實(shí)現(xiàn)對(duì)未知DGA域名的檢測(cè),但存在人工提取特征工程量大且無(wú)法準(zhǔn)確提取所需全部特征、檢測(cè)速度慢、檢測(cè)率低等問(wèn)題。針對(duì)以上問(wèn)題,研究人員采用深度學(xué)習(xí)[9]的方法對(duì)DGA域名檢測(cè),深度學(xué)習(xí)具有訓(xùn)練數(shù)據(jù)量大、無(wú)需人工提取特征,在圖像識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理等多種應(yīng)用場(chǎng)景都有顯著的成效。
基于深度學(xué)習(xí)的DGA域名檢測(cè)成為一種新的主流方法[10-15],研究者大多選擇循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)用于DGA域名檢測(cè),例如長(zhǎng)短期記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)、雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(Bi-directional Long Short-Term Memory,BiLSTM)等,這些方法可將域名序列化分類(lèi)。對(duì)于LSTM而言,隨著網(wǎng)絡(luò)層數(shù)的增加,檢測(cè)準(zhǔn)確率隨之增高,但訓(xùn)練與檢測(cè)速度會(huì)大幅降低。獨(dú)立循環(huán)神經(jīng)網(wǎng)絡(luò)[16](Independently Recurrent Neural Network,IndRNN),在能夠解決傳統(tǒng) RNN 時(shí)間步長(zhǎng)過(guò)長(zhǎng)時(shí)的梯度消失和梯度爆炸問(wèn)題基礎(chǔ)上學(xué)習(xí)長(zhǎng)期依賴(lài)關(guān)系[17],因其獨(dú)立神經(jīng)元的結(jié)構(gòu),當(dāng)堆疊多層IndRNNs形成深度IndRNN (Deep Independently Recurrent Neural Network,Deep-IndRNN)時(shí)也可進(jìn)行端到端的訓(xùn)練?;诖?,本文提出一種基于Deep-IndRNN的DGA域名檢測(cè)方法。
本文主要貢獻(xiàn):將IndRNN用于DGA域名檢測(cè),充分利用Deep-IndRNN的特點(diǎn)并結(jié)合單步處理拼接后單向量的方式,提出一種基于Deep-IndRNN的DGA域名檢測(cè)方法。方法包括域名分析、域名向量化、上下文信息提取、分類(lèi)輸出等四個(gè)步驟。首先采用詞袋模型對(duì)域名向量化,然后通過(guò)Deep-IndRNN提取域名字符上下文信息特征,同時(shí)將Deep-IndRNN多序列輸入拼接為單向量輸入,以單步處理代替循環(huán)處理,最后,使用Sigmoid分類(lèi)函數(shù)對(duì)域名分類(lèi)檢測(cè)。平衡數(shù)據(jù)集和非平衡數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明,本文方法在保證DGA域名檢測(cè)準(zhǔn)確率和精確度較高的前提下,訓(xùn)練和檢測(cè)速度有顯著提高。
DGA惡意域名的檢測(cè)問(wèn)題已經(jīng)上升到國(guó)家安全層面,國(guó)內(nèi)外研究人員從最初的黑名單篩選,分析DNS查詢(xún)數(shù)據(jù),機(jī)器學(xué)習(xí)特征分類(lèi)到現(xiàn)如今的基于深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型預(yù)測(cè)等,提出了眾多的檢測(cè)方法。其中Sato等[1]設(shè)計(jì)了一種使用DNS流量數(shù)據(jù)和黑名單檢測(cè)未知惡意域名方法。Lee等[2]提出DNS失敗圖概念,檢查訪(fǎng)問(wèn)已知惡意域名的客戶(hù)端的DNS查詢(xún)信息,通過(guò)與已知惡意域名的順序關(guān)系和統(tǒng)計(jì)共性找到未知的惡意域名。Bilge等[3]基于決策樹(shù)算法,通過(guò)提取DNS流量中的時(shí)間屬性、request及response信息、TTL信息、DNS域名信息等15個(gè)特征判別僵尸網(wǎng)絡(luò)[18]。Grill等[4]提出一種統(tǒng)計(jì)算法,用收集來(lái)的NetFlow/IPFIX統(tǒng)計(jì)數(shù)據(jù)來(lái)檢測(cè)DGA域名。Antonakakis等[5]發(fā)現(xiàn)具有相同的DGA算法的域名產(chǎn)生類(lèi)似的NXDomain,提出一種基于NXDomain特性聚類(lèi)和分類(lèi)的檢測(cè)算法,聚類(lèi)算法根據(jù)域名構(gòu)成和相似性對(duì)域名聚類(lèi),分類(lèi)算法利用生成的簇給已知DGA域名分類(lèi)檢測(cè),對(duì)于未被分到已知簇的域名,可以推測(cè)為一種新型的DGA惡意域名。相比于整個(gè)DNS查詢(xún)流量,NXDomain流量要小很多,因此輕量級(jí)的NXDomain特性檢測(cè)算法的檢測(cè)速度更快,但是該算法在實(shí)際應(yīng)用時(shí)需要一個(gè)較大時(shí)間窗口的統(tǒng)計(jì)信息,無(wú)法做到實(shí)時(shí)檢測(cè)。
為方便記憶,通常選擇英文單詞作為合法域名的主體,如“youtobe.com”,“weiko.com”等,而DGA域名為了避免與合法域名沖突,域名字符明顯帶有隨機(jī)性。利用DGA域名與合法域名之間的語(yǔ)言特征來(lái)分類(lèi)域名成為檢測(cè)DGA域名的新研究方向[15]。Yadav等[6]分析了域名中字母數(shù)據(jù)unigrams和bigrams分別的信息熵,通過(guò)將訓(xùn)練集分為DGA生成集和合法域名集,計(jì)算兩個(gè)集合中unigrams和bigrams的分布,再通過(guò)比較兩個(gè)集合的KL達(dá)到分類(lèi)效果。Tong等[7]利用n-gram出現(xiàn)的頻率、熵和分類(lèi)得到的馬氏距離等域名自身的語(yǔ)義統(tǒng)計(jì)測(cè)度對(duì)DGA域名進(jìn)行檢測(cè)。張維維等[8]提出一種輕量級(jí)檢測(cè)算法,通過(guò)提取域名字符蘊(yùn)含的詞素特征,在降低內(nèi)存開(kāi)銷(xiāo)的基礎(chǔ)上能夠快速準(zhǔn)確鎖定可疑域名。上述的研究均需要手工提取特征,對(duì)于不同類(lèi)型的DGA要提取不同特征,否則就會(huì)存在統(tǒng)計(jì)信息不顯著的問(wèn)題。特征工程是一項(xiàng)十分困難的工作,并且很難保證提取的特征是確切需要的,所以上述的檢測(cè)方法準(zhǔn)確率也是相對(duì)較低。
近幾年,隨著DGA生成算法的不斷改進(jìn),生成的惡意域名也不再是一串簡(jiǎn)單錯(cuò)亂的隨機(jī)字符,反而越來(lái)越“像”合法域名,而上述的檢測(cè)方法都是基于惡意域名和合法域名之間存在較明顯的語(yǔ)言特征差異,故無(wú)法有效檢測(cè)現(xiàn)階段惡意域名。深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué),自然語(yǔ)言處理等方面取得了顯著的效果,從自然語(yǔ)言角度展開(kāi)對(duì)DGA域名檢測(cè)成為熱門(mén)的檢測(cè)方法。Woodbridge等[11]利用詞嵌入技術(shù)將域名字符轉(zhuǎn)換為向量,然后再使用長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)LSTM對(duì)域名進(jìn)行分類(lèi)。LSTM可以很好的學(xué)習(xí)到字符間前后信息(要在一串字符完全輸入情況下),因此Woodbridge所提出方法無(wú)需人工提取特征,便可準(zhǔn)確的對(duì)DGA域名分類(lèi)。林思明等[12]提出一種基于BiLSTM的檢測(cè)方法,BiLSTM同時(shí)考慮域名的過(guò)去特征和未來(lái)特征,通過(guò)將兩個(gè)LSTM的正反向序列提取的上下文信息結(jié)合來(lái)分類(lèi)檢測(cè)DGA域名,進(jìn)一步提高分類(lèi)檢測(cè)準(zhǔn)確度。劉洋等[13]提出一種基于深度學(xué)習(xí)的快速DGA域名分類(lèi)算法,利用多層一維卷積網(wǎng)絡(luò)提取域名局部信息特征,再與LSTM提取到域名上下文信息特征融合,將LSTM多序列輸入轉(zhuǎn)化為單向量輸入,進(jìn)一步提高訓(xùn)練和檢測(cè)速度。
基于Deep-IndRNN的DGA域名檢測(cè)方法包括域名分析、域名向量化、上下文信息提取、分類(lèi)輸出等四個(gè)步驟。方法實(shí)現(xiàn)過(guò)程將Deep-IndRNN多序列輸入拼接為單向量輸入,以單步處理代替循環(huán)處理,并充分利用Deep-IndRNN能保留長(zhǎng)期記憶、有效解決梯度爆炸、多層IndRNNs可有效堆疊并與剩余連接性能較好等優(yōu)勢(shì),從而保證檢測(cè)準(zhǔn)確率較高的基礎(chǔ)上,提升訓(xùn)練、檢測(cè)速度。
完整的域名通常由兩個(gè)或者兩個(gè)以上的部分組成,各個(gè)部分以英文字符‘·’分隔開(kāi)。例如“www.csdn.net”、“www.taobao.com”中“net,com”是頂級(jí)域名,“csdn,taobao”是二級(jí)域名,以此類(lèi)推在其他域名中還會(huì)存在三級(jí)、四級(jí)域名。DGA域名主要是作為除頂級(jí)外的其他級(jí)別域名使用,所以將除頂級(jí)外其他級(jí)別域名作為本文方法的訓(xùn)練數(shù)據(jù)(如無(wú)特別說(shuō)明,后面所指域名均為除頂級(jí)外其他級(jí)別域名)。
將域名作為模型輸入前需將域名向量化,常見(jiàn)的向量化方法包括詞袋模型(Bag-of-Words,BoW)、獨(dú)熱(One-Hot)編碼、n元語(yǔ)法(n-gram)等多種編碼方式。n-gram在早期的自然語(yǔ)言處理中常見(jiàn),但在使用較大的n時(shí)會(huì)導(dǎo)致向量空間過(guò)大,無(wú)法使用的同時(shí)會(huì)造成數(shù)據(jù)稀疏等問(wèn)題。BoW[19]可以理解為一種直方圖統(tǒng)計(jì),只記錄了字符串中出現(xiàn)的字符,而忽略字符串中的語(yǔ)法和語(yǔ)序等要素,只是作為若干詞匯的集合。本文研究中通過(guò)統(tǒng)計(jì)數(shù)據(jù)集所有的字符生成字符字典,以鍵值對(duì)(字符:數(shù)字)形式存儲(chǔ),如表1所示:
使用字符字典將域名字符串轉(zhuǎn)換為L(zhǎng)長(zhǎng)的字符向量,L是數(shù)據(jù)集中最長(zhǎng)域名長(zhǎng)度,本文設(shè)置為59。對(duì)于向量長(zhǎng)度不足L的在向量前填充 0,以保證模型輸入形狀統(tǒng)一,字符向量化結(jié)果如表2所示:
合法域名和DGA域名都是由n個(gè)字符組成的字符串,也是自然語(yǔ)言的一種表現(xiàn)形式。形式雖然自由,但從合法域名和DGA域名在字符排列有序性上的差異可以看出其結(jié)構(gòu)上仍存在上下文關(guān)系,在大量數(shù)據(jù)的比對(duì)下能夠很準(zhǔn)確的發(fā)現(xiàn)兩者存在語(yǔ)言特征差異[20]。
將轉(zhuǎn)化后的字符向量輸入詞嵌入層(Embedding)映射輸出字符向量序列w1:L=w1,w2,w3,…,w4其中wL∈Rd,d為嵌入層維度,本文研究中設(shè)置d為128以保留足夠的上下文信息,便于后續(xù)提取信息特征。
表1 字符字典
表2 字符向量化結(jié)果
經(jīng)典的RNN在自然語(yǔ)言處理中能夠很好的做到保留上下文信息,但RNN在訓(xùn)練學(xué)習(xí)時(shí)隨著時(shí)間增加、輸入數(shù)據(jù)的增多,對(duì)已往信息感知能力下降,產(chǎn)生梯度消失或者梯度爆炸問(wèn)題[21]。IndRNN不僅可以解決經(jīng)典的RNN存在的上述問(wèn)題,同時(shí)使用非飽和激活函數(shù)ReLU,訓(xùn)練之后的性能表現(xiàn)良好[17]。
IndRNN中哈達(dá)瑪積(Hadamard)信息流處理具體計(jì)算公式如式(1)所示:
ht=σ(Wxt+u⊙ht-1+b)
(1)
其中xt∈RM和ht∈RN分別代表時(shí)間步長(zhǎng)為t時(shí)的輸入和隱藏狀態(tài);循環(huán)權(quán)重u是一個(gè)向量;⊙表示Hadamard乘積;σ為激活函數(shù)。在t時(shí)刻,每個(gè)神經(jīng)元只接受此刻的輸入以及將t-1時(shí)刻自身的狀態(tài)作為輸入。對(duì)于第n個(gè)神經(jīng)元,hn,t隱藏狀態(tài)計(jì)算公式如式(2)所示:
hn,t=σ(wnxt+unhn,t-1+bt)
(2)
其中wn和un分別是第n行的輸入權(quán)重和循環(huán)權(quán)重。處于同層的神經(jīng)元相對(duì)獨(dú)立,通過(guò)堆疊多層的IndRNNs來(lái)實(shí)現(xiàn)神經(jīng)元之間的連接,因其特殊的結(jié)構(gòu)使得每個(gè)神經(jīng)元僅在前一時(shí)間步從輸入和它自己的隱藏狀態(tài)中接收信息,這是一種每個(gè)神經(jīng)元相對(duì)獨(dú)立的信息處理時(shí)空模型。
對(duì)于每一層的梯度反向傳播,一個(gè)IndRNN的梯度可以獨(dú)立計(jì)算每個(gè)神經(jīng)元,因?yàn)樗鼈冎g沒(méi)有相互作用。在忽略第n個(gè)神經(jīng)元hn,t中偏置的情況下,假設(shè)其在時(shí)間步長(zhǎng)T最小的目標(biāo)是Jn,梯度反向傳播到時(shí)間步t為:
(3)
基礎(chǔ)的IndRNN結(jié)構(gòu)如圖1所示:
其中Weight和Recurrent+ReLU表示每一步處理輸入的循環(huán)過(guò)程,ReLU是激活函數(shù)。另外,在激活函數(shù)之前或之后也可采用批標(biāo)準(zhǔn)化BN。通過(guò)堆疊這種基礎(chǔ)結(jié)構(gòu),可以創(chuàng)建一個(gè)深層IndRNN網(wǎng)絡(luò),同一層中的神經(jīng)元彼此獨(dú)立,神經(jīng)元之間的相互依賴(lài)可以靠層間交互來(lái)完成。即下一層的神經(jīng)元會(huì)接受上一層所有神經(jīng)元的輸出作為輸入(相當(dāng)于全連接層)。隨著時(shí)間步的增加,提取到的信息在多層IndRNNs之間高效傳播,從而保留更長(zhǎng)時(shí)間的上下文信息,且輸入(Wxt+b)的處理在不同的時(shí)間步上是獨(dú)立的,可以擴(kuò)展到一個(gè)卷積的IndRNN,通過(guò)卷積運(yùn)算處理(W*xt,*為卷積運(yùn)算符),而不是使用全連接的權(quán)重(Wxt)來(lái)處理每個(gè)時(shí)間步驟的輸入。
由上述分析以及文獻(xiàn)[16]中實(shí)驗(yàn)結(jié)果可知,IndRNN解決了梯度隨時(shí)間推移而爆炸和消失的問(wèn)題,可以在不同的時(shí)間步長(zhǎng)上有效地傳播梯度,因此,Deep-IndRNN能夠提取到更長(zhǎng)時(shí)間的上下文信息。
hf,t=σ(WfXt+uf⊙hf,t-1+bf)
(4)
hs,t=σ(Wshf,t+us⊙hs,t-1+bs)
(5)
hd,t=σ(Wdhs,t+ud⊙hd,t-1+bd)
(6)
隨著時(shí)間步長(zhǎng)t的增加,Deep-IndRNN不斷將當(dāng)前輸入及上一時(shí)刻的自身狀態(tài)同時(shí)作為輸入,得到的信息在多層IndRNNs之間傳播保留,從而提取到豐富的上下文信息特征,以實(shí)現(xiàn)域名分類(lèi)。
基于Deep-IndRNN的DGA域名檢測(cè)方法是一種通過(guò)提取域名字符間特征來(lái)實(shí)現(xiàn)域名分類(lèi)的檢測(cè)方法。域名分類(lèi)過(guò)程如圖2所示:
由圖2可見(jiàn),基于Deep-IndRNN的DGA域名分類(lèi)主要步驟包括:
(1) 域名向量化:根據(jù)數(shù)據(jù)集中所有域名包含的字符生成字符字典,利用此字典將域名轉(zhuǎn)換為字符向量作為訓(xùn)練輸入,具體操作見(jiàn)2.2節(jié)。
(2) Embedding層:嵌入層,利用字符字典對(duì)字符向量編碼,映射成字符向量序列w1:L,生成式如式(7)所示:
w1:L=w1,w2,w3…,wL
(7)
L是輸入向量長(zhǎng)度,本文為59;w1,w2,w3…,wL是域名中每個(gè)字符映射的字符向量,其中wL∈Rd,d為嵌入層維度,本文設(shè)置為128;嵌入層輸出w1:L是根據(jù)字符字典生成大小為(L,d)的字符向量序列。同時(shí),本層在學(xué)習(xí)訓(xùn)練時(shí)可設(shè)置屏蔽字符向量因長(zhǎng)度不足而填補(bǔ)的0值。
(3) Flatten層:將嵌入層映射得到的w1:L拼接成單向量X,拼接過(guò)程如式(8)所示:
X=⊕(w1:L)
(8)
⊕是拼接操作符,將w1:L轉(zhuǎn)換為大小(1,L*d)的單向量,使得Deep-IndRNN在提取上下文信息時(shí)采用單步處理,提高訓(xùn)練、檢測(cè)速率。
(4) IndRNNs層:多層IndRNN堆積而成的Deep-IndRNN,本文方法堆積3層IndRNN,隱層大小均為128,默認(rèn)使用ReLU激活函數(shù)。IndRNN的輸入是三維張量(單個(gè)數(shù)據(jù)必須是二維),因此無(wú)法將Flatten層輸出直接作為本層的輸入,于是采用Keras中的Lambda方法對(duì)上層輸出增維,增維公式如式(9)所示:
X=Lambda(expand_dims(X))
(9)
最后通過(guò)隱藏層提取域名上下文信息特征以式(10)形式輸出,具體提取過(guò)程見(jiàn)2.3節(jié)。
ht=Deep-IndRNN(Xt)
(10)
Xt表示時(shí)間步長(zhǎng)為t時(shí)的Deep-IndRNN輸入;ht表示時(shí)間步長(zhǎng)為t時(shí)的Deep-IndRNN輸出。
(5) Dense層:全連接層,與Deep-IndRNN中第三層的全部神經(jīng)元連接,實(shí)現(xiàn)特征的非線(xiàn)性組合。同時(shí),在Dense與Deep-IndRNN之間使用正則化方法-隨機(jī)失活(Dropout),暫時(shí)丟棄一部分神經(jīng)元及其連接來(lái)控制過(guò)擬合問(wèn)題,本文將神經(jīng)元被丟棄概率設(shè)置為0.5[14]。
(6) 輸出:最終模型的輸出是從全連接層直接輸入到二分類(lèi)函數(shù)Sigmoid。模型輸出如式(11)所示,分類(lèi)函數(shù)Sigmoid如式(12)所示:
(11)
(12)
在模型訓(xùn)練過(guò)程中使用二元交叉熵作為評(píng)價(jià)分類(lèi)結(jié)果的損失函數(shù),二元交叉熵計(jì)算公式如式(13)所示:
(13)
向量y為實(shí)際目標(biāo)值,DGA惡意域名為1、合法域名為0。同時(shí),使用Adam優(yōu)化算法最小化損失函數(shù),提高模型性能。
給定n個(gè)長(zhǎng)度為L(zhǎng)的域名,d為嵌入層維度,h為隱層大小,本文方法的時(shí)間復(fù)雜度分析如下:
(1) 域名向量化:此階段將域名轉(zhuǎn)換成固定長(zhǎng)度L=59的向量,故T(n)=O(n*L)=O(n);
(2) Embedding層:將域名向量映射成向量序列,映射方式為矩陣相乘且僅進(jìn)行一次,其中d=128,故T(n)=O(n*1*L*d)=O(n);
(3) Flatten層:將大小為(n,L,d)向量序列拼接成單向量,T(n)=O(n*L*d)=O(n);
(4) IndRNNs層:n個(gè)單向量通過(guò)三層的IndRNN,每一層的計(jì)算方式與輸入、隱藏及輸出大小有關(guān),且僅進(jìn)行一次,其中h=128,故T(n)=O(n*(8h2+(L*d)h))=O(n);
(5) Dense層以及輸出:將每個(gè)輸入都執(zhí)行h*1次公式(10),故T(n)=O(n*h*1*Sigmoid)=O(n);
除域名向量化外,其他過(guò)程均屬于神經(jīng)網(wǎng)絡(luò)的前向傳播過(guò)程,且模型參數(shù)均已設(shè)定為常數(shù),在不考慮機(jī)器的計(jì)算能力影響下,本方法的計(jì)算復(fù)雜度僅和樣本數(shù)量n相關(guān),最好情況最壞情況的時(shí)間復(fù)雜度T(n)=O(5n)=O(n);
綜上,本文提出方法只需要將域名轉(zhuǎn)化為固定長(zhǎng)度的向量后作為模型輸入,再依據(jù)訓(xùn)練后模型中保存的權(quán)重計(jì)算便可得到分類(lèi)檢測(cè)結(jié)果,相比傳統(tǒng)的檢測(cè)方法更為合理。
本文使用Python作為開(kāi)發(fā)語(yǔ)言,深度模型基于Keras、Tensorflow框架搭建。具體實(shí)驗(yàn)環(huán)境如表3所示:
本文研究中,從Netlab360(http://data.n-etlab.360.com/feeds/dga/dga.txt.)獲取90 wDGA域名,從Alexa(https://www.alexa.com /topsites)獲取90 w合法域名,將DGA域名標(biāo)記為1,合法域名標(biāo)記為0,共180 w域名及標(biāo)簽形成平衡數(shù)據(jù)集其中訓(xùn)練集與測(cè)試集比例4:1非平衡數(shù)據(jù)集合法域名與DGA域名比例5:1,共60w,也按4:1比例劃分訓(xùn)練集與測(cè)試集。數(shù)據(jù)集中部分合法域名、DGA域名樣例如表4所示:
表3 實(shí)驗(yàn)環(huán)境
表4 數(shù)據(jù)集部分樣例
根據(jù)實(shí)驗(yàn)?zāi)繕?biāo)設(shè)計(jì),選取了準(zhǔn)確率(Accuracy)、精確度(Precision)、召回率(Recall)、綜合評(píng)價(jià)(F1)、ROC(Receiver Operating Characteristic)曲線(xiàn)、AUC(Area Under Curve)值、訓(xùn)練時(shí)間(Train Time,TT)、測(cè)試時(shí)間(Predict Time,PT)等8個(gè)評(píng)價(jià)指標(biāo)檢驗(yàn)方法的有效性和性能,采用了均值(Mean Value,簡(jiǎn)記為M)與方差(Variance,簡(jiǎn)記為S2)2個(gè)統(tǒng)計(jì)指標(biāo)來(lái)分析實(shí)驗(yàn)數(shù)據(jù)。相關(guān)指標(biāo)的計(jì)算公式如式 (14)~(20) 所示。
True Positive(TP):預(yù)測(cè)為正例,實(shí)際為正例。
False Positive(FP):預(yù)測(cè)為正例,實(shí)際為負(fù)例。
True Negative(TN):預(yù)測(cè)為負(fù)例,實(shí)際為負(fù)例。
False Negative(FN):預(yù)測(cè)為負(fù)例,實(shí)際為正例。
(14)
(15)
(16)
(17)
(18)
(19)
ROC曲線(xiàn)是假正率(FPR)和真正率(TPR)為軸的曲線(xiàn),實(shí)現(xiàn)了對(duì)FPR和TPR的權(quán)衡度量。其中TPR=Recall,計(jì)算公式如式(16)所示,F(xiàn)PR計(jì)算公式如式(20)所示:
(20)
ROC是通過(guò)分類(lèi)器返回分?jǐn)?shù)在不同闕值下計(jì)算TPR和FPR進(jìn)行評(píng)估而產(chǎn)生的。將一系列的點(diǎn)對(duì)連接成平滑的曲線(xiàn),就是ROC曲線(xiàn)。AUC是比較ROC曲線(xiàn)的常用度量,常用于二分類(lèi)評(píng)價(jià),其數(shù)值是ROC曲線(xiàn)下面積。AUC=1時(shí)表示完美分類(lèi),AUC=0.5時(shí)表示隨機(jī)分類(lèi),一般的AUC值都是介于0.5~1之間的。
參數(shù)的選擇對(duì)于DGA域名檢測(cè)的效果是十分關(guān)鍵的,本文在大量實(shí)驗(yàn)基礎(chǔ)上得到效果最優(yōu)參數(shù),如表5所示:
除上述參數(shù)外,訓(xùn)練過(guò)程中監(jiān)督驗(yàn)證集的損失函數(shù)值,若訓(xùn)練迭代兩次后損失函數(shù)值仍未下降,將學(xué)習(xí)率衰減為原來(lái)的0.8倍;若迭代三次后損失函數(shù)值仍未下降,提前終止訓(xùn)練以得到最優(yōu)模型。
表5 參數(shù)設(shè)置
3.5.1 DGA域名檢測(cè)效果比對(duì)分析
本文將IndRNN用于DGA域名檢測(cè),為驗(yàn)證本文方法的有效可行性,在平衡數(shù)據(jù)集上設(shè)計(jì)實(shí)施了三組比對(duì)實(shí)驗(yàn),分別構(gòu)建單一IndRNN方法(以下簡(jiǎn)記為IndRNN)、不含F(xiàn)latten層的Deep-IndRNN方法(以下簡(jiǎn)記為無(wú)F深度IndRNN)以及本文方法,從準(zhǔn)確率、精確度、召回率、綜合評(píng)價(jià)F1、訓(xùn)練時(shí)間、測(cè)試時(shí)間等方面進(jìn)行了DGA域名檢測(cè)效果的比對(duì)分析。實(shí)驗(yàn)結(jié)果皆是在相同參數(shù)控制下反復(fù)實(shí)驗(yàn)15次得到。
三種方法的準(zhǔn)確率隨訓(xùn)練迭代的變化情況如圖3所示。由于平衡訓(xùn)練集共144w數(shù)據(jù),使得三種方法在初次訓(xùn)練迭代時(shí)就具有較高的準(zhǔn)確率。同時(shí),由于實(shí)驗(yàn)過(guò)程中設(shè)置了監(jiān)督函數(shù),IndRNN的損失值迭代8次時(shí)就已不再下降,提前停止訓(xùn)練。為與其他兩種方法達(dá)到最優(yōu)迭代次數(shù)時(shí)的準(zhǔn)確率相比較,選取其迭代8次時(shí)的準(zhǔn)確率作為迭代9~12次時(shí)的準(zhǔn)確率。
由圖3可見(jiàn),本文方法的準(zhǔn)確率高達(dá)99.47%,比IndRNN、無(wú)F深度IndRNN分別提高5.3個(gè)百分點(diǎn)和0.77個(gè)百分點(diǎn)。
為更好分析三種方法的性能,本文從Precision、Recall以及綜合評(píng)價(jià)F1等方面進(jìn)行了驗(yàn)證分析,并根據(jù)多次在平衡數(shù)據(jù)集上訓(xùn)練后測(cè)試的數(shù)據(jù)計(jì)算出均值和方差,通過(guò)方差分析各類(lèi)指標(biāo)的離散程度。表6給出了三種方法各評(píng)價(jià)指標(biāo)實(shí)驗(yàn)結(jié)果,其中,綜合評(píng)價(jià)指標(biāo)F1通過(guò)計(jì)算精確度和召回率的均值得到。由表6分析可見(jiàn),本文方法召回率的均值優(yōu)于IndRNN、無(wú)F深度IndRNN,方差略高于無(wú)F深度IndRNN。在精確度方面,IndRNN的方差最小,均值卻明顯小于其他兩種方法,本文方法的均值與無(wú)F深度IndRNN的均值相當(dāng),但方差略高于后者。在綜合評(píng)價(jià)指標(biāo)F1上,本文方法比IndRNN提高3.6個(gè)百分點(diǎn),比無(wú)F深度IndRNN提高0.02個(gè)百分點(diǎn)。這說(shuō)明,本文方法采用Flatten層將向量序列拼接成單向量并不會(huì)造成大量信息在提取過(guò)程丟失的問(wèn)題,反而在準(zhǔn)確率、F1等方面表現(xiàn)更好。
表6 3種方法性能比較
同時(shí),對(duì)3種方法訓(xùn)練和測(cè)試所耗費(fèi)的時(shí)間進(jìn)行了實(shí)驗(yàn)比較,具體實(shí)驗(yàn)結(jié)果如表7所示,其中,TT表示在訓(xùn)練集上單次迭代時(shí)間,PT表示在測(cè)試集上單次測(cè)試時(shí)間(無(wú)特別說(shuō)明外,訓(xùn)練與測(cè)試過(guò)程均在有GPU加速的環(huán)境下進(jìn)行)。由表7可知,本文方法的訓(xùn)練、測(cè)試速度最穩(wěn)定且最快,比IndRNN快3.8倍以上;比無(wú)F深度IndRNN快10倍以上。
表7 3種方法運(yùn)行時(shí)間比較
以上實(shí)驗(yàn)結(jié)果與分析表明,相比于另兩種方法,本文方法在保證高準(zhǔn)確率和精確度的前提下,顯著提高了訓(xùn)練、檢測(cè)速度,具有較好的DGA域名檢測(cè)效果。
3.5.2 同類(lèi)方法性能比對(duì)分析
在相同實(shí)驗(yàn)環(huán)境下,使用平衡數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù),將本文方法與其他五種代表性的同類(lèi)DGA域名檢測(cè)方法進(jìn)行了性能對(duì)比分析。首先對(duì)域名數(shù)據(jù)使用字符字典轉(zhuǎn)換成實(shí)數(shù)向量;再將向量作為DNN方法、CNN方法、LSTM方法、BiLSTM方法、CNN-LSTM-Concat方法和本文方法的輸入;最后分別按照如下方式構(gòu)造DNN、CNN、LSTM[11]、BiLSTM[12]、CNN-LSTM-Concat[13]及本文方法:
(1) DNN:首先利用嵌入層將字符向量映射成字符向量序列;然后利用DNN提取域名信息特征;最后使用Sigmoid函數(shù)對(duì)域名分類(lèi)。
(2) CNN:首先利用嵌入層將字符向量映射成字符向量序列;然后利用三層CNN提取局部信息特征;最后使用Sigmoid函數(shù)對(duì)域名分類(lèi)。
(3) LSTM[11]:首先利用嵌入層將字符向量映射成字符向量序列;然后利用單一LSTM提取上下文信息特征;最后使用Sigmoid函數(shù)對(duì)域名分類(lèi)。
(4) BiLSTM[12]:首先利用嵌入層將字符向量映射成字符向量序列;然后利用BiLSTM提取上下文信息特征;最后使用Sigmoid函數(shù)對(duì)域名分類(lèi)。
(5) CNN-LSTM-Concat[13]:首先利用嵌入層將字符向量映射成字符向量序列;然后利用CNN提取局部信息特征,利用LSTM提取上下文信息特征,并融合特征;最后使用Sigmoid函數(shù)對(duì)域名分類(lèi)。
(6) 本文方法:首先利用嵌入層將字符向量映射成字符向量序列;然后將序列拼接成單向量后再利用堆疊三層IndRNN的Deep-IndRNN提取上下文信息特征;最后使用Sigmoid函數(shù)對(duì)域名分類(lèi)。
圖4~5為本文方法與同類(lèi)檢測(cè)方法在平衡訓(xùn)練集上的準(zhǔn)確率、損失值隨訓(xùn)練迭代的變化情況,實(shí)驗(yàn)結(jié)果是反復(fù)實(shí)驗(yàn)15次的平均值。由圖4~5可見(jiàn),4種方法在平衡訓(xùn)練集上都能夠很好的擬合,收斂的速度也都相對(duì)較快。相比之下,四種方法中,CNN- LSTM-Concat最先收斂,且準(zhǔn)確率、損失值達(dá)到最優(yōu)分別為99.52%、0.0142;本文方法在訓(xùn)練初期表現(xiàn)良好,在最優(yōu)參數(shù)控制下最終準(zhǔn)確率高達(dá)99.47%,損失值為0.015 0。在準(zhǔn)確率方面,本文方法比DNN、CNN、LSTM分別提高3.42個(gè)百分點(diǎn)、0.65個(gè)百分點(diǎn)、0.27個(gè)百分點(diǎn),與BiLSTM、CNN-LSTM-Concat的準(zhǔn)確率相當(dāng)。
圖6給出了6種方法的ROC曲線(xiàn)及AUC值,從圖中可見(jiàn),本文方法、CNN-LSTM-Concat以及BiLSTM的ROC曲線(xiàn)幾乎重合,最靠近左上方的是本文方法的ROC曲線(xiàn),其TPR最先達(dá)到99%以上,最右下方的是DNN的ROC曲線(xiàn),LSTM、CNN的ROC曲線(xiàn)位于中間。6種方法除DNN外的AUC值均達(dá)到0.995以上,分類(lèi)效果都很良好。
表8給出了6種方法在平衡數(shù)據(jù)集上的性能比較結(jié)果,表中數(shù)據(jù)是在訓(xùn)練后在測(cè)試集上實(shí)驗(yàn)15次的結(jié)果。由表8可知,在召回率方面,本文方法的均值優(yōu)于DNN、CNN、LSTM、BiLSTM、CNN-LSTM-Concat,方差略高于CNN、LSTM、BiLSTM。在精確度方面,本文方法的均值比DNN、CNN、LSTM、BiLSTM分別提高2.65,0.3,0.18,0.03個(gè)百分點(diǎn),僅比CNN-LSTM-Concat低0.03個(gè)百分點(diǎn),相差非常??;由精確度方差比較可知,本文方法的精確度穩(wěn)定性略低于CNN、LSTM和BiLSTM。在綜合評(píng)價(jià)F1方面,本文方法比DNN、CNN、LSTM、BiLSTM、CNN-LSTM-Concat分別提高3.5,0.63,0.2,0.05,0.01個(gè)百分點(diǎn)。
綜合比較6種方法的均值和方差,可以看出本文方法、BiLSTM以及CNN-LSTM-Concat在平衡測(cè)試集上的性能大體相同,但各有優(yōu)劣,導(dǎo)致這種情況原因可能為:本文方法沒(méi)有考慮域名字符局部信息特征的影響,在準(zhǔn)確率、精確度方面要略差于CNN-LSTM-Concat;LSTM、BiLSTM僅考慮域名字符的上下文信息特征,由于BiLSTM通過(guò)堆疊正向LSTM與反向LSTM雙向循環(huán)處理向量序列,既考慮上文對(duì)下文的影響、也考慮下文度上文的影響、所以能比LSTM獲取到更多的信息特征;本文方法堆疊IndRNN形成深層網(wǎng)絡(luò),通道間的信息會(huì)隨時(shí)間在多層IndRNNs之間傳播探索,從而保留更長(zhǎng)時(shí)間的上下文信息,在提取特征上較優(yōu)于LSTM、BiLSTM。因本文方法使用Flatten將向量序列進(jìn)行拼接,難免會(huì)造成少量信息丟失,所以在性能穩(wěn)定性上略差于結(jié)構(gòu)較為簡(jiǎn)單的CNN、LSTM、BiLSTM。
表8 平衡數(shù)據(jù)集下6種方法性能比較
由圖4~6以及表8可以看出,除DNN外,本文方法與其他同類(lèi)方法的分類(lèi)檢測(cè)效果都很良好,雖在部分評(píng)價(jià)指標(biāo)上各有優(yōu)劣,但整體差距非常小,無(wú)法做出確切比較。為體現(xiàn)本文方法較同類(lèi)檢測(cè)方法更好的實(shí)用性,又設(shè)計(jì)了6種方法在平衡數(shù)據(jù)集上訓(xùn)練和測(cè)試所耗費(fèi)時(shí)間的實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表9所示。
表9 6種方法運(yùn)行時(shí)間比較
考慮到檢測(cè)方法需應(yīng)用于實(shí)際環(huán)境,所以PT需在普通用戶(hù)環(huán)境測(cè)試,TT仍為存在GPU加速環(huán)境的實(shí)驗(yàn)數(shù)值。由表9可知,DNN的TT最少,為27.7s。本文方法的PT表現(xiàn)最優(yōu),為21.1s,在實(shí)際環(huán)境中測(cè)試速度最快。同時(shí),根據(jù)方差可以看出本文方法PT的離散程度也是最小,測(cè)試速度最穩(wěn)定。本文方法在訓(xùn)練速度上比CNN、LSTM、BiLSTM、CNN-LSTM-Concat分別快1.15,6.90,18.92,1.69倍;在測(cè)試速度上要明顯優(yōu)于其他5種方法,分別快1.64,4.63,3.54,14.08,5.89倍。
為驗(yàn)證本文方法在測(cè)試速度上優(yōu)勢(shì)真實(shí)有效,從平衡數(shù)據(jù)集中分別抽取500,5 000,50 000,500 000個(gè)域名作為測(cè)試數(shù)據(jù),比較本文方法與同類(lèi)方法在不同數(shù)量級(jí)數(shù)據(jù)上檢測(cè)速度,比較結(jié)果如表10所示,其中PT在數(shù)值上等于普通用戶(hù)環(huán)境測(cè)試15次平均值。從表10可以直觀(guān)的看出本文方法在不同數(shù)量級(jí)數(shù)據(jù)的測(cè)試時(shí)間均表現(xiàn)最優(yōu),檢測(cè)速度提高幅度顯著,比另外5種同類(lèi)方法更具實(shí)用性。
分析其原因?yàn)椋篋NN結(jié)構(gòu)最簡(jiǎn)單,故訓(xùn)練、檢測(cè)速度較快且最穩(wěn)定;本文方法與CNN-LSTM-Concat在使用RNN時(shí)都將向量序列拼接成單向量后輸入,以單步處理代替循環(huán)處理,所以在速度上要快于LSTM和BiLSTM;CNN和CNN-LSTM-Concat等在模型中使用卷積神經(jīng)網(wǎng)絡(luò)CNN,在普通用戶(hù)環(huán)境(無(wú)GPU)是無(wú)法被加速運(yùn)行的,因此在測(cè)試速度上明顯不如本文方法。
表10 6種方法在不同數(shù)量級(jí)數(shù)據(jù)的測(cè)試時(shí)間比較
經(jīng)測(cè)試本文方法在普通用戶(hù)環(huán)境下每秒鐘大概可檢測(cè)17 000多個(gè)域名,超過(guò)校園級(jí)流量的實(shí)時(shí)監(jiān)測(cè)惡意域名的速度標(biāo)準(zhǔn),能夠完成更高級(jí)別流量的實(shí)時(shí)監(jiān)測(cè)任務(wù)。
為模仿合法域名數(shù)量遠(yuǎn)遠(yuǎn)超過(guò)DGA域名數(shù)量的真實(shí)環(huán)境,本文在平衡數(shù)據(jù)集中抽取50w合法域名與10 wDGA域名組成非平衡數(shù)據(jù)集,并按照4:1比例劃分訓(xùn)練集與測(cè)試集。
在非平衡數(shù)據(jù)集下對(duì)本文方法與同類(lèi)方法中性能表現(xiàn)較好的LSTM、BiLSTM、CNN-LSTM-Concat設(shè)計(jì)相關(guān)實(shí)驗(yàn),實(shí)驗(yàn)過(guò)程除使用的數(shù)據(jù)集與3.5.2節(jié)不一樣,其他條件都一致。選擇Precision、Recall、F1以及ROC曲線(xiàn)作為評(píng)價(jià)指標(biāo),以下圖表中數(shù)據(jù)均是在非平衡數(shù)據(jù)集下反復(fù)實(shí)驗(yàn)15次得到。
表11給出了4種方法在非平衡數(shù)據(jù)集上的性能比較結(jié)果,與在平衡數(shù)據(jù)集實(shí)驗(yàn)結(jié)果相似,本文方的召回率均值和綜合評(píng)價(jià)F1優(yōu)于其他3種方法。在精確度方面,本文方法的方差最優(yōu),均值比LSTM、BiLSTM分別提高0.26,0.02個(gè)百分點(diǎn),僅比CNN-LSTM-Concat低0.04個(gè)百分點(diǎn),相差非常小。在綜合評(píng)價(jià)F1方面,本文方法分別比其他3種方法分別高1.3,0.13,0.06個(gè)百分點(diǎn)。
表11 非平衡數(shù)據(jù)集下4種方法性能比較
圖7是4種方法在非平衡數(shù)據(jù)集上的ROC曲線(xiàn)及AUC值,由圖中可以看出,4種方法在非平衡數(shù)據(jù)集上也都能表現(xiàn)出較好的分類(lèi)效果,本文方法的ROC曲線(xiàn)在BiLSTM、LSTM之上,僅在拐點(diǎn)處比CNN-LSTM-Concat的ROC曲線(xiàn)稍偏下一點(diǎn),其他部分幾乎與CNN-LSTM-Concat重合;在A(yíng)UC值方面,本文方法比BiLSTM、LSTM分別提高0.004 2、0.007 8,與CNN-LSTM-Concat的AUC值相當(dāng),僅差0.001,幾乎可以忽略不計(jì)。
實(shí)驗(yàn)總結(jié):平衡數(shù)據(jù)集和非平衡數(shù)據(jù)集下實(shí)驗(yàn)結(jié)果與分析表明,一方面,本文方法能有效進(jìn)行DGA域名檢測(cè)且檢測(cè)效果優(yōu)良。另一方面,相比于DNN、CNN、LSTM、BiLSTM、CNN-LSTM-Concat等同類(lèi)DGA域名檢測(cè)方法,本文方法能在保證高準(zhǔn)確率和精確度的前提下,有效釋放深度學(xué)習(xí)時(shí)占用的GPU、CPU等系統(tǒng)資源,顯著提高訓(xùn)練、檢測(cè)速度,實(shí)用性較強(qiáng)且能更好地完成實(shí)際分類(lèi)檢測(cè)任務(wù)。
本文提出了一種基于Deep-IndRNN的DGA域名檢測(cè)方法。該方法將嵌入層映射得到的向量序列拼接成單向量,以向量單步處理代替向量序列循環(huán)處理,并充分利用多層IndRNNs可以有效堆疊,梯度在不同時(shí)間步都能有效傳播等優(yōu)勢(shì),在能夠提取到豐富的域名上下文信息特征的同時(shí)減少方法運(yùn)行時(shí)間,從而更好地快速準(zhǔn)確檢測(cè)DGA域名,更具實(shí)用性。實(shí)驗(yàn)結(jié)果表明,在相同實(shí)驗(yàn)環(huán)境和數(shù)據(jù)集下,與同類(lèi)DGA域名檢測(cè)方法中性能表現(xiàn)較好的LSTM、BiLSTM、CNN-LSTM-Concat相比,本文提出的方法在準(zhǔn)確率、精確度、召回率、F1、ROC等評(píng)價(jià)指標(biāo)不低于同類(lèi)檢測(cè)方法的前提下,在TT、PT等評(píng)價(jià)指標(biāo)方面的表現(xiàn)明顯更優(yōu),顯著提高了訓(xùn)練、檢測(cè)速度,方法是有效可行的,且在實(shí)際應(yīng)用中能快速準(zhǔn)確完成檢測(cè)任務(wù)。在今后的工作中,可以考慮提取域名字符局部信息特征并與上下文信息特征融合,在保證方法具有高訓(xùn)練、檢測(cè)速度的前提下,更準(zhǔn)確的檢測(cè)DGA域名,以適用于更高流量級(jí)的實(shí)際應(yīng)用。