李潔 俞研 吳家順
摘要:針對(duì)Web客戶端中基于文檔對(duì)象模型的跨站腳本攻擊(DOM XSS)漏洞檢測(cè)問(wèn)題,提出一種基于動(dòng)態(tài)污點(diǎn)分析的DOM XSS漏洞檢測(cè)算法。通過(guò)構(gòu)造DOM模型和修改Firefox SpiderMonkey腳本引擎,利用動(dòng)態(tài)的、基于bytecode的污點(diǎn)分析方法實(shí)現(xiàn)了DOM XSS漏洞的檢測(cè)。對(duì)DOM對(duì)象類屬性的擴(kuò)展和SpiderMonkey字符串編碼格式的修改可以完成污點(diǎn)數(shù)據(jù)標(biāo)記;遍歷JavaScript指令代碼bytecode的執(zhí)行路徑,獲得污點(diǎn)傳播路徑,實(shí)現(xiàn)污點(diǎn)數(shù)據(jù)集的生成;監(jiān)控所有可能會(huì)觸發(fā)DOM XSS攻擊的輸出點(diǎn),實(shí)現(xiàn)DOM XSS漏洞的判定。在此基礎(chǔ)上,利用爬蟲程序設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)互聯(lián)網(wǎng)DOM XSS漏洞檢測(cè)系統(tǒng)。實(shí)驗(yàn)結(jié)果表明,所提算法能有效檢測(cè)網(wǎng)頁(yè)存在的DOM XSS漏洞,其檢測(cè)率可達(dá)92%。
關(guān)鍵詞:動(dòng)態(tài)污點(diǎn)分析;注入點(diǎn);輸出點(diǎn);執(zhí)行路徑
中圖分類號(hào):TP393.08 文獻(xiàn)標(biāo)志碼:A
Abstract: Concerning DOM XSS (Document Object Model (DOM)based Cross Site Scripting (XSS)) vulnerability detection in Web client, a detection algorithm for DOM XSS vulnerability based on dynamic taint analysis was proposed. By constructing DOM model and modifying Firefox SpiderMonkey script engine, a dynamic taint analysis method based on the bytecode was used to detect DOM XSS vulnerabilities. First, taint data was marked by extending the attribute of the DOM object class and modifying the string encoding format of SpiderMonkey. Then, the execution route of the bytecode was traversed to generate the tainted data set. After that, all the output points which might trigger DOM XSS attacks were monitored to determine whether the application contained the DOM XSS vulnerabilities. In the experiment, a DOM XSS vulnerability detection system containing a crawler was designed and implemented. The experimental results show that the proposed algorithm can effectively detect the DOM XSS vulnerabilities, and the detection rate is about 92%.
Key words:dynamic taint analysis; source; sink; execution route
0 引言
隨著網(wǎng)絡(luò)技術(shù)的快速發(fā)展以及互聯(lián)網(wǎng)的廣泛應(yīng)用,Web服務(wù)也在不斷地更新與發(fā)展。然而,與Web應(yīng)用相伴的是Web安全問(wèn)題,早期Web安全主要體現(xiàn)在服務(wù)端動(dòng)態(tài)腳本與Web服務(wù)器安全方面,而Web攻擊技術(shù)的不斷演進(jìn),使得Web客戶端逐漸成為攻擊的熱點(diǎn),針對(duì)Web客戶端的攻擊主要有跨站腳本攻擊(Cross Site Scripting, XSS)、跨站請(qǐng)求偽造(CrossSite Request Forgery, CSRF)和界面操作劫持等。
在眾多針對(duì)Web客戶端的攻擊中,XSS攻擊是最為嚴(yán)重也最容易被忽略的安全威脅。在各種Web安全漏洞中,XSS長(zhǎng)期占據(jù)著開放式Web應(yīng)用程序安全項(xiàng)目(Open Web Application Security Project, OWASP)列出的安全漏洞列表的前列[1]。XSS漏洞通常是由于Web應(yīng)用程序?qū)τ谟脩舻妮斎脒^(guò)濾不足而產(chǎn)生的[2-3],其最大特點(diǎn)是攻擊者利用網(wǎng)站漏洞將惡意腳本代碼,例如超文本標(biāo)記語(yǔ)言(Hypertext Markup Language, HTML)和客戶端JavaScript等,注入用戶瀏覽的網(wǎng)頁(yè)上,從而實(shí)現(xiàn)隱私信息竊取、會(huì)話劫持等攻擊目的。與此同時(shí),伴隨著客戶端JavaScript功能的日益復(fù)雜和強(qiáng)大,也使得XSS漏洞問(wèn)題日益嚴(yán)重。
傳統(tǒng)意義上的XSS,例如反射型XSS和存儲(chǔ)型XSS,通常是攻擊者向服務(wù)器發(fā)送JavaScript代碼等惡意數(shù)據(jù),在服務(wù)器返回該惡意數(shù)據(jù)后由客戶端瀏覽器在本地執(zhí)行JavaScript惡意腳本。然而,基于文檔對(duì)象模型(Document Object Model, DOM)的XSS漏洞[4](DOM XSS)則是專門針對(duì)Web客戶端進(jìn)行攻擊的主要XSS漏洞之一,它不依賴于客戶端向服務(wù)器發(fā)送惡意數(shù)據(jù)即可在客戶端本地執(zhí)行。DOM XSS與反射型XSS相似,通常誘使用戶訪問(wèn)精心構(gòu)造的統(tǒng)一資源定位符(Uniform Resource Locator, URL)來(lái)執(zhí)行腳本,但二者之間的差異在于DOM XSS的URL不會(huì)被發(fā)送至服務(wù)器,而是在用戶瀏覽器本地執(zhí)行,因而威脅更大,也更難以防御。
由于DOM XSS攻擊直接在客戶端執(zhí)行而不經(jīng)過(guò)服務(wù)器端,因而無(wú)法直接應(yīng)用傳統(tǒng)的XSS漏洞檢測(cè)技術(shù)來(lái)檢測(cè)XSS漏洞。Klein[4]在發(fā)現(xiàn)并分析DOM XSS形成原因的基礎(chǔ)上,提出應(yīng)檢查有可能被攻擊者影響或使用的對(duì)于DOM對(duì)象的引用,來(lái)防止DOM XSS攻擊,但文中并未給出對(duì)DOM對(duì)象引用的分析方法。FLAX[5]針對(duì)字節(jié)碼bytecode進(jìn)行動(dòng)態(tài)污點(diǎn)分析,來(lái)表示JavaScript腳本中不安全的數(shù)據(jù)流,然而FLAX采用基于程序切片的靜態(tài)分析技術(shù),將程序切片翻譯為JavaScript腳本的簡(jiǎn)化版本JASIL(JavaScript Simplified Instruction Language),而未真正將動(dòng)態(tài)污點(diǎn)分析應(yīng)用于JavaScript引擎。DexterJS[6]采用插裝技術(shù)執(zhí)行字符精度的動(dòng)態(tài)污點(diǎn)追蹤,然而,DexterJS并未在bytecode層面實(shí)現(xiàn)數(shù)據(jù)流追蹤,而僅是在源代碼層面追蹤對(duì)原始污點(diǎn)數(shù)據(jù)的操作可能導(dǎo)致的污點(diǎn)字符串的輸出,因而具有很大的局限性。賈文超等[7]采用正則表達(dá)式匹配程序的輸入點(diǎn)和輸出點(diǎn),通過(guò)混合驅(qū)動(dòng)爬蟲檢測(cè),雖然其基于污點(diǎn)傳播模型,但并沒(méi)有實(shí)現(xiàn)污點(diǎn)數(shù)據(jù)的追蹤過(guò)程,并未真正地應(yīng)用動(dòng)態(tài)污點(diǎn)分析技術(shù),而且該方法需要對(duì)每個(gè)輸出點(diǎn)進(jìn)行檢測(cè),檢測(cè)時(shí)間增加,因而具有局限性。
本文在對(duì)DOM XSS漏洞原理和動(dòng)態(tài)污點(diǎn)追蹤技術(shù)研究的基礎(chǔ)上,提出了一種基于動(dòng)態(tài)污點(diǎn)分析的DOM XSS漏洞檢測(cè)方法,通過(guò)對(duì)Firefox SpiderMonkey瀏覽器引擎進(jìn)行修改,實(shí)現(xiàn)了動(dòng)態(tài)的、基于bytecode的污點(diǎn)追蹤方法,該方法直接修改SpiderMonkey引擎中底層字符串類型的表示方法和DOM對(duì)象類的特征屬性,完成污點(diǎn)分析過(guò)程中對(duì)JavaScript腳本語(yǔ)言特性和DOM API的完全覆蓋。
1 問(wèn)題描述
與反射型XSS和存儲(chǔ)型XSS等傳統(tǒng)的XSS攻擊依賴于從服務(wù)器返回瀏覽器的惡意載荷實(shí)施攻擊的方式不同[8-9],DOM XSS是一種基于DOM文檔對(duì)象模型的漏洞,并不依賴于服務(wù)器返回的惡意數(shù)據(jù),僅受客戶端瀏覽器的腳本所影響,其產(chǎn)生的原因是HTML頁(yè)面以不安全的方式使用了document等攻擊者可以操縱的對(duì)象來(lái)操作數(shù)據(jù)。
客戶端瀏覽器的JavaScript腳本可以訪問(wèn)瀏覽器的DOM,通過(guò)DOM動(dòng)態(tài)檢查和修改頁(yè)面內(nèi)容,且可以不依賴于服務(wù)器端數(shù)據(jù),從客戶端瀏覽器獲得DOM中的數(shù)據(jù),例如可以從URL中提取數(shù)據(jù)等,并在本地執(zhí)行。另一方面,客戶端瀏覽器的JavaScript腳本可以操縱DOM中的對(duì)象,若用戶在客戶端輸入的數(shù)據(jù)包含了惡意JavaScript腳本,而這些腳本未經(jīng)過(guò)適當(dāng)?shù)倪^(guò)濾,則應(yīng)用程序可能遭受DOM XSS攻擊。
此時(shí),客戶端瀏覽器將HTML文本解析為DOM,而上述URL屬性值的一部分會(huì)被寫入HTML文本中產(chǎn)生DOM XSS。由于URL中#之后的字符串不會(huì)被當(dāng)作瀏覽器的查詢字符串發(fā)送至服務(wù)器,因而作為代碼片段在客戶端瀏覽器本地解釋和執(zhí)行。
由上例可見,DOM XSS的請(qǐng)求不會(huì)被發(fā)送至服務(wù)器,而是在客戶端瀏覽器本地執(zhí)行,因而更難以防御,威脅更大。針對(duì)DOM XSS存在的上述問(wèn)題,本文提出一種基于動(dòng)態(tài)污點(diǎn)分析的DOM XSS漏洞檢測(cè)方法,通過(guò)跟蹤document.referrer等JavaScript腳本能夠操縱的屬性,查看其獲得的數(shù)據(jù)是否會(huì)在document.write等能夠使字符串在頁(yè)面上輸出的方法或函數(shù)中執(zhí)行,從而確定是否會(huì)造成DOM XSS攻擊。
2 DOM XSS漏洞檢測(cè)算法研究
2.1 基本思想
DOM XSS漏洞的產(chǎn)生是因?yàn)楣粽呖梢暂斎氩豢尚诺臄?shù)據(jù),而在客戶端瀏覽器與用戶交互時(shí),JavaScript腳本能夠?qū)OM進(jìn)行操縱從而獲得敏感的本地?cái)?shù)據(jù),并將敏感數(shù)據(jù)泄露出去。由于DOM XSS漏洞是由于客戶端代碼的非正確執(zhí)行而導(dǎo)致的,且客戶端代碼呈現(xiàn)出多種多樣且動(dòng)態(tài)的特點(diǎn),因而,采用一般的掃描技術(shù)或者黑盒測(cè)試方法[11]無(wú)法檢測(cè)DOM XSS漏洞。
動(dòng)態(tài)污點(diǎn)分析(Dynamic Taint Analysis, DTA)[12]能夠在運(yùn)行時(shí)對(duì)軟件中的不可信數(shù)據(jù)進(jìn)行信息流追蹤,從而發(fā)現(xiàn)漏洞或惡意行為。動(dòng)態(tài)污點(diǎn)分析通常包括污點(diǎn)標(biāo)記、污點(diǎn)傳播和污點(diǎn)檢測(cè)三個(gè)過(guò)程,在執(zhí)行動(dòng)態(tài)污點(diǎn)分析時(shí),首先將來(lái)自污點(diǎn)源(source)的數(shù)據(jù)標(biāo)識(shí)為污點(diǎn)數(shù)據(jù),然后跟蹤污點(diǎn)數(shù)據(jù)可能發(fā)生的操作和運(yùn)算過(guò)程,并記錄污點(diǎn)數(shù)據(jù)的傳播路徑。當(dāng)污點(diǎn)數(shù)據(jù)傳播到敏感操作點(diǎn)(sink)時(shí),則按相應(yīng)的策略觸發(fā)操作。
由于動(dòng)態(tài)污點(diǎn)分析技術(shù)能夠有效追蹤敏感數(shù)據(jù)的傳播路徑,因而可以將其應(yīng)用于DOM XSS漏洞檢測(cè)。本文方法的基本思想是:首先標(biāo)記可以觸發(fā)DOM XSS漏洞的屬性,例如document.referrer、window.name、location等JavaScript腳本可以操縱的屬性,將其標(biāo)記為污點(diǎn)數(shù)據(jù)源;然后利用污點(diǎn)傳播方法跟蹤標(biāo)記數(shù)據(jù)的傳播路徑,即標(biāo)記數(shù)據(jù)傳遞時(shí)所經(jīng)過(guò)的方法,例如substr()、concat()等,以標(biāo)記發(fā)生轉(zhuǎn)換后的污點(diǎn)數(shù)據(jù);最后,檢查產(chǎn)生字符串輸出的方法,例如eval()、document.write()等,以確定其中是否包含了標(biāo)記的污點(diǎn)數(shù)據(jù),從而可以確定是否發(fā)生了敏感信息的泄露。另外,本文還設(shè)計(jì)并生成了測(cè)試用例集合,對(duì)提出的漏洞檢測(cè)算法進(jìn)行了實(shí)驗(yàn)驗(yàn)證,以確定算法的有效性。
基于動(dòng)態(tài)污點(diǎn)分析的DOM XSS漏洞檢測(cè)算法中敏感數(shù)據(jù)的污點(diǎn)標(biāo)記、傳播以及檢測(cè)過(guò)程的示意圖如圖1所示。
圖1中,首先將可能觸發(fā)DOM XSS漏洞的方法作為外部數(shù)據(jù)的可能注入點(diǎn),并對(duì)該方法的輸入變量1,2,…,n進(jìn)行污點(diǎn)標(biāo)記,構(gòu)造污點(diǎn)源;對(duì)JavaScript腳本引擎進(jìn)行修改,使得在腳本執(zhí)行過(guò)程中能夠分析指令與函數(shù)對(duì)污點(diǎn)變量的操作,追蹤污點(diǎn)傳播過(guò)程,例如污點(diǎn)變量1在執(zhí)行過(guò)程中,由于指令或函數(shù)的操作,將其污點(diǎn)傳播至變量a和變量b,從而使得與污點(diǎn)源1相關(guān)的污點(diǎn)數(shù)據(jù)集變?yōu)閧1,a,b};最后,檢測(cè)輸出點(diǎn)函數(shù)或方法是否對(duì)污點(diǎn)數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行了執(zhí)行操作,若是則判定存在DOM XSS漏洞。
2.2 算法描述
基于動(dòng)態(tài)污點(diǎn)分析的DOM XSS漏洞檢測(cè)算法通過(guò)構(gòu)造DOM模型和修改SpiderMonkey引擎,實(shí)現(xiàn)了對(duì)DOM漏洞的檢測(cè)。具體的檢測(cè)算法如下所示。
2.3 算法實(shí)現(xiàn)
本文算法利用了爬蟲程序Heritrix來(lái)搜集頁(yè)面,并為搜集到的頁(yè)面URL構(gòu)造DOM XSS攻擊載荷payload。同時(shí),為了模擬瀏覽器DOM模型,構(gòu)造了DOM模塊,以模擬document和window等可能的DOM XSS攻擊對(duì)象,并實(shí)現(xiàn)污點(diǎn)標(biāo)記功能。另外,為了實(shí)現(xiàn)污點(diǎn)傳播,對(duì)Firefox SpiderMonkey腳本引擎進(jìn)行了修改。
2.3.1 污點(diǎn)標(biāo)記
為了實(shí)現(xiàn)動(dòng)態(tài)污點(diǎn)追蹤,要獲取污點(diǎn)源并實(shí)現(xiàn)污點(diǎn)源的標(biāo)記。本文首先對(duì)有可能觸發(fā)DOM XSS漏洞的DOM對(duì)象進(jìn)行分析,確定了window.location.href、location.href、location.pathname、location.search、location.protocol、location.hostname和document.referrer等14個(gè)可以操縱數(shù)據(jù)的注入點(diǎn)方法,然后修改瀏覽器對(duì)象所對(duì)應(yīng)類的屬性,在其中增加污點(diǎn)屬性taint,以標(biāo)記該對(duì)象所獲得的變量是否為污點(diǎn)變量。
對(duì)于SpiderMonkey腳本引擎的字符串表示方法進(jìn)行修改,將其中的字符串編碼格式由4位擴(kuò)展至5位,并使用擴(kuò)展位作為污點(diǎn)標(biāo)記位。
通過(guò)對(duì)于DOM類屬性和SpiderMonkey字符串編碼格式的修改,算法可以實(shí)現(xiàn)對(duì)于注入點(diǎn)數(shù)據(jù)的污點(diǎn)標(biāo)記。
2.3.2 污點(diǎn)傳播
JavaScript腳本在執(zhí)行過(guò)程中,污點(diǎn)數(shù)據(jù)受到數(shù)據(jù)操作和控制結(jié)構(gòu)的影響,會(huì)產(chǎn)生新的污點(diǎn)數(shù)據(jù),新污點(diǎn)數(shù)據(jù)與源污點(diǎn)數(shù)據(jù)存在依賴關(guān)系,稱為源污點(diǎn)數(shù)據(jù)的依賴污點(diǎn)數(shù)據(jù)。同樣,依賴污點(diǎn)數(shù)據(jù)在執(zhí)行過(guò)程中也會(huì)產(chǎn)生新的污點(diǎn)數(shù)據(jù),因而在程序執(zhí)行過(guò)程中需要遞歸處理依賴污點(diǎn)數(shù)據(jù)以產(chǎn)生污點(diǎn)數(shù)據(jù)集。為了存儲(chǔ)污點(diǎn)數(shù)據(jù)集以及源污點(diǎn)數(shù)據(jù)和依賴污點(diǎn)數(shù)據(jù)之間、依賴污點(diǎn)數(shù)據(jù)之間的傳遞依賴關(guān)系,本文算法定義了用于保存污點(diǎn)數(shù)據(jù)集的結(jié)構(gòu)體TaintEntry,如下所示:
TaintEntry中,TaintDep鏈表存儲(chǔ)了獲得污點(diǎn)數(shù)據(jù)的DOM對(duì)象以及從源污點(diǎn)數(shù)據(jù)開始污點(diǎn)傳播過(guò)程中所影響的污點(diǎn)數(shù)據(jù)集,而TaintEntry結(jié)構(gòu)體則存儲(chǔ)了污點(diǎn)數(shù)據(jù)相關(guān)信息,包括源污點(diǎn)數(shù)據(jù)、產(chǎn)生依賴污點(diǎn)數(shù)據(jù)的操作以及依賴關(guān)系污點(diǎn)數(shù)據(jù)信息。
另外,為了實(shí)現(xiàn)污點(diǎn)傳播過(guò)程中污點(diǎn)數(shù)據(jù)的記錄,算法對(duì)JavaScript腳本引擎的字符串操作方法進(jìn)行了修改。在操作方法中對(duì)所獲得的字符串進(jìn)行污點(diǎn)判斷,若該字符串為污點(diǎn)字符串,則其返回的結(jié)果字符串也保存為污點(diǎn)字符串;為了實(shí)現(xiàn)程序控制結(jié)構(gòu)中污點(diǎn)數(shù)據(jù)的傳播,對(duì)bytecode指令的執(zhí)行過(guò)程進(jìn)行了修改,以獲得bytecode的執(zhí)行路徑,若控制結(jié)構(gòu)中有數(shù)據(jù)是污點(diǎn)數(shù)據(jù),則其執(zhí)行路徑中的其他數(shù)據(jù)也將變?yōu)槲埸c(diǎn)數(shù)據(jù)。
2.3.3 污點(diǎn)檢測(cè)
DOM XSS的基本檢測(cè)方法是檢測(cè)注入腳本能否在sink點(diǎn)執(zhí)行。因此,算法監(jiān)控sink點(diǎn),添加analyse()方法,首先,判定sink點(diǎn)方法中獲得的實(shí)參是否是污點(diǎn)數(shù)據(jù),若是,則從污點(diǎn)數(shù)據(jù)集中獲得該污點(diǎn)數(shù)據(jù)的依賴關(guān)系,通過(guò)逆向遍歷污點(diǎn)數(shù)據(jù)集,獲得該污點(diǎn)數(shù)據(jù)的源污點(diǎn)數(shù)據(jù)來(lái)源,若其源污點(diǎn)數(shù)據(jù)來(lái)自標(biāo)記對(duì)象產(chǎn)生的污點(diǎn)數(shù)據(jù),并且該污點(diǎn)數(shù)據(jù)存在執(zhí)行路徑。則在分析方法將測(cè)試結(jié)果輸出。
2.4 測(cè)試用例生成
為了測(cè)試提出的DOM XSS漏洞檢測(cè)算法的有效性,本文對(duì)DOM XSS漏洞利用點(diǎn)的上下文進(jìn)行了分析,并根據(jù)以下規(guī)則設(shè)計(jì)DOM XSS攻擊載荷以生成測(cè)試用例:
Usecase ::= URL‖截?cái)嘈蛄小行лd荷‖轉(zhuǎn)義序列
其中:URL表示待測(cè)網(wǎng)站的URL地址,攻擊者可以對(duì)URL進(jìn)行修改以實(shí)施DOM XSS攻擊;截?cái)嘈蛄型ǔS糜陂]合頁(yè)面漏洞利用點(diǎn)中未結(jié)束的標(biāo)簽;有效載荷標(biāo)識(shí)攻擊者用于實(shí)施攻擊的代碼片段;而轉(zhuǎn)義序列通常為截?cái)嘈蛄械姆葱蛄?,其目的是能夠使得?jīng)過(guò)修改的漏洞利用點(diǎn)能夠在當(dāng)前上下文中正常執(zhí)行。
本文根據(jù)上述提出的測(cè)試用例生成規(guī)則,生成針對(duì)不同注入點(diǎn)的攻擊載荷集,并結(jié)合fuzzing測(cè)試方法[13],生成一些特殊的載荷,組成攻擊載荷集合,依次將攻擊載荷集合中的載荷注入到待檢驗(yàn)的URL中,完成攻擊過(guò)程的模擬。
3 實(shí)驗(yàn)結(jié)果分析
為了測(cè)試算法的檢測(cè)率和檢測(cè)性能,本文收集了XSSed、Wooyun等漏洞公布平臺(tái)上發(fā)布的DOM XSS漏洞,搭建執(zhí)行環(huán)境,構(gòu)造了一個(gè)本地樣本集,其中包含DOM XSS漏洞的網(wǎng)頁(yè)分為兩類:1)未對(duì)用戶輸入進(jìn)行過(guò)濾的網(wǎng)站,樣本數(shù)為106;2)雖然含有過(guò)濾方法,但過(guò)濾不完全,導(dǎo)致漏洞的產(chǎn)生,樣本數(shù)為64。評(píng)價(jià)指標(biāo)為檢測(cè)到的樣本數(shù)、檢測(cè)率、平均樣本檢測(cè)時(shí)間。實(shí)驗(yàn)中將本文算法與應(yīng)用較為廣泛的DOM XSS檢測(cè)工具DOMinator[14]進(jìn)行了比較分析,比較實(shí)驗(yàn)結(jié)果如表1所示。
由實(shí)驗(yàn)結(jié)果分析可知:在檢測(cè)未過(guò)濾樣本時(shí),本文算法的檢測(cè)率略低于DOMinator。經(jīng)過(guò)對(duì)未檢測(cè)到頁(yè)面的分析發(fā)現(xiàn),本文算法實(shí)現(xiàn)中輸出點(diǎn)集合不夠完善,部分輸出點(diǎn)函數(shù)未包含在內(nèi),導(dǎo)致漏報(bào),可以在后續(xù)工作中改進(jìn)輸出點(diǎn)集合。在檢測(cè)過(guò)濾樣本時(shí),本文算法和DOMinator的檢測(cè)率基本持平,然而,本文算法的平均檢測(cè)時(shí)間明顯少于DOMinator,這是因?yàn)楸疚南到y(tǒng)實(shí)現(xiàn)了自動(dòng)化測(cè)試功能,檢測(cè)效率明顯提升。
為了評(píng)價(jià)算法的實(shí)際可用性,本文對(duì)真實(shí)的網(wǎng)頁(yè)進(jìn)行了測(cè)試驗(yàn)證。實(shí)驗(yàn)中,首先利用爬蟲程序Heritrix搜集頁(yè)面,共計(jì)27411個(gè)頁(yè)面,并依次對(duì)其進(jìn)行檢測(cè),檢測(cè)結(jié)果如下:檢測(cè)到可疑樣本數(shù)為123,實(shí)際漏洞樣本數(shù)為114,誤報(bào)率為7.89%。因無(wú)法對(duì)所有真實(shí)樣本進(jìn)行手工分析,因而對(duì)于真實(shí)樣本實(shí)驗(yàn)采用誤報(bào)率來(lái)檢驗(yàn)算法的可行性。經(jīng)分析,產(chǎn)生誤報(bào)率的原因是算法在生成和使用測(cè)試用例時(shí)匹配規(guī)則過(guò)于嚴(yán)格,也由于部分網(wǎng)站使用安全策略過(guò)濾,導(dǎo)致有些書寫不完善的語(yǔ)句也被算法誤報(bào)為DOM XSS漏洞。
4 結(jié)語(yǔ)
本文分析了DOM XSS漏洞的特點(diǎn),提出了一種基于動(dòng)態(tài)污點(diǎn)分析的DOM XSS檢測(cè)算法。為了實(shí)現(xiàn)動(dòng)態(tài)污點(diǎn)傳播,對(duì)Firefox SpiderMonkey引擎進(jìn)行修改,實(shí)現(xiàn)了動(dòng)態(tài)的、基于bytecode的污點(diǎn)追蹤。實(shí)驗(yàn)結(jié)果表明,本文算法具有較好的有效性與可行性。為了進(jìn)一步提高算法的檢測(cè)率并降低誤報(bào)率,后續(xù)工作將利用fuzzing測(cè)試技術(shù)進(jìn)一步完善污點(diǎn)數(shù)據(jù)集,實(shí)現(xiàn)DOM XSS漏洞的自動(dòng)化檢測(cè)。
參考文獻(xiàn):
[1]OWASP. CrossSite Scripting (XSS) [EB/OL]. [2014-04-22]. https://www.owasp.org/index.php/XSS.
[2]PIETRASZEK T,BERGHE C. Defending against injection attacks through contextsensitive string evaluation[C]// Proceedings of the 8th International Conference on Recent Advances in Intrusion Detection. Berlin: SpringerVerlag, 2006, 3858:124-145.
[3]VIKRAM K, PRATEEK A, LIVSHITS B. Ripley: automatically securing distributed Web applications through replicated execution[C]// Proceedings of the 16th ACM Conference on Computer and Communications Security. New York: ACM, 2009: 173-186.
[4]KLEIN A. Dom based cross site scripting or XSS of the third kind [EB/OL]. [2005-07-04]. http://www.webappsec.org/projects/articles/071105.html.
[5]SAXENA P, HANNA S, POOSANKAM P, SONG D. FLAX: systematic discovery of clientside validation vulnerabilities in rich Web applications[EB/OL].[2015-06-20].http://www.internetsociety.org/doc/flaxsystematicdiscoveryclientsidevalidationvulnerabilitiesrichwebapplications.
[6]LEKIES S, STOCK B, JOHNS M. 25 million flows laterlargescale detection of DOMbased XSS [C]// Proceedings of the 20th ACM Conference on Computer and Communications. New York: ACM, 2013: 1193-1204.
[7]賈文超, 汪永益, 施凡,等. 基于動(dòng)態(tài)污點(diǎn)傳播模型的DOM XSS漏洞檢測(cè)[J]. 計(jì)算機(jī)應(yīng)用研究, 2014, 31(7):2119-2122.(JIA W C,WANG Y Y, SHI F, et al. Detecting DOM based XSS vulnerability based on dynamic taint propagation model[J]. Application Research of Computers, 2014, 31(7): 2119-2122.)
[8]李沁蕾,王蕊,賈曉啟.OSN中基于分類器和改進(jìn)ngram模型的跨站腳本檢測(cè)方法[J].計(jì)算機(jī)應(yīng)用,2014,34(6):1661-1665. (LI Q L,WANG R,JIA X Q.Crosssite scripting detection in online social network based on classifiers and improved ngram model[J].Journal of Computer Applications,2014,34(6):1661-1665.)
[9]WEINBERGER J, SAXENA P, AKHAWE D, et al. A systematic analysis of XSS sanitization in Web application frameworks[C]// Proceedings of the 16th European Conference on Research in Computer Security. Berlin: SpringerVerlag, 2011:150-171.
[10]邱永華. XSS跨站腳本攻擊剖析與防御[M].北京:人民郵電出版社, 2013:120-126. (QIU Y H. XSS Attack and Defense Analysis[M]. Beijing: Posts & Telecom Press, 2013:120-126.)
[11]朱貫淼,曾凡平,袁園,等.基于污點(diǎn)跟蹤的黑盒fuzzing測(cè)試[J].小型微型計(jì)算機(jī)系統(tǒng),2012,33(8):1736-1739.(ZHU G M,ZENG F P,YUAN Y, et al. Blackbox fuzzing testing based on taint check[J].Journal of Chinese Computer Systems,2012, 33(8):1736-1739.)
[12]吳世忠, 郭濤, 董國(guó)偉, 等. 軟件漏洞分析技術(shù)進(jìn)展[J].清華大學(xué)學(xué)報(bào)(自然科學(xué)版), 2012, 52(10):1309-1319. (WU S Z, GUO T, DONG G W, et al. Software vulnerability analyses: a road map [J]. Journal of Tsinghua University (Science & Technology), 2012, 52(10):1309-1319.)
[13]VIJAY G, TIM L, MARTIN R. Taintbased directed whitebox fuzzing[C]// Proceedings of the 31st International Conference on Software Engineering. Washington, DC: IEEE Computer Society, 2009:474-484.
[14]DOMINATOR. A full featured DOM XSS security suite[EB/OL].[2012-11-13].https://dominator.mindedsecurity.com.