web防火牆是資訊安全的第一道防線。随着網絡技術的快速更新,新的黑客技術也層出不窮,為傳統規則防火牆帶來了挑戰。傳統web入侵檢測技術通過維護規則集對入侵通路進行攔截。一方面,硬規則在靈活的黑客面前,很容易被繞過,且基于以往知識的規則集難以應對0day攻擊;另一方面,攻防對抗水漲船高,防守方規則的構造和維護門檻高、成本大。
基于機器學習技術的新一代web入侵檢測技術有望彌補傳統規則集方法的不足,為web對抗的防守端帶來新的發展和突破。機器學習方法能夠基于大量資料進行自動化學習和訓練,已經在圖像、語音、自然語言處理等方面廣泛應用。然而,機器學習應用于web入侵檢測也存在挑戰,其中最大的困難就是标簽資料的缺乏。盡管有大量的正常通路流量資料,但web入侵樣本稀少,且變化多樣,對模型的學習和訓練造成困難。是以,目前大多數web入侵檢測都是基于無監督的方法,針對大量正常日志建立模型(profile),而與正常流量不符的則被識别為異常。這個思路與攔截規則的構造恰恰相反。攔截規則意在識别入侵行為,因而需要在對抗中“随機應變”;而基于profile的方法旨在模組化正常流量,在對抗中“以不變應萬變”,且更難被繞過。

基于異常檢測的web入侵識别,訓練階段通常需要針對每個url,基于大量正常樣本,抽象出能夠描述樣本集的統計學或機器學習模型(profile)。檢測階段,通過判斷web通路是否與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----國際最負盛名的資料挖掘會議!
2. 楚安,資料科學在web威脅感覺中的應用,http://www.jianshu.com/p/942d1beb7fdd
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