(1.浙江工業大學 經濟學院,浙江 杭州 310023;2.浙江工業大學 信息工程學院,浙江 杭州310023)
自從進入Web 2.0時代以來,用戶成為網站內容的貢獻者,大量交互產生在客戶端,同時也產生了大量的Web漏洞,對Web應用的安全構成了嚴重的威脅??缯灸_本攻擊(Cross-site scripting,XSS)是一種危害嚴重的Web漏洞,其常年位居開放Web應用安全項目組Top10漏洞的前3 名。其中,反射型XSS攻擊危害最為廣泛,其危害主要有盜取用戶Cookie、會話劫持和網絡釣魚等。在防御反射型XSS攻擊時,最直接的方法是使用跨站腳本過濾器XSS-filter對用戶提交的輸入進行過濾,XSS-filter使用黑名單策略,能夠對黑名單中的字符串進行過濾,然而黑名單策略是靜態防御,只能利用已有的規則進行攔截,對于未知的反射型XSS檢測效果并不理想。針對XSS攻擊的檢測,已經有相關工作者研究并設計了XSS檢測方案,儲澤楠等[1]提出使用k均值算法實現聚類并計算后驗概率,以此初始化隱馬爾可夫模型(Hidden Markov model,HMM)參數,生成具有更高檢測率HMM網絡入侵檢測模型。Gputa等[2]提出在線和離線相結合的方法檢測XSS攻擊,對于移動云上的XSS檢測有良好效果。Salas等[3]提出使用滲透測試的方法檢測XSS漏洞,對于XML格式的跨站腳本攻擊有較好檢測效果,但是其他格式的跨站腳本攻擊設計較少。林冬茂[4]提出對監控對服務器“寫”操作的數據流,與規則庫對比,以此判斷是否為遭到入侵,此方法受到規則庫的限制,只能攔截數據庫中已有的攻擊規則。
在研究了當前各種XSS攻擊檢測技術的基礎上,針對現有反射型XSS攻擊檢測技術只能集中在特定領域或常見類型的不足,鑒于HMM具有強大的統計學基礎與高效的數據處理能力,筆者改進了基于HMM的反射型XSS攻擊檢測技術,充分研究反射型XSS以及變形反射型XSS的構造原理,使用詞集模型對樣本進行詞匯分割并序列化作為觀察序列,進行HMM訓練并生成檢測模型,能夠改善基于規則的檢測器對于未知的和變形的反射型XSS的檢測效果[5]。
XSS根據利用手法不同可以分為反射型XSS和存儲型XSS。
反射型XSS也稱作非持久型XSS,攻擊者構造一個含有惡意代碼的URL,然后誘騙用戶點擊此URL,用戶點擊URL后,惡意JavaScript代碼就會在用戶的客戶端執行,惡意JavaScript代碼只在用戶點擊URL鏈接時觸發,只執行一次,所以被稱作反射型XSS。
存儲型XSS也稱作持久型XSS,存儲型XSS不需要用戶點擊特定URL就能進行攻擊,攻擊者將含有惡意代碼的頁面上傳到服務器上,然后用戶在瀏覽包含惡意代碼的網站就會執行JavaScript代碼,一般出現在網站評論和轉發處[6]。
在兩種類型中,反射型XSS更為普遍,因為其構造簡便,且變化形式較為豐富,反射型XSS能夠直接在URL的參數中構造,可以利用規則進行過濾,或用機器學習的方法進行識別,而存儲型XSS的URL中不一定含有攻擊代碼,目前還沒有非常有效的方法對存儲型XSS進行檢測[7-8]。
普通的反射型XSS容易被XSS-filter檢測,攻擊者通過構造變形XSS來繞過檢測,例如利用空格來分離敏感詞:對于JavaScript而言,可以構造如下變形攻擊載荷:,其中用空格鍵將javascript隔開,可以繞過XSS-filter。利用大小寫混淆來構造變形XSS:
,如果黑名單中沒有對大小寫過濾,那么這種方式就可以繞過XSS-filter,還有其他變形XSS攻擊構造方法,例如對標簽屬性值進行ASCII轉碼,將URL中的關鍵詞轉化為URL編碼等手段來繞過檢測[9]。
基于規則的XSS檢測器的黑名單機制難以應對變形的反射型XSS攻擊,基于HMM的檢測器在處理XSS攻擊樣本時,對攻擊樣本從整體結構上進行分詞并提取特征,形成的檢測模型能更全面地檢測XSS攻擊。
HMM是一種應用廣泛的機器學習技術,它提供一種基于數據訓練的概率識別系統,借助于現有模型訓練和評估算法,能夠良好地應用于模式識別領域。HMM已成功地應用于語音識別、文本抽取和入侵檢測等領域,筆者正是利用具有良好的文本數據處理能力,結合反射型XSS攻擊的樣本特征,對攻擊樣本進行特征提取加入HMM模型訓練,生成基于HMM的反射型XSS檢測器。
基于HMM的反射型XSS檢測器設計主要分為HMM模型訓練和HMM模型驗證兩個部分,如圖1所示。HMM模型訓練階段的目的是生成HMM攻擊檢測模型,模型訓練中最重要的一部分是觀察序列的生成,觀察序列由反射型XSS攻擊訓練樣本經過處理得到,先進行數據清洗,然后進行詞匯分割并對每部分進行詞集編碼,編碼之后進行序列化作為HMM模型的觀察序列,用觀察序列訓練HMM檢測模型。模型驗證部分是用訓練得到的HMM檢測模型對測試樣本進行評估,以驗證模型的識別效果。

