蔣鴻玲,邵秀麗
(南開大學信息技術科學學院,天津300071)
近年來,僵尸網絡的快速發展使因特網面臨嚴重的安全威脅.僵尸網絡是攻擊者(botmaster)通過傳播僵尸程序控制大量主機,通過命令與控制信道(command and control,C&C)與僵尸主機通信并發布命令[1].攻擊者利用僵尸網絡可發起多種攻擊,如分布式拒絕服務攻擊、垃圾郵件、信息竊取等[2].
目前主流的僵尸網絡檢測方法是通過分析網絡流量來檢測.文獻[3]通過昵稱檢測IRC僵尸網絡;文獻[4]通過PageRank算法計算主機級別,再根據已知的僵尸網絡信息進行檢測;文獻[5]通過網絡通信圖識別P2P網絡,再利用外部系統提供的信息區分合法P2P網絡與P2P僵尸網絡;文獻[6-7]通過識別僵尸主機的惡意行為檢測僵尸網絡.這些僵尸網絡檢測方法或者需要數據包的內部信息,無法檢測加密的僵尸網絡;或者依賴外部系統提供信息,不能獨立進行檢測;或者依賴僵尸主機的惡意行為,在僵尸主機不發起攻擊時,不能有效檢測出僵尸網絡.大多數現有的檢測方法無法自動學習僵尸的網絡流量特征,檢測系統無法自動進行檢測學習,沒有聯想記憶功能,因此本文提出基于神經網絡的僵尸網絡檢測方法,用大量的樣本訓練神經網絡分類器,然后用訓練好的神經網絡分類器模型檢測僵尸網絡.本文的檢測方法的優點是:1)神經網絡的輸入數據只需要數據包頭部信息,不需要數據包的內部信息,可以檢測加密的僵尸網絡;2)基于神經網絡的檢測系統不依賴外部系統提供僵尸網絡的信息,能獨立完成檢測;3)神經網絡分類器關注僵尸主機的控制命令流量,不依賴僵尸網絡的惡意行為,在僵尸主機處于“發呆”狀態下仍能檢測出僵尸網絡;4)訓練好的神經網絡分類器能自動記憶僵尸網絡的流量特征,當新的流量達到,能快速得出檢測結果.
要通過網絡流量檢測僵尸網絡,首先要明確僵尸網絡流量的特征.僵尸主機既有惡意攻擊行為也有C&C通信[6].僵尸主機不會持續不斷地進行惡意攻擊,在Botmaster給僵尸主機發布命令前,僵尸主機保持“發呆”狀態,不發起任何攻擊[8].此外,僵尸主機的攻擊往往很隱蔽,很難通過網絡流量檢測出來[9].相比之下,C&C 通信存在于僵尸網絡的整個生命周期中,因此本文通過識別僵尸網絡的C&C流量進行檢測.
為了有效識別出僵尸網絡的C&C通信,首先確定最能區分出僵尸網絡的C&C通信流量和正常流量的特征.被僵尸網絡感染的用戶并不知道自己已被感染,仍然進行正常的網絡活動,同時僵尸程序偷偷在后臺執行,因此僵尸主機既有正常的流量也有僵尸網絡流量.如果以被測網絡的主機作為分析對象,僵尸網絡流量的特征會被大量正常流量覆蓋,因此本文將被測網絡內部主機和外部主機作為一個主機對,以主機對作為分析對象,這樣可以有效分離出與內部主機通信的合法主機和僵尸主機.
為提取僵尸網絡主機對的特征,首先分析僵尸網絡的主機對和正常主機對的區別.僵尸主機為了獲取命令或者更新,需要頻繁/周期性地連接C&C服務器或者其他僵尸主機[10-11].與正常流量相比,僵尸主機間的C&C通信一般字節數較小,并且持續時間較短.而主機對的一次通信會形成一個流,因此主機對的通信特征可通過分析主機對間流的特征提取出來.由于僵尸網絡通常采用TCP協議通信,因此本文只分析TCP流,并提取主機對的TCP流的特征,而不考慮其他僵尸網絡流量特征,本文提取主機對的特征包括:
1)通信次數,即TCP流個數;
2)前后2次通信的時間間隔的平均值;
3)前后2次通信的時間間隔變化的平均值;
4)TCP流的字節數平均值;
5)TCP流的數據包個數平均值;
6)TCP流的持續時間平均值.
提取出這些特征后,每個主機對即可用1個六維的特征向量表示,特征向量的每一維表示主機對的一個特征.
首先用大量樣本訓練神經網絡分類器,然后用訓練好的神經網絡分類器檢測僵尸網絡.圖1為基于神經網絡的僵尸網絡檢測模型.

