1. 程式人生 > >基於機器學習的web異常檢測

基於機器學習的web異常檢測

Web防火牆是資訊保安的第一道防線。隨著網路技術的快速更新,新的黑客技術也層出不窮,為傳統規則防火牆帶來了挑戰。傳統web入侵檢測技術通過維護規則集對入侵訪問進行攔截。一方面,硬規則在靈活的黑客面前,很容易被繞過,且基於以往知識的規則集難以應對0day攻擊;另一方面,攻防對抗水漲船高,防守方規則的構造和維護門檻高、成本大。

基於機器學習技術的新一代web入侵檢測技術有望彌補傳統規則集方法的不足,為web對抗的防守端帶來新的發展和突破。機器學習方法能夠基於大量資料進行自動化學習和訓練,已經在影象、語音、自然語言處理等方面廣泛應用。然而,機器學習應用於web入侵檢測也存在挑戰,其中最大的困難就是標籤資料的缺乏。儘管有大量的正常訪問流量資料,但web入侵樣本稀少,且變化多樣,對模型的學習和訓練造成困難。因此,目前大多數web入侵檢測都是基於無監督的方法,針對大量正常日誌建立模型(Profile),而與正常流量不符的則被識別為異常。這個思路與攔截規則的構造恰恰相反。攔截規則意在識別入侵行為,因而需要在對抗中“隨機應變”;而基於profile的方法旨在建模正常流量,在對抗中“以不變應萬變”,且更難被繞過。

基於異常檢測的web入侵識別,訓練階段通常需要針對每個url,基於大量正常樣本,抽象出能夠描述樣本集的統計學或機器學習模型(Profile)。檢測階段,通過判斷web訪問是否與Profile相符,來識別異常。

對於Profile的建立,主要有以下幾種思路:

1. 基於統計學習模型

基於統計學習的web異常檢測,通常需要對正常流量進行數值化的特徵提取和分析。特徵例如,URL引數個數、引數值長度的均值和方差、引數字元分佈、URL的訪問頻率等等。接著,通過對大量樣本進行特徵分佈統計,建立數學模型,進而通過統計學方法進行異常檢測。

2. 基於文字分析的機器學習模型

Web異常檢測歸根結底還是基於日誌文字的分析,因而可以借鑑NLP中的一些方法思路,進行文字分析建模。這其中,比較成功的是基於隱馬爾科夫模型(HMM)的引數值異常檢測。

3. 基於單分類模型

由於web入侵黑樣本稀少,傳統監督學習方法難以訓練。基於白樣本的異常檢測,可以通過非監督或單分類模型進行樣本學習,構造能夠充分表達白樣本的最小模型作為Profile,實現異常檢測。

4. 基於聚類模型

通常正常流量是大量重複性存在的,而入侵行為則極為稀少。因此,通過web訪問的聚類分析,可以識別大量正常行為之外,小搓的異常行為,進行入侵發現。

基於統計學習模型

基於統計學習模型的方法,首先要對資料建立特徵集,然後對每個特徵進行統計建模。對於測試樣本,首先計算每個特徵的異常程度,再通過模型對異常值進行融合打分,作為最終異常檢測判斷依據。

這裡以斯坦福大學CS259D: Data Mining for CyberSecurity課程[1]為例,介紹一些行之有效的特徵和異常檢測方法。

特徵1:引數值value長度

模型:長度值分佈,均值μ,方差σ2,利用切比雪夫不等式計算異常值p

特徵2:字元分佈

模型:對字元分佈建立模型,通過卡方檢驗計算異常值p

特徵3:引數缺失

模型:建立引數表,通過查表檢測引數錯誤或缺失

特徵4:引數順序

模型:引數順序有向圖,判斷是否有違規順序關係

特徵5:訪問頻率(單ip的訪問頻率,總訪問頻率)

模型:時段內訪問頻率分佈,均值μ,方差σ2,利用切比雪夫不等式計算異常值p

特徵6:訪問時間間隔

模型:間隔時間分佈,通過卡方檢驗計算異常值p

最終,通過異常打分模型將多個特徵異常值融合,得到最終異常打分:

基於文字分析的機器學習模型

URL引數輸入的背後,是後臺程式碼的解析,通常來說,每個引數的取值都有一個範圍,其允許的輸入也具有一定模式。比如下面這個例子:

例子中,綠色的代表正常流量,紅色的代表異常流量。由於異常流量和正常流量在引數、取值長度、字元分佈上都很相似,基於上述特徵統計的方式難以識別。進一步看,正常流量儘管每個都不相同,但有共同的模式,而異常流量並不符合。在這個例子中,符合取值的樣本模式為:數字_字母_數字,我們可以用一個狀態機來表達合法的取值範圍:

對文字序列模式的建模,相比較數值特徵而言,更加準確可靠。其中,比較成功的應用是基於隱馬爾科夫模型(HMM)的序列建模,這裡僅做簡單的介紹,具體請參考推薦文章[2]。

基於HMM的狀態序列建模,首先將原始資料轉化為狀態表示,比如數字用N表示狀態,字母用a表示狀態,其他字元保持不變。這一步也可以看做是原始資料的歸一化(Normalization),其結果使得原始資料的狀態空間被有效壓縮,正常樣本間的差距也進一步減小。

緊接著,對於每個狀態,統計之後一個狀態的概率分佈。例如,下圖就是一個可能得到的結果。“^”代表開始符號,由於白樣本中都是數字開頭,起始符號(狀態^)轉移到數字(狀態N)的概率是1;接下來,數字(狀態N)的下一個狀態,有0.8的概率還是數字(狀態N),有0.1的概率轉移到下劃線,有0.1的概率轉移到結束符(狀態$),以此類推。

利用這個狀態轉移模型,我們就可以判斷一個輸入序列是否符合白樣本的模式:

正常樣本的狀態序列出現概率要高於異常樣本,通過合適的閾值可以進行異常識別。

基於單分類模型

在二分類問題中,由於我們只有大量白樣本,可以考慮通過單分類模型,學習單類樣本的最小邊界,邊界之外的則識別為異常。

這類方法中,比較成功的應用是單類支援向量機(one-class SVM)。這裡簡單介紹該類方法的一個成功案例McPAD的思路,具體方法關注文章[3]。

McPAD系統首先通過N-Gram將文字資料向量化,對於下面的例子,

首先通過長度為N的滑動視窗將文字分割為N-Gram序列,例子中,N取2,視窗滑動步長為1,可以得到如下N-Gram序列。

下一步要把N-Gram序列轉化成向量。假設共有256種不同的字元,那麼會得到256*256種2-GRAM的組合(如aa, ab, ac … )。我們可以用一個256*256長的向量,每一位one-hot的表示(有則置1,沒有則置0)文字中是否出現了該2-GRAM。由此得到一個256*256長的0/1向量。進一步,對於每個出現的2-Gram,我們用這個2-Gram在文字中出現的頻率來替代單調的“1”,以表示更多的資訊:

至此,每個文字都可以通過一個256*256長的向量表示。

現在我們得到了訓練樣本的256*256向量集,現在需要通過單分類SVM去找到最小邊界。然而問題在於,樣本的維度太高,會對訓練造成困難。我們還需要再解決一個問題:如何縮減特徵維度。特徵維度約減有很多成熟的方法,McPAD系統中對特徵進行了聚類達到降維目的。

上左矩陣中黑色表示0,紅色表示非零。矩陣的每一行,代表一個輸入文字(sample)中具有哪些2-Gram。如果換一個角度來看這個矩陣,則每一列代表一個2-Gram有哪些sample中存在,由此,每個2-Gram也能通過sample的向量表達。從這個角度我們可以獲得2-Gram的相關性。對於2-Gram的向量進行聚類,指定的類別數K即為約減後的特徵維數。約減後的特徵向量,再投入單類SVM進行進一步模型訓練。

再進一步,McPAD採用線性特徵約減加單分類SVM的方法解決白模型訓練的過程,其實也可以被深度學習中的深度自編碼模型替代,進行非線性特徵約減。同時,自編碼模型的訓練過程本身就是學習訓練樣本的壓縮表達,通過給定輸入的重建誤差,就可以判斷輸入樣本是否與模型相符。

我們還是沿用McPAD通過2-Gram實現文字向量化的方法,直接將向量輸入到深度自編碼模型,進行訓練。測試階段,通過計算重建誤差作為異常檢測的標準。

基於這樣的框架,異常檢測的基本流程如下,一個更加完善的框架可以參見文獻[4]。

本文管中窺豹式的介紹了機器學習用於web異常檢測的幾個思路。web流量異常檢測只是web入侵檢測中的一環,用於從海量日誌中撈出少量的“可疑”行為,但是這個“少量”還是存在大量誤報,只能用於檢測,還遠遠不能直接用於WAF直接攔截。一個完備的web入侵檢測系統,還需要在此基礎上進行入侵行為識別,以及告警降誤報等環節。

2017阿里聚安全演算法挑戰賽將收集從網上真實訪問流量中提取的URL,經過脫敏和混淆處理,讓選手利用機器學習演算法提高檢測精度,真實體驗這一過程。並有機會獲得30萬元獎金,奔赴加拿大參加KDD—-國際最負盛名的資料探勘會議!

推薦閱讀

3. McPAD : A Multiple Classifier System for Accurate Payload-based Anomaly Detection, Roberto Perdisci

4. AI2 : Training a big data machine to defend, Kalyan Veeramachaneni