顧兆軍 李志平 張禮哲
1(中國民航大學計算機科學與技術學院 天津 300300)2(中國民航大學民航信息安全管理與測評中心 天津 300300)
跨站腳本攻擊是眾多Web漏洞中危害性及影響力最大的漏洞之一。根據國家信息安全漏洞庫(CNNVD)統計[1],2019年1月至7月,該漏洞庫共收集XSS漏洞1 089個,高居漏洞數量榜榜首。在開放式Web應用程序安全項目(Open Web Application Security Project,OWASP)2007年、2010年、2013年和2017年的十大Web安全漏洞報告中,XSS漏洞是OWASP TOP10中第二普遍的安全問題,其危害性也始終位于前列,并存在于近三分之二的應用程序中。因此,對跨站腳本攻擊漏洞的研究刻不容緩,國內外安全專家和研究學者對XSS攻擊進行了深入的研究。
傳統XSS檢測工具使用XSS-Filter對用戶輸入進行過濾,XSS-Filter采用正則表達式對輸入的參數做腳本過濾,以此來過濾XSS攻擊。然而隨著攻擊手段不斷增強,傳統過濾方法已經不能保持高效性與準確性。Rao等[2]提出基于字符串匹配算法XBuster,XBuster將每個HTTP請求參數拆分為HTML和JavaScript上下文,以不同方式處理兩個上下文類型,XBuster防御所有類型的XSS攻擊向量,包括部分腳本注入、屬性注入和HTML注入。Pan等[3]提出一個旨在解決Web瀏覽器擴展中的DOM-XSS漏洞的框架,該框架結合靜態分析和動態分析,降低了檢測的假陽性率,但其只限于檢測DOM-XSS。張思聰等[4]提出一種基于最大熵模型的XSS攻擊檢測模型,將攻擊檢測轉化為對用戶輸入進行二分類的問題,但該模型對存儲型XSS攻擊的檢測效果不夠完善。
早期XSS檢測方法是利用人工選取攻擊特征向量進行檢測,但隨著XSS攻擊方式不斷增加,其局限性凸顯,難以高效地檢測攻擊。單分類支持向量機(OCSVM)能夠在短時間內僅使用一類樣本訓練出檢測模型,具有較高的準確性。本文將XSS攻擊檢測映射成對輸入數據進行分類的問題,提出利用TF-IDF算法對樣本數據進行特征向量化的方法,通過OCSVM訓練分類模型實現XSS攻擊檢測。
XSS攻擊指的是攻擊者將帶有攻擊性的HTML代碼和腳本插入存在漏洞的Web應用程序中。用戶在執行Web應用程序時,會收到偽裝成應用程序合法代碼一部分的惡意內容。由于用戶無法區分內容是否合法,從而執行該惡意腳本,最終導致遭受XSS攻擊。XSS通常分為三類:反射型跨站腳本、存儲型跨站腳本和基于DOM型的跨站腳本。雖然跨站腳本分為三種不同類型,但其本質都是未對用戶的輸入進行嚴格過濾核查,用戶在不知情的情況下執行XSS攻擊腳本,最終導致遭受攻擊。
當前,許多國內外研究學者提出了各種XSS攻擊的檢測方法,主要可分為靜態分析方法、動態分析方法和機器學習檢測技術三種。
靜態分析方法是指對程序的源代碼進行分析,通過查看源碼來查詢可能存在的漏洞[5],因此使用此方法的前提是能獲取到Web應用程序的源代碼。靜態分析的有效性主要依靠凈化規則的完備性,其優點是在依靠程序源代碼的基礎上檢測效率高,但伴隨的問題是可能出現誤報和漏報的情況。動態分析方法則無須獲取源代碼,通過模擬用戶攻擊的過程,向注入點注入包含特定攻擊代碼的腳本,根據服務器端的響應信息來判斷該注入點是否存在XSS攻擊漏洞[5]。影響動態分析方法的檢測效率主要有三個因素:爬蟲抓取網頁的效率、查找輸入與輸出點的效率和攻擊的向量集大小。
使用機器學習方法檢測XSS攻擊是最近幾年提出來的。此方法的主要思路是收集網站的正常行為和惡意行為,并使用相應的機器學習算法對其進行學習,最后通過學習到的模型進行攻擊檢測。例如,文獻[6]使用樸素貝葉斯、J48決策樹和SVM三種機器學習算法進行模型訓練,實驗結果表明三種方法均可有有效實現XSS攻擊漏洞檢測,且在性能上SVM表現較好。
基于機器學習的XSS攻擊檢測方法,其檢測效率與具體的算法相關,決定結果依賴于數據集的質量。本文將攻擊檢測轉化為對用戶的輸入進行的分類問題。基于SVM的檢測模型需要兩類的數據集,一類是XSS攻擊數據,另一類是正常用戶輸入數據。對于XSS攻擊檢測,在實際應用場景中,正常用戶輸入數據難以獲取其特征,影響模型檢測結果。而單分類支持向量機在較短的時間內,只需要一類樣本就可以訓練攻擊檢測模型,能建立較準確的分類模型。
基于支持向量機(Support Vector Machine,SVM)的分類理論以及單分類的思想,OCSVM最早由Sch?lkopf等[7]提出。傳統SVM的基本目標是構造一個廣義最優超平面,將數據點暴露在分類曲面的兩側,并且盡可能增大分類曲面兩側點的間隔,從而將訓練數據集分成兩類,分類區間盡可能大。與傳統SVM相似,針對樣本空間{xi,i=1,2,…,N},OCSVM通過核函數將輸入樣本映射到高維特征空間,然后使用超平面將特征空間的數據與原點分離[8]。目前,OCSVM分為兩種[9],一種為Sch?lkopf等[7]提出的超平面法,另一種是Tax[10]提出的超球面法。當使用的核函數為徑向基函數(Radial Basis Function,RBF)的高斯版本時,這兩種方法的效果相同。高斯核函數表達式如下:
(1)
式中:σ(σ>0)為高斯核的帶寬。
OCSVM能夠在較短的計算時間內只用一類樣本訓練出檢測模型。本文基于此分類器的高效性進行模型訓練。基本思想是將輸入樣本通過核函數映射到高維空間,并嘗試將樣本與高維空間中的原點分離,得到基于超球面的模型,即以a為中心R為半徑的包含正常數據樣本的超平面。通過計算數據樣本與超平面中心在特征空間的距離來獲取樣本的異常程度:
f(x)=‖φ(x)-c‖2-R2
(2)
如果評價函數值f(x)<0,表明樣本在超平面內,被判定為正常點;若f(x)>0,說明樣本在超平面外部,則被判斷為異常點。考慮到防止模型的過擬合現象,同時數據樣本可能存在噪聲,因此引入松弛因子ξi,樣本需要滿足約束條件:
‖φ(x)-c‖2≤R2+ξiξ≥0
(3)
式(3)約束條件對應的目標函數為:
(4)
式中:C為平衡超球面半徑和松弛變量的參數,其物理意義可看作是對數據的不純凈度的估計。上述過程就是求解一個凸約束二次規劃問題,引入拉格朗日乘子,則原約束優化問題的拉格朗日函數為:
‖φ(x)-c‖2
(5)
式中:αi≥0,βi≥0。對R、c和ξi分別求偏導得:
(6)
將式(6)結果代入式(5)得到原問題的對偶問題:
(7)
根據αi的取值將樣本進行分類,通過計算拉格朗日函數以及超球體參數求解對偶問題,得到最終的檢測模型。
TF-IDF是一種經典的詞語權重計算方法。由詞頻(Term Frequency,TF)和逆向文檔頻率(Inverse Document Frequency,IDF)組成。其中,詞頻表示文本中各個詞出現的頻率,計算公式如下:
(8)

