吳荻,高大鵬
(中國民用航空飛行學院計算機學院,廣漢618300)
互聯(lián)網和移動互聯(lián)網的普及,使得網絡在生活中產生了巨大的作用,網絡電子渠道成為目前為止人們獲取外界信息最有效且最重要的方式。2018年公布了中國互聯(lián)網使用情況統(tǒng)計,截至2018年6月30日,中國網絡用戶數目達到了80200萬,在2018前半年新增網絡用戶2968萬。與2017年比,增長了3.8%,移動網絡的覆蓋率達到了57.7%,人類生活的便捷度得到了巨大的改善。移動互聯(lián)網的發(fā)展,推動了網絡信息的傳播,但也同時出現了一些安全問題。正因為網絡信息是開放的、無國界的、公共的,因此如何守護網絡的信息安全問題就成了一個嚴峻的挑戰(zhàn)。
入侵檢測系統(tǒng)是一種通過實時監(jiān)測網絡環(huán)境訪問數據,以此確定合法訪問和入侵活動。由于網絡的快速發(fā)展導致網絡環(huán)境中各種數據量急劇增加,網絡環(huán)境復雜,計算機更容易受到攻擊,比如用惡意代碼對信息進行修改,竊取、揭露等。老式的檢測技術依賴于大量的人力,時效性較差,防御未知入侵技術的能力也不出眾,因此在現代檢測技術中就更需要提升檢測算法的高效性。機器學習算法是通過“學習”模擬人類的學習行為來檢測未知攻擊,因此在傳統(tǒng)檢測技術的基礎上引入機器學習算法會更加適配現代復雜的網絡環(huán)境。
SVM是一種優(yōu)秀的二分類算法,它是建立在統(tǒng)計學習理論和機構風險最小化原理的基礎上,解決了很多傳統(tǒng)機器學習算法中出現的過度擬合、維數災難、低位模式等問題,在很多特殊問題上有獨有優(yōu)勢,比如非線性、小樣本和高位模式等問題。SVM算法的分類決策中最重要的一個部分就是支持向量,廣義支持向量機分為線性可分和線性不可分兩種。
假設解決一個分類問題,如果只有二維的特征向量,需要將正常訪問的用戶和惡意訪問的黑客區(qū)分開來,如果可以只通過一個直線(或一個平面)區(qū)分,那么這個分類問題就是一個線性可分問題。這個區(qū)分的直線也可以是一個超平面,支持向量就是距離超平面最近的樣本。
為了解決線性可分性問題,假設訓練數據的樣本量為l,該樣本可以表示為{(xi,yi),i=1,2,3,…,l},訓練數據樣本集分為兩個類別,如果xi為第一類,則yi=1;如果xi為第二類,則yi=-1。
假設有一個超平面的分類ωx+b=0。樣本可以準確的分為兩類,將不同的種類分別打入超平面的兩側,使得數據集線性可分。即對于(xi,yi)∈D,若yi=1,則 有ωTxi+b>0;若yi=-1,則有ωTxi+b<0。
樣本空間中任意點到超平面的距離為r=
如圖1所示,H即為判別類型的超平面,黑白兩色的圓圈代表兩個樣本。若則黑白兩種數據樣本點之間的間隔是
圖1 線性可分SVM
在解決實際問題的時候,在大多數的情況下,樣本是不能完美的線性分開的,因此要使用非線性向量機來解決這個問題,升級到更高的平面進行區(qū)分,例如二維平面不能區(qū)分就升級到三維平面甚至更高。簡單講就是分為兩步,第一步升高維度(樣本空間向高維映射),第二步線性化。但是在升維的過程中,會出現新的問題,比如計算復雜度會增加,或者會引起維數災難。而SVM會巧妙地解決升維帶來的計算復雜化的問題,升級維度的依據就是核函數。
核函數種類決定了SVM的區(qū)別,常用的核函數有以下4種:
(1)線性核函數K(x,y)=x?y。(用于線性可分的情況,沒有需要專門設置的核函數,計算速度快)
(2)多 項式 核 函數K(x,y)=[(x,y)+r]^d。(低維空間映射到高位空間,參數多,計算復雜度高)
(3)徑向基函數K(x,y)=exp(-|x-y|^2d^2)。(應用最廣的核函數,將樣本映射到高維空間,參數較少)
(4)二 層 神 經 網 絡 核 函 數K(x,y)=tanh(a(x,y)+b)。(實現的是一種多層神經網絡)
需要對數據有一定的研究和先驗知識才能選出合適的核函數,利用先驗來選擇復合數據分布的核函數,如果無法選擇的話,通常有兩種解決辦法:①交叉驗證,使用多種不同的核函數運算出預測結果,選擇誤差最小的即為最優(yōu)核函數;②混合核函數,通過結合多個基本核函數,形成混合函數,再加載數據運算。由于用的是核函數展開定理,在實際編寫中不需要知道非線性映射函數的線性表達式,而且在維度空間中建立的線性學習機,因此與線性模型相比會在某種程度上避免維數災難,而且?guī)缀醪粫黾佑嬎愕膹碗s性。
當Φ:Rn→D,原輸入空間的樣本數據被映射到高維空間D中尋找最優(yōu)平面。
支持向量機的學習策略是間隔最大化,即正則化的合頁損失函數的最小化問題,也就是一個求解凸二次規(guī)劃的問題,所以SVM算法實際上是一種為了達到最小化風險的一種最佳算法。
圖2 線性不可分SVM
數據集與算法是網絡安全入侵檢測中不可缺少的兩部分。著名計算機科學家、PASCAL語言的創(chuàng)始人Niklaus Wirth說,“程序=數據結構+算法”,而在入侵檢測領域“入侵檢測數據挖掘=算法+數據集”。很多時候數據比算法更重要,算法需要數據才能得到結果的驗證。
本文在實驗中選用的是由麻省理工學院林肯實驗室在1998年模擬真實的軍事網絡訪問環(huán)境得到的500萬條KDD99數據集。與原始網絡訪問記錄相比,此數據集已經是經過去除重復訪問記錄等預處理之后得到的數據集,相比原始集,KDD99只包含了網絡流量統(tǒng)計特征
KDD99數據集是以CSV格式記錄,除了本來的500萬條數據外,還有一個10%的訓練子集和測試子集。本文采用的是10%的訓練子集作為分析對象。10%的數據自己包括了494021條數據,每一條數據都由1個標簽和41個特征(TCP鏈接的基本特征,TCP鏈接的內容特征,基于時間的網絡流量統(tǒng)計特征,基于主機的網絡流量統(tǒng)計特征)構成,每一行有42項。其中前41項特征分為四個大類。
數據集中每一行包含了1個類標識和41個固定的特征,一共42項,9個離散項,33個連續(xù)項。
表1 數據異常類型
原本的KDD99數據集中一部分標簽是以字符串形式記錄的,在SVM程序運行時,字符串和數值型一起處理時并不方便,因此對數據集做預處理。預處理的方式有很多種,比如統(tǒng)一將字符型和數值型全部化為二進制字符串,其優(yōu)點是方便在結果中看到原本的標識類型;或者直接將數據集中的字符型特征轉化為數值型特征(即符號特征數值化)。數值化會更加方便后續(xù)的數據處理。因此本文也使用數值化的方法進行預處理。數值化大致分為以下4個部分:
(1)源文件行中3中協(xié)議類型轉換成數字標識;
(2)源文件中70中網絡服務類型轉換成數字標識;
(3)11中網絡連接狀態(tài)轉化成數字標識;
(4)5大類型轉換成數字標識,把未知攻擊分入一個類型,單獨標記。
KDD99數據集數據量大,屬性多,時間復雜度高。它是在DARPA98數據集中將部分數據,比如DoS攻擊后產生的大量重復記錄刪除后,在KDD99中只提取了5分鐘之內的記錄寫入。它的樣本類別如表2所示。
表2 樣本類別
為了檢測入侵檢測系統(tǒng)的好壞,需要用未知的攻擊來確定,因此在KDD99數據集存在39小類攻擊類型中,訓練集只出現了22種攻擊類型,剩下的17只在測試集中出現的攻擊類型對于訓練集來說就是未知的攻擊類型,以此劃分來實現用一個數據集就可以檢測系統(tǒng)對未知攻擊的檢測力。
為了進行交叉驗證,減少過擬合風險,本文按照4∶1的比例,對訓練數據集隨機劃分為訓練集(Train)和驗證集(Validation)。
X_train,X_val,y_train,y_val=train_test_split(X,Y,test_size=0.25)
由此分開的數據集,目標變量Y的分布大致相似,如表3所示,劃分后的數據集中,某幾種標簽的比例大致相似。
表3 劃分后的數據集中各標簽的比例
如前文所示,數據表總共有41個特征,其中protocol_type、service、flag是 取 值 數 分 別 有3、70、11的三種離散特征,其余均為連續(xù)型數值特征。在SVM模型中,需要計算樣本間距,離散型的取值無法直接進行距離計算。為了解決這個問題,在數據處理中對離散型的特征數據進行One-Hot編碼,使每個整數都用二進制表示,除了整數索引標記為1之外,其余都用0表示,使得特征的計算更為合理。
在對KDD99數據集數值化預處理的過程中,是用不同的整數數值來代替不同的特征類型,因此用的數值大小不一樣就會對模型、對不同特征的敏感度不一樣,比如一個特征用數值1代替,另一個特征項用數值100代替,則用100代替的特征項就會對結果產生更大的影響,不利于模型收斂。因此需要將數值特征歸一化,各個特征大小范圍一致就可以使用距離度量等算法。在sklearn中,是默認把數值歸一化到[0,1]或者[-1,1]之間,因為不同的機器學習算法所需要的數值范圍不一樣,因此在實際應用中可以通過調參來實歸一化后的數值大小固定在某一區(qū)間之內。歸一化后能加速梯度下降算法的收斂速度,在SVM算法中,一致化的特征能加速尋找支持向量的時間。
本文程序中,特征處理的主要代碼如下所示:
SVM有多種參數,包括核函數、正則化系數等??梢允褂媒徊骝炞C調參選擇最優(yōu)參數讓結果達到最理想的結果,在本文中使用train_test_split()函數將訓練集隨機劃分成“用于訓練”和“用
經交叉驗證進行參數調優(yōu),模型的預測精度可以達到99.9%,所使用的參數為:
通過設置交叉驗證集,還可以繪制混淆矩陣,將結果以表格化的形式展現出來,它是一種可視化工具,使得模型驗證結果更加明了。每一列標識預測類別,每一行表示數據真實歸屬類別;每列總數是預測為該類別的數據個數,每行數據總數是該類別的數據實例的數量。在sklearn中,已經內置混淆矩陣的API。使用matplotlib,將混淆矩陣可視化:
如圖3所示,混淆矩陣會清晰的反應出模型的檢測能力,該模型對于大多數的類別預測都有很高的準確率。對于個別類顯示分類準確率不正常,因為其所對應的樣本只有兩三個,增加所對應的樣本即可。
圖3 混淆矩陣
SVM算法本身具有處理小樣本、高維度、非線性分類的特點,把SVM算法應用在入侵檢測當中,可以發(fā)揮它的特點,克服目前入侵檢測技術中,如運行速度較慢、檢測準確率比較低、實時性較差等明顯缺陷。但是,SVM在基于網絡的入侵檢測系統(tǒng)的實際應用中,仍然有很多需要完善和提高的地方,如核函數的選擇參考問題、高維數據如何有效降維,等。