圖1 HMM檢測系統結構圖Fig.1 HMM detection system structure chart
2.2.1 數據清洗
模型訓練需要先將攻擊載荷進行序列化作為觀察序列,而反射型XSS攻擊載荷中包含有函數體、攻擊關鍵詞等,攻擊載荷的元素較多,在特征提取之前需要進行樣本數據處理。在樣本處理時應先進行數據清洗,數據清洗應先剔除掉樣本中非關鍵因素。一個完整的URL請求包括協議、域名、端口、虛擬目錄、文件名和參數,實際上XSS攻擊樣本和正常樣本的區別主要在于虛擬目錄、文件名和參數等部分,因此只需保留虛擬目錄、文件名和參數。
由于部分攻擊載荷為了躲避檢測進行了編碼,主要有HTML編碼和URL編碼,因此在詞法分割之前需要進行相應的解碼。以攻擊載荷%3Cscript%3Ealert%28/42873/%29%3C/script%3E為例,這段字符串進行了URL編碼,需要將其解碼為。
為了減少特征空間,剔除掉非關鍵元素之后需要將參數的某些部分范化,主要包括參數中的超鏈接和數字,將超鏈接范化為"http://u"的形式,將所有數字范化為數字0,將超鏈接和數字范化對攻擊樣本的特征提取沒有影響。將正常樣本和反射型XSS攻擊樣本分別進行數據清洗,得到兩種數據清洗后的樣本。
1) 數據清洗后的正常樣本為
/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 詞匯分割與編碼
樣本數據清洗之后需要進行詞匯分割,詞匯分割有詞集模型和詞袋模型兩種,詞集模型規定每個詞匯只能存在出現或者不出現兩種形式,而詞袋模型規定出現0 次或多次,并統計每個詞匯出現次數。對于本模型,不需要統計其次數,只需要判斷詞匯的有無,因此選用詞集模型即可。
1) 第三方鏈接:有相當部分攻擊樣本中含有第三方域名作為攻擊者服務器,其作用是接收并存儲盜取的客戶端信息,第三方鏈接作為一個獨立的部分,明顯區別于URL中其他部分,因此http/https需要單獨作為一類詞匯。
2) 屬性標簽:反射型XSS攻擊需要在URL中執行JavaScript攻擊代碼,常見的onload屬性就是負責在頁面加載執行一段代碼,例如onload="alert(′XSS′)就代表執行alert函數。Onerror屬性是負責在錯誤發生時執行一段代碼,當然還有其他屬性。屬性標簽的特征是屬性加等號的形式。
3) JavaScript函數:反射型XSS會調用一些危險函數完成攻擊,例如alert( )函數常用于彈出對話框并顯示參數里的內容,使用彈窗本身沒有問題,但是如果攻擊者借助document屬性,例如alert(document.cookie),就能夠盜取客戶端cookie,類似的函數還有很多,將這些JavaScript函數分為一類詞匯。
4) < >標簽:< >標簽主要有等。< >以及其里面的內容作為一個整體劃分為一類詞匯。
5) 單雙引號:以alert('XSS')和alert("XSS")為例,前者是用單引號中包含攻擊代碼,后者是用雙引號包含攻擊代碼,單雙引號一般用于將函數參數或屬性值包含在內,以區別于其他字符。
6) <和>:<和>是2 個標簽,不同于完整的< >標簽,兩者中左尖括號代表標簽開頭,右尖括號代表結尾。例如
(41)世祿權臣不信,非毀玄帝降言誠訓。(《太上說玄天大聖真武本傳神呪妙經註》卷六,《中華道藏》30/579)
具體詞匯分割規則如表1所示,在詞匯分割之后需要進行編碼,按照詞匯分割規則,對被分割的詞匯依次進行編碼,每個詞匯都有一一對應的編碼,然后序列化作為觀察序列進行輸入,進行HMM模型訓練。

