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