顧兆軍 李志平 張禮哲
1(中國民航大學(xué)計算機科學(xué)與技術(shù)學(xué)院 天津 300300)2(中國民航大學(xué)民航信息安全管理與測評中心 天津 300300)
跨站腳本攻擊是眾多Web漏洞中危害性及影響力最大的漏洞之一。根據(jù)國家信息安全漏洞庫(CNNVD)統(tǒng)計[1],2019年1月至7月,該漏洞庫共收集XSS漏洞1 089個,高居漏洞數(shù)量榜榜首。在開放式Web應(yīng)用程序安全項目(Open Web Application Security Project,OWASP)2007年、2010年、2013年和2017年的十大Web安全漏洞報告中,XSS漏洞是OWASP TOP10中第二普遍的安全問題,其危害性也始終位于前列,并存在于近三分之二的應(yīng)用程序中。因此,對跨站腳本攻擊漏洞的研究刻不容緩,國內(nèi)外安全專家和研究學(xué)者對XSS攻擊進行了深入的研究。
傳統(tǒng)XSS檢測工具使用XSS-Filter對用戶輸入進行過濾,XSS-Filter采用正則表達式對輸入的參數(shù)做腳本過濾,以此來過濾XSS攻擊。然而隨著攻擊手段不斷增強,傳統(tǒng)過濾方法已經(jīng)不能保持高效性與準確性。Rao等[2]提出基于字符串匹配算法XBuster,XBuster將每個HTTP請求參數(shù)拆分為HTML和JavaScript上下文,以不同方式處理兩個上下文類型,XBuster防御所有類型的XSS攻擊向量,包括部分腳本注入、屬性注入和HTML注入。Pan等[3]提出一個旨在解決Web瀏覽器擴展中的DOM-XSS漏洞的框架,該框架結(jié)合靜態(tài)分析和動態(tài)分析,降低了檢測的假陽性率,但其只限于檢測DOM-XSS。張思聰?shù)萚4]提出一種基于最大熵模型的XSS攻擊檢測模型,將攻擊檢測轉(zhuǎn)化為對用戶輸入進行二分類的問題,但該模型對存儲型XSS攻擊的檢測效果不夠完善。
早期XSS檢測方法是利用人工選取攻擊特征向量進行檢測,但隨著XSS攻擊方式不斷增加,其局限性凸顯,難以高效地檢測攻擊。單分類支持向量機(OCSVM)能夠在短時間內(nèi)僅使用一類樣本訓(xùn)練出檢測模型,具有較高的準確性。本文將XSS攻擊檢測映射成對輸入數(shù)據(jù)進行分類的問題,提出利用TF-IDF算法對樣本數(shù)據(jù)進行特征向量化的方法,通過OCSVM訓(xùn)練分類模型實現(xiàn)XSS攻擊檢測。
XSS攻擊指的是攻擊者將帶有攻擊性的HTML代碼和腳本插入存在漏洞的Web應(yīng)用程序中。用戶在執(zhí)行Web應(yīng)用程序時,會收到偽裝成應(yīng)用程序合法代碼一部分的惡意內(nèi)容。由于用戶無法區(qū)分內(nèi)容是否合法,從而執(zhí)行該惡意腳本,最終導(dǎo)致遭受XSS攻擊。XSS通常分為三類:反射型跨站腳本、存儲型跨站腳本和基于DOM型的跨站腳本。雖然跨站腳本分為三種不同類型,但其本質(zhì)都是未對用戶的輸入進行嚴格過濾核查,用戶在不知情的情況下執(zhí)行XSS攻擊腳本,最終導(dǎo)致遭受攻擊。
當前,許多國內(nèi)外研究學(xué)者提出了各種XSS攻擊的檢測方法,主要可分為靜態(tài)分析方法、動態(tài)分析方法和機器學(xué)習(xí)檢測技術(shù)三種。
靜態(tài)分析方法是指對程序的源代碼進行分析,通過查看源碼來查詢可能存在的漏洞[5],因此使用此方法的前提是能獲取到Web應(yīng)用程序的源代碼。靜態(tài)分析的有效性主要依靠凈化規(guī)則的完備性,其優(yōu)點是在依靠程序源代碼的基礎(chǔ)上檢測效率高,但伴隨的問題是可能出現(xiàn)誤報和漏報的情況。動態(tài)分析方法則無須獲取源代碼,通過模擬用戶攻擊的過程,向注入點注入包含特定攻擊代碼的腳本,根據(jù)服務(wù)器端的響應(yīng)信息來判斷該注入點是否存在XSS攻擊漏洞[5]。影響動態(tài)分析方法的檢測效率主要有三個因素:爬蟲抓取網(wǎng)頁的效率、查找輸入與輸出點的效率和攻擊的向量集大小。
使用機器學(xué)習(xí)方法檢測XSS攻擊是最近幾年提出來的。此方法的主要思路是收集網(wǎng)站的正常行為和惡意行為,并使用相應(yīng)的機器學(xué)習(xí)算法對其進行學(xué)習(xí),最后通過學(xué)習(xí)到的模型進行攻擊檢測。例如,文獻[6]使用樸素貝葉斯、J48決策樹和SVM三種機器學(xué)習(xí)算法進行模型訓(xùn)練,實驗結(jié)果表明三種方法均可有有效實現(xiàn)XSS攻擊漏洞檢測,且在性能上SVM表現(xiàn)較好。
基于機器學(xué)習(xí)的XSS攻擊檢測方法,其檢測效率與具體的算法相關(guān),決定結(jié)果依賴于數(shù)據(jù)集的質(zhì)量。本文將攻擊檢測轉(zhuǎn)化為對用戶的輸入進行的分類問題?;赟VM的檢測模型需要兩類的數(shù)據(jù)集,一類是XSS攻擊數(shù)據(jù),另一類是正常用戶輸入數(shù)據(jù)。對于XSS攻擊檢測,在實際應(yīng)用場景中,正常用戶輸入數(shù)據(jù)難以獲取其特征,影響模型檢測結(jié)果。而單分類支持向量機在較短的時間內(nèi),只需要一類樣本就可以訓(xùn)練攻擊檢測模型,能建立較準確的分類模型。
基于支持向量機(Support Vector Machine,SVM)的分類理論以及單分類的思想,OCSVM最早由Sch?lkopf等[7]提出。傳統(tǒng)SVM的基本目標是構(gòu)造一個廣義最優(yōu)超平面,將數(shù)據(jù)點暴露在分類曲面的兩側(cè),并且盡可能增大分類曲面兩側(cè)點的間隔,從而將訓(xùn)練數(shù)據(jù)集分成兩類,分類區(qū)間盡可能大。與傳統(tǒng)SVM相似,針對樣本空間{xi,i=1,2,…,N},OCSVM通過核函數(shù)將輸入樣本映射到高維特征空間,然后使用超平面將特征空間的數(shù)據(jù)與原點分離[8]。目前,OCSVM分為兩種[9],一種為Sch?lkopf等[7]提出的超平面法,另一種是Tax[10]提出的超球面法。當使用的核函數(shù)為徑向基函數(shù)(Radial Basis Function,RBF)的高斯版本時,這兩種方法的效果相同。高斯核函數(shù)表達式如下:
(1)
式中:σ(σ>0)為高斯核的帶寬。
OCSVM能夠在較短的計算時間內(nèi)只用一類樣本訓(xùn)練出檢測模型。本文基于此分類器的高效性進行模型訓(xùn)練。基本思想是將輸入樣本通過核函數(shù)映射到高維空間,并嘗試將樣本與高維空間中的原點分離,得到基于超球面的模型,即以a為中心R為半徑的包含正常數(shù)據(jù)樣本的超平面。通過計算數(shù)據(jù)樣本與超平面中心在特征空間的距離來獲取樣本的異常程度:
f(x)=‖φ(x)-c‖2-R2
(2)
如果評價函數(shù)值f(x)<0,表明樣本在超平面內(nèi),被判定為正常點;若f(x)>0,說明樣本在超平面外部,則被判斷為異常點??紤]到防止模型的過擬合現(xiàn)象,同時數(shù)據(jù)樣本可能存在噪聲,因此引入松弛因子ξi,樣本需要滿足約束條件:
‖φ(x)-c‖2≤R2+ξiξ≥0
(3)
式(3)約束條件對應(yīng)的目標函數(shù)為:
(4)
式中:C為平衡超球面半徑和松弛變量的參數(shù),其物理意義可看作是對數(shù)據(jù)的不純凈度的估計。上述過程就是求解一個凸約束二次規(guī)劃問題,引入拉格朗日乘子,則原約束優(yōu)化問題的拉格朗日函數(shù)為:
‖φ(x)-c‖2
(5)
式中:αi≥0,βi≥0。對R、c和ξi分別求偏導(dǎo)得:
(6)
將式(6)結(jié)果代入式(5)得到原問題的對偶問題:
(7)
根據(jù)αi的取值將樣本進行分類,通過計算拉格朗日函數(shù)以及超球體參數(shù)求解對偶問題,得到最終的檢測模型。
TF-IDF是一種經(jīng)典的詞語權(quán)重計算方法。由詞頻(Term Frequency,TF)和逆向文檔頻率(Inverse Document Frequency,IDF)組成。其中,詞頻表示文本中各個詞出現(xiàn)的頻率,計算公式如下:
(8)
(9)
式中:|D|表示語料庫中的文件總數(shù);|{j:ti∈dj}|表示包含詞語ti的文件數(shù)目。最后,TF-IDF值表示為:
tfidfi,j=tfi,j×idfi
(10)
TF-IDF的中心思想就是詞的重要性與它在文件中出現(xiàn)的次數(shù)成正比,同時與在語料庫中出現(xiàn)的頻率成反比。
攻擊檢測模型流程如圖1所示。將獲取的樣本數(shù)據(jù)進行數(shù)據(jù)預(yù)處理,根據(jù)訓(xùn)練需要將經(jīng)過預(yù)處理的數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。訓(xùn)練數(shù)據(jù)用來訓(xùn)練模型,再利用測試數(shù)據(jù)進行參數(shù)調(diào)優(yōu)最終得到檢測模型。
圖1 檢測模型流程
2.1.1攻擊樣本范化
訓(xùn)練目的是讓模型認識XSS攻擊行為,因此實驗所用數(shù)據(jù)集應(yīng)具有豐富性,涵蓋較為全面的XSS攻擊數(shù)據(jù),從而提升模型的訓(xùn)練效率。在實際應(yīng)用中,攻擊者會對攻擊代碼做各種變形操作,以試圖繞過對用戶輸入的過濾及核查。站在攻擊者角度對訓(xùn)練數(shù)據(jù)進行適當?shù)淖冃尾僮?,豐富XSS攻擊數(shù)據(jù)庫的類型。由此訓(xùn)練出來的模型對各種變形的XSS攻擊行為有更好的辨識度,增加其有效性。本文采用常用的幾種變形處理方法[11],如表1所示。
表1 XSS攻擊代碼變形方式
特征選取的效果直接影響模型的檢測準確率。早期基于機器學(xué)習(xí)方法檢測XSS攻擊選擇自定義特征向量,此種方式對于各種類型以及變異的XSS攻擊代碼無法做到更為全面的特征選擇。本文的研究基礎(chǔ)是對用戶輸入做出分類,識別出輸入是否屬于XSS攻擊。因此采用改進TF-IDF算法的特征向量化方法,對樣本數(shù)據(jù)進行分類。
在許多文本分類研究中,使用TF-IDF方法計算的詞一般為常用的詞語或者是特定的詞組。例如文獻[12]所計算詞頻的關(guān)鍵詞為特定的專用詞語,具有唯一性。另外在沒有經(jīng)過指定詞組的分類研究中,經(jīng)過TF-IDF計算后提取出來的詞多為常用詞語。而在本文的特征向量化過程中,要處理的數(shù)據(jù)包含了大量的數(shù)字、字母特殊符號和各種字符的組合。如果按照傳統(tǒng)常用詞分詞方法或者特殊符號的分詞方法,在計算TF-IDF時會造成特征過于復(fù)雜,影響效率。為了提高數(shù)據(jù)的分類效率,采用n-gram方法[13]分割樣本數(shù)據(jù)得到分詞集合。
定義分詞集合是按照長度為n的滑動窗口分割字符串得到的分割后的子串集合,集合中的每個子串稱為分詞,這里的字符串指的是用于模型訓(xùn)練的樣本數(shù)據(jù)或者待檢測的數(shù)據(jù)。
例如待分割的字符串為:“”,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>}
樣本中的每一條數(shù)據(jù)采用此方法得到與其對應(yīng)的分詞集合,再由式(8)、式(9)、式(10)計算可得到由[w(a,b)]三種元素組成的TF-IDF特征矩陣。其中,元素a對應(yīng)數(shù)據(jù)集中的每條樣本的編號,元素b對應(yīng)的是當前分詞在所有數(shù)據(jù)被分詞后中的編號。因此,矩陣[w(a,b)]表示編號為b的分詞在第a號數(shù)據(jù)樣本中TF-IDF值為w,最后得到與每一條數(shù)據(jù)對應(yīng)的TF-IDF特征矩陣,提高數(shù)據(jù)分類的效率。
模型的建立需要進行核函數(shù)的選擇及參數(shù)優(yōu)化。采用高斯核的支持向量機可以獲得非常平滑的估計,并且核值范圍為(0,1),這使得計算過程變得簡單[14]。因此使用高斯核函數(shù)作為分類模型訓(xùn)練的核函數(shù)。分類模型的性能還依賴于可調(diào)參數(shù)的選取,本文使用混淆矩陣進行參數(shù)調(diào)優(yōu),混淆矩陣如表2所示。
表2 混淆矩陣
為了評價模型的檢測效果,本文使用精確率、召回率和加權(quán)調(diào)和平均Fβ三種評價指標。
精確率P定義為:
(11)
召回率R定義為:
(12)
加權(quán)調(diào)和平均數(shù)Fβ是基于精確率和召回率定義的,是對P和R的一種權(quán)衡,定義為:
(13)
式中:β>0是精確率對召回率的相對重要性的一種度量參數(shù),一般形式為F1,即β=1。β>1時召回率有更大影響;β<1時精確率有更大影響。
根據(jù)前文分析,本文設(shè)計的OCSVM模型主要流程如下:
Step1獲取數(shù)據(jù)。從各權(quán)威網(wǎng)站獲取XSS攻擊代碼以及正常用戶輸入數(shù)據(jù),得到訓(xùn)練樣本以及測試樣本。
Step2數(shù)據(jù)預(yù)處理。將獲得的訓(xùn)練樣本進行適當?shù)淖冃翁幚?,豐富攻擊樣本類型,得到更為全面的訓(xùn)練樣本數(shù)據(jù)。
Step3數(shù)據(jù)范化。利用n-gram方法對樣本進行分析,然后根據(jù)TF-IDF算法計算得到標準化的輸入數(shù)據(jù)。
Step4選擇合適的核函數(shù)以及調(diào)優(yōu)參數(shù)。選用高斯核作為核函數(shù),進行參數(shù)調(diào)優(yōu)。
Step5建立模型。根據(jù)Step 4選擇的參數(shù),建立最優(yōu)分類模型。
為了驗證OCSVM模型在檢測XSS攻擊方面的可行性和有效性,本文設(shè)計了實驗進行驗證,實驗環(huán)境如表3所示。
表3 實驗環(huán)境
在本文前期工作階段,從權(quán)威漏洞提交網(wǎng)站Exploit-db、xssed、HTML5SEC以及國外著名安全工程時Rsnake總結(jié)出的XSS Cheat Sheet,以及在GitHub上搜集XSS payload以保證有足夠的訓(xùn)練數(shù)據(jù)。另外,從網(wǎng)站上收集正常輸入數(shù)據(jù)作為測試樣本用來測試模型的檢測效率。從上述權(quán)威網(wǎng)站收集到的XSS payload有很多不同類型,但大多數(shù)都符合一定的組成方式[15],主要類型如表4所示。
表4 XSS payload組合方式
續(xù)表4
在實驗數(shù)據(jù)方面,準備三類樣本數(shù)據(jù)。一類是用來訓(xùn)練模型的訓(xùn)練樣本;另兩類是用來調(diào)優(yōu)的黑白樣本。訓(xùn)練樣本是從前文提到的各權(quán)威網(wǎng)站上搜集的XSS payload攻擊樣本共10 000條。其中8 000條作為訓(xùn)練模型的訓(xùn)練樣本,2 000條為計算調(diào)優(yōu)的攻擊樣本。另外收集2 000條用戶正常輸入作為計算調(diào)優(yōu)的白樣本。
在實際應(yīng)用場景中,許多Web應(yīng)用都會對用戶的輸入做一些過濾及核查。而從網(wǎng)站上獲取的未經(jīng)處理XSS攻擊樣本許多都是較為簡單的攻擊代碼或者JavaScript腳本,難以繞過后臺的輸入過濾及核查,因此需要對獲得的初始攻擊樣本進行適當?shù)淖冃尾僮?。以攻擊樣本“”為例,采用?方法對其進行變形操作,變形結(jié)果如表5所示。
表5 XSS攻擊代碼變形方式
根據(jù)定義,以字符串“alert(/xss/)”為例,經(jīng)分割后得到的分詞集合S2包含11個分詞,最終得到的TF-IDF特征矩陣如表6所示。
表6 “alert(/xss/)”特征矩陣
本文將傳統(tǒng)檢測方法XSS Filter、SVM分類模型和OCSVM分類模型作對比,討論OCSVM模型檢測XSS攻擊的整體效果,使用精確率P、召回率R和加權(quán)調(diào)和平均數(shù)Fβ作為模型的評價指標。精確率與召回率實驗對比結(jié)果如表7所示。
表7 精確率與召回率實驗結(jié)果
為直觀顯示,將表7對比結(jié)果轉(zhuǎn)換成柱狀圖,如圖3所示。
圖3 各項比較結(jié)果
可以看出,在召回率方面,OCSVM模型相對傳統(tǒng)檢測方法XSS Filter高出許多,雖然相對于基于SVM的檢測模型提升效果并不是非常明顯。由于OCSVM模型中將訓(xùn)練模型的樣本經(jīng)過變形以及分詞處理,然后將樣本特征向量化,讓訓(xùn)練模型能更好地學(xué)習(xí)識別XSS攻擊,因此其準確率明顯高于XSS Filter和SVM。
在實際應(yīng)用中,不同的產(chǎn)業(yè)系統(tǒng)及實際需求對精確率和召回率的要求程度會有所不同。比如在某些重要工業(yè)控制系統(tǒng)中,在進行Web漏洞檢測時對檢測的精確率要求程度較高。因此在評價檢測模型的效率時需要考慮實際情況的因素,需要引入加權(quán)調(diào)和平均數(shù)Fβ進行模型評價,其中β>0。圖4比較了三種模型在不同β值下的Fβ實驗結(jié)果。
圖4 不同β值檢測效率對比
可以看出,當β值越大,即當召回率有更大影響時,三種方法的檢測效果均有所下降。當β<1時OCSVM的整體檢測效率均優(yōu)于SVM,且高出的差距比β>1時更為明顯。因此,本文檢測XSS攻擊的方法在一定程度上更適合對精確率要求更高的應(yīng)用場景中。綜上所述,OCSVM在不同β值下的綜合檢測效率都要優(yōu)于其他兩種檢測方法。
本文利用單分類支持向量機在解決單類樣本的分類問題上具有的特有優(yōu)勢,無須對樣本進行標記,然后基于TF-IDF方法對樣本進行特征向量化,減少人工選取特征的局限性,使用XSS攻擊樣本進行模型訓(xùn)練即可訓(xùn)練得出分類模型。OCSVM具有更快訓(xùn)練速度及更高效的處理效率。實驗驗證了OCSVM的可行性以及實用性,并且基于模型的評判標準,OCSVM相對于傳統(tǒng)XSS Filter和SVM具有更好的性能,提高了檢測XSS攻擊準確率,減少了檢測的誤報率。未來將進一步完善攻擊樣本的多樣性,保證模型在學(xué)習(xí)訓(xùn)練時的樣本覆蓋性更強,以降低攻擊檢測的漏報率,進一步提高OCSVM模型分類的性能。