表1 詞匯分割規則表Table 1 Table of vocabulary segmentation rules
HMM包含兩層:觀察層和隱藏層。觀察層是待識別的觀察序列,隱藏層是一個馬爾可夫過程。
HMM將一個隨機過程稱作一系列狀態的轉移,狀態集為S={s1,s2,…sN},t時刻的狀態用qt表示,并滿足qt∈S={s1,s2,…sN},狀態能被觀察到的叫作觀察值,表示為ot,ot是觀察集合V={v1,v2,…vM}的一種。
2.3.1HMM參數
HMM參數[10]由3 部分組成:
1) 轉移概率矩陣A為
式中aij為從狀態si轉移到sj的轉移概率。
2) 觀察概率矩陣B為
式中bjk為在狀態sj下產生vk的概率。
3) 初始狀態概率π為
π={πi=P(q1=si)},1≤i≤j
式中πi為第1 個狀態q1取si的概率。
因此可以用參數λ=(N,M,A,B,π)來表示HMM。HMM主要解決3 個問題:評估問題、解碼問題和學習問題,本模型使用到評估問題和學習問題。


圖2 HMM模型訓練過程圖Fig.2 HMM model detection flow chart
2.3.2 訓練過程
HMM具體訓練過程如下:
1) 將反射型XSS訓練樣本進行數據清洗后,提取詞集并序列化生成觀察序列O={o1,o2,…oT}。
2) 使用前向 - 后向算法計算觀察序列概率P(o|λ)。
3) 使用Baum-Welch算法對模型參數A,B,π重估計。
HMM模型驗證需要解決的問題:將測試樣本提取詞集并序列化,作為觀察序列O={o1,o2,…,oT},已知HMM模型參數λ=(N,M,A,B,π),求模型產生觀察序列的概率P(o|λ),屬于HMM評估問題的范疇,將得到的概率值取自然對數Ln(P(o|λ))并與閾值比較,比閾值小的為攻擊樣本,比閾值大的為正常樣本。
實驗環境包括操作系統64 位Ubuntu 16.04,處理器英特爾酷睿i5 2467M,內存8 G,編程語言Python 3.5,預裝機器學習模塊HMMLearn。
訓練環節,反射型XSS攻擊樣本從漏洞提交網站exploit-db和XSS漏洞提交網站XSSed中獲取,挑選1 000 個典型的反射型XSS樣本作為訓練樣本,經過詞集模型處理后加入HMM模型訓練,形成HMM檢測模型,對攻擊樣本觀察序列概率值取自然對數,將最大值作為本模型的閾值。
驗證環節分兩個實驗,實驗1選取500 個反射型XSS樣本和500 個正常請求樣本,其中正常請求樣本從Web服務器日志中獲取,規定反射型XSS樣本為正樣本,正常請求樣本為負樣本。為了全面評價HMM檢測模型的效果,本實驗引入準確率、誤報率和漏報率等3 個評價指標[12]。
準確率表示分類的準確度,即
(1)
式中:FN為被錯誤判定為負樣本的正樣本的數量;FP為被錯誤判定為正樣本的負樣本數量;TN為被正確判定為負樣本的負樣本數量;TP為被正確判定為正樣本的正樣本數量。
誤報率表示錯判為正的負樣本占總的負樣本的比例,即
(2)
漏報率表示錯判為負的正樣本占總的正樣本的比例,即
(3)
將500 個反射型XSS樣本和500 個正常請求樣本作為測試樣本進行模型驗證,計算觀測序列概率值取自然對數Ln(P(o|λ)),為了直觀表示兩種樣本的輸出值Ln(P(o|λ))的分布區間,各取前50 個樣本繪制HMM模型檢測圖,圖3顯示了兩種樣本經過HMM模型計算的輸出值Ln(P(o|λ)),正常樣本輸出值大多數在0~30,而反射型XSS樣本的輸出值普遍高于這個區間,初步證明檢測模型具有良好的檢測能力。

