郭曉軍,閆宇辰,吳志浩
(西藏民族大學(xué)a.信息工程學(xué)院;b.西藏自治區(qū)光信息處理與可視化技術(shù)重點(diǎn)實(shí)驗(yàn)室,陜西咸陽 712082)
隨著Web 應(yīng)用的普及,出現(xiàn)一系列安全問題。其中跨站腳本(Cross Site Scripting,XSS)是Web 中一個(gè)持續(xù)存在的問題,在2017 版OWASP Top 10 中,XSS攻擊位列第7[1]。XSS 攻擊主要由于攻擊者往Web頁面里插入惡意HTML 代碼,當(dāng)用戶瀏覽該頁時(shí),嵌入該Web頁面的HTML 代碼會(huì)被執(zhí)行,達(dá)到惡意攻擊用戶的特殊目的[2-3]。其主要危害有網(wǎng)絡(luò)釣魚,會(huì)話劫持后執(zhí)行任意操作,強(qiáng)制彈窗,網(wǎng)頁掛馬等,給普通用戶和企業(yè)帶來嚴(yán)重危害[4-5]。
常見的XSS 檢測(cè)方式主要有靜態(tài)分析[6]和動(dòng)態(tài)分析[7]。靜態(tài)分析技術(shù)通過分析Web 應(yīng)用的源代碼或?qū)δ繕?biāo)代碼進(jìn)行語法分析及對(duì)源碼結(jié)構(gòu)和數(shù)據(jù)處理過程分析,發(fā)現(xiàn)系統(tǒng)潛在漏洞[8]。與動(dòng)態(tài)分析相比,檢測(cè)效率和準(zhǔn)確度相對(duì)較高。Ibéria 等[9]提出使用靜態(tài)分析的方法,找出并刪除Web 應(yīng)用程序中潛在的漏洞。邱子謹(jǐn)[10]設(shè)計(jì)并實(shí)現(xiàn)基于靜態(tài)分析的PHP 源碼缺陷自動(dòng)檢測(cè)工具,采用基于格的數(shù)據(jù)流分析框架并提出一種基于有效路徑的污點(diǎn)分析方法,對(duì)污點(diǎn)型漏洞有著較高的檢測(cè)率,但只能針對(duì)PHP 語言進(jìn)行分析,具有局限性。
但大多數(shù)情況,無法直接獲取程序源碼,且無法分析用戶和Web 應(yīng)用交互所造成的一些與環(huán)境相關(guān)的漏洞,無法保證漏洞檢測(cè)的全面性[11]。王丹等[12]充分提取XSS 漏洞注入點(diǎn),模擬用戶行為,觸發(fā)Web 頁面交互點(diǎn),制定規(guī)則并選擇合適的攻擊載荷驗(yàn)證漏洞存在,但檢測(cè)效率較低。趙躍華等[13]設(shè)計(jì)了一種結(jié)合黑盒測(cè)試與動(dòng)態(tài)污點(diǎn)分析技術(shù)的XSS 漏洞檢測(cè)方案,依據(jù)XSS 攻擊向量模版,對(duì)不同注入點(diǎn)選擇合適攻擊載荷,并根據(jù)過濾規(guī)則集測(cè)試結(jié)果進(jìn)行反過濾變換,但XSS 源代碼種子庫覆蓋面不全,導(dǎo)致檢測(cè)準(zhǔn)確度降低。吳子敬等[14]定義一套可繞過服務(wù)器對(duì)XSS 漏洞代碼進(jìn)行過濾的反過濾規(guī)則集,通過反過濾規(guī)則集對(duì)XSS代碼進(jìn)變換,使其繞過過濾成功執(zhí)行。但攻擊向量模板和變換規(guī)則的不全面導(dǎo)致檢測(cè)準(zhǔn)確度下降。馬富天等[15]提出一種動(dòng)態(tài)分析方法,候選元素與初始攻擊向量組合,在特定輸出點(diǎn)自動(dòng)生成對(duì)應(yīng)攻擊向量,并自動(dòng)調(diào)整向量?jī)?yōu)先級(jí)。倪萍等[16]為指定規(guī)則構(gòu)造的模糊測(cè)試用例設(shè)置初始權(quán)重,依據(jù)輸出點(diǎn)類型,選擇對(duì)應(yīng)有潛力的攻擊載荷并對(duì)其進(jìn)行變異操作形成變異攻擊載荷作為請(qǐng)求參數(shù),對(duì)網(wǎng)站響應(yīng)進(jìn)行分析,調(diào)整元素的權(quán)重以便生成更加高效的攻擊載荷,提高了檢測(cè)效率。
用動(dòng)態(tài)分析方法進(jìn)行漏洞檢測(cè)時(shí),無需程序源碼,但為降低誤報(bào)率而增加攻擊向量數(shù)量,則會(huì)導(dǎo)致服務(wù)器負(fù)荷增加,也降低了檢測(cè)的效率。本文根據(jù)初始載荷的位置選擇適當(dāng)?shù)睦@過方式,形成攻擊向量庫,再對(duì)注入點(diǎn)進(jìn)行模糊測(cè)試(Fuzzing),提高了檢測(cè)效率。
為了提高檢測(cè)效率,同時(shí)保證較高的準(zhǔn)確度,本文基于抽象語法樹(Abstract Syntax Tree,AST)解析和Fuzzing,提出了F-Xscan 漏洞模型。通過識(shí)別合法向量在返回頁面中的位置,選擇適當(dāng)?shù)墓糨d荷,并與繞過規(guī)則進(jìn)行適當(dāng)組合,形成攻擊向量庫。
(1)AST語法樹。AST 是一種分層程序表示,以樹狀的形式表現(xiàn)編程語言的語法結(jié)構(gòu),樹上的每個(gè)AST 節(jié)點(diǎn)對(duì)應(yīng)于源代碼的一項(xiàng)[17]。
(2)語法分析器。語法分析器(Parser)通常作為編譯器或解釋器的組件出現(xiàn),其作用是進(jìn)行語法檢查,并構(gòu)建由輸入單詞組成的數(shù)據(jù)結(jié)構(gòu)。本文采用了AST語法樹對(duì)HTML 和JavaScript 進(jìn)行解析,可準(zhǔn)確判斷回顯的位置,便于下文攻擊載荷的生成。
(3)動(dòng)態(tài)分析。動(dòng)態(tài)分析主要是模擬攻擊者攻擊的過程,向注入點(diǎn)寫入包含特定代碼的腳本,分析服務(wù)器返回的頁面響應(yīng)內(nèi)容,如果響應(yīng)內(nèi)容中存在特定的數(shù)據(jù),則表示存在XSS 漏洞。
(4)模糊測(cè)試。模糊測(cè)試[18]是一種基于缺陷注入的自動(dòng)化軟件漏洞挖掘技術(shù),其基本思想與黑盒測(cè)試類似。模糊測(cè)試通過向待測(cè)目標(biāo)軟件輸入一些半隨機(jī)的數(shù)據(jù)并執(zhí)行程序,監(jiān)控程序的運(yùn)行狀況,同時(shí)記錄并進(jìn)一步分析目標(biāo)程序發(fā)生的異常來發(fā)現(xiàn)潛在的漏洞。本文采取模糊測(cè)試的方式,對(duì)最終攻擊向量進(jìn)行確定。
本文提出的F-Xscan漏洞檢測(cè)模型共分為4 個(gè)部分,分別為探針載荷測(cè)試、初始攻擊載荷生成、繞過規(guī)則選擇和最終攻擊向量生成等模塊。總體模塊設(shè)計(jì)如圖1 所示。

