馬征,陳學(xué)斌,張國(guó)鵬
(1. 華北理工大學(xué) 理學(xué)院,河北 唐山 063210;2.河北省數(shù)據(jù)科學(xué)與應(yīng)用重點(diǎn)實(shí)驗(yàn)室,河北 唐山 063000;3. 唐山市數(shù)據(jù)科學(xué)重點(diǎn)實(shí)驗(yàn)室,河北 唐山 063000)
由開(kāi)放式Web應(yīng)用程序安全項(xiàng)目(OWASP)[1]最新發(fā)布的"十大最關(guān)鍵的Web應(yīng)用安全風(fēng)險(xiǎn)"中,Web應(yīng)用漏洞每年給國(guó)民經(jīng)濟(jì)造成巨大損失,在XSS攻擊中,攻擊者可以竊取受害者的會(huì)話cookie,進(jìn)而收集到受害者的敏感數(shù)據(jù),在瀏覽器中實(shí)現(xiàn)鍵盤記錄器,從而損害了相關(guān)網(wǎng)站的聲譽(yù),因此引起了更多企業(yè)和組織對(duì)Web應(yīng)用安全漏洞的關(guān)注。
隨著網(wǎng)絡(luò)安全知識(shí)的不斷普及,Web應(yīng)用安全成為國(guó)內(nèi)外研究者的研究熱點(diǎn),現(xiàn)有基于過(guò)濾器、動(dòng)態(tài)分析、靜態(tài)分析、機(jī)器學(xué)習(xí)檢測(cè)、深度學(xué)習(xí)檢測(cè)等解決方案。黃文鋒[2]提出了一種采用擴(kuò)展的巴科斯范式構(gòu)造XSS語(yǔ)義向量與網(wǎng)絡(luò)二次爬蟲(chóng)相結(jié)合的方法來(lái)檢測(cè)XSS,能夠有效的繞過(guò)服務(wù)器端的過(guò)濾,但未制定反爬措施,僅限于開(kāi)發(fā)者自己使用,局限性較大。倪萍等[3]提出了一種基于模糊測(cè)試的漏洞檢測(cè)系統(tǒng),通過(guò)爬蟲(chóng)技術(shù)提取注入點(diǎn),根據(jù)攻擊載荷的語(yǔ)法形式構(gòu)造模糊測(cè)試用例,并根據(jù)網(wǎng)站響應(yīng)調(diào)整權(quán)重,從而生成更加高效的攻擊載荷,有效的降低誤報(bào)率,在有監(jiān)督學(xué)習(xí)上取得了較好的檢測(cè)效果,但并不能單獨(dú)作為一種檢測(cè)工具來(lái)使用。文獻(xiàn)[4]提出了一種基于多層感知器的模型來(lái)檢測(cè)XSS攻擊,他們從內(nèi)容上提取了基于URL、基于HTML、基于JavaScript的功能,如URL長(zhǎng)度和URL中的特殊字符,HTML標(biāo)簽、JavaScript事件,在檢測(cè)攻擊方面達(dá)到了99.32%的準(zhǔn)確性,但不能實(shí)時(shí)檢測(cè)到XSS攻擊。
目前在XSS攻擊檢測(cè)識(shí)別上應(yīng)用比較廣泛的典型的機(jī)器學(xué)習(xí)模型有:支持向量機(jī)(Support Vector Machines,SVM)、隨機(jī)森林(Random Forest)、樸素貝葉斯等方法。趙澄等[5]把具有代表性的五維特征向量化,使用SVM進(jìn)行訓(xùn)練和測(cè)試。顧兆軍等[6]通過(guò)對(duì)比樸素貝葉斯和支持向量機(jī)兩種方法檢測(cè)XSS攻擊。結(jié)果表明,SVM取得了最佳性能,但攻擊樣本不夠豐富,都是基于小數(shù)據(jù)集。文獻(xiàn)[7]將攻擊語(yǔ)句改為URL格式,將攻擊語(yǔ)句劃分單詞,計(jì)算分類中出現(xiàn)的單詞頻率,通過(guò)基于word2vec的模型將單詞轉(zhuǎn)換成向量,對(duì)向量使用分類算法,結(jié)果表明SVM是檢測(cè)的最佳過(guò)濾器,但存在著數(shù)據(jù)集不平衡問(wèn)題。文獻(xiàn)[8]開(kāi)發(fā)了隨機(jī)森林、KNN和SVM模型來(lái)檢測(cè)惡意XSS代碼,他們提取了包含惡意JavaScript中的一組特殊字符,把惡意JavaScript中使用的函數(shù)和命令作為行為特征,達(dá)到了99.75的準(zhǔn)確度,但涉及的特征過(guò)少不能充分表示XSS攻擊。文獻(xiàn)[9]提出了一種基于深度的框架來(lái)檢測(cè)惡意JavaScript,框架中包含邏輯回歸、深度學(xué)習(xí)方法和稀疏隨機(jī)投影,他們通過(guò)堆疊去噪自動(dòng)編碼器從JavaScript代碼中提取特征,這些功能用于訓(xùn)練SVM或邏輯回歸模型,通過(guò)邏輯回歸對(duì)惡意代碼進(jìn)行分類,模型達(dá)到了94.9%的精度。丁雪川等[10]通過(guò)LSTM深度學(xué)習(xí)算法實(shí)現(xiàn)自動(dòng)提取深層次特征,利用word2vec提取樣本用向量表示,能達(dá)到99.5%的準(zhǔn)確度,但沒(méi)有設(shè)計(jì)可視化的XSS檢測(cè)平臺(tái)導(dǎo)致不能直觀表示。朱思猛等[11]提出了利用循環(huán)神經(jīng)網(wǎng)絡(luò)生成惡意攻擊樣本,設(shè)計(jì)評(píng)分函數(shù)加固簽名,加固WAF抵御惡意攻擊從而降低安全風(fēng)險(xiǎn)、但沒(méi)有根據(jù)WAF的反饋來(lái)強(qiáng)化神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)。
針對(duì)傳統(tǒng)的XSS檢測(cè)器存在測(cè)試用例過(guò)于冗余、不平衡數(shù)據(jù)集等問(wèn)題,本文提出一種基于模糊測(cè)試和集成學(xué)習(xí)的XSS攻擊檢測(cè)方法,加入里安全向量生成器解決了不平衡數(shù)據(jù)集問(wèn)題;通過(guò)模糊測(cè)試技術(shù)檢測(cè)XSS測(cè)試用例,去除了冗余的無(wú)效向量進(jìn)而提升檢測(cè)效率;最后針對(duì)單分類器檢測(cè)效率低的問(wèn)題,采用了集成學(xué)習(xí)方法對(duì)XSS攻擊進(jìn)行檢測(cè)。
通過(guò)XSS Filter Evasion Cheat Sheet收集到XSS測(cè)試用例作為初始樣本,XSS Filter Evasion Cheat Sheet是由OWASP[12]組織發(fā)布的XSS過(guò)濾備忘單,它記錄了包括基于屬性、事件、HTML標(biāo)簽、CSS、XML等各種類型的XSS測(cè)試用例,同時(shí)也包括了XSS測(cè)試用例加前綴、字母變換大小寫(xiě)、轉(zhuǎn)編碼等各種方式來(lái)實(shí)現(xiàn)服務(wù)器端的繞過(guò)。
隨著網(wǎng)站過(guò)濾的機(jī)能逐漸強(qiáng)大,部分XSS測(cè)試用例在低版本的瀏覽器能夠成功攻擊,在高版本的瀏覽器中會(huì)被過(guò)濾掉,本文將通過(guò)模糊測(cè)試[13]的方法對(duì)無(wú)效的測(cè)試用例進(jìn)行過(guò)濾,基于模糊測(cè)試和XSS測(cè)試集的XSS攻擊樣本生成的流程如圖1所示。
圖1 XSS攻擊樣本生成流程
模糊測(cè)試的步驟如下:
(1)輸入初始XSS測(cè)試集(XSS Filter Evasion Cheat Sheet)作為模糊測(cè)試的測(cè)試用例;
(2)模擬攻擊方式,將測(cè)試用例輸入至網(wǎng)站中并執(zhí)行操作;
(3)監(jiān)測(cè)攻擊結(jié)果,看是否有彈窗顯示用來(lái)判斷是否進(jìn)行了XSS攻擊,若判斷攻擊成功則保存XSS測(cè)試用例,作為XSS攻擊樣本,若攻擊失敗則遺棄;
(4)不斷進(jìn)行重復(fù)(2)、(3)步驟,直至XSS測(cè)試集中的測(cè)試用例全都檢測(cè)完畢,算法結(jié)束。
目標(biāo)程序DVWA用來(lái)檢測(cè)Web應(yīng)用是否安全,初始界面是一個(gè)具有留言簿的界面,如圖2(a)所示,通過(guò)輸入XSS測(cè)試用例,輸入到"message"下,提交后得到新界面,不斷輸入XSS測(cè)試用例,判斷瀏覽器是否彈出彈窗,彈窗如圖2(b)所示,若未出現(xiàn)彈窗則證明此XSS測(cè)試用例無(wú)效,若出現(xiàn)彈窗,則證明此XSS測(cè)試用例攻擊用例有效,直至模糊測(cè)試結(jié)束,最終得到預(yù)生成的XSS攻擊樣本X。
圖2 模糊測(cè)試檢測(cè)XSS測(cè)試用例
生成的安全向量保持在128個(gè)字符之內(nèi),其中的類型包括:
(1)僅包含大寫(xiě)或小寫(xiě)的字符串;
例如:kikDfuPLasVpSDqfKLMUTbyDAssjedEhphsOSPUnxO
(2)包含所有字母和數(shù)字的字符串;
例如:BqAoxOrvaovydRv8QuQmQvoAk6hUbTaUFx18al7jYZ
(3)包含所有字母、數(shù)字和特殊字符的字符串。
例如:>!d[;p02LzJ,`5"hVCqAPXonVtrQ]L9`JBD=8L 生成的安全向量取決于XSS攻擊向量的個(gè)數(shù),用來(lái)保持XSS和數(shù)據(jù)集的安全樣本之間的平衡,平衡的數(shù)據(jù)集用于訓(xùn)練和測(cè)試模型。安全向量生成器如圖3所示: 圖3 安全向量生成器 在集成學(xué)習(xí)[14-15]中,基礎(chǔ)模型有3種組合方式。Bagging: 在bagging (bootstrap聚合) 中,弱學(xué)習(xí)算法適用于小樣本數(shù)據(jù)集,并對(duì)所有學(xué)習(xí)者進(jìn)行平均預(yù)測(cè),裝袋將減少差異。Boosting: 它是一種迭代方法,在boosting樣本權(quán)重的基礎(chǔ)上根據(jù)前面的分類進(jìn)行調(diào)整。Stacking:一個(gè)模型的輸出作為另一個(gè)模型的輸入,基于所使用的模型,堆疊將減少方差或偏差。 1.3.1基于隨機(jī)森林的檢測(cè)模型 隨機(jī)森林是多重決策樹(shù)集合的算法,采用決策樹(shù)作為基學(xué)習(xí)器,每個(gè)決策樹(shù)都是數(shù)據(jù)集的一個(gè)子集,通過(guò)對(duì)M個(gè)XSS攻擊樣本集和安全向量樣本集中抽取m個(gè)特征和樣本進(jìn)行訓(xùn)練,共進(jìn)行k輪抽取,形成K個(gè)學(xué)習(xí)器,每顆決策樹(shù)的特征是由對(duì)當(dāng)前決策樹(shù)分類節(jié)點(diǎn)進(jìn)行部分抽樣而不是建立每顆決策樹(shù)進(jìn)行抽樣,通過(guò)決策樹(shù)算法對(duì)XSS攻擊樣本和安全向量樣本進(jìn)行訓(xùn)練。Sklearn的隨機(jī)森林分類器依據(jù)"少數(shù)服從多數(shù)"的原則進(jìn)行投票,采用大部分決策樹(shù)得到的結(jié)果作為分類輸出結(jié)果,隨機(jī)森林模型的優(yōu)點(diǎn)是不需要設(shè)置過(guò)多超參數(shù),即可判斷每個(gè)特征與預(yù)測(cè)標(biāo)簽的相關(guān)性,隨機(jī)森林模型流程如圖4所示。 圖4 隨機(jī)森林模型 1.3.2基于極端隨機(jī)樹(shù)的檢測(cè)模型 極端隨機(jī)樹(shù)(Extremely randomized trees)是由于隨機(jī)森林中出現(xiàn)隨機(jī)有放回的取樣導(dǎo)致樣本不能被充分利用,從而引起各個(gè)基分類決策樹(shù)之間的相似程度高。它與隨機(jī)森林分類器相比,只是特征是隨機(jī)選擇的,極端隨機(jī)樹(shù)采取對(duì)全部數(shù)據(jù)集進(jìn)行訓(xùn)練,在某種程度上比隨機(jī)森林得到的結(jié)果更加好,因?yàn)樵撃P驮诿看畏至鸦蚍种r(shí)都會(huì)隨機(jī)選擇一個(gè)特征子集進(jìn)行分枝特征選擇,而且該模型不需要選擇最佳閾值,而是采取隨機(jī)閾值進(jìn)行分枝,這種增加的隨機(jī)性有助于創(chuàng)建更多彼此獨(dú)立的決策樹(shù)。 1.3.3基于Adaboost的攻擊檢測(cè)模型 Adaboost集成學(xué)習(xí)算法是一種迭代算法,它是提升方法中最為廣泛的一種形式,其核心思想是通過(guò)加權(quán)投票的方式把組合弱分類器起來(lái),產(chǎn)生最終的預(yù)測(cè)進(jìn)而構(gòu)成一個(gè)強(qiáng)分類器。它通過(guò)對(duì)個(gè)體分類器有序地訓(xùn)練來(lái)進(jìn)行提升,而且各個(gè)分類器地結(jié)果是互相關(guān)聯(lián)的,后一個(gè)分類器的分類過(guò)程會(huì)受到前一個(gè)分類器的影響,所以每一個(gè)分類器的權(quán)重不一樣,每一次推舉迭代(boosting iteration)中,數(shù)據(jù)修改(data modifications)會(huì)把權(quán)重,分配給每一個(gè)訓(xùn)練樣本。在迭代開(kāi)始的時(shí)候,所有的樣本權(quán)重都被設(shè)置Wi=1/N,這樣第一步迭代就是在原始數(shù)據(jù)上簡(jiǎn)單訓(xùn)練一個(gè)弱分類器,在后續(xù)的迭代步驟中,樣本權(quán)重會(huì)被單獨(dú)修改,通過(guò)增加當(dāng)前基分類器錯(cuò)分樣本、比較難預(yù)測(cè)樣本的權(quán)重,使得下一個(gè)分類器去關(guān)注錯(cuò)分樣本和權(quán)重較高的難分樣本上,從而提高集成分類器的精度,并支持向量機(jī)作為基分類器,通過(guò)Adaboost集成學(xué)習(xí)的方法檢測(cè)XSS攻擊向量,AdaBoost模型流程如圖5所示。 1.3.4基于SVM的Bagging檢測(cè)模型 本文使用SVM算法可以作為基學(xué)習(xí)器,支持向量機(jī)能夠高效的實(shí)現(xiàn)訓(xùn)練樣本和預(yù)測(cè)樣本的結(jié)合,簡(jiǎn)化了分類問(wèn)題,具有較高的魯棒性。Bagging方法是采樣生成n個(gè)訓(xùn)練集,每個(gè)訓(xùn)練集生成各個(gè)基學(xué)習(xí)器,n個(gè)訓(xùn)練集共得到n個(gè)模型,對(duì)分類算法預(yù)測(cè),依據(jù)投票原則把n個(gè)弱學(xué)習(xí)器投票數(shù)最多的類或者類之一判定為最終類別,基于SVM的Bagging模型流程如圖6所示。 圖6 Bagging模型 1.3.5基于梯度提升樹(shù)的檢測(cè)模型 梯度提升決策樹(shù)算法(Gradient Boosting Decision Tree,GBDT)是集成學(xué)習(xí)Boosting中的一種。該算法通過(guò)向前分布式迭代,把迭代中損失函數(shù)達(dá)到最小作為目標(biāo),每次迭代通過(guò)沿著負(fù)梯度方向調(diào)整回歸樹(shù),逐漸減小殘差值,不斷對(duì)基學(xué)習(xí)器進(jìn)行學(xué)習(xí)和調(diào)整對(duì)應(yīng)權(quán)重,最終獲取一個(gè)使得損失函數(shù)值達(dá)到最小的基學(xué)習(xí)器。 1.3.6基于直方圖的梯度提升分類的檢測(cè)模型 通過(guò)使用直方圖,可以進(jìn)一步調(diào)整樹(shù)構(gòu)造算法。把決策樹(shù)作為HGBC的基分類器,HGBC可以處理缺失值,因此對(duì)缺失值(NaN)具有原生支持。在訓(xùn)練過(guò)程中,樹(shù)種植者根據(jù)潛在增益在每個(gè)分割點(diǎn)學(xué)習(xí)具有缺失值的樣本是應(yīng)該去左子樹(shù)節(jié)點(diǎn)還是右子樹(shù)節(jié)點(diǎn)。在模型預(yù)測(cè)時(shí),把缺失值的樣本重新分配給左子樹(shù)節(jié)點(diǎn)或右子樹(shù)節(jié)點(diǎn),更好的處理了缺失值的問(wèn)題。如果在訓(xùn)練期間未出現(xiàn)相關(guān)特征的缺失值,則把相關(guān)缺失值的樣本映射到具有更多樣本的子節(jié)點(diǎn)。本文通過(guò)直方圖梯度提升分類模型來(lái)進(jìn)行建模,并通過(guò)網(wǎng)格搜索算法進(jìn)行模型的調(diào)優(yōu),促使模型達(dá)到最優(yōu)的效果,有效避免了過(guò)擬合。 XSS有效載荷比正常有效載荷長(zhǎng)度更長(zhǎng),由于其中包含了惡意代碼,因此敏感詞、敏感字符和有效載荷的長(zhǎng)度是識(shí)別XSS的重要要素,XSS有效載荷可能會(huì)利用重定向鏈接,將惡意代碼隱藏在重定向界面里,通過(guò)識(shí)別重定向鏈接來(lái)跳轉(zhuǎn)并執(zhí)行惡意代碼,一些協(xié)議可能會(huì)出現(xiàn)在一個(gè)負(fù)載中。包含7個(gè)維度:URL的長(zhǎng)度,HTTP的個(gè)數(shù),特殊關(guān)鍵詞,閉合敏感符號(hào),空格字符,大寫(xiě)字母,數(shù)字字符,攻擊樣本作為黑樣本達(dá)打標(biāo)為1,安全樣本作為白樣本,打標(biāo)記為0。 表1 特征名稱及說(shuō)明 描述了獲取XSS特征以及標(biāo)簽后,根據(jù)3.2特征選擇采用不同的機(jī)器學(xué)習(xí)算法進(jìn)行模型訓(xùn)練、測(cè)試。包含的集成學(xué)習(xí)模型有決策樹(shù)、隨機(jī)森林、支持向量機(jī)以及由基本分類器集成的極端隨機(jī)樹(shù)、AdaBoost、梯度Boosting、Bagging、直方圖的梯度提升等。獲取訓(xùn)練好的模型以后,混淆矩陣值用于比較和評(píng)估模型。通過(guò)使用混淆矩陣可以計(jì)算以下值: 精確率: (1) 準(zhǔn)確率為分類的準(zhǔn)確度,即: (2) 召回率為預(yù)測(cè)正的正樣本占總正樣本的比例,即: (3) 誤報(bào)率為預(yù)測(cè)為正的負(fù)樣本占總負(fù)樣本的比例,即: (4) F1值是召回率與精確率的一個(gè)均和調(diào)值,是對(duì)召回率與精確率的一個(gè)綜合評(píng)價(jià),即: (5) 其中,FN是被判定為負(fù)樣本的正樣本的數(shù)量;FP是被判定為正樣本的負(fù)樣本的數(shù)量;TP是判定為正樣本的正樣本的數(shù)量;TN是判定為負(fù)樣本的負(fù)樣本的數(shù)量。 圖7(a)和圖7(b)代表了SVM分類器對(duì)XSS攻擊樣本和安全樣本的特征分布情況,為了平衡數(shù)據(jù)集,安全樣本的數(shù)量保持和攻擊樣本的數(shù)量一樣。數(shù)據(jù)集包含了60 674個(gè)樣本,其中是安全向量樣本數(shù)量為30 337個(gè),XSS攻擊樣本的數(shù)量為30 337個(gè)??倶颖疽?:2比例劃分為訓(xùn)練樣本集(24 270)和測(cè)試樣本集(6 067)。 以下實(shí)驗(yàn)評(píng)估了集成學(xué)習(xí)技術(shù)中隨機(jī)森林分類、極端隨機(jī)樹(shù)(ExtraTrees)、AdaBoost、以SVM為基學(xué)習(xí)器的Bagging、梯度提升(GBDT)、和基于直方圖的梯度提升模型的XSS檢測(cè)率。表2是所有模型中混淆矩陣的值,表3比較了所有模型的性能指標(biāo),表4比較了所有模型的交叉驗(yàn)證得分以及模型的交叉驗(yàn)證的平均得分。從結(jié)果可以得出結(jié)論,所有集成方法都表現(xiàn)良好,并且在所有模型中均達(dá)到98%以上的精度,表現(xiàn)最優(yōu)的為基于直方圖的梯度提升分類模型和極端隨機(jī)樹(shù)模型。 表2 模型中混淆矩陣 表3 性能指標(biāo)的比較 表4 交叉驗(yàn)證分?jǐn)?shù)的比較 為了避免不平衡數(shù)據(jù)集問(wèn)題,設(shè)計(jì)安全向量生成器用來(lái)保持XSS和數(shù)據(jù)集的安全樣本之間的平衡;通過(guò)模糊測(cè)試技術(shù)檢測(cè)XSS測(cè)試用例,去除了冗余的無(wú)效向量進(jìn)而提升檢測(cè)效率;最后使用集成學(xué)習(xí)方法包括隨機(jī)森林分類、極端隨機(jī)樹(shù)(ExtraTrees)、AdaBoost、以SVM為基學(xué)習(xí)器的Bagging、梯度提升(GBDT)和基于直方圖的梯度提升模型檢測(cè)XSS攻擊向量和XSS安全向量,利用混淆矩陣評(píng)估這些模型的性能。結(jié)果顯示所有的集成學(xué)習(xí)模型在檢測(cè)XSS攻擊和安全向量上都表現(xiàn)出較好性能。在基于直方圖的梯度提升分類模型和極端隨機(jī)樹(shù)2個(gè)模型中,更是達(dá)到了最高的0.998 4的精度。但是研究仍存在不足之處,仍需要進(jìn)一步的研究完善,未來(lái)將進(jìn)一步豐富XSS攻擊樣本集,從而達(dá)到覆蓋性更強(qiáng)的效果,并嘗試擴(kuò)展到檢測(cè)其他Web應(yīng)用程序攻擊(例如SQL攻擊、DDos攻擊)。1.3 基于集成學(xué)習(xí)方法的攻擊檢測(cè)模型
2實(shí)驗(yàn)與結(jié)果分析
3結(jié)論