(9)
式中:|D|表示語料庫中的文件總數;|{j:ti∈dj}|表示包含詞語ti的文件數目。最后,TF-IDF值表示為:
tfidfi,j=tfi,j×idfi
(10)
TF-IDF的中心思想就是詞的重要性與它在文件中出現的次數成正比,同時與在語料庫中出現的頻率成反比。
攻擊檢測模型流程如圖1所示。將獲取的樣本數據進行數據預處理,根據訓練需要將經過預處理的數據分為訓練數據和測試數據。訓練數據用來訓練模型,再利用測試數據進行參數調優最終得到檢測模型。

圖1 檢測模型流程
2.1.1攻擊樣本范化
訓練目的是讓模型認識XSS攻擊行為,因此實驗所用數據集應具有豐富性,涵蓋較為全面的XSS攻擊數據,從而提升模型的訓練效率。在實際應用中,攻擊者會對攻擊代碼做各種變形操作,以試圖繞過對用戶輸入的過濾及核查。站在攻擊者角度對訓練數據進行適當的變形操作,豐富XSS攻擊數據庫的類型。由此訓練出來的模型對各種變形的XSS攻擊行為有更好的辨識度,增加其有效性。本文采用常用的幾種變形處理方法[11],如表1所示。

表1 XSS攻擊代碼變形方式
特征選取的效果直接影響模型的檢測準確率。早期基于機器學習方法檢測XSS攻擊選擇自定義特征向量,此種方式對于各種類型以及變異的XSS攻擊代碼無法做到更為全面的特征選擇。本文的研究基礎是對用戶輸入做出分類,識別出輸入是否屬于XSS攻擊。因此采用改進TF-IDF算法的特征向量化方法,對樣本數據進行分類。
在許多文本分類研究中,使用TF-IDF方法計算的詞一般為常用的詞語或者是特定的詞組。例如文獻[12]所計算詞頻的關鍵詞為特定的專用詞語,具有唯一性。另外在沒有經過指定詞組的分類研究中,經過TF-IDF計算后提取出來的詞多為常用詞語。而在本文的特征向量化過程中,要處理的數據包含了大量的數字、字母特殊符號和各種字符的組合。如果按照傳統常用詞分詞方法或者特殊符號的分詞方法,在計算TF-IDF時會造成特征過于復雜,影響效率。為了提高數據的分類效率,采用n-gram方法[13]分割樣本數據得到分詞集合。
定義分詞集合是按照長度為n的滑動窗口分割字符串得到的分割后的子串集合,集合中的每個子串稱為分詞,這里的字符串指的是用于模型訓練的樣本數據或者待檢測的數據。
例如待分割的字符串為:“”,n=2時,滑動窗口如圖2所示,得到2-gram分詞集合:

