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