李俊, 夏松竹, 蘭海燕, 李守政, 孫建國
(1.國家工業(yè)信息安全發(fā)展研究中心,北京 100040; 2.哈爾濱工程大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150001)
網(wǎng)絡(luò)安全包括承載載體的完整性、可用性及機密性。任何企圖破壞機密性或者繞過網(wǎng)絡(luò)安全機制的活動都可以視為網(wǎng)絡(luò)入侵[1]。網(wǎng)絡(luò)入侵檢測系統(tǒng)是一種用于檢測網(wǎng)絡(luò)入侵的安全管理系統(tǒng),是網(wǎng)絡(luò)安全系統(tǒng)中不可或缺的一部分[2]。網(wǎng)絡(luò)入侵檢測系統(tǒng)通常會抓取檢測特定網(wǎng)絡(luò)中全部的出流量及入流量,以確定其中一些數(shù)據(jù)包是否含有入侵跡象[3]。
近年來,機器學(xué)習(xí)的許多研究應(yīng)用在入侵檢測領(lǐng)域。例如,支持向量機、人工神經(jīng)網(wǎng)絡(luò)和遺傳算法在入侵檢測領(lǐng)域取得了不錯的成績。但是由于入侵呈現(xiàn)多樣化,現(xiàn)有的機器學(xué)習(xí)方法暴露出很多局限性。尤其在自動提取入侵特征和分析中,需要更好的學(xué)習(xí)方法。
Hinton等[4]研究發(fā)現(xiàn),深度學(xué)習(xí)被廣泛應(yīng)用在自然語言處理、圖像識別和天氣預(yù)報領(lǐng)域。深度學(xué)習(xí)中應(yīng)用高度非線性結(jié)構(gòu),在處理復(fù)雜數(shù)據(jù)時表現(xiàn)出出色的識別能力。并行計算硬件設(shè)施的高速發(fā)展也為深度學(xué)習(xí)算法提供了強有力的硬件支撐。通過設(shè)計合理的網(wǎng)絡(luò)結(jié)構(gòu),深度神經(jīng)網(wǎng)絡(luò)可有效控制神經(jīng)網(wǎng)絡(luò)的參數(shù)量,確保網(wǎng)絡(luò)性能的同時,降低神經(jīng)網(wǎng)絡(luò)的運行成本[5]。
由于訓(xùn)練和計算復(fù)雜性,遞歸神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)在過去的一段時間未能成為主流深度學(xué)習(xí)的網(wǎng)絡(luò)模型。近些年,RNN開始進入快速發(fā)展時期,在手寫識別[6]和語音識別[7-8]領(lǐng)域有了廣泛的應(yīng)用。RNN的特點是同一層中的節(jié)點是連通的。因此,隱藏層的輸入不僅包括上層的輸出,還包含最后一個時間點的同一層的輸出[9]。許多入侵行為可以抽象為來自底層網(wǎng)絡(luò)的特定時間序列的時間。因此,RNN被認(rèn)為適合用來構(gòu)建入侵檢測系統(tǒng)。
本文將門控循環(huán)單元(gated recurrent unit,GRU)結(jié)構(gòu)放在RNN神經(jīng)網(wǎng)絡(luò)中進行入侵檢測,模型可以識別具有時序特性的入侵流量。分析并設(shè)計模型的層次結(jié)構(gòu),分析最優(yōu)的損失函數(shù)、分類函數(shù),提出了一種最適用于本文的優(yōu)化函數(shù),加快模型收斂速度。
使用歸一化、數(shù)值化方法處理元數(shù)據(jù)。KDD數(shù)據(jù)集中的數(shù)據(jù)是多組一維向量組成:
[0,tcp,http,SF,219,1098,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,7,255,1.00,0.00,0.14,0.05,0.00,0.01,0.00,0.00,normal]
每列所代表內(nèi)容為:
[“duration”,“protocol_type”,“service”,“flag”,“src_bytes”,“dst_bytes”,“l(fā)and”,“wrong_fragment”,“urgent”,“hot”,“num_failed_logins”,“l(fā)ogged_in”,“num_compromised”,“root_shell”,“su_attempted”,“num_root”,“num_file_creations”,“num_shells”,“num_access_files”,“num_outbound_cmds”,“is_host_login”,“is_guest_login”,“count”,“srv_count”,“serror_rate”,“srv_serror_rate”,“rerror_rate”,“srv_rerror_rate”,“same_srv_rate”,“diff_srv_rate”,“srv_diff_host_rate”,“dst_host_count”,“dst_host_srv_count”,“dst_host_same_srv_rate”,“dst_host_diff_srv_rate”,“dst_host_same_src_port_rate”,“dst_host_srv_diff_host_rate”,“dst_host_serror_rate”,“dst_host_srv_serror_rate”,“dst_host_rerror_rate”,“dst_host_srv_rerror_rate”,“l(fā)abel”]
其中4項是字符型的數(shù)據(jù),需要對其進行數(shù)值化處理。例如最后一項數(shù)據(jù)類型label,共有5種,分別是普通行為、拒絕服務(wù)攻擊、網(wǎng)絡(luò)窺探、越權(quán)攻擊、遠(yuǎn)程攻擊。此部分?jǐn)?shù)據(jù)離散化不能作為GRU-RNN模型的直接輸入,需要將數(shù)據(jù)重新編碼??梢圆捎肙ne-hot編碼方式。在用機器學(xué)習(xí)算法分類時,計算各個特征之間的距離非常重要。One-hot編碼基本思想是將原數(shù)據(jù)的離散值轉(zhuǎn)換為歐式空間中的一個點。label分類的轉(zhuǎn)換可以如表1所示。
表1 攻擊分類one-hot編碼表Table 1 Attack classification one-hot code table
元數(shù)據(jù)的范圍不一致,例如第一列數(shù)據(jù)在(0,1)分布,第5列數(shù)據(jù)理論上可以達(dá)到無窮大。不利于神經(jīng)網(wǎng)絡(luò)的處理。如果數(shù)值過大會增加計算負(fù)擔(dān)。所以對數(shù)據(jù)進行歸一化處理,例如將第5列數(shù)據(jù)歸一到(0,1),本文采用歸一化式:
(1)
推出RNN的目的是因為人們想要利用帶有順序性的數(shù)據(jù)。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中,假設(shè)所有輸入和輸出互相獨立。但是對于許多的任務(wù)處理,這種處理方式得到的模型效果很差。例如某人想要預(yù)測句子的下一個單詞,那么他最好知道之前的單詞都是什么,否則無法完成預(yù)測。RNN之所以稱之為遞歸,是因為它對序列的每個元素都執(zhí)行相同的任務(wù),它的輸出受之前運算影響。RNN具有記憶功能,可以捕獲到目前已經(jīng)計算出來的所有有關(guān)的內(nèi)容。
RNN具有記憶功能,得益于RNN的模型結(jié)構(gòu)設(shè)計,可以將之前的信息傳遞到后面的隱含層中,從而達(dá)到記憶的效果。RNN能夠記住在時間t處理的信息,在隨后的時間進行計算,RNN模型結(jié)構(gòu)圖如圖1所示。
圖1 遞歸神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Recurrent neural network structure diagram
RNN的模型結(jié)構(gòu)比較簡單,由輸入層、隱藏層和輸出層組成。輸入層與隱含層和隱含層與輸出層之間為全連接的狀態(tài),隱含層自身也有一個自循環(huán)結(jié)構(gòu)。RNN模型展開圖如圖2所示。
圖2 遞歸神經(jīng)網(wǎng)絡(luò)的層級展開Fig.2 Hierarchical expansion of recurrent neural network
RNN展開圖中t-1,t,t+1代表時間順序。輸入層用x表示,W表示之前樣本的權(quán)重矩陣,U表示當(dāng)前時刻輸入樣本的權(quán)重矩陣,V表示輸出的權(quán)重矩陣。St表示數(shù)據(jù)在時間點t的隱藏狀態(tài),其計算過程受上一個時間點計算出來的狀態(tài)影響:
St=f(W*St-1+U*Xt)
(2)
其中,f(·)為激活函數(shù),采用tanh函數(shù)。
模型一般在t時刻初始化各類初值,其余值初始化階段:
h1=Ux1+Ws0
(3)
s1=f(h1)
(4)
o1=g(Vs1)
(5)
其中g(shù)(·)為激活函數(shù),采用SOFTMAX函數(shù),在一次運算完成后,當(dāng)前的狀態(tài)將作為t時刻的狀態(tài)參與下一時刻的運算:
h2=Ux2+Ws1
(6)
s2=f(h2)
(7)
o2=g(Vs2)
(8)
由此可知,最終輸出的式為:
ht=Uxt+Wst-1
(9)
st=f(ht)
(10)
ot=g(Vst)
(11)
可以將隱藏狀態(tài)視為RNN“內(nèi)存”。 捕獲t時間點前發(fā)生的所有事情,并基于t時間點計算輸出。RNN在所有步驟中共享相同的參數(shù)(U,W,V),減少了學(xué)習(xí)過程中需要學(xué)習(xí)的參數(shù)總數(shù)。
門控循環(huán)單元(gated recurrent unit,GRU)在多種應(yīng)用領(lǐng)域中被證明是一種有效的LSTM變體,其結(jié)構(gòu)是LSTM的簡化和提升版[10]。使用復(fù)位門和更新門替代LSTM結(jié)構(gòu)中輸入門、遺忘門和輸出門。復(fù)位門來計算是否忘記之前計算狀態(tài),更新門決定將上一步多少信息繼續(xù)迭代到當(dāng)前步驟[11]。GRU結(jié)構(gòu)如圖3所示。
圖3 門控循環(huán)單元結(jié)構(gòu)Fig.3 gated recurrent unit structure diagram
GRU結(jié)構(gòu)的主要計算式:
rt=σ(Wrxt+Urht-1)
(12)
zt=σ(Wzxt+Urht-1)
(13)
(14)
(15)
GRU結(jié)構(gòu)比LSTM簡單,在運算的速度和性能上比LSTM更有優(yōu)勢[12],其展開圖如圖4所示。
圖4 門控循環(huán)單元展開Fig.4 Hierarchical expansion of gated recurrent unit
傳統(tǒng)網(wǎng)絡(luò)入侵檢測[13-14]被證明是非常有效的檢測手段,但這類檢測方式只對例如越權(quán)攻擊有較好的檢出率[15]。由于網(wǎng)絡(luò)入侵有明顯的時序性,例如DDOS攻擊就是在短時間內(nèi)大量的訪問某服務(wù)造成服務(wù)不可用的狀態(tài)。傳統(tǒng)的檢測方式[16],無法對持續(xù)一段時間的攻擊行為進行檢測,會在迭代學(xué)習(xí)的過程中產(chǎn)生一種梯度消失的現(xiàn)象,即遺忘[17]。所以本文采用RNN循環(huán)神經(jīng)網(wǎng)絡(luò),結(jié)合GRU模型,能夠處理具有時序性的攻擊信息。
將GRU與RNN結(jié)合,構(gòu)建GRU-RNN網(wǎng)絡(luò)入侵檢測模型。如圖5所示,該系統(tǒng)由數(shù)據(jù)預(yù)處理模塊、過采樣模塊、GRU模塊、RNN模塊和輸出模塊組成。預(yù)處理模塊負(fù)責(zé)將原數(shù)據(jù)轉(zhuǎn)換為適合神經(jīng)網(wǎng)絡(luò)輸入的數(shù)值;GRU模塊由2個GRU層組成,每層含2個GRU結(jié)構(gòu)存儲數(shù)據(jù),是系統(tǒng)的核心部分;RNN模塊含15層隱含層,對GRU模塊的輸出執(zhí)行非線性映射,最終做出非線性的分類決策。KDD數(shù)據(jù)集共有5種行為,分別是普通行為、拒絕服務(wù)攻擊、網(wǎng)絡(luò)窺探、越權(quán)攻擊、遠(yuǎn)程攻擊。所以輸出層采用SOFTMAX函數(shù)對結(jié)果進行分類處理,可標(biāo)準(zhǔn)化分類概率并將其輸出為最終結(jié)果。
圖5 GRU-RNN網(wǎng)絡(luò)結(jié)構(gòu)Fig.5 GRU-RNN network structure diagram
在這些組件當(dāng)中,GRU和RNN模塊是2種不同的神經(jīng)網(wǎng)絡(luò)模型。GRU結(jié)構(gòu)復(fù)雜,計算量大。RNN結(jié)構(gòu)簡單,可以進行快速的計算且易于堆疊。所以本文采用2層GRU和15層RNN隱含層來實現(xiàn)。兩者構(gòu)成一個深層網(wǎng)絡(luò),實現(xiàn)更優(yōu)化的結(jié)果。
輸入層具有41個輸入神經(jīng)元,輸入層連接到2個記憶模塊的隱含層,輸入層的神經(jīng)元與隱含層是全連接的關(guān)系。
1)輸入層設(shè)計。
將KDD-99數(shù)據(jù)集中的元數(shù)據(jù)數(shù)值化和歸一化后輸入GRU-RNN模型。其中protocol_type、service、flag和label元數(shù)據(jù)為字符型,利用One-hot編碼成為標(biāo)量。對src_bytes、dst_bytes等數(shù)據(jù)歸一化成為(0,1)標(biāo)量。元數(shù)據(jù)共41個維度,處理后對應(yīng)41個輸入神經(jīng)元的輸入層將元數(shù)據(jù)輸入GRU-RNN。
2)GRU與RNN隱含層設(shè)計。
由2層記憶層組成,該部分負(fù)責(zé)存儲數(shù)據(jù),即模型最核心的創(chuàng)新點“記憶功能”。用于識別持續(xù)時間較長的攻擊行為。然后將數(shù)據(jù)導(dǎo)入一個15層的RNN隱含層進行特征識別。
3)輸出層。
該KDD-99數(shù)據(jù)集中共有5種行為被標(biāo)識,所以本系統(tǒng)采用一個5個輸出神經(jīng)元的輸出層。
對于分類問題,分類結(jié)果可以是正確的或不正確的,所有可能的結(jié)果可以分為表2中4個情況。
表2 性能指標(biāo)分類表Table 2 Measure classification
TP表示模型檢測出攻擊流量的數(shù)目,且該檢測結(jié)果是正確的;FN表示檢出為攻擊流量的數(shù)目,但其檢測結(jié)果錯誤,這些流量實際是正常流量;TN表示檢出為正常流量的數(shù)目,且檢測結(jié)果是正確的;FP表示檢出為正常流量的數(shù)目,但其檢測結(jié)果錯誤,實際該流量是攻擊流量。其中,F(xiàn)P和FN稱為誤報。
根據(jù)以上4個參數(shù),通??梢缘贸?個指標(biāo)衡量一個模型的實際性能。
準(zhǔn)確率:
(16)
檢出率:
(17)
正確檢出率:
(18)
漏報率:
(19)
相關(guān)系數(shù):
(20)
其中,式(16)代表正確判斷所有入侵流量和正常流量的概率;式(17)、(18) 代表攻擊流量的檢出率;式(19)代表攻擊流量被當(dāng)成正常流量的誤報率;式(20)是衡量模型總體指標(biāo)的衡量函數(shù)。
KDD數(shù)據(jù)集是美國空軍模擬空軍基地局域網(wǎng),收集7個星期的訓(xùn)練數(shù)據(jù)和2個星期的測試數(shù)據(jù)。手機的數(shù)據(jù)總數(shù)包含200多個實例。
流量被分類為正常流量或某種攻擊類型。攻擊被分成4個攻擊類別:拒絕服務(wù)攻擊(DOS)、網(wǎng)絡(luò)探測(Probe)、遠(yuǎn)程攻擊(R2L)和越權(quán)攻擊(U2R)。
為進一步驗證本文提出的GRU-RNN網(wǎng)絡(luò)模型性能。與其他文獻中入侵檢測模型進行比較,包括不平衡學(xué)習(xí)、支持向量機、DNN等學(xué)習(xí)方法[18-19]。此外在本實驗中,使用NSL-KDD數(shù)據(jù)集進行實驗,作為KDD數(shù)據(jù)集的改進版,解決了KDD-CUP-99數(shù)據(jù)集s一些固有問題[20]。但總體仍然存在一些問題,通常將2種數(shù)據(jù)集一起使用。
如表3~5所示,實驗測試了不同模型的整體檢測性能。
表3 與其他不平衡算法性能比較Table 3 Comparison with other imbalance algorithms
表4 與其他傳統(tǒng)算法性能比較Table 4 Compared with other traditional algorithms
表5 與其他深度學(xué)習(xí)算法性能比較Table 5 Comparison with other deep learning algorithms
與其他的不平衡學(xué)習(xí)方法相比,本文提出的GRU-RNN模型使用最少的樣本來獲得最佳性能。在準(zhǔn)確率和正確檢出率方面,I-NGSA與CANN+SMOTE模型在不平衡學(xué)習(xí)模型中取得了比較好的效果。相比之下,本文提出的GRU-RNN模型效果略遜色于上述2種模型,但由于均達(dá)到99%以上的檢出率。所以可以忽略本部分的劣勢,可以視為是較好的檢測水平。
與淺層學(xué)習(xí)相比,GA-LR在淺層學(xué)習(xí)中所有指標(biāo)均表現(xiàn)良好,總體效果要略好于本文提出的模型。但由于GA-LR模型所需要的訓(xùn)練數(shù)據(jù)集大小為本模型的7倍。因此,在相同的數(shù)據(jù)量下,本模型的收斂性比GA-LR模型好。表現(xiàn)出本算法在少量數(shù)據(jù)的時候,就能達(dá)到最優(yōu)狀態(tài)。
與其他深度學(xué)習(xí)模型[21-22]相比,結(jié)果顯示其他深度模型均有較好的性能。其中,CNN-LSTM與DNN模型總體上檢測效果要好于本模型,與GA-LR模型具有同樣的問題,需要的數(shù)據(jù)量遠(yuǎn)大于本模型。S-NADE模型,整體性能較差,需要的數(shù)據(jù)量也遠(yuǎn)超本模型。SCDNN模型,正確檢出率極低。
1)實驗結(jié)果驗證了基于GRU網(wǎng)絡(luò)記憶模塊的GRU-RNN入侵檢測系統(tǒng),能夠解決傳統(tǒng)的入侵檢測模型普遍無法對具有時序特征(尤其是持續(xù)時間較長的攻擊)檢出率不高的問題。
2)對KDD數(shù)據(jù)集的仿真實驗表明,該模型能夠在使用較少數(shù)據(jù)集的條件下,達(dá)到99%以上的準(zhǔn)確率,且具有較好的準(zhǔn)確率、檢出率和漏報率。
本文對所提出的模型主要進行了理論驗證,為了驗證該模型的實際應(yīng)用,需要投入到大量的工程中運行。下一步的研究重點是優(yōu)化模型,使其能夠應(yīng)用在網(wǎng)絡(luò)入侵檢測的實際場景中。