圖2 長度為2的滑動窗口
S2={,>a,al,le,er,rt,
t(,(u,ur,rl,l),)<,,/s,sc,cr,ri,ip,pt,t>}
樣本中的每一條數據采用此方法得到與其對應的分詞集合,再由式(8)、式(9)、式(10)計算可得到由[w(a,b)]三種元素組成的TF-IDF特征矩陣。其中,元素a對應數據集中的每條樣本的編號,元素b對應的是當前分詞在所有數據被分詞后中的編號。因此,矩陣[w(a,b)]表示編號為b的分詞在第a號數據樣本中TF-IDF值為w,最后得到與每一條數據對應的TF-IDF特征矩陣,提高數據分類的效率。
模型的建立需要進行核函數的選擇及參數優化。采用高斯核的支持向量機可以獲得非常平滑的估計,并且核值范圍為(0,1),這使得計算過程變得簡單[14]。因此使用高斯核函數作為分類模型訓練的核函數。分類模型的性能還依賴于可調參數的選取,本文使用混淆矩陣進行參數調優,混淆矩陣如表2所示。

表2 混淆矩陣
為了評價模型的檢測效果,本文使用精確率、召回率和加權調和平均Fβ三種評價指標。
精確率P定義為:
(11)
召回率R定義為:
(12)
加權調和平均數Fβ是基于精確率和召回率定義的,是對P和R的一種權衡,定義為:
(13)
式中:β>0是精確率對召回率的相對重要性的一種度量參數,一般形式為F1,即β=1。β>1時召回率有更大影響;β<1時精確率有更大影響。
根據前文分析,本文設計的OCSVM模型主要流程如下:
Step1獲取數據。從各權威網站獲取XSS攻擊代碼以及正常用戶輸入數據,得到訓練樣本以及測試樣本。
Step2數據預處理。將獲得的訓練樣本進行適當的變形處理,豐富攻擊樣本類型,得到更為全面的訓練樣本數據。
Step3數據范化。利用n-gram方法對樣本進行分析,然后根據TF-IDF算法計算得到標準化的輸入數據。
Step4選擇合適的核函數以及調優參數。選用高斯核作為核函數,進行參數調優。
Step5建立模型。根據Step 4選擇的參數,建立最優分類模型。
為了驗證OCSVM模型在檢測XSS攻擊方面的可行性和有效性,本文設計了實驗進行驗證,實驗環境如表3所示。

