劉暢
1? 引言
眾所周知,信息社會早已進入Web2.0時代,Web應用的安全至關重要,部署Web應用防火墻(WAF)已經成為對Web應用進行安全防護的重要方法。傳統的WAF,依賴規則和黑白名單的方式對Web攻擊進行檢測,該方式過分依賴安全人員的知識廣度,針對未知攻擊類型無可奈何。另一方面,即使是已知的攻擊類型,由于正則表達式天生的局限性,以及shell、php等語言極其靈活的語法,理論上存在規則被繞過的可能。因此,誤攔和漏攔是傳統WAF與生俱來的缺陷,而提高檢測準確性的代價就是添加更多精細化的規則,由此導致傳統WAF陷入一個永無止境打補丁的漩渦,拖累了整體性能。
針對上述問題,目前工業界和學術界主要從機器學習方向著手展開研究。在本文中,我們首先介紹了Web攻擊特征提取的三種常用方法以及各自的優缺點,然后選擇其中效果最佳的分詞方式,并基于該方式訓練MLP模型,利用該模型對Web攻擊進行檢測,根據實驗結果表明,使用該模型可以顯著增強開源防火墻ModSecurity的檢測精確性,最后總結了機器學習應用于Web攻擊檢測中還亟待解決的問題。
2? Web攻擊特征提取
Web攻擊檢測問題中樣本數據通常都是半結構化的基于文本的HTTP請求消息,這些消息用于從客戶端向服務器傳遞信息。通過對常見的Web攻擊類型進行分析,包括注入攻擊、XXS攻擊和命令執行等,可以發現Web攻擊請求的特征大體上分為兩類:威脅關鍵詞特征和不規范結構特征。針對這兩種類型,常用的特征提取方式包括:基于分詞的代碼片段特征提取、基于狀態轉換的結構特征提取和基于統計量的結構特征提取。
該方式的普遍做法是根據特定的分詞規則,將HTTP請求切片,利用TF-IDF進行特征提取,并保留具有區分能力的關鍵詞組合特征。在這種方式中,如何“無損”地進行分詞是特征工程的重點,并且與關鍵詞組合的結構息息相關,需要結合后期模型的表現結果不斷調整完善,這部分內容將在第三節進行重點講述。
實際上,通過這種方式保留的特征都是Web攻擊中常見的危險關鍵詞以及字符組合,而這些關鍵詞及字符組合是有限的,理論上,結合目前可獲得的海量訪問流量和充分的Web攻擊樣本,幾乎能全部覆蓋這些關鍵詞及字符組合。
該方式的普遍做法是將具有相似屬性的字符泛化為一個狀態,用一個固定的字符來代替。如:字母泛化為‘N、中文字符泛化為‘Z、數字泛化為‘0、分隔符泛化為‘F等。其核心思想是用不同的狀態去表達不同的字符屬性,盡可能讓在Web攻擊請求中具有含義的字符與其他字符區分開來,然后將一個payload轉換成一連串的狀態鏈去訓練出一個概率轉化矩陣。
然而,該方式存在一個顯著的缺陷:從請求參數結構異常的角度去觀察,結構體異常不一定都是Web攻擊;結構體正常不保證不是Web攻擊。
該方式的普遍做法是使用URL長度、路徑長度、參數部分長度、參數名長度、參數值長度、參數個數,參數長度占比、特殊字符個數、危險特殊字符組合個數、高危特殊字符組合個數、路徑深度、分隔符個數等統計指標作為特征,對HTTP請求進行特征提取。模型可以選擇邏輯回歸、SVM、集合數算法、MLP或者無監督學習模型。
若只拿單個域名的URL做驗證該模型有尚可的表現,但是針對全站URL的模型區分效果較差,準確率也較低。實時上,即使有較良好的適配環境,相對單純的場景,模型準確率也很難提升到90%以上。
3基于分詞的特征提取和MLP模型
在本節中我們將介紹使用基于分詞的特征提取方法對數據集CSIC2010進行特征提取,并利用提取的特征訓練支持向量機MLP模型,最后使用該模型對某目標網站進行安全防護,實驗結果表明使用該模型檢測Web攻擊的準確率達到97%。
CSIC2010數據集是西班牙研究全國委員會(CSIC)于2010年開發的用于測試Web應用程序攻擊保護系統所使用的數據集。該數據集被標記為“正常流量”和“異常流量”,是根據電子商務應用程序的實際請求自動化生成的。該數據集包含36000個用于訓練的正常請求,36000個測試請求和25000個異常請求。為了產生異常流量,在本文中我們使用了包括Paros(后來成為OWASP ZAP)和w3af在內的多個工具。
如圖1 所示,我們構建了一個解析器,用于解碼URL編碼格式的信息,因此機器學習算法可以處理真實信息。另一方面,過濾了對應于特定請求的請求頭中所包含的信息,不應根據這些信息推斷應用程序行為,例如cookie值或上次修改網頁的時間戳。采取的特征化過程高度依賴于檢測目標,在本文中,我們遵循了經典的“詞袋”方法。在這種情況下,特征提取器僅使用空格來分割請求消息,這樣會將特殊字符保留在參數值或者消息頭當中。為了保留攻擊中使用的特殊字符,特征提取器使用以下字符來分割請求消息:\r \t \n。學習架構的最后一個組成部分是多分類分類器。
監督學習方法需要使用標記樣本為有效請求和攻擊請求的樣本的訓練集,我們使用了一種多分類監督學習的變體,經過特征提取之后,每個請求都轉換成了一個TF-IDF向量,以便計算請求中每個項的相應權重。在這種情況下,特征對應于我們詞典中的詞語,這些詞語由特征提取過程生成。為了減少特征量,使用信息增益算法執行特征選擇,以保證所有特征的信息增益都大于0,最后,我們使用Weka訓練了MLP模型。
本小節主要對實驗結果進行分析,結果將以精確度,召回率,真陽性率和假陽性率表示,真陽性率和假陽性率分別表示正確和錯誤地分類為攻擊的請求的比率。表1的基準線一欄顯示了ModSecurity使用未經任何配置的OWASP CRS規則集對數據集的檢測結果,MLP一欄顯示了在使用“詞袋”方法對請求進行特征提取之后,MLP模型對數據集的檢測結果,實驗結果使用10次交叉驗證以訓練和測試模型。可以注意到,在對數據集的檢測中,MLP模型在精度,召回率,TPR和FPR方面表現出良好的性能,尤其是在不增加漏報量的前提下顯著降了誤報量。
4結束語
在本文中,我們通過實驗驗證了使用機器學習技術可以顯著提高ModSecurity的檢測能力,減少假陽性率和增加真陽性率。盡管編寫檢測規則的任務對于人類專家來說可能是復雜的,但是結果表明機器學習算法可以很容易地根據訓練數據集進行學習并生成決策邊界。但是在研究過程中,我們也發現使用機器學習算法檢測Web攻擊面臨的最大挑戰就是缺少帶有完整HTTP請求的公共標記數據集,在本文中我們僅使用了一個數據集,并且該數據集已經公布超過10年了,因此我們認為該數據集不能表示當前Web安全的發展態勢,下一步我們將努力構建新的數據集。
的。該數據集包含36000個用于訓練的正常請求,36000個測試請求和25000個異常請求。為了產生異常流量,在本文中我們使用了包括Paros(后來成為OWASP ZAP)和w3af在內的多個工具。
如圖1 所示,我們構建了一個解析器,用于解碼URL編碼格式的信息,因此機器學習算法可以處理真實信息。另一方面,過濾了對應于特定請求的請求頭中所包含的信息,不應根據這些信息推斷應用程序行為,例如cookie值或上次修改網頁的時間戳。采取的特征化過程高度依賴于檢測目標,在本文中,我們遵循了經典的“詞袋”方法。在這種情況下,特征提取器僅使用空格來分割請求消息,這樣會將特殊字符保留在參數值或者消息頭當中。為了保留攻擊中使用的特殊字符,特征提取器使用以下字符來分割請求消息:\r \t \n。學習架構的最后一個組成部分是多分類分類器。