圖1 F-Xscan漏洞模型
反射型XSS 漏洞產(chǎn)生的原因是服務(wù)器端對(duì)用戶輸入惡意數(shù)據(jù)未過濾,直接“反射”給瀏覽器,即用戶輸入的參數(shù)直接輸出到頁面上。所以,首先要驗(yàn)證良性輸入向量是否能在頁面中回顯。此處良性輸入向量即為探針載荷。若確認(rèn)頁面回顯,則當(dāng)前頁面可能存在反射型XSS 漏洞。
探針載荷生成過程:
式中,β≥0為一個(gè)與狀態(tài)的先驗(yàn)分布信息有關(guān)的參數(shù),調(diào)節(jié)β可以提高協(xié)方差矩陣的精度。對(duì)于高斯分布來說,β=2是最優(yōu)的。
(1)輸入待檢測(cè)的URL,確認(rèn)請(qǐng)求方法及請(qǐng)求參數(shù)。
(2)生成良性載荷。選取隨機(jī)6 位數(shù)字、字母組合作為參數(shù),并發(fā)送請(qǐng)求包。例如“kc4d9”。
(3)根據(jù)HTML、JavaScript、CSS 語法樹解析,找到良性載荷的位置。根據(jù)載荷所處位置的上下文語法,形成對(duì)應(yīng)初始攻擊向量。
(4)若良性載荷在頁面中無回顯,則不存在反射型XSS。
良性攻擊載荷回顯流程如圖2 所示。