表3 實驗環境
在本文前期工作階段,從權威漏洞提交網站Exploit-db、xssed、HTML5SEC以及國外著名安全工程時Rsnake總結出的XSS Cheat Sheet,以及在GitHub上搜集XSS payload以保證有足夠的訓練數據。另外,從網站上收集正常輸入數據作為測試樣本用來測試模型的檢測效率。從上述權威網站收集到的XSS payload有很多不同類型,但大多數都符合一定的組成方式[15],主要類型如表4所示。

表4 XSS payload組合方式

續表4
在實驗數據方面,準備三類樣本數據。一類是用來訓練模型的訓練樣本;另兩類是用來調優的黑白樣本。訓練樣本是從前文提到的各權威網站上搜集的XSS payload攻擊樣本共10 000條。其中8 000條作為訓練模型的訓練樣本,2 000條為計算調優的攻擊樣本。另外收集2 000條用戶正常輸入作為計算調優的白樣本。
在實際應用場景中,許多Web應用都會對用戶的輸入做一些過濾及核查。而從網站上獲取的未經處理XSS攻擊樣本許多都是較為簡單的攻擊代碼或者JavaScript腳本,難以繞過后臺的輸入過濾及核查,因此需要對獲得的初始攻擊樣本進行適當的變形操作。以攻擊樣本“”為例,采用表2方法對其進行變形操作,變形結果如表5所示。

表5 XSS攻擊代碼變形方式
根據定義,以字符串“alert(/xss/)”為例,經分割后得到的分詞集合S2包含11個分詞,最終得到的TF-IDF特征矩陣如表6所示。

表6 “alert(/xss/)”特征矩陣
本文將傳統檢測方法XSS Filter、SVM分類模型和OCSVM分類模型作對比,討論OCSVM模型檢測XSS攻擊的整體效果,使用精確率P、召回率R和加權調和平均數Fβ作為模型的評價指標。精確率與召回率實驗對比結果如表7所示。

表7 精確率與召回率實驗結果
為直觀顯示,將表7對比結果轉換成柱狀圖,如圖3所示。

圖3 各項比較結果
可以看出,在召回率方面,OCSVM模型相對傳統檢測方法XSS Filter高出許多,雖然相對于基于SVM的檢測模型提升效果并不是非常明顯。由于OCSVM模型中將訓練模型的樣本經過變形以及分詞處理,然后將樣本特征向量化,讓訓練模型能更好地學習識別XSS攻擊,因此其準確率明顯高于XSS Filter和SVM。
在實際應用中,不同的產業系統及實際需求對精確率和召回率的要求程度會有所不同。比如在某些重要工業控制系統中,在進行Web漏洞檢測時對檢測的精確率要求程度較高。因此在評價檢測模型的效率時需要考慮實際情況的因素,需要引入加權調和平均數Fβ進行模型評價,其中β>0。圖4比較了三種模型在不同β值下的Fβ實驗結果。

圖4 不同β值檢測效率對比
可以看出,當β值越大,即當召回率有更大影響時,三種方法的檢測效果均有所下降。當β<1時OCSVM的整體檢測效率均優于SVM,且高出的差距比β>1時更為明顯。因此,本文檢測XSS攻擊的方法在一定程度上更適合對精確率要求更高的應用場景中。綜上所述,OCSVM在不同β值下的綜合檢測效率都要優于其他兩種檢測方法。
本文利用單分類支持向量機在解決單類樣本的分類問題上具有的特有優勢,無須對樣本進行標記,然后基于TF-IDF方法對樣本進行特征向量化,減少人工選取特征的局限性,使用XSS攻擊樣本進行模型訓練即可訓練得出分類模型。OCSVM具有更快訓練速度及更高效的處理效率。實驗驗證了OCSVM的可行性以及實用性,并且基于模型的評判標準,OCSVM相對于傳統XSS Filter和SVM具有更好的性能,提高了檢測XSS攻擊準確率,減少了檢測的誤報率。未來將進一步完善攻擊樣本的多樣性,保證模型在學習訓練時的樣本覆蓋性更強,以降低攻擊檢測的漏報率,進一步提高OCSVM模型分類的性能。