圖3 HMM檢測圖Fig.3 HMM detection chart
將訓練樣本加入模型計算,取輸出概率的自然對數中最大值作為HMM檢測模型的閾值,基于此閾值的檢測效果如表2所示。

表2 HMM檢測模型的檢測數據Table 2 Detection data of HMM
WebKit內核集成有XSS-filter,而Chrome瀏覽器正是基于WebKit內核開發,Chrome瀏覽器中的XSS-filter也被稱為Chrome XSS-filter,這是一種典型的基于規則的XSS檢測器。為了對照,將同樣的攻擊樣本和正常樣本作為Chrome XSS-filter的測試樣本,測試結果如圖4所示,HMM檢測模型的準確率比Chrome XSS-filter要高,這代表著本模型對攻擊樣本和正常樣本的整體判別能力較強。盡管本模型的誤報率較低,但是改善幅度不大,這是因為正常樣本的構造較為簡單,基于規則的XSS-filter對于正常樣本的識別也有較高的能力。本模型漏報率的提升效果比較明顯,這是因為XSS-filter難以識別變形的或者復雜的反射型XSS攻擊,而本模型使用了詞集模型,從反射型XSS攻擊的整體結構進行特征提取,比XSS-filter黑名單模式更具有針對性。

圖4 2 種檢測器的準確率、誤報率和漏報率比較Fig.4 Comparison of the accuracy false alarm rate and missed alarm rate of two detectors
實驗2驗證本模型對變形反射型XSS的檢測效果,選取100 個變形反射型XSS攻擊樣本,變形反射型XSS包含編碼、大小寫混淆等多種變形方式,作為對照,使用Chrome XSS-filter檢測同樣的變形樣本,統計兩種檢測器的有效檢測數,實驗結果如圖5所示。本模型對變形反射型XSS的有效檢測數遠遠多于Chrome XSS-filter,這是因為Chrome XSS-filter的黑名單機制難以檢測出不在黑名單中的變形反射型XSS,而本模型對樣本詞法分割需要基于攻擊樣本的整體結構,將變形的反射型XSS也加入特征提取之中,形成的觀察序列更具有代表性。

圖5 變形反射型XSS檢測效果比較Fig.5 Comparison of detection performance of variable reflected XSS
傳統的基于規則的XSS檢測器難以防御變形的和未知的反射型XSS攻擊,因此提出使用HMM用于反射型XSS攻擊檢測,運用詞集模型對樣本進行處理,將攻擊樣本和正常樣本進行詞匯分割并序列化作為觀察序列,經過HMM訓練和測試,達到了良好的準確率、誤報率和漏報率,驗證了HMM在反射型XSS攻擊檢測領域的可行性。將包含變形的反射型XSS攻擊的訓練樣本加入特征提取,生成的HMM檢測模型對于變形的反射型XSS檢測效果比Chrome XSS-filter更好。相對于基于規則的XSS檢測器,HMM檢測器對反射型XSS攻擊樣本的識別能力更強。實驗后續需要完善的地方是將最新的變形XSS攻擊樣本加入特征提取之中,以進一步提高HMM檢測模型的性能。