(西南科技大學 計算機科學與技術(shù)學院,四川 綿陽 621010)
入侵檢測系統(tǒng)(intrusion detection system,IDS)是計算機網(wǎng)絡(luò)中一種主動防御的成果,它為人類工作和生活提供安全保護。此前,許多學者提出了一些典型的IDS;文獻[1]結(jié)合改進的KNN和Kmeans實現(xiàn)I2K用于入侵檢測,結(jié)果表明該算法具備良好的檢測率和新攻擊識別能力,但檢測速度仍有待提升;文獻[2]提出一種結(jié)合多目標優(yōu)化理論的克隆選擇算法,其能有效改善種群進化效率,增加種群多樣性,進而提高檢測率,但對于樣本容量較大時,檢測效率仍然比較低;文獻[3]先用信息增益(IG)對網(wǎng)絡(luò)數(shù)據(jù)進行特征提取,再用主成分分析(PCA)進行數(shù)據(jù)降維,最后用Naive Bayes來完成入侵分類檢測,該方法雖然檢測率高于KPCA、FPCA、PCA-LDA,但并未提高對各攻擊的檢測率。文獻[4]使用自適應(yīng)SSO的分組過濾方法來完成入侵檢測,雖然在不降低網(wǎng)絡(luò)安全性的前提下,能有效減輕基于簽名的入侵檢測系統(tǒng)的負擔,但在黑名單分組過濾簽名匹配時還是消耗了較多時間。
隨著大數(shù)據(jù)時代到來,網(wǎng)絡(luò)數(shù)據(jù)的數(shù)量增多、格式多變、網(wǎng)絡(luò)入侵行為多樣化等,傳統(tǒng)網(wǎng)絡(luò)入侵檢測模型面臨著檢測精度低、誤報率高等問題。而近年來深度學習的興起,基于深度學習的IDS也慢慢開始得到應(yīng)用。文獻[5]利用獨熱編碼對網(wǎng)絡(luò)包進行編碼形成二維數(shù)據(jù),再用GoogLeNet進行特征提取并訓練Softmax分類器,其在檢測精度、漏檢率和誤檢率等都有很大提升;文獻[6]結(jié)合深度學習理論和神經(jīng)網(wǎng)絡(luò)的極限學習機,提出一種自編碼器-極限學習機入侵檢測模型;用MODBUS數(shù)據(jù)集進行仿真實驗,結(jié)果表明其優(yōu)于SVM、ELM、DBN、MLP、K-Means,符合網(wǎng)絡(luò)入侵檢測“高精度,低誤報率”的檢測要求。而本文結(jié)合DNN優(yōu)異的特征學習能力、BN的規(guī)范化數(shù)據(jù)處理和Adam自適應(yīng)梯度優(yōu)化方法,提出了一種基于Adam-BNDNN的入侵檢測模型。
深層神經(jīng)網(wǎng)絡(luò)(deep neural network,DNN)屬第三代人工神經(jīng)網(wǎng)絡(luò),它具有1個輸入層,1個輸出層和n個隱含層,結(jié)構(gòu)如圖1 所示,在數(shù)據(jù)量大的情況下可以計算得更快,花費更少的代價[7]。
圖1 DNN網(wǎng)絡(luò)結(jié)構(gòu)圖
DNN同樣和分為前向和后向。首先對權(quán)值W和閾值b進行初始化,前向時數(shù)據(jù)通過預(yù)處理后從輸入層經(jīng)n個隱含層計算后傳入輸出層,輸出層激活后的輸出結(jié)果與期望結(jié)果進行對比得到誤差,誤差再以梯度下降的方式從輸出層經(jīng)隱含層回傳至輸入層,以此便完成了一輪神經(jīng)網(wǎng)絡(luò)的訓練。
初始化時一般將閾值b初始化為0,傳統(tǒng)神經(jīng)網(wǎng)絡(luò)權(quán)值初始化常用初始化為0和隨機初始化,但W初始化為0會出現(xiàn)每一層的學習能力相同,因而整個網(wǎng)絡(luò)的學習能力也有限;而隨機初始化實質(zhì)上是一個均值為0方差為1高斯分布,若神經(jīng)網(wǎng)絡(luò)層數(shù)增加,則會出現(xiàn)后面層激活函數(shù)的輸出值接近0,進而可能產(chǎn)生梯度消失。
而現(xiàn)在常用的權(quán)值初始化有Xavier初始化、He初始化等。Xavier初始化中輸入和輸出都被控制在一定范圍內(nèi),激活函數(shù)的值都盡量遠離0,則不會出現(xiàn)梯度過小的問題,公式如式(1):
(1)
但是Xavier對于激活函數(shù)ReLU不太適合,在更深層的ReLU中,激活函數(shù)的輸出明顯接近0,所以Xavier一般用于Sigmiod和Tanh。
而He初始化的出現(xiàn)解決了ReLU的問題,此方法基本思想是正向傳播時,激活值方差不產(chǎn)生變化,回傳時,激活值梯度方差不產(chǎn)生變化;對于ReLU和Leaky ReLU有不同的初始化方法,ReLU適用于公式(2),Leaky ReLU適用于公式(3),本文采用的便是基于ReLU的He初始化方法。
(2)
(3)
激活函數(shù)的選擇會對模型收斂速度、訓練時間產(chǎn)生非常大的影響。之前常用的激活函數(shù)有Sigmoid以及Tanh,Sigmoid將輸出結(jié)果規(guī)約到0~1之間,Tanh規(guī)約到-1~1之間,在隱層中相較而言Tanh要優(yōu)于Sigmoid,因為Tanh的均值為0,關(guān)于原點對稱,具有對稱性;但兩者在訓練時都容易造成兩端飽和使得導數(shù)趨于零,以致權(quán)重無法更新最終造成梯度消失;而RuLU左邊是抑制的,右邊是有梯度的,一般不會造成梯度消失,因為神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)一般都大于0;且RuLU具有更快的計算速度和收斂速度,因此隱藏層使用RuLU比前兩者更好。3種激活函數(shù)的輸出圖像如圖2所示。
圖2 Sigmoid-Tanh-Softmax函數(shù)圖像
輸出層通常采用Sigmoid函數(shù)或Softmax函數(shù)將輸出層的輸出結(jié)果歸約到0~1之間,如公式(4)和(5):
(4)
(5)
其中,Sigmoid將輸出層每一個輸出節(jié)點的結(jié)果歸約到0~1之間,故輸出節(jié)點間的輸出結(jié)果相互是獨立的,且總和可能為1可能不為1;而Softmax輸出層中每一個輸出節(jié)點的結(jié)果是相互緊密關(guān)聯(lián)的,其概率的總和永遠為1。由于本模型采用One-hot來編碼分類結(jié)果,在輸出層時選用Softmax分類器較為方便。
神經(jīng)網(wǎng)絡(luò)以梯度下降的方式來更新參數(shù)。在參數(shù)更新中,若使用整個數(shù)據(jù)集進行梯度下降,W和b每次更新都在整個數(shù)據(jù)集一次訓練完以后,這樣可能不利于魯棒性收斂,有可能造成局部最優(yōu);如果一次只用1個樣本進行訓練,W和b更新太頻繁,整個訓練的過程也會很長。
而介于兩者之間的Mini-batch,把整個數(shù)據(jù)集隨機分為Mini-batch的Size大小,W和b更新是在每個小批量后,且每次小批量訓練的數(shù)據(jù)更具有隨機性,這樣可以使得模型梯度下降參數(shù)更新更快,避免局部最優(yōu),同時加速模型的訓練。
本文檢測模型主要分3個模塊,結(jié)構(gòu)如圖3所示。
圖3 基于Adam-BNDNN的入侵檢測模型
數(shù)據(jù)獲取和預(yù)處理模塊:獲取網(wǎng)絡(luò)數(shù)據(jù)集,并對其進行特征提取、數(shù)值轉(zhuǎn)換、數(shù)據(jù)歸一化等預(yù)處理操作,使其滿足輸入數(shù)據(jù)的要求;并將其分為訓練集和測試集,分別用于模型訓練和模型測試。
入侵檢測模塊:結(jié)合預(yù)處理后數(shù)據(jù)的維度確定Adam-BNDNN網(wǎng)絡(luò)的輸入輸出節(jié)點,再根據(jù)隱層和其他參數(shù)從而確定整個網(wǎng)絡(luò)結(jié)構(gòu)和訓練參數(shù),用訓練集對模型進行訓練,完成訓練后保存模型用于測試。
檢測分類模塊:測試集使用保存的模型進行測試,并將檢測分類結(jié)果展示給用戶。
Batch Normalization[8](BN)是近些年以來深度學習的一個重要發(fā)現(xiàn),其應(yīng)用在隱藏層,經(jīng)常同Mini-batch一起使用。主要將每個隱層的輸出結(jié)果進行歸一化處理再進入下一個隱層,但并不是簡單的歸一化,而是進行變換重構(gòu),引入λ、β這2個可學習的參數(shù),如公式(6):
(6)
引入?yún)?shù)后,網(wǎng)絡(luò)即可學習出原始網(wǎng)絡(luò)所需的特征信息;BN操作如圖4所示。
圖4 BN操作結(jié)構(gòu)圖
批量規(guī)范化(BN)操作流程:
1)數(shù)據(jù)先從輸入層輸入,經(jīng)隱含層激活計算后得到激活值。
2)對隱含層激活值做批量規(guī)范化可以理解成在隱層后加入了一個BN操作層,這個操作先讓激活值變成了均值為0,方差為1的正態(tài)分布,即將其歸約到0~1之間,最后用γ和β進行尺度變換和偏移得到網(wǎng)絡(luò)的特征信息。
3)數(shù)據(jù)完成BN后再進入下一隱層。
BN的使用降低了初始化要求,可使用較大學習率,也使神經(jīng)網(wǎng)絡(luò)的隱含層增強了相互間的獨立性,同時增大了反向傳播的梯度,進而避免了梯度消失的問題;且和Dropout一樣具有防過擬合的正則化效果。
神經(jīng)網(wǎng)絡(luò)傳統(tǒng)的隨機梯度下降(SGD)缺點是很難選擇一個比較合適的學習率,同時收斂速度也很慢,且容易達到局部最優(yōu)。而以梯度下降為基礎(chǔ)的Adam優(yōu)化算法[9],結(jié)合了RMSProp優(yōu)化算法和Momentum優(yōu)化算法。
RMSProp中神經(jīng)網(wǎng)絡(luò)在訓練時可自動調(diào)整學習率,不用過多的人為調(diào)整;而Momentum則是調(diào)整梯度方向,使得在訓練時加速梯度下降的速度,從而加快訓練過程。參數(shù)更新如公式(7):
(7)
(8)
其中:α、β1、β2、ε都有缺省值,也可以自行調(diào)整。
在網(wǎng)絡(luò)的訓練過程中若數(shù)據(jù)過少或者訓練過度則可能會產(chǎn)生過擬合現(xiàn)象,而正則化可以在學習中降低模型的復(fù)雜度,從而避免過擬合。正則化實質(zhì)在損失函數(shù)中添加了正則項,對損失函數(shù)的參數(shù)做一些限制;一般有L1和L2正則化,本文選用L2正則化,L2正則化對b更新無影響,對w更新有影響;拿邏輯回歸為例,公式如(9)所示:
(9)
實驗選取的是NSL_KDD數(shù)據(jù)集[10],它是KDD CUP數(shù)據(jù)的濃縮版,其在KDD CUP數(shù)據(jù)集的基礎(chǔ)上進行的改進有:
1)KDD中冗余數(shù)據(jù)的去除:使分類結(jié)果不會偏向更頻繁的記錄。
2)KDD中重復(fù)數(shù)據(jù)的去除:使檢測更加準確。
3)數(shù)據(jù)集大小更合理:KDD共有500萬左右條數(shù)據(jù),數(shù)據(jù)總量多且冗余、重復(fù)數(shù)據(jù)多,可能會造成檢測結(jié)果不理想以及訓練時間過長。而NSL數(shù)據(jù)集總量125973條,正常和各異常數(shù)據(jù)占比也符合真實網(wǎng)絡(luò)情況,用于訓練的時間也不會太長。
NSL一共有41維屬性特征和1維標志特征,具體信息如表1所示。
表1 NSL數(shù)據(jù)的屬性信息
3.2.1 特征提取
在NSL數(shù)據(jù)集的41維屬性特征中,每一維屬性特征對結(jié)果的影響都是不一樣的,為了合理選取網(wǎng)絡(luò)數(shù)據(jù)的屬性參數(shù),文獻[11]選取了12個屬性特征,文獻[12]選取了14個屬性特征;文獻[13]選取了15個屬性特征;本文結(jié)合2種特征選取技術(shù)綜合考量后最終選擇21個最優(yōu)特征屬性,如表2所示。
表2 NSL數(shù)據(jù)集21個屬性選取
3.2.2 數(shù)值化
21維屬性特征選取完以后,其中Protocol type、Service、Flag和Label是離散型數(shù)據(jù),對離散型數(shù)據(jù)首先應(yīng)數(shù)值化;
在Protocol type中,共有Tcp、Udp、Icmp三種協(xié)議類型,分別用數(shù)字1、2、3代替;
Service中共有70種服務(wù)名稱,分別用數(shù)字1~70代替;
Flag中共有11種網(wǎng)絡(luò)連接狀態(tài),分別用數(shù)字1~11代替;
最后是Label標志的數(shù)值化,Label共有5種,分別標識Nor、Pro、Dos、U2r、R2l,為了便于后面檢測的分類工作,在數(shù)值化時使用One-hot進行編碼,如Normal編碼為10000。
3.2.3 歸一化
NSL數(shù)據(jù)經(jīng)數(shù)值化后,有些數(shù)值區(qū)間較大,各特征間差異也大,若不經(jīng)處理就做輸入數(shù)據(jù),可能會使訓練結(jié)果偏向更大的數(shù),繼而對訓練速度和精度也會有一定的影響。為了避免上述情況發(fā)生,一般使用公式(10)將其歸一化到0~1之間,
(10)
歸一化后一方面能提升模型收斂速度,另一方面提升模型的精度。
NSL數(shù)據(jù)進行預(yù)處理以后,隨機取其2/3做訓練集,剩下1/3做測試集,如表3所示。檢測評價標準是2分類檢測結(jié)果和5分類檢測結(jié)果的準確率以及誤報率。
表3 訓練集和測試集劃分
在數(shù)據(jù)預(yù)處理中選擇21維屬性特征,5維One-hot編碼標志特征,則Adam-BNDNN對應(yīng)的輸入為21個節(jié)點,輸出為5個節(jié)點。
為了選擇模型訓練合適的Epoch,以3隱層Adam-BNDNN網(wǎng)絡(luò)21-50-30-20-5為例,選取總迭代次數(shù)200次,迭代Epoch和對應(yīng)的代價Loss如圖5所示。
圖5 迭代Epoch和代價Loss曲線圖
結(jié)果顯示:在迭代100次以后,網(wǎng)絡(luò)的訓練代價趨于平緩。在迭代次數(shù)選取時,若迭代次數(shù)過少,則會造成訓練不足,若迭代次數(shù)過多也有可能會造成過擬合。因此,在模型訓練中,選取的迭代Epoch為100次。
接著是神經(jīng)網(wǎng)絡(luò)隱層數(shù)選擇。為了選擇合適的隱層數(shù)量,分別選取隱層數(shù)為1~5的5種不同網(wǎng)絡(luò)結(jié)構(gòu)5分類的平均準確率,網(wǎng)絡(luò)結(jié)構(gòu)如表4所示。
表4 Adam-BNDNN網(wǎng)絡(luò)的不同隱層數(shù)結(jié)構(gòu)
經(jīng)實驗得出,隱層數(shù)為3和4時整體檢測率差不多,但4隱層時U2r和R2l的檢測率低于3隱層,隱層數(shù)為5時精度大幅度下降,綜合考量則最合適的隱層數(shù)為3。
確定了網(wǎng)絡(luò)的Epoch和網(wǎng)絡(luò)結(jié)構(gòu)后,Adam-BNDNN所有參數(shù)設(shè)置如表5所示。
表5 Adam-BNDNN參數(shù)
用NSL-KDD數(shù)據(jù)集仿真實驗后,分別使用2分類檢測結(jié)果和5分類檢測結(jié)果的準確率以及誤報率來評估模型的檢測性能,結(jié)果如表6所示。
為了驗證模型的檢測效果,分別用淺層神經(jīng)網(wǎng)絡(luò)(SNN),K最近鄰(KNN),深層神經(jīng)網(wǎng)絡(luò)(DNN)、Alpha-OSELM[13]與本文做對比,2分類結(jié)果如表7所示,5分類結(jié)果如表8所示。
表6 Adam-BNDNN模型檢測的分類結(jié)果 %
表7 各IDS的2分類結(jié)果 %
表8 各IDS的5分類結(jié)果 %
從表6可以看出,2分類的整體檢測率要比5分類高,整體誤報率要比5分類低。因為在2分類檢測中,若類型為R2l的攻擊誤檢為U2l,對于2分類檢測結(jié)果是正確的,但在5分類檢測中則是錯誤的。
從表7,表8可以看出本文檢測模型的整體檢測率要優(yōu)于其他IDS,整體誤報率要低于其他IDS。但5分類中U2r的檢測結(jié)果并不是很好,主要因為在125973條樣本數(shù)據(jù)中U2r只有52條,數(shù)據(jù)總量過于少,檢測率沒有其他4類高也是可以理解的;總體上證明了檢測模型的可行性。
針對傳統(tǒng)入侵檢測算法對網(wǎng)絡(luò)入侵檢測能力不足的問題,本文結(jié)合網(wǎng)絡(luò)流量數(shù)據(jù)的特性,提出一個基于Adam-BNDNN的網(wǎng)絡(luò)入侵檢測模型,用屬性簡約后的NSL-KDD數(shù)據(jù)集來仿真實驗,并與其他算法進行了對比分析,從而證明本模型的可行性。下一步工作將搭建真實網(wǎng)絡(luò)環(huán)境,采集實時數(shù)據(jù)進行網(wǎng)絡(luò)入侵檢測。