羅扶華,張愛新
(上海交通大學 網(wǎng)絡空間安全系,上海 200240)
近年來,網(wǎng)絡空間安全受到越來越多的關注,如何防范各種網(wǎng)絡攻擊、保障網(wǎng)絡信息安全,已成為一個熱點研究課題。網(wǎng)絡入侵檢測系統(tǒng)通過分析網(wǎng)絡節(jié)點的網(wǎng)絡流量識別惡意攻擊行為,是網(wǎng)絡安全防護體系結(jié)構(gòu)的重要組成部分。
作為網(wǎng)絡入侵的主要攻擊方式之一,僵尸網(wǎng)絡的威脅和傳播范圍巨大。僵尸網(wǎng)絡通常是指一群被惡意軟件感染的電腦,遠程攻擊者可以通過這些惡意軟件對其進行控制。被感染的電腦被稱為僵尸機,攻擊者被稱為控制者。與其他傳統(tǒng)的惡意軟件類型如木馬、蠕蟲不同,僵尸網(wǎng)絡的優(yōu)勢在于控制者可以通過控制與命令(Command and Control,C&C)信道對僵尸主機進行一對多的操控,其中通常使用IRC、HTTP和P2P協(xié)議來部署C&C信道。僵尸網(wǎng)絡主要的攻擊方式有分布式拒絕服務攻擊(Distributed Denial of Service,DDoS)、發(fā)送垃圾郵件、竊取敏感信息、搶占系統(tǒng)資源、釣魚攻擊及惡意軟件分發(fā)等。
較早時期僵尸網(wǎng)絡檢測主要依靠基于黑名單或者白名單的方法,這種方法雖然對已知的僵尸網(wǎng)絡檢測準確率較高,但是對于加密流量識別能力較弱,無法檢測未知攻擊。因此,近年來對于僵尸網(wǎng)絡的研究已逐漸轉(zhuǎn)向基于機器學習和基于神經(jīng)網(wǎng)絡的方法。
目前,僵尸網(wǎng)絡檢測主要采用基于機器學習的方法。該方法利用人為設計的一些網(wǎng)絡流量特征,使用監(jiān)督學習或非監(jiān)督學習方法建立基于這些特征的模型。經(jīng)過學習后建立好的模型可以識別正常和異常的流量,優(yōu)點是可以發(fā)現(xiàn)未知的攻擊。在傳統(tǒng)機器學習方法之后,近年興起的深度學習在僵尸網(wǎng)絡的檢測上擁有不錯的效果。使用神經(jīng)網(wǎng)絡能夠使其學習到隱藏在人工特征中更高級的特征,從而在分類結(jié)果上有更優(yōu)異的表現(xiàn)。
基于機器學習的檢測可以進一步分為基于主機的檢測、基于網(wǎng)絡流量異常的檢測和基于DNS流量的檢測。
1.1.1 基于主機的檢測
通過監(jiān)視單個主機以檢測任何可疑的活動。例如,通過監(jiān)視系統(tǒng)進程來訪問可疑文件、處理開銷、訪問內(nèi)核級進程和系統(tǒng)調(diào)用。這種技術可以有效防止感染和下載攻擊,從而最大限度地減少惡意軟件的傳播,但監(jiān)控單個主機的成本很高。Stinson等人[1]提出了一種名為BotSwat的工具。該工具監(jiān)視任意win32二進制文件的完整執(zhí)行,以識別遠程控制其僵尸機的僵尸網(wǎng)絡的潛在行為,并以僵尸機響應來自欺騙性外部源的網(wǎng)絡流量數(shù)據(jù)的方式為目標。但是,這個系統(tǒng)缺點在于僅限于跟蹤被監(jiān)視主機中的僵尸網(wǎng)絡。
1.1.2 基于DNS流量的檢測
基于DNS的檢測方法利用僵尸網(wǎng)絡生成的DNS信息進行檢測。為了躲避檢測,僵尸主機和C&C服務器使用相同的種子運行相同的域名生成算法(Domain Generate Algorithm,DAG)生成大量的候選域名。僵尸主機注冊一個候選域名作為C&C服務器的真實域名。最后,僵尸主機查詢每一個候選域名,直到其中一個域名被成功解析。這個解析后的域名映射到C&C服務器的IP地址。
Antonakakis等人[2]提出的Pleiades系統(tǒng)利用圖聚類和隱馬爾可夫模型檢測DGA僵尸主機,基于NXdomain響應檢測DGA生成的域。該系統(tǒng)對可能由相同DGA生成的域進行聚類,并使用交替決策樹確定給定的NXDomain響應是否與任何特定的已知DGA相關聯(lián)。這種系統(tǒng)雖然能夠有效檢測新生成的DGA域,但不能檢測基于C&C查詢的DGA。
1.1.3 基于網(wǎng)絡流量異常的檢測
通過網(wǎng)絡流量監(jiān)測來確定僵尸網(wǎng)絡的存在,又可以分為主動監(jiān)測和被動監(jiān)測。
在主動監(jiān)測中,被監(jiān)控的網(wǎng)絡或服務器被注入精心設計的數(shù)據(jù)包,以引起網(wǎng)絡的響應。捕獲的響應被用來觀察和分析惡意軟件相關的證據(jù)。Gu[3]等人提出了名為BotProbe的系統(tǒng)來檢測基于IRC的僵尸網(wǎng)絡。它作為圖靈測試,通過注入被調(diào)查的內(nèi)部客戶端的數(shù)據(jù)包來測試IRC客戶端是機器人還是人類。
在被動監(jiān)測中,通過觀察網(wǎng)絡流量來發(fā)現(xiàn)由僵尸機或C&C服務器發(fā)起的任何可疑通信。為了分析網(wǎng)絡中的流量數(shù)據(jù),使用預記錄的簽名。因為在同一僵尸網(wǎng)絡中出現(xiàn)的僵尸機很可能在不同的體系結(jié)構(gòu)中具有相同的通信模板,以便為同一個僵尸主控機與C&C服務器完成類似的通信。Gu等人提出的BotSniffer[4]不需要事先知道C&C服務器地址或簽名信息,就可以在一定網(wǎng)絡范圍內(nèi)確定僵尸網(wǎng)絡的指揮控制通道。BotSniffer采用時空相關性作為檢測方法,通過字符串匹配來檢測不同僵尸網(wǎng)絡的相似響應。它的缺點是對加密的通信通道魯棒性不夠,可以通過向流量注入不一致的噪聲包來規(guī)避檢測。
基于機器學習的方法最主要的問題是設計泛用性能好的流量特征具有很大困難,對于某種僵尸網(wǎng)絡的檢測效果在很大程度上取決于設計的流量特征。使用不同的網(wǎng)絡流量特征集時,檢測效果往往相差很大,目前還沒有標準的指導原則來設計能夠準確描述網(wǎng)絡流量的特征集。
表征學習是解決上述問題的一種有效技術。這種方法允許系統(tǒng)從原始數(shù)據(jù)中自動提取特征,最大的優(yōu)點是可以取代人工特征工程,其中深度神經(jīng)網(wǎng)絡是目前最成功的表征學習技術。在網(wǎng)絡入侵檢測領域,已經(jīng)出現(xiàn)了一些使用表征學習方法的研究成果。例如,Ma[5]等人使用深度神經(jīng)網(wǎng)絡在KDD99數(shù)據(jù)集上檢測入侵行為。Niyaz[6]等人則使用深度信念網(wǎng)絡在NSL-KDD數(shù)據(jù)集上進行流量分類研究。不過這兩種方法的輸入數(shù)據(jù)使用的都是數(shù)據(jù)集里已經(jīng)設計好的人工特征,恰恰摒棄了深度神經(jīng)網(wǎng)絡的優(yōu)勢,即直接從原始數(shù)據(jù)中自動學習特征,其在圖像處理和自然語言處理領域的成功表現(xiàn)都印證了這一點。
因此,另一些研究使用卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)或循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)來執(zhí)行基于時空特征的入侵檢測任務。Wang等人[7]提出利用CNN學習網(wǎng)絡流量的空間特征,將流量數(shù)據(jù)轉(zhuǎn)換為二維圖像直接輸入CNN中進行特征學習,提出了一種基于CNN的惡意軟件流量分類方法。該方法最顯著的優(yōu)點在于不需要手工設計特征。Torres等人[8]首先將網(wǎng)絡流量轉(zhuǎn)化為一系列字符串,然后利用長短期記憶網(wǎng)絡(Long Short-Term Memory,LSTM)學習它們的時序特征,進而應用于檢測僵尸網(wǎng)絡流量。這些方法完全避免了人工特征的使用,而是讓神經(jīng)網(wǎng)絡直接從流量中自動學習特征進行分類,存在的問題在于同時只利用了一種神經(jīng)網(wǎng)絡提取一個維度的特征。
不同于上述已有工作,本文結(jié)合CNN與RNN兩種算法建立模型,自動學習網(wǎng)絡流量空間與時序兩個維度的特征,從而實現(xiàn)對大規(guī)模復雜僵尸網(wǎng)絡的檢測。
本方案使用深度神經(jīng)網(wǎng)絡從未經(jīng)處理的原始網(wǎng)絡流量中自動提取其空間與時序特征,期望得到高準確率的分類結(jié)果?;镜脑O計理念如下:空間特征提取方法為將每個數(shù)據(jù)包轉(zhuǎn)換為二維圖像格式,之后利用CNN在圖像識別領域的方法進一步學習數(shù)據(jù)包內(nèi)部的空間特征;數(shù)據(jù)包之間的時序特征則采用RNN在自然語言處理領域的方法進行提??;最終,利用兩種深度神經(jīng)網(wǎng)絡學習得到的時空特征,將輸入流量數(shù)據(jù)劃分為正常流量是僵尸網(wǎng)絡流量。整體模型的工作流程如圖1所示。
圖1 工作流程
本方案采用的樣本流量數(shù)據(jù)集為pcap格式的文件,該文件由多個數(shù)據(jù)包構(gòu)成。由于深度學習時序特征分析的對象為數(shù)據(jù)流,因此先要對樣本流量數(shù)據(jù)進行預處理,將其聚合為數(shù)據(jù)流形式。相關概念定義如下。
定義1:數(shù)據(jù)包。數(shù)據(jù)包定義p=(xp,sp,tp),xp=<src_ip,src_port,dst_ip,dst_port,protocol>,是一個由源IP、源端口、目的IP、目的端口和傳輸協(xié)議組成的五元組。sp表示以字節(jié)為單位的數(shù)據(jù)包的長度;tp表示數(shù)據(jù)包的開始發(fā)送時間;原始數(shù)據(jù)集可以表示為數(shù)據(jù)包的集合p=(p1,p2,…,pn),n為數(shù)據(jù)集包含的數(shù)據(jù)包數(shù)量。
定義2:數(shù)據(jù)流。每個具有相同五元組的數(shù)據(jù)包按照時間順序排列組成一個集合,將這個集合稱為數(shù)據(jù)流,即P={p1=(x1,s1,t1),…,pi=(xi,si,ti)},其中x1=…=xi,t1<…<ti。單個數(shù)據(jù)流可表示為f=〈xf,sf,df,tf〉。其中,xf表示相同的五元組,sf表示流中所有數(shù)據(jù)包的長度之和,df表示所有數(shù)據(jù)包的持續(xù)時間,tf表示首個數(shù)據(jù)包的開始發(fā)送時間。整個原始流量可以轉(zhuǎn)換為一個數(shù)據(jù)流組成的集合F={f1,…, fn}。
K-折交叉驗證是使用訓練集衡量模型性能。為了有效估測泛化誤差設計的實驗方法,數(shù)據(jù)集被隨機分為K個大小相同的子集。在每次迭代中,選擇一個為驗證數(shù)據(jù)集,剩余的K-1個作為訓練數(shù)據(jù)集,如此重復K次。本文實驗中取K=10。
相較于傳統(tǒng)全連接神經(jīng)網(wǎng)絡,CNN在其基礎上進行了稀疏鏈接、權值共享和池化等改進,具有更好的特征學習能力,且已經(jīng)在圖像識別領域取得了優(yōu)異成果。因此,本文選擇采用CNN對數(shù)據(jù)的空間特征進行學習。
每條數(shù)據(jù)流都需要被轉(zhuǎn)換為二維圖像。為了提取出相同維度的特征,CNN要求輸入的圖像大小相同。然而,流量數(shù)據(jù)集中每條數(shù)據(jù)流大小都不一樣,因此截取每條數(shù)據(jù)流的前1 024字節(jié)的數(shù)據(jù),長度小于1 024字節(jié)的數(shù)據(jù)流在后面補充0x00。這樣的原因是一條數(shù)據(jù)流主要的連接信息和內(nèi)容交換部分主要包括在它的前面,僅使用這部分就可以較好地反映整條數(shù)據(jù)流的主要特征。
本文流量預處理得到的數(shù)據(jù)格式和數(shù)據(jù)量大小與LeNet-5結(jié)構(gòu)相似。LeNet-5是具有7層網(wǎng)絡結(jié)構(gòu)的CNN,包含3個卷積層、2個池化層和2個全連接層。LeNet-5是一種用于手寫體字符識別的高效的卷積神經(jīng)網(wǎng)絡。由于由數(shù)據(jù)流轉(zhuǎn)換的二維圖像比手寫體字符更加復雜,所以實驗中的CNN結(jié)構(gòu)添加了更多的卷積核來學習樣本特征,最終本文實驗中的CNN包含了2個卷積層、2個池化層和2個全連接層。
CNN的具體結(jié)構(gòu)如下。
(1)卷積層C1:使用32個大小為5×5的卷積核,步長為1,輸出32個大小為28×28的特征圖。
(2)池化層S2:使用2個大小為2×2的過濾器,輸出32個大小為14×14的特征圖。
(3)卷積層C3:使用64個大小為5×5的卷積核,步長為1,輸出32個大小為28×28的特征圖。C3中每個特征圖連接到S2層的所有32個或幾個特征圖,表示本層特征圖是上一層提取到的特征圖的不同組合。
(4)池化層S4:使用2個大小為2×2的過濾器,輸出64個大小為5×5的特征圖。
(5)全連接層D5:由1 024個神經(jīng)元構(gòu)成,輸出為1 024維向量。
(6)全連接層D6:由10個神經(jīng)元構(gòu)成,輸出為10維向量。
網(wǎng)絡流量具有明顯的層次化特征,最底層的網(wǎng)絡流量字節(jié)組合成一個數(shù)據(jù)包,一次完整通信過程中的多個數(shù)據(jù)包又組合成一個數(shù)據(jù)流,網(wǎng)絡流量的層次結(jié)構(gòu)化體系如圖2所示。而這種字節(jié)、數(shù)據(jù)包、數(shù)據(jù)流的鏈式結(jié)構(gòu)與自然語言的單詞、句子、段落的組成方式幾乎一樣,因此本文采用在自然語言處理領域表現(xiàn)優(yōu)異的LSTM學習網(wǎng)絡流量的時序特征。與傳統(tǒng)RNN相比,LSTM通過輸入門、遺忘門及輸出門引入sigmoid函數(shù),并結(jié)合tanh函數(shù)添加求和操作,減少梯度消失和梯度爆炸的可能性,解決了序列數(shù)據(jù)中“長期依賴”的問題。因為根據(jù)網(wǎng)絡協(xié)議的要求,網(wǎng)絡流量中一些數(shù)據(jù)包可能與其之前的N個數(shù)據(jù)包存在一定的關聯(lián),所以LSTM比簡單的RNN適合挖掘網(wǎng)絡流量的時序特征。
圖2 網(wǎng)絡流量層次化結(jié)構(gòu)
用于學習時序特征的輸入數(shù)據(jù)也需要進行格式歸一化,截取每個數(shù)據(jù)流的前8個數(shù)據(jù)包,每個數(shù)據(jù)包取前100個字節(jié),長度小于100字節(jié)的在末尾用0x00補充。
LSTM的具體結(jié)構(gòu)如下。
(1)獨熱編碼層One-Hot:在深度學習的應用中,使用獨熱編碼處理的輸入數(shù)據(jù)可以得到更穩(wěn)定的分類效果,因此在進行LSTM學習前需要對每一個數(shù)據(jù)包進行處理。每個數(shù)據(jù)包取前100個字節(jié),每個字節(jié)經(jīng)過獨熱編碼轉(zhuǎn)換為一個256維的向量,所以每個數(shù)據(jù)包就轉(zhuǎn)換為100×256的矩陣。
(2)LSTM層L1:由100個LSTM單元構(gòu)成,輸入為獨熱編碼后的字節(jié)序列,輸出為100個256維向量。
(3)全連接層D1:由256個神經(jīng)元構(gòu)成,輸出為256維向量。
(4)LSTM層L2:由8個LSTM單元構(gòu)成,輸入為D1層生成的數(shù)據(jù)包序列,輸出為8個256維向量。
(5)全連接層D2:由10個神經(jīng)元構(gòu)成,輸出為10維向量。
在進行分類前,為了同時保留流量的時空特征,需要將經(jīng)過CNN學習得到的空間特征與LSTM學習得到的時序特征串聯(lián)起來,所以分類器的輸入是一個由兩個深度神經(jīng)網(wǎng)絡輸出的10維向量串聯(lián)得到的20維向量。
對于分類器的選擇,使用Softmax分類器執(zhí)行分類任務,輸入向量的第i個元素的Softmax值為:
其中i為向量的第i個元素,Softmax將多個神經(jīng)元的輸出映射到(0,1)區(qū)間內(nèi),這些值的累和為1。在最后選取輸出結(jié)點時,選取概率最大(即值對應最大)的點作為預測目標。Softmax分類器將對輸入進行二分類,輸出結(jié)果為正常流量與僵尸網(wǎng)絡兩類。
本實驗采用的是ISCX2014數(shù)據(jù)集,此數(shù)據(jù)集是將ISOT DATASET、ISCX2012 IDS DATASET以及Botnet traffic generated by the Malware Capture Facility Project的非重疊子集組合在一起得到的。數(shù)據(jù)集分為訓練集和測試集,分別包含了7種和16種僵尸網(wǎng)絡。訓練集的大小是5.3 GB,其中43.92%是惡意的;測試集大小為8.5 GB,其中44.97%是惡意的。
使用準確率(Accuracy,ACC)、檢測率(Detection Rate,DR)和誤報率(False Alarm Rate,F(xiàn)AR)入侵檢測領域常用的3個指標對輸出結(jié)果進行評價。ACC被用來評價系統(tǒng)的整體性能,DR被用來評估系統(tǒng)在惡意流量檢測方面的性能,F(xiàn)AR被用來評估正常流量的誤報概率:
其中,F(xiàn)β值為查準率和查全率的加權調(diào)和平均值,本文將β定為0.5,TP是被正確分類為僵尸網(wǎng)絡樣本的個數(shù),TN是被正確分類為非僵尸網(wǎng)絡樣本的個數(shù),F(xiàn)P是被錯誤分類為僵尸網(wǎng)絡樣本的個數(shù),F(xiàn)N是被錯誤分類為非僵尸網(wǎng)絡樣本的個數(shù)。
在對數(shù)據(jù)集進行預處理時,將原始流量數(shù)據(jù)截取至長度相同的格式,以符合深度神經(jīng)網(wǎng)絡需要的輸入形式,其中相關參數(shù)包括以下3個部分:
(1)空間特征學習中,每條數(shù)據(jù)流的字節(jié)數(shù);
(2)時序特征學習中,每條數(shù)據(jù)流的數(shù)據(jù)包數(shù)與每個數(shù)據(jù)包中的字節(jié)數(shù);
(3)時間特征學習中,每個數(shù)據(jù)包的字節(jié)數(shù)。
由表1可知,當數(shù)據(jù)流的字節(jié)數(shù)超過1 024(32×32)時,準確率不再上升??紤]到時間成本,本文將字節(jié)數(shù)確定為1 024(32×32)。
表1 數(shù)據(jù)流字節(jié)數(shù)對實驗結(jié)果的影響
在ISCX2014數(shù)據(jù)集中,每條數(shù)據(jù)流所含的數(shù)據(jù)包多為6~10個,每個數(shù)據(jù)包的字節(jié)數(shù)大多在100字以下,一個可能的原因是數(shù)據(jù)流里前面的若干個數(shù)據(jù)包與連接創(chuàng)建相對應,而數(shù)據(jù)包前100字節(jié)基本是包含概述信息的包頭和少量的數(shù)據(jù)。由此將數(shù)據(jù)包的字節(jié)數(shù)分別取6、8、10、12,數(shù)據(jù)流的數(shù)據(jù)包個數(shù)分別取80、100、120進行實驗,結(jié)果如表2所示。
表2 數(shù)據(jù)包個數(shù)與數(shù)據(jù)包的字節(jié)數(shù)對實驗結(jié)果的影響
從表2可以看出,隨著參數(shù)值的變大,準確率不再顯著提升。在相近的準確率下,參數(shù)越小越好,所以本文將數(shù)據(jù)流的數(shù)據(jù)包個數(shù)確定為100,每個數(shù)據(jù)包的字節(jié)數(shù)確定為8。
3.4.1 實驗環(huán)境
采用keras作為神經(jīng)網(wǎng)絡框架,計算機配置為4核8 GB內(nèi)存,顯卡為NVIDIA GTX 1060,搭載64位的window10系統(tǒng)。參數(shù)方面,mini-batch大小為128,訓練時間為30輪epoch。
3.4.2 實驗結(jié)果
如上文所述,僵尸網(wǎng)絡檢測方面已經(jīng)有利用CNN、RNN等深度神經(jīng)網(wǎng)絡提取網(wǎng)絡流量特征的研究,不過其共同特點是單獨使用了其中的一種技術,只學習空間或時序特種。本文同時結(jié)合CNN和LSTM技術提取網(wǎng)絡流量的時空特征,以期得到更高效的檢測結(jié)果。因此,使用ISCX2014數(shù)據(jù)集對以下3種模型分別進行多輪訓練,并對檢測結(jié)果進行多方面的對比評估。
(1)模型A:只使用CNN提取空間特征。
(2)模型B:只使用LSTM提取時間特征。
(3)模型C:同時使用CNN和LSTM提取時空特征。
表3和表4顯示了3種模型得到的Fβ和FAR。
表3 3種模型下得到的Fβ
表4 3種模型下得到的FAR
從表3和表4可以看出,在單獨學習一個特征的情況下,模型A的表現(xiàn)相對優(yōu)于模型B,30輪訓練后模型A的Fβ值為0.988,模型B的Fβ值則為0.973,說明空間特征能更好地反映網(wǎng)絡流量特性,而同時使用時空特征的模型C的性能比模型A和模型B均有明顯提升,30輪訓練后Fβ值達到0.997,F(xiàn)PR為0.012。綜上所述,在檢測僵尸網(wǎng)絡流量時,利用CNN和LSTM提取出來的二維特征相比單一特征,能更好地反映網(wǎng)絡流量的特性,具有更高的準確率和更低的誤報率。
本文提出了一種由兩種深度神經(jīng)網(wǎng)絡構(gòu)成的僵尸網(wǎng)絡檢測模型,結(jié)構(gòu)相比傳統(tǒng)機器學習模型更加復雜。該模型使用CNN與LSTM對原始網(wǎng)絡流量自動學習其時空特征,首先將數(shù)據(jù)流轉(zhuǎn)化為一張二維圖像,利用CNN在圖像識別領域應用的方法從中學習特征,再利用LSTM在自然語言處理領域的方法學習數(shù)據(jù)流中字節(jié)序列和數(shù)據(jù)包序列的特征。相比樸素貝葉斯、SVM等傳統(tǒng)機器學習算法,上述學習過程完全由神經(jīng)網(wǎng)絡自動完成,不需要任何人工特征技術,有效避免了手工設計特征這一復雜的步驟,同時具有更高的準確率與更低的誤報率。