圖1 基于神經網絡的僵尸網絡檢測模型Fig.1 Botnet detection model based on neural network
基于神經網絡的僵尸檢測過程如下:
1)捕獲網絡流量.主要獲取被測網絡內部主機和外部主機通信的數據包.2)形成流.2個主機間的一次通信會形成一個流,因此將原始數據包轉換為流.3)提取主機對的特征.主機對是指2個互相通信的主機,即被測網絡內部主機及與其通信的外部主機.本文的神經網絡檢測模型以主機對作為分析對象,是為了分離出與內部被感染主機通信的合法主機和僵尸主機.4)特征值預處理.對提取的主機對特征進行預處理,通過歸一化操作使各個特征值的取值在同一范圍內.5)分類器設計.根據特征向量設計神經網絡分類器各層神經元的個數.6)神經網絡分類器訓練.利用具有類標簽的訓練數據集對神經網絡進行訓練,得到訓練好的神經網絡分類器.7)僵尸網絡檢測.利用訓練好的神經網絡分類器檢測測試數據集中的僵尸網絡,得到檢測結果.
其中,1)~4)是數據準備及預處理;5)~6)是神經網絡分類器的形成;7)是利用訓練好的分類器檢測僵尸網絡.
為了得到檢測性能好的神經網絡分類器,首先要準備訓練數據并進行預處理.訓練數據要能體現出僵尸網絡流量的特征,區分出正常流量和僵尸網絡流量.訓練數據準備及預處理包括3個過程,首先是網絡流量捕獲,然后是流的形成,最后是主機對特征的提取和預處理.
2.1 .1 網絡流量捕獲
網絡流量捕獲主要抓取被測網絡內部主機與外部主機通信的數據包.圖2為網絡流量捕獲圖.本文通過交換機端口鏡像技術采集真實網絡環境中的流量.流量采集器運行tcpdump工具捕獲被測網絡內主機訪問Internet的流量,由于僵尸網絡通常采用TCP協議通信,因此只采集TCP協議的數據包,每個小時新建一個pcap文件存儲數據包.數據解析器將采集的原始數據解析為文本文件,導入數據庫中.真實網絡環境中的流量都標記為非僵尸網絡流量,僵尸網絡流量通過模擬產生,并導入到數據庫中,同時標記為僵尸網絡流量.

圖2 網絡流量捕獲結構Fig.2 Architecture of traffic capture
2.1 .2 流的形成
主機間的一次TCP通信會形成一個TCP流,因此首先將捕獲的原始TCP數據包轉化為TCP流.具有相同五元組(本地IP地址、本地端口號、遠程IP地址、遠程端口號、協議)的數據包集合構成一個流,同時滿足前后相鄰的2個數據包的時間間隔小于閾值Tin(實驗中Tin=60 s).其中本地IP地址和本地端口號是被測網絡內主機的IP地址和端口號,遠程IP地址和遠程端口號是被測網絡外的主機的IP地址和端口號.
一個TCP流通常以3次握手(SYN,SYN-ACK,ACK)開始,4 次握手(FIN,ACK,FIN,ACK)或者RST包結束.因此首先按照五元組對數據包分組,組中按照時間排序,每組從第1個數據包開始掃描,找出TCP 3次握手包作為TCP流的開始,TCP 4次握手包或者RST包作為TCP流的結束,從開始到結束的所有數據包組成一個TCP流.記錄每個TCP流,包括如下屬性:本地IP地址、本地端口號、遠程IP地址、遠程端口號、流的開始時間、流的結束時間、流中數據包個數和流的字節數.
2.1 .3 特征提取及預處理
根據第1節所述,以主機對為分析對象,提取主機對通信的流的特征,每個主機對有6個特征,這樣,即可用下維向量表示一個主機對.
為了提高僵尸網絡的檢測率,在訓練神經網絡分類器前,需要對特征值進行預處理.2.1.2中提取出的主機對的各個特征值的取值范圍差別很大,如果直接用提取出的特征向量作為神經網絡輸入,則訓練的效果會受取值較大的特征值所影響,因此要對特征值歸一化處理.歸一化操作將所有特征值映射到相同的范圍內,能有效提高神經網絡分類器的分類性能.本文采用z-score方法進行規范化:

圖3為特征值預處理的結果,前2列是主機對的IP地址,即內部主機和遠程主機的IP地址,第3~8列為主機對的特征值,最后一列是類標簽,0表示非僵尸主機對,1表示僵尸主機對.從圖3可以看出,預處理后所有特征值的取值都在同一個范圍內.

圖3 數據預處理結果Fig.3 The results of data preprocessing
首先設計神經網絡層次結構,主要是隱層的層數,然后設計各層神經元個數,包括輸入層、隱層、輸出層的神經元個數,最后是神經網絡的激活函數.
本文的神經網絡分類器采用單隱層結構,因為如果隱層較多,神經網絡的訓練會比較慢,尤其數據量比較大時,單隱層有較快的訓練速度,且不會對網絡精度影響很大.考慮到網絡流量一般較大,本文的神經網絡模型采用單隱層.
本文的單隱層BP神經網絡模型結構如圖4所示.對應主機對的特征向量是六維的,因此輸入層設置了六個神經元,分別是:1)TCP流個數flowCount;2)前后2個TCP流的時間間隔的平均值avgInterval;3)時間間隔變化的平均值avgItvChange;4)TCP流的字節數平均值avgByte;5)TCP流的數據包個數平均值avgPktCount;6)TCP流的持續時間平均值avgDuration.

圖4 單隱層BP神經網絡模型結構Fig.4 Model structure of BP neural network with a hidden layer
隱層神經元個數根據式(2)可取3~12的值,實驗中對不同隱層神經元個數進行測試,選取最優值.式(2)為文獻[12]指出的最佳隱層神經元個數,其中,k為隱層神經元個數,m為輸入層神經元個數,n為輸出層神經元個數,α為1~10的常數.

輸出層的神經元個數設置為2.第1個輸出神經元用于表示非僵尸主機對,第2個輸出神經元用于表示僵尸主機對.如果是僵尸網絡主機對,則第1個神經元的輸出為0,第2個神經元輸出為1;如果不是僵尸網絡主機對,則第1個神經元輸出為1,第2個神經元輸出為0.實際訓練過程中,輸出神經元的取值是[0,1].訓練時,若第1個神經元的值大于第2個,則將第1個神經元取值置為1,將第2個神經元取值置為0,并標記為非僵尸網絡主機對.若第1個神經元的值小于第2個,則將第1個神經元取值置為0,將第2個神經元取值置為1,并標記為僵尸網絡主機對.
BP神經網絡的激活函數采用S型函數,如式(3):

神經網絡分類器設計完成后,即可利用訓練數據對神經網絡進行訓練.BP神經網絡的訓練過程是不斷迭代的過程,其訓練算法流程圖如圖5所示.

圖5 BP神經網絡分類器訓練算法流程Fig.5 Flow chart of BP neural network training algorithm
具體步驟如下:
1)初始化神經網絡所需的各個參數.參數包括輸入層到隱層的權值和偏置、隱層到輸出層的權值和偏置、權值和偏置的初始值是[-0.05,0.05]的隨機值.另外,還需要設置神經網絡的期望誤差和最大訓練次數.本文設置的期望誤差是0.001,最大循環次數是1 000,即在1 000次循環內,誤差小于等于0.001,則BP神經網絡分類器訓練結束,否則循環1 000次后結束.
2)從訓練樣本中選1組主機對,給神經網絡的輸入節點賦值為主機對的6個特征.
3)計算神經網絡的期望輸出,如果是僵尸網絡主機對,則輸出層的第1個節點賦值為0,第2個節點賦值為1,如果不是僵尸網絡主機對,則輸出層的第1個節點賦值為1,第2個節點賦值為0.
4)計算出輸入層到隱層再到輸出層各節點的輸出.
5)計算誤差E.
6)反向計算誤差信號.
7)調整神經網絡的權值和偏置.
8)重復2)~7),直到達到期望誤差或者達到最大訓練次數為止.
訓練結束后,BP神經網絡分類器已形成,即可用訓練好的分類器檢測僵尸網絡.
本文實驗數據采集了天津某高校校園網內的網絡流量,通過核心交換機端口鏡像捕獲網絡流量,選擇其中一個端口,被測子網內主機約200臺,白天的網絡流量為150~200 MB/s.實驗中采用了2011年4月6日的網絡流量,共24 h.真實網絡環境中的流量作為背景流量,將其解析后導入數據庫中,并注入模擬的僵尸網絡流量.隨機選取背景流量中若干臺主機,替換僵尸主機的IP地址為這些主機的IP地址,使這些主機既有正常流量也有僵尸網絡流量,更符合真實場景.本文模擬的僵尸網絡流量特征符合現有大部分僵尸網絡流量特征,因而本文研究這類僵尸網絡,其他類型的僵尸網絡不在本文研究范圍內.實驗用C#編寫程序,用SQL Server 2000數據庫存儲解析后的網絡流量數據.
為了確定最佳隱層神經元個數,做了如下實驗.分別將隱層神經元個數設置為3~12的不同值,觀察訓練誤差和訓練次數的變化情況.實驗中期望誤差為0.001,隱層神經元個數取不同值時神經網絡訓練誤差都相同,因此只觀察訓練次數的變化.圖6是不同隱層神經元個數的訓練循環次數,從圖中可以看出訓練循環次數隨著隱層神經元個數增加而增大.在誤差相同情況下,訓練次數越少越好,因此隱層神經元個數為3時效果最佳,后續的實驗中都將隱層神經元個數設為3.

圖6 不同隱層神經元個數的訓練循環次數Fig.6 The training times for different number of hidden layer neuron
圖7是期望誤差取不同值時的訓練循環次數,實驗數據取3次實驗的平均值.從圖中可以看出,期望誤差越大,訓練循環次數越小.因此期望誤差大只需較少次數的循環誤差即可達到期望值,可提高神經網絡訓練效率.但是期望誤差大,神經網絡分類器的精度就下降,因此要取一個合理的值,使神經網絡分類器的精度和訓練次數達到平衡,從圖7可以看出,期望誤差為0.002時效果較好.

圖7 期望誤差不同時的訓練循環次數Fig.7 The training times for different expected error
為了驗證神經網絡分類器檢測僵尸網絡的性能,本文用測試數據對神經網絡分類器進行測試,測試數據包含類標簽,即是否是僵尸網絡主機對.本文采用檢測率(detection rate,DR)和誤報率(false positive rate,FPR)2個指標對神經網絡分類器的性能進行評估.檢測率為僵尸主機被正確檢測出來的概率:

式中:TP表示正確檢測出的僵尸主機個數,FN表示未被檢測出的僵尸主機個數.誤報率為合法主機被錯誤地檢測為僵尸主機的概率,如式(5)

式中:FP為被錯誤地檢測為僵尸主機的合法主機個數,TN為正確檢測出的合法主機個數.
驗證時首先以測試數據作為神經網絡的輸入,判斷神經網絡的檢測結果和真實結果是否相同,然后分別統計TP、FN、FP和TN的值,最后根據式(4)和(5)計算檢測率和誤報率.圖8為期望誤差不同時算法的檢測率和誤報率.從圖8(a)可以看出,期望誤差為0.001到0.009時,檢測率都為100%,當期望誤差為0.01時,檢測率下降到99.4%.


圖8 期望誤差不同時的檢測率和誤報率Fig.8 DR and FPR for different expected errors
從圖8(b)可以看出,隨著期望誤差的增大,誤報率呈上升趨勢,期望誤差為0.01時誤報率稍微降低但檢測率也降低.
綜上所述,期望誤差為0.001時檢測率和誤報率都達到最佳水平.從實驗中也可以看出本文算法的檢測率達到99%,誤報率在1%以下,具有較好的檢測性能.
本文提出了一種基于BP神經網絡的僵尸網絡檢測方法.該方法以主機對作為分析對象,提取主機對之間通信的流量特征,然后將預處理后的特征作為神經網絡的輸入,訓練BP神經網絡分類器,用訓練好的分類器進行僵尸網絡檢測.通過實驗確定了最佳的BP神經網絡隱層神經元個數和期望誤差,實驗表明,該方法有較高的檢測率和較低的誤報率,具有良好的性能.
[1]金鑫,李潤恒,甘亮,等.基于通信特征曲線動態時間彎曲距離的IRC僵尸網絡同源判別方法[J].計算機研究與發展,2012,49(3):481-490.
JIN Xin,LI Runheng,GAN Liang,et al.IRC botnets’homology identifying method based on dynamic time warping distance of communication feature curves[J].Journal of Computer Research and Development,2012,49(3):481-490.
[2]江健,諸葛建偉,段海新,等.僵尸網絡機理與防御技術[J].軟件學報,2012,23(1):82-96.
JIANG Jian,ZHUGE Jianwei,DUAN Haixin,et al.Research on botnet mechanisms and defenses[J].Journal of Software,2012,23(1):82-96..
[3]GOEBEL J,HOLZ T.Rishi:identify bot contaminated hosts by irc nickname evaluation[C]//Proceedings of USENIX First Workshop on Hot Topics in Understanding Botnets,Cambridge,USA,2007:1-12.
[4]FRANCOIS J,WANG S,STATE R,et al.BotTrack:tracking botnets using NetFlow and PageRank[M]//Lecture Notes in Computer Science.Valencia,Spain,2011:1-14.
[5]NAGARAJA S,MITTAL P,HONG C,et al.BotGrep:finding P2P bots with structured graph analysis[C]//Proceedings of the 19th USENIX Conference on Security.Washington,DC,USA,2010:1-16.
[6]GU G,PERDISCI R,ZHANG J,et al.BotMiner:clustering analysis of network traffic for protocol-and structure-independent botnet detection[C]//Proceedings of the 17th Conference on Security Symposium.San Jose,USA,2008:139-154.
[7]GU G,PORRAS P,YEGNESWARAN V,et al.BotHunter:detecting malware infection through IDSdriven dialog correlation[C]//Proceedings of the 16th USENIX Security Symposium.Boston,USA,2007:167-182.
[8]PRASAD K,REDDY A,KARTHIK M.Flooding attacks to internet threat monitors(ITM):modeling and counter measures using botnet and honeypots[J].International Journal of Computer Science and Information Technology,2011,3(6):159-172.
[9]ZHANG J,PERDISCI R,LEE W,et al.Detecting stealthy P2P Botnets using statistical traffic fingerprints[C]//Proceedings of IEEE/IFIP 41st International Conference on Dependable Systems and Networks.Hong Kong,China,2011:121-132.
[10]方濱興,崔翔,王威.僵尸網絡綜述[J].計算機研究與發展,2011,48(8):1315-1331.
FANG binxing,CUI Xiang,WANG Wei.Survey of botnets[J].Journal of Computer Research and Development,2011,48(8):1315-1331.
[11]WANG P,WU L,ASLAM B,et al.A systematic study on peer-to-peer botnets[C]//Proceedings on Computer Communications and Networks.San Francisco,USA,2009:1-8.
[12]飛思科技產品研發中心.神經網絡理論與MATLAB7實現[M].北京:電子工業出版社,2005:1-108.