圖2 良性攻擊載荷回顯
有害數(shù)據(jù)的輸入可能會(huì)觸發(fā)瀏覽器的防御機(jī)制,而無法準(zhǔn)確判斷XSS 漏洞是否存在[19]。本文構(gòu)造一種初始攻擊載荷,以良性載荷為基礎(chǔ),構(gòu)造載荷的逃逸來判定漏洞是否存在,避免過濾機(jī)制的觸發(fā)使得結(jié)果更為準(zhǔn)確。
根據(jù)圖2—探針載荷在頁面中輸出的位置,運(yùn)用AST 語法樹解析、分析輸出點(diǎn)類型,選擇對(duì)應(yīng)的標(biāo)簽、符號(hào)閉合。以探針載荷為初始值對(duì)應(yīng)生成初始攻擊載荷。該初始攻擊載荷由回顯頁面對(duì)應(yīng)上下文得出。預(yù)處理得到的初始攻擊載荷更符合頁面的攻擊語法規(guī)則,使得攻擊方案更優(yōu),減少后續(xù)不必要的模糊測(cè)試開銷。在保證準(zhǔn)確率的同時(shí),提高了效率。
(1)確認(rèn)探針載荷回顯后,分析回顯頁面結(jié)構(gòu)。
(2)根據(jù)回顯位置,選擇適當(dāng)?shù)奶右菁夹g(shù)和逃逸行為組成初始攻擊載荷。
初始攻擊載荷生成規(guī)則見表1,逃逸技術(shù)及行為見表2。

表1 初始攻擊載荷生成規(guī)則

表2 逃逸技術(shù)及行為
例如可控點(diǎn)位于HTMLAttribute:

首先發(fā)送良性探針載荷“kc4d9”,確定值“1”可控。通過AST 語法樹解析知,可控值“1”位于<textarea ></textarea >標(biāo)簽之間和<img >標(biāo)簽的src屬性中。由表1、2 可知需先閉合src 屬性,再閉合<textarea >標(biāo)簽。所以初始攻擊載荷為</textarea >”><svgonload =alert(1)>。
越來越多的網(wǎng)站都制定了攔截規(guī)則,對(duì)用戶提交的數(shù)據(jù)進(jìn)行攔截和過濾。在一定程度上減少了用戶的惡意輸入,減少了漏洞的產(chǎn)生。但仍有不完全的過濾方式使得網(wǎng)站存在漏洞。針對(duì)Web 應(yīng)用中常見的過濾方式進(jìn)行歸納總結(jié),制定了自己的規(guī)則即過濾機(jī)制的逃逸技術(shù)。對(duì)1.4 節(jié)初始攻擊載荷進(jìn)行變異,用于攻擊向量庫生成階段。總體繞過對(duì)象分2 種:過濾符號(hào)和過濾關(guān)鍵字(見表3)。

表3 繞過對(duì)象
制定繞過規(guī)則庫(見表4)。

表4 繞過規(guī)則庫
在1.4、1.5 節(jié)中,制定了逃逸規(guī)則和繞過規(guī)則。本小節(jié)對(duì)初始攻擊載荷進(jìn)行上述2 種類型規(guī)則的組合繞過,生成攻擊向量庫。攻擊向量樣本見表5。

表5 最終攻擊向量樣本
表5 羅列了部分生成的攻擊向量。以往對(duì)攻擊向量的選取,普遍采用隨機(jī)選擇的方法。雖然其單個(gè)選擇時(shí)間短,但隨機(jī)性較大,易造成無目的的選取。使其效率及準(zhǔn)確率降低,造成檢測(cè)效果的不理想。
本文在初始攻擊向量的基礎(chǔ)上,添加繞過規(guī)則,隨機(jī)生成最終攻擊向量。根據(jù)網(wǎng)站的過濾情況自動(dòng)調(diào)整繞過規(guī)則的選取,使其更快速準(zhǔn)確地檢測(cè)出漏洞。對(duì)傳統(tǒng)的隨機(jī)產(chǎn)生向量的方法進(jìn)行了補(bǔ)足。
為客觀、有效地評(píng)估本文提出的反射型XSS 漏洞檢測(cè)模型,搭建了2 個(gè)XSS 漏洞檢測(cè)平臺(tái),并與其他Web 漏洞檢測(cè)模型對(duì)比分析,得出最終結(jié)論。
環(huán)境1Damn Vulnerable Web Application(DVWA)是基于PHP/MySQL 環(huán)境編寫的,用來進(jìn)行安全脆弱性鑒定的Web 應(yīng)用,幫助網(wǎng)絡(luò)安全專業(yè)人員在合法的環(huán)境中測(cè)試其專業(yè)技能。實(shí)驗(yàn)選取了其安全等級(jí)為Low 和Medium 時(shí)做對(duì)比測(cè)試。
環(huán)境2該站點(diǎn)是以PHP 語言開發(fā),搭載MySQL數(shù)據(jù)庫的自行搭建的博客站點(diǎn)。
Acunetix Web Vulnerability Scanner(AWVS)是一款Web 應(yīng)用程序漏洞掃描工具。在其掃描并發(fā)現(xiàn)漏洞后,將模擬黑客攻擊過程,在可輸入數(shù)據(jù)的地方自定義腳本,嘗試不同輸入組合。實(shí)驗(yàn)選取的版本為AWVS 11。
Burp Suite 是用于攻擊Web 應(yīng)用程序的集成平臺(tái),開啟代理模式后,將作為一個(gè)在瀏覽器和目標(biāo)應(yīng)用程序之間的中間人,允許攔截、查看和修改在2 個(gè)方向上的原始數(shù)據(jù)流。實(shí)驗(yàn)選取的版本為Burp Suite V1.7.31。本機(jī)環(huán)境及配置見表6。

表6 本機(jī)環(huán)境及配置
設(shè)置對(duì)比試驗(yàn),將模型與2 款著名Web 漏洞掃描軟件做對(duì)比,驗(yàn)證了本文模型的檢測(cè)效率和準(zhǔn)確率。檢測(cè)準(zhǔn)確率和誤報(bào)率,見表7。

表7 博客環(huán)境檢測(cè)結(jié)果
為排除爬蟲對(duì)檢測(cè)時(shí)HTTP 請(qǐng)求次數(shù)的干擾,本文只統(tǒng)計(jì)反射型XSS 檢測(cè)時(shí)各模型選取載荷測(cè)試時(shí)的請(qǐng)求,總共對(duì)30 個(gè)注入點(diǎn)進(jìn)行了測(cè)試。對(duì)博客環(huán)境HTTP 平均請(qǐng)求次數(shù)測(cè)試如圖3 所示。

圖3 博客環(huán)境HTTP 平均請(qǐng)求次數(shù)
對(duì)DVWA環(huán)境HTTP 平均請(qǐng)求次數(shù)測(cè)試見表8。

表8 DVWA 環(huán)境HTTP 平均請(qǐng)求次數(shù)表
由表7、8 及圖3 所示,與傳統(tǒng)的Web 漏洞檢測(cè)模型Burp Suite 和AWVS 相比,針對(duì)探針載荷在輸出頁面上下文點(diǎn)的類型,選取適當(dāng)繞過規(guī)則形成攻擊向量,該方法在一定程度上減少了HTTP 請(qǐng)求,降低了頁面負(fù)載。同時(shí)根據(jù)上下文類型可更好地確定漏洞是否存在,具有更高的準(zhǔn)確率,同時(shí)保持了較低的誤報(bào)率。
針對(duì)當(dāng)前反射型XSS 漏洞檢測(cè)效率較低,誤報(bào)率較高的問題,提出了一種基于AST 分析和Fuzzing 的反射型XSS 漏洞識(shí)別模型。利用AST 語法樹分析在請(qǐng)求后的Web 頁面中,探針載荷的回顯位置,選取合適的初始攻擊載荷。再根據(jù)該Web 頁面過濾情況,結(jié)合繞過規(guī)則,生成攻擊向量庫,對(duì)可疑Web 注入點(diǎn)進(jìn)行Fuzzing。仿真結(jié)果表明,本文方法在檢測(cè)效率較高的同時(shí),有著較低的誤報(bào)率。