胡希文,彭艷兵
(1.武漢郵電科學研究院,湖北武漢 430070;2.南京烽火天地通信科技有限公司,江蘇南京 210019)
本世紀以來,隨著網絡技術的高速發展和網絡規模的持續擴大,蠕蟲和間諜軟件等零日網絡攻擊變得越來越普遍與危險[1]。而現有的基于規則匹配的入侵檢測機制常常由于其過于死板而不足以檢測到這些攻擊。因此,研究者們開發了基于異常檢測的入侵檢測方法來應對這類可以快速變異的攻擊。
在各種入侵檢測方法中,文獻[2]研究了基于統計學方法的入侵檢測,文獻[3]的研究側重于異常檢測的理論措施,它主要研究了異常檢測中的信息理論,如熵、條件熵、相對條件熵、信息增益等。文獻[4]主要研究了基于基礎機器學習算法如K-means 與KNN的入侵檢測。
文中研究的主要是基于SVM的入侵檢測方法。軟間隔支持向量機由Cortes 提出,所以經常被稱為C-SVM,它在分類問題中通常有很好的性能[5]。然而,軟間隔支持向量機并不太適合用于檢測網絡流量中的新攻擊,因為在監督學習過程中需要預先獲取新攻擊的特征信息,需要人為將這些流量數據分為正常流量和攻擊流量,并分別貼上標簽,導致了系統額外的時間和成本開銷。因此,在入侵檢測系統中可以考慮使用無監督學習的方法來進行異常檢測。在SVM 家族里,適合這一場景的是單類支持向量機(One-class SVM),它屬于無監督學習算法。然而,在實際使用過程中,單類支持向量機有著假陽性率高的問題[6],用其進行分類過后的數據,往往還需要進行第二次過濾才能有較好的效果,這無疑增加了系統的操作難度與復雜性。
文中采用加拿大紐布倫斯威克大學(University of New Brunswick,UNB)最新的入侵檢測數據集CSE-CIC-IDS2018 作為訓練與測試數據集,該數據集是當前入侵檢測領域最前沿的數據集,相比于已有近二十年歷史的DARPA 數據集和KDD CUP 數據集,該數據集無疑更貼近現在的網絡環境,更具有實用性。
在CSE-CIC-IDS 之前,入侵檢測數據集幾乎都是以DARPA 和KDD CUP 為主。隨著網絡用戶行為的變化以及網絡入侵的逐步演變,現在這些很老的數據集已不再適合現在瞬息萬變的動態網絡環境。針對這一點,UNB的網絡安全研究員們開發出了一種網絡流量生成器和分析器工具CICFlowMerter,該工具使用Java編寫,免費開源,可以在Github上獲得。
CSE-CIC-IDS2018 數據集包括7 種不同的攻擊場景,分別是暴力攻擊(Brute-force)、心臟滴血漏洞攻擊(Heartbleed)、僵尸網絡攻擊(Botnet)、DoS、DDoS、web 應用攻擊集合(Web attacks)以及滲透攻擊(Infilteration),它的每條數據包含80 個特征[7]。
原始數據去重合并后得到7 873 490 條數據。在進一步處理過程中發現該數據集里面某幾列數據是完全重復的,對于一個特征來說,如果所有樣本中該特征的值都一樣,那么它將不會對該模型的訓練有任何影響。此外,還發現有一些行數據包含NaN與Infinity 這種無法進行數值化的數據。對這些數據進行清洗過濾后得到剩余的3 890 993 條數據,每條數據有70 個特征。清洗后的數據根據標簽分布如表1 所示。

表1 數據集數據分布
由于SQL Injection 在原始數據中占比實在太低,若對其進行等比例取樣,將得到個位數數量的樣本,這樣的數據量不適用于模型訓練,故在抽取訓練數據時,忽略掉SQL Injection 數據。
為了保證各類型數據占比與原數據一致,確保模型訓練不會發生偏差,在訓練模型和進行n-fold交叉驗證時,在除去表1 中SQL Injection 數據之外的數據里,對每個類型的數據等比例隨機抽取10%作為模型的輸入數據集。
在機器學習模型中,有一些模型是對數值敏感的模型,數值的范圍大小對它們的訓練速度影響比較大,過大的數值范圍可能會導致模型訓練速度過慢。SVM 家族就是這類對數據范圍敏感的模型,故需要對數據進行標準化處理[8]。文中采用Min-Max標準化,將數據映射到[0,1]的區間內:

其中,xi為標準化之前的第i列特征數據,為標準化之后的第i列特征數據,xMin為第i列特征數據里面的最小值,xMax為第i列特征數據里面的最大值。
為了加快訓練速度以及得到更加準確的模型,文中在進行模型訓練之前,使用遺傳算法(Genetic Algorithm,GA)對輸入數據的70 個特征進行特征選擇。遺傳算法的框架結構如圖1 所示。

圖1 遺傳算法框架
由于文中使用遺傳算法的場景是進行特征選擇,即判斷每個特征對于區分樣本的貢獻度[9]。對于一個特征來說,將不同類型的樣本區分的越開越好,所以文中采用Fisher 線性判別法作為適應度函數。其核心思想是尋找一個最能反映類與類之間差異的投影方向,即要使得類間間距盡可能大,而類內間距盡可能小[10],計算各類特征向量之間平均距離的公式為:

其中,c是類別的數量,Pi和Pj分別是類別i和類別j的先驗概率,文中對于某類先驗概率直接取其在原始數據中的占比;ni和nj是類別i和類別j的數量,在上一步對原數據進行抽樣時就已確定;為向量空間中兩個向量的距離度量,文中取歐氏距離作為度量,即:

輸入的樣本一共有70 個特征,設置初始種群大小為100,迭代次數為200,交叉率25%,變異率1%,然后觀察特征選擇結果,設特征選擇數量為d,實驗結果如圖2 所示。

圖2 選取特征數量為50個時的適應度
從圖2 可以明顯看出,隨著遺傳算法迭代次數增加,每一代種群的適應度在逐漸變大,當迭代次數到達一定次數時,算法會走向收斂。
然后擴展到選擇所有個數特征的情況,將特征選擇數量d從1 取到70,對每個d都進行10 次訓練,一共訓練700 次,每次訓練的d都對應著一個最優適應度,將10 次訓練的最優適應度取平均值,然后按照d從大到小排列,橫向比較其最大平均適應度,結果如圖3 所示。

圖3 選取特征數量與最高適應度的關系
從圖3 可以看出,所選取的特征個數在35 個之前,最高適應度呈現出很大的波動,而在35 個之后,曲線相對平穩,最終適應度收斂在0.15~0.2 之間。
在上述獲取最優適應度的過程中,對選出的最優特征進行計數統計,計算每個特征被選中的次數,結果如圖4 所示。

圖4 每個特征被選中的次數
將700 次訓練中每個特征被選中的次數作為每個特征的區分度,從圖4 可以看出,大部分點都具有比較好的區分度,只有一些少數的點被選中的次數比較少。剔除掉低于中位線太多的點,可選出48個特征。
軟間隔支持向量機,也叫C-SVM。它是在基礎SVM 之上改進而成的。基礎的SVM 也被稱為硬間隔支持向量機,它主要有兩個缺點,第一是不適用于線性不可分數據集,第二是對離群數據點敏感[11]。軟間隔支持向量機引入一個松弛變量和一個懲罰參數C,它允許一些樣本點跨越間隔邊界甚至是跨出超平面,懲罰參數C的值限定了這個可以跨出的比例,它使得SVM 能夠在線性不可分的數據集上進行擴展,于是SVM的優化問題變為:

其中,ξi表示松弛變量,n表示樣本總數,C為懲罰系數。由上述公式可知:
1)離群點i的松弛變量值ξi越大,該點離間隔邊界就越遠;
2)所有在分離超平面內的點的松弛變量ξi的值都等于0,即這些點都滿足條件
3)懲罰參數C越大,意味著對離群點的懲罰就越大,也就是只允許更少的點跨過間隔邊界,模型也會變得復雜,邊界會收束的更緊;而C越小,則允許更多的點會跨過間隔邊界,最終形成的模型邊界也更平滑;
4)b的大小與分離超平面到原點的距離相關,b越大說明分離超平面離原點越遠。
One-class SVM 和一般的SVM 有所區別,它的核心思想是在樣本空間中尋找一個分離超平面,將樣本中的正例樣本空間與其他樣本空間分離開,預測時就用這個分離超平面作為決策標準,認為超平面內的樣本是正例,超平面外的樣本是反例[12]。它的優化函數為:

其中,ξi表示松弛變量,n表示樣本總數,v類似于軟間隔支持向量機中的C。由式(5)可知:
1)離群點i的松弛變量值ξi越大,該點離超平面邊界就越遠;
2)所有在超平面內的點的ξi值都為0,即這些點滿足條件
3)v限定了異常點的比例上限,說明允許一定比例的點跨過超平面;
4)v限定了分離超平面的邊界平滑度,更小的v值對應著收束更緊的邊界;
5)ρ與分離超平面到原點的距離相關,ρ越大說明分離超平面離原點越遠,它與軟間隔支持向量機中的b功能一致。
在日常實際網絡使用中,絕大部分網絡流量都是正常流量,異常流量的占比相對較小。那么,就實際檢測而言,與正常流量相比,期望檢測到的異流量的占比也就相對較小。所以從僅理論上來說,Oneclass SVM的思想似乎更適用于入侵檢測。但是One-class SVM 在實際使用過程中并不是如此,它有一個很麻煩的缺點,那就是它不像軟間隔支持向量機那么穩定,可能會出現很高的假陽性率,以至于將很多正常流量也識別成異常流量。針對這一點,文中將One-class SVM 進行改進,對其參數進行調整,使其分類超平面向分類性能更好地向軟間隔支持向量機逼近。
由上述內容可知,在One-class SVM的優化函數中,與分離超平面位置相關的參數分別是||w||、ρ和由其優化函數可知,為了得到最優超平面,||w||需要盡可能小,ρ需要盡可能大與離群點相關,這與軟間隔支持向量機是一致的。又由上文的對比發現參數v與參數C的功能基本一致,參數ρ與參數b功能基本一致,因此,可以使用參數C代替參數v,使用參數ρ代替參數b,于是得到如下優化模型:

在文中實驗里,數據集采用之前經過清洗過濾后的CSE-CIC-IDS2018 數據集,在特征選擇之后,隨機抽取其中的10%,提取的數據量對應類型分布如表2 所示。

表2 用來訓練和測試的數據量
在入侵檢測中,比較重要的評價指標[13]有檢測率(detection rate)、漏報率(missing report rate)和誤報率(false alarm rate)。文中將檢測率定義為檢測出來的攻擊數/總攻擊數,漏報率為未檢測出來的攻擊數/總攻擊數,誤報率為正常流量被誤認為是攻擊流量/總正常流量,公式如下:

在實際使用中,系統將正常流量判定為攻擊流量的情況是對用戶影響最大的,故在保證高準確度的情況下,要嚴格控制誤報率這一指標。
文中實驗模型首先采用網格搜索法來尋找模型最佳參數,在尋找到最佳模型參數之后采用交叉驗證的方式對模型進行驗證。由于文中數據集選取的較大,故在進行交叉驗證時,取n值為5,然后得到五輪不同的數據再取平均結果,實驗結果如圖5~7 所示,分別展示出了3 種不同的模型對于測試數據集中每種攻擊的檢測率、漏報率和誤報率[14-20]。

圖5 檢測率
從實驗結果可以看到,3 種SVM 模型對于Infilteration 攻擊的檢測基本沒用。經過調研發現,Infilteration 攻擊的流量特征與正常流量特征非常相似,僅靠SVM 確實無法將其識別出來。

圖6 漏報率

圖7 誤報率
在檢測率與漏報率方面,軟間隔支持向量機如逾期一樣,擁有非常好的檢測性能,它可以檢測出絕大部分的攻擊流量,只有很少的攻擊流量沒有被檢測到;而對于One-class SVM 而言,其雖然具備無監督學習的特性,不需要對數據集做分類處理,但是由結果可知,其對于大部分攻擊不具有很好的分類性能;對于文中提出的ONE-ESVM 模型,它的檢測率與誤報率非常靠近原生的軟間隔支持向量機,從側面證明了,它的分類超平面的確逼近了軟間隔支持向量機。
在誤報率方面,軟間隔支持向量機對于大部分攻擊來說,有著很低的誤報率,完全可以滿足現實使用需求;One-class SVM 如預期一般,有著非常高的假陽性率,它將大量的正常流量識別為攻擊流量,這種超高的誤報率在實際使用中是完全無法接受的;而文中的ONE-ESVM 模型有著與軟間隔支持向量機相似的誤報率,這在實際使用過程中完全可以被接受。
該實驗結果說明了,在取得最佳參數的情況下,文中提出的ONE-ESVM 模型確實可以按照預期逼近分類性能很好的軟間隔支持向量機,同時它也擁有了與One-class SVM 一樣的無監督特征,使得獲取數據集時更加靈活,而不用花費大量的精力去對數據集進行標記。
文中詳細闡述了將改進的One-class SVM 應用到網絡入侵檢測系統中的情況,并詳細介紹了傳統的軟間隔支持向量機模型和One-class SVM 模型,在此過程中使用遺傳算法作為特征選擇工具。
實驗證明,改進后的One-class SVM 模型在不丟失其無監督學習特性的基礎上確實能夠對軟間隔支持向量機進行逼近,使其分類性能和軟間隔支持向量機一樣好。