(1.浙江工業(yè)大學(xué) 經(jīng)濟(jì)學(xué)院,浙江 杭州 310023;2.浙江工業(yè)大學(xué) 信息工程學(xué)院,浙江 杭州310023)
自從進(jìn)入Web 2.0時(shí)代以來(lái),用戶成為網(wǎng)站內(nèi)容的貢獻(xiàn)者,大量交互產(chǎn)生在客戶端,同時(shí)也產(chǎn)生了大量的Web漏洞,對(duì)Web應(yīng)用的安全構(gòu)成了嚴(yán)重的威脅??缯灸_本攻擊(Cross-site scripting,XSS)是一種危害嚴(yán)重的Web漏洞,其常年位居開(kāi)放Web應(yīng)用安全項(xiàng)目組Top10漏洞的前3 名。其中,反射型XSS攻擊危害最為廣泛,其危害主要有盜取用戶Cookie、會(huì)話劫持和網(wǎng)絡(luò)釣魚(yú)等。在防御反射型XSS攻擊時(shí),最直接的方法是使用跨站腳本過(guò)濾器XSS-filter對(duì)用戶提交的輸入進(jìn)行過(guò)濾,XSS-filter使用黑名單策略,能夠?qū)诿麊沃械淖址M(jìn)行過(guò)濾,然而黑名單策略是靜態(tài)防御,只能利用已有的規(guī)則進(jìn)行攔截,對(duì)于未知的反射型XSS檢測(cè)效果并不理想。針對(duì)XSS攻擊的檢測(cè),已經(jīng)有相關(guān)工作者研究并設(shè)計(jì)了XSS檢測(cè)方案,儲(chǔ)澤楠等[1]提出使用k均值算法實(shí)現(xiàn)聚類并計(jì)算后驗(yàn)概率,以此初始化隱馬爾可夫模型(Hidden Markov model,HMM)參數(shù),生成具有更高檢測(cè)率HMM網(wǎng)絡(luò)入侵檢測(cè)模型。Gputa等[2]提出在線和離線相結(jié)合的方法檢測(cè)XSS攻擊,對(duì)于移動(dòng)云上的XSS檢測(cè)有良好效果。Salas等[3]提出使用滲透測(cè)試的方法檢測(cè)XSS漏洞,對(duì)于XML格式的跨站腳本攻擊有較好檢測(cè)效果,但是其他格式的跨站腳本攻擊設(shè)計(jì)較少。林冬茂[4]提出對(duì)監(jiān)控對(duì)服務(wù)器“寫(xiě)”操作的數(shù)據(jù)流,與規(guī)則庫(kù)對(duì)比,以此判斷是否為遭到入侵,此方法受到規(guī)則庫(kù)的限制,只能攔截?cái)?shù)據(jù)庫(kù)中已有的攻擊規(guī)則。
在研究了當(dāng)前各種XSS攻擊檢測(cè)技術(shù)的基礎(chǔ)上,針對(duì)現(xiàn)有反射型XSS攻擊檢測(cè)技術(shù)只能集中在特定領(lǐng)域或常見(jiàn)類型的不足,鑒于HMM具有強(qiáng)大的統(tǒng)計(jì)學(xué)基礎(chǔ)與高效的數(shù)據(jù)處理能力,筆者改進(jìn)了基于HMM的反射型XSS攻擊檢測(cè)技術(shù),充分研究反射型XSS以及變形反射型XSS的構(gòu)造原理,使用詞集模型對(duì)樣本進(jìn)行詞匯分割并序列化作為觀察序列,進(jìn)行HMM訓(xùn)練并生成檢測(cè)模型,能夠改善基于規(guī)則的檢測(cè)器對(duì)于未知的和變形的反射型XSS的檢測(cè)效果[5]。
XSS根據(jù)利用手法不同可以分為反射型XSS和存儲(chǔ)型XSS。
反射型XSS也稱作非持久型XSS,攻擊者構(gòu)造一個(gè)含有惡意代碼的URL,然后誘騙用戶點(diǎn)擊此URL,用戶點(diǎn)擊URL后,惡意JavaScript代碼就會(huì)在用戶的客戶端執(zhí)行,惡意JavaScript代碼只在用戶點(diǎn)擊URL鏈接時(shí)觸發(fā),只執(zhí)行一次,所以被稱作反射型XSS。
存儲(chǔ)型XSS也稱作持久型XSS,存儲(chǔ)型XSS不需要用戶點(diǎn)擊特定URL就能進(jìn)行攻擊,攻擊者將含有惡意代碼的頁(yè)面上傳到服務(wù)器上,然后用戶在瀏覽包含惡意代碼的網(wǎng)站就會(huì)執(zhí)行JavaScript代碼,一般出現(xiàn)在網(wǎng)站評(píng)論和轉(zhuǎn)發(fā)處[6]。
在兩種類型中,反射型XSS更為普遍,因?yàn)槠錁?gòu)造簡(jiǎn)便,且變化形式較為豐富,反射型XSS能夠直接在URL的參數(shù)中構(gòu)造,可以利用規(guī)則進(jìn)行過(guò)濾,或用機(jī)器學(xué)習(xí)的方法進(jìn)行識(shí)別,而存儲(chǔ)型XSS的URL中不一定含有攻擊代碼,目前還沒(méi)有非常有效的方法對(duì)存儲(chǔ)型XSS進(jìn)行檢測(cè)[7-8]。
普通的反射型XSS容易被XSS-filter檢測(cè),攻擊者通過(guò)構(gòu)造變形XSS來(lái)繞過(guò)檢測(cè),例如利用空格來(lái)分離敏感詞:對(duì)于JavaScript而言,可以構(gòu)造如下變形攻擊載荷:,其中用空格鍵將javascript隔開(kāi),可以繞過(guò)XSS-filter。利用大小寫(xiě)混淆來(lái)構(gòu)造變形XSS:
,如果黑名單中沒(méi)有對(duì)大小寫(xiě)過(guò)濾,那么這種方式就可以繞過(guò)XSS-filter,還有其他變形XSS攻擊構(gòu)造方法,例如對(duì)標(biāo)簽屬性值進(jìn)行ASCII轉(zhuǎn)碼,將URL中的關(guān)鍵詞轉(zhuǎn)化為URL編碼等手段來(lái)繞過(guò)檢測(cè)[9]。
基于規(guī)則的XSS檢測(cè)器的黑名單機(jī)制難以應(yīng)對(duì)變形的反射型XSS攻擊,基于HMM的檢測(cè)器在處理XSS攻擊樣本時(shí),對(duì)攻擊樣本從整體結(jié)構(gòu)上進(jìn)行分詞并提取特征,形成的檢測(cè)模型能更全面地檢測(cè)XSS攻擊。
HMM是一種應(yīng)用廣泛的機(jī)器學(xué)習(xí)技術(shù),它提供一種基于數(shù)據(jù)訓(xùn)練的概率識(shí)別系統(tǒng),借助于現(xiàn)有模型訓(xùn)練和評(píng)估算法,能夠良好地應(yīng)用于模式識(shí)別領(lǐng)域。HMM已成功地應(yīng)用于語(yǔ)音識(shí)別、文本抽取和入侵檢測(cè)等領(lǐng)域,筆者正是利用具有良好的文本數(shù)據(jù)處理能力,結(jié)合反射型XSS攻擊的樣本特征,對(duì)攻擊樣本進(jìn)行特征提取加入HMM模型訓(xùn)練,生成基于HMM的反射型XSS檢測(cè)器。
基于HMM的反射型XSS檢測(cè)器設(shè)計(jì)主要分為HMM模型訓(xùn)練和HMM模型驗(yàn)證兩個(gè)部分,如圖1所示。HMM模型訓(xùn)練階段的目的是生成HMM攻擊檢測(cè)模型,模型訓(xùn)練中最重要的一部分是觀察序列的生成,觀察序列由反射型XSS攻擊訓(xùn)練樣本經(jīng)過(guò)處理得到,先進(jìn)行數(shù)據(jù)清洗,然后進(jìn)行詞匯分割并對(duì)每部分進(jìn)行詞集編碼,編碼之后進(jìn)行序列化作為HMM模型的觀察序列,用觀察序列訓(xùn)練HMM檢測(cè)模型。模型驗(yàn)證部分是用訓(xùn)練得到的HMM檢測(cè)模型對(duì)測(cè)試樣本進(jìn)行評(píng)估,以驗(yàn)證模型的識(shí)別效果。
圖1 HMM檢測(cè)系統(tǒng)結(jié)構(gòu)圖Fig.1 HMM detection system structure chart
2.2.1 數(shù)據(jù)清洗
模型訓(xùn)練需要先將攻擊載荷進(jìn)行序列化作為觀察序列,而反射型XSS攻擊載荷中包含有函數(shù)體、攻擊關(guān)鍵詞等,攻擊載荷的元素較多,在特征提取之前需要進(jìn)行樣本數(shù)據(jù)處理。在樣本處理時(shí)應(yīng)先進(jìn)行數(shù)據(jù)清洗,數(shù)據(jù)清洗應(yīng)先剔除掉樣本中非關(guān)鍵因素。一個(gè)完整的URL請(qǐng)求包括協(xié)議、域名、端口、虛擬目錄、文件名和參數(shù),實(shí)際上XSS攻擊樣本和正常樣本的區(qū)別主要在于虛擬目錄、文件名和參數(shù)等部分,因此只需保留虛擬目錄、文件名和參數(shù)。
由于部分攻擊載荷為了躲避檢測(cè)進(jìn)行了編碼,主要有HTML編碼和URL編碼,因此在詞法分割之前需要進(jìn)行相應(yīng)的解碼。以攻擊載荷%3Cscript%3Ealert%28/42873/%29%3C/script%3E為例,這段字符串進(jìn)行了URL編碼,需要將其解碼為。
為了減少特征空間,剔除掉非關(guān)鍵元素之后需要將參數(shù)的某些部分范化,主要包括參數(shù)中的超鏈接和數(shù)字,將超鏈接范化為"http://u"的形式,將所有數(shù)字范化為數(shù)字0,將超鏈接和數(shù)字范化對(duì)攻擊樣本的特征提取沒(méi)有影響。將正常樣本和反射型XSS攻擊樣本分別進(jìn)行數(shù)據(jù)清洗,得到兩種數(shù)據(jù)清洗后的樣本。
1) 數(shù)據(jù)清洗后的正常樣本為
/qte_web.php?qte_web_path=@rfiurl?qte_web_path=@rfiurl?
/environment.php?dir_prefix=http://u?
/examples/jsp/jsp0/jspx/infosrch.cgi?cmd=getdoc&db=man&fname=|/bin/id
2) 反射型XSS攻擊樣本為
/0_0/api.php?op=map&maptype=0&city=test
/mobile/goods_list.php?type=1&sonmouse-over=alert(/0/)
/include/dialog/templets.php?adminDir-Hand="/>
2.2.2 詞匯分割與編碼
樣本數(shù)據(jù)清洗之后需要進(jìn)行詞匯分割,詞匯分割有詞集模型和詞袋模型兩種,詞集模型規(guī)定每個(gè)詞匯只能存在出現(xiàn)或者不出現(xiàn)兩種形式,而詞袋模型規(guī)定出現(xiàn)0 次或多次,并統(tǒng)計(jì)每個(gè)詞匯出現(xiàn)次數(shù)。對(duì)于本模型,不需要統(tǒng)計(jì)其次數(shù),只需要判斷詞匯的有無(wú),因此選用詞集模型即可。
1) 第三方鏈接:有相當(dāng)部分攻擊樣本中含有第三方域名作為攻擊者服務(wù)器,其作用是接收并存儲(chǔ)盜取的客戶端信息,第三方鏈接作為一個(gè)獨(dú)立的部分,明顯區(qū)別于URL中其他部分,因此http/https需要單獨(dú)作為一類詞匯。
2) 屬性標(biāo)簽:反射型XSS攻擊需要在URL中執(zhí)行JavaScript攻擊代碼,常見(jiàn)的onload屬性就是負(fù)責(zé)在頁(yè)面加載執(zhí)行一段代碼,例如onload="alert(′XSS′)就代表執(zhí)行alert函數(shù)。Onerror屬性是負(fù)責(zé)在錯(cuò)誤發(fā)生時(shí)執(zhí)行一段代碼,當(dāng)然還有其他屬性。屬性標(biāo)簽的特征是屬性加等號(hào)的形式。
3) JavaScript函數(shù):反射型XSS會(huì)調(diào)用一些危險(xiǎn)函數(shù)完成攻擊,例如alert( )函數(shù)常用于彈出對(duì)話框并顯示參數(shù)里的內(nèi)容,使用彈窗本身沒(méi)有問(wèn)題,但是如果攻擊者借助document屬性,例如alert(document.cookie),就能夠盜取客戶端cookie,類似的函數(shù)還有很多,將這些JavaScript函數(shù)分為一類詞匯。
4) < >標(biāo)簽:< >標(biāo)簽主要有等。< >以及其里面的內(nèi)容作為一個(gè)整體劃分為一類詞匯。
5) 單雙引號(hào):以alert('XSS')和alert("XSS")為例,前者是用單引號(hào)中包含攻擊代碼,后者是用雙引號(hào)包含攻擊代碼,單雙引號(hào)一般用于將函數(shù)參數(shù)或?qū)傩灾蛋趦?nèi),以區(qū)別于其他字符。
6) <和>:<和>是2 個(gè)標(biāo)簽,不同于完整的< >標(biāo)簽,兩者中左尖括號(hào)代表標(biāo)簽開(kāi)頭,右尖括號(hào)代表結(jié)尾。例如
(41)世祿權(quán)臣不信,非毀玄帝降言誠(chéng)訓(xùn)。(《太上說(shuō)玄天大聖真武本傳神呪妙經(jīng)註》卷六,《中華道藏》30/579)
具體詞匯分割規(guī)則如表1所示,在詞匯分割之后需要進(jìn)行編碼,按照詞匯分割規(guī)則,對(duì)被分割的詞匯依次進(jìn)行編碼,每個(gè)詞匯都有一一對(duì)應(yīng)的編碼,然后序列化作為觀察序列進(jìn)行輸入,進(jìn)行HMM模型訓(xùn)練。
表1 詞匯分割規(guī)則表Table 1 Table of vocabulary segmentation rules
HMM包含兩層:觀察層和隱藏層。觀察層是待識(shí)別的觀察序列,隱藏層是一個(gè)馬爾可夫過(guò)程。
HMM將一個(gè)隨機(jī)過(guò)程稱作一系列狀態(tài)的轉(zhuǎn)移,狀態(tài)集為S={s1,s2,…sN},t時(shí)刻的狀態(tài)用qt表示,并滿足qt∈S={s1,s2,…sN},狀態(tài)能被觀察到的叫作觀察值,表示為ot,ot是觀察集合V={v1,v2,…vM}的一種。
2.3.1HMM參數(shù)
HMM參數(shù)[10]由3 部分組成:
1) 轉(zhuǎn)移概率矩陣A為
式中aij為從狀態(tài)si轉(zhuǎn)移到sj的轉(zhuǎn)移概率。
2) 觀察概率矩陣B為
式中bjk為在狀態(tài)sj下產(chǎn)生vk的概率。
3) 初始狀態(tài)概率π為
π={πi=P(q1=si)},1≤i≤j
式中πi為第1 個(gè)狀態(tài)q1取si的概率。
因此可以用參數(shù)λ=(N,M,A,B,π)來(lái)表示HMM。HMM主要解決3 個(gè)問(wèn)題:評(píng)估問(wèn)題、解碼問(wèn)題和學(xué)習(xí)問(wèn)題,本模型使用到評(píng)估問(wèn)題和學(xué)習(xí)問(wèn)題。
圖2 HMM模型訓(xùn)練過(guò)程圖Fig.2 HMM model detection flow chart
2.3.2 訓(xùn)練過(guò)程
HMM具體訓(xùn)練過(guò)程如下:
1) 將反射型XSS訓(xùn)練樣本進(jìn)行數(shù)據(jù)清洗后,提取詞集并序列化生成觀察序列O={o1,o2,…oT}。
2) 使用前向 - 后向算法計(jì)算觀察序列概率P(o|λ)。
3) 使用Baum-Welch算法對(duì)模型參數(shù)A,B,π重估計(jì)。
HMM模型驗(yàn)證需要解決的問(wèn)題:將測(cè)試樣本提取詞集并序列化,作為觀察序列O={o1,o2,…,oT},已知HMM模型參數(shù)λ=(N,M,A,B,π),求模型產(chǎn)生觀察序列的概率P(o|λ),屬于HMM評(píng)估問(wèn)題的范疇,將得到的概率值取自然對(duì)數(shù)Ln(P(o|λ))并與閾值比較,比閾值小的為攻擊樣本,比閾值大的為正常樣本。
實(shí)驗(yàn)環(huán)境包括操作系統(tǒng)64 位Ubuntu 16.04,處理器英特爾酷睿i5 2467M,內(nèi)存8 G,編程語(yǔ)言Python 3.5,預(yù)裝機(jī)器學(xué)習(xí)模塊HMMLearn。
訓(xùn)練環(huán)節(jié),反射型XSS攻擊樣本從漏洞提交網(wǎng)站exploit-db和XSS漏洞提交網(wǎng)站XSSed中獲取,挑選1 000 個(gè)典型的反射型XSS樣本作為訓(xùn)練樣本,經(jīng)過(guò)詞集模型處理后加入HMM模型訓(xùn)練,形成HMM檢測(cè)模型,對(duì)攻擊樣本觀察序列概率值取自然對(duì)數(shù),將最大值作為本模型的閾值。
驗(yàn)證環(huán)節(jié)分兩個(gè)實(shí)驗(yàn),實(shí)驗(yàn)1選取500 個(gè)反射型XSS樣本和500 個(gè)正常請(qǐng)求樣本,其中正常請(qǐng)求樣本從Web服務(wù)器日志中獲取,規(guī)定反射型XSS樣本為正樣本,正常請(qǐng)求樣本為負(fù)樣本。為了全面評(píng)價(jià)HMM檢測(cè)模型的效果,本實(shí)驗(yàn)引入準(zhǔn)確率、誤報(bào)率和漏報(bào)率等3 個(gè)評(píng)價(jià)指標(biāo)[12]。
準(zhǔn)確率表示分類的準(zhǔn)確度,即
(1)
式中:FN為被錯(cuò)誤判定為負(fù)樣本的正樣本的數(shù)量;FP為被錯(cuò)誤判定為正樣本的負(fù)樣本數(shù)量;TN為被正確判定為負(fù)樣本的負(fù)樣本數(shù)量;TP為被正確判定為正樣本的正樣本數(shù)量。
誤報(bào)率表示錯(cuò)判為正的負(fù)樣本占總的負(fù)樣本的比例,即
(2)
漏報(bào)率表示錯(cuò)判為負(fù)的正樣本占總的正樣本的比例,即
(3)
將500 個(gè)反射型XSS樣本和500 個(gè)正常請(qǐng)求樣本作為測(cè)試樣本進(jìn)行模型驗(yàn)證,計(jì)算觀測(cè)序列概率值取自然對(duì)數(shù)Ln(P(o|λ)),為了直觀表示兩種樣本的輸出值Ln(P(o|λ))的分布區(qū)間,各取前50 個(gè)樣本繪制HMM模型檢測(cè)圖,圖3顯示了兩種樣本經(jīng)過(guò)HMM模型計(jì)算的輸出值Ln(P(o|λ)),正常樣本輸出值大多數(shù)在0~30,而反射型XSS樣本的輸出值普遍高于這個(gè)區(qū)間,初步證明檢測(cè)模型具有良好的檢測(cè)能力。
圖3 HMM檢測(cè)圖Fig.3 HMM detection chart
將訓(xùn)練樣本加入模型計(jì)算,取輸出概率的自然對(duì)數(shù)中最大值作為HMM檢測(cè)模型的閾值,基于此閾值的檢測(cè)效果如表2所示。
表2 HMM檢測(cè)模型的檢測(cè)數(shù)據(jù)Table 2 Detection data of HMM
WebKit內(nèi)核集成有XSS-filter,而Chrome瀏覽器正是基于WebKit內(nèi)核開(kāi)發(fā),Chrome瀏覽器中的XSS-filter也被稱為Chrome XSS-filter,這是一種典型的基于規(guī)則的XSS檢測(cè)器。為了對(duì)照,將同樣的攻擊樣本和正常樣本作為Chrome XSS-filter的測(cè)試樣本,測(cè)試結(jié)果如圖4所示,HMM檢測(cè)模型的準(zhǔn)確率比Chrome XSS-filter要高,這代表著本模型對(duì)攻擊樣本和正常樣本的整體判別能力較強(qiáng)。盡管本模型的誤報(bào)率較低,但是改善幅度不大,這是因?yàn)檎颖镜臉?gòu)造較為簡(jiǎn)單,基于規(guī)則的XSS-filter對(duì)于正常樣本的識(shí)別也有較高的能力。本模型漏報(bào)率的提升效果比較明顯,這是因?yàn)閄SS-filter難以識(shí)別變形的或者復(fù)雜的反射型XSS攻擊,而本模型使用了詞集模型,從反射型XSS攻擊的整體結(jié)構(gòu)進(jìn)行特征提取,比XSS-filter黑名單模式更具有針對(duì)性。
圖4 2 種檢測(cè)器的準(zhǔn)確率、誤報(bào)率和漏報(bào)率比較Fig.4 Comparison of the accuracy false alarm rate and missed alarm rate of two detectors
實(shí)驗(yàn)2驗(yàn)證本模型對(duì)變形反射型XSS的檢測(cè)效果,選取100 個(gè)變形反射型XSS攻擊樣本,變形反射型XSS包含編碼、大小寫(xiě)混淆等多種變形方式,作為對(duì)照,使用Chrome XSS-filter檢測(cè)同樣的變形樣本,統(tǒng)計(jì)兩種檢測(cè)器的有效檢測(cè)數(shù),實(shí)驗(yàn)結(jié)果如圖5所示。本模型對(duì)變形反射型XSS的有效檢測(cè)數(shù)遠(yuǎn)遠(yuǎn)多于Chrome XSS-filter,這是因?yàn)镃hrome XSS-filter的黑名單機(jī)制難以檢測(cè)出不在黑名單中的變形反射型XSS,而本模型對(duì)樣本詞法分割需要基于攻擊樣本的整體結(jié)構(gòu),將變形的反射型XSS也加入特征提取之中,形成的觀察序列更具有代表性。
圖5 變形反射型XSS檢測(cè)效果比較Fig.5 Comparison of detection performance of variable reflected XSS
傳統(tǒng)的基于規(guī)則的XSS檢測(cè)器難以防御變形的和未知的反射型XSS攻擊,因此提出使用HMM用于反射型XSS攻擊檢測(cè),運(yùn)用詞集模型對(duì)樣本進(jìn)行處理,將攻擊樣本和正常樣本進(jìn)行詞匯分割并序列化作為觀察序列,經(jīng)過(guò)HMM訓(xùn)練和測(cè)試,達(dá)到了良好的準(zhǔn)確率、誤報(bào)率和漏報(bào)率,驗(yàn)證了HMM在反射型XSS攻擊檢測(cè)領(lǐng)域的可行性。將包含變形的反射型XSS攻擊的訓(xùn)練樣本加入特征提取,生成的HMM檢測(cè)模型對(duì)于變形的反射型XSS檢測(cè)效果比Chrome XSS-filter更好。相對(duì)于基于規(guī)則的XSS檢測(cè)器,HMM檢測(cè)器對(duì)反射型XSS攻擊樣本的識(shí)別能力更強(qiáng)。實(shí)驗(yàn)后續(xù)需要完善的地方是將最新的變形XSS攻擊樣本加入特征提取之中,以進(jìn)一步提高HMM檢測(cè)模型的性能。