?

基于動態污點分析的DOMXSS漏洞檢測算法

2016-05-14 08:38李潔俞研吳家順
計算機應用 2016年5期

李潔 俞研 吳家順

摘要:針對Web客戶端中基于文檔對象模型的跨站腳本攻擊(DOM XSS)漏洞檢測問題,提出一種基于動態污點分析的DOM XSS漏洞檢測算法。通過構造DOM模型和修改Firefox SpiderMonkey腳本引擎,利用動態的、基于bytecode的污點分析方法實現了DOM XSS漏洞的檢測。對DOM對象類屬性的擴展和SpiderMonkey字符串編碼格式的修改可以完成污點數據標記;遍歷JavaScript指令代碼bytecode的執行路徑,獲得污點傳播路徑,實現污點數據集的生成;監控所有可能會觸發DOM XSS攻擊的輸出點,實現DOM XSS漏洞的判定。在此基礎上,利用爬蟲程序設計并實現了一個互聯網DOM XSS漏洞檢測系統。實驗結果表明,所提算法能有效檢測網頁存在的DOM XSS漏洞,其檢測率可達92%。

關鍵詞:動態污點分析;注入點;輸出點;執行路徑

中圖分類號:TP393.08 文獻標志碼: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 引言

隨著網絡技術的快速發展以及互聯網的廣泛應用,Web服務也在不斷地更新與發展。然而,與Web應用相伴的是Web安全問題,早期Web安全主要體現在服務端動態腳本與Web服務器安全方面,而Web攻擊技術的不斷演進,使得Web客戶端逐漸成為攻擊的熱點,針對Web客戶端的攻擊主要有跨站腳本攻擊(Cross Site Scripting, XSS)、跨站請求偽造(CrossSite Request Forgery, CSRF)和界面操作劫持等。

在眾多針對Web客戶端的攻擊中,XSS攻擊是最為嚴重也最容易被忽略的安全威脅。在各種Web安全漏洞中,XSS長期占據著開放式Web應用程序安全項目(Open Web Application Security Project, OWASP)列出的安全漏洞列表的前列[1]。XSS漏洞通常是由于Web應用程序對于用戶的輸入過濾不足而產生的[2-3],其最大特點是攻擊者利用網站漏洞將惡意腳本代碼,例如超文本標記語言(Hypertext Markup Language, HTML)和客戶端JavaScript等,注入用戶瀏覽的網頁上,從而實現隱私信息竊取、會話劫持等攻擊目的。與此同時,伴隨著客戶端JavaScript功能的日益復雜和強大,也使得XSS漏洞問題日益嚴重。

傳統意義上的XSS,例如反射型XSS和存儲型XSS,通常是攻擊者向服務器發送JavaScript代碼等惡意數據,在服務器返回該惡意數據后由客戶端瀏覽器在本地執行JavaScript惡意腳本。然而,基于文檔對象模型(Document Object Model, DOM)的XSS漏洞[4](DOM XSS)則是專門針對Web客戶端進行攻擊的主要XSS漏洞之一,它不依賴于客戶端向服務器發送惡意數據即可在客戶端本地執行。DOM XSS與反射型XSS相似,通常誘使用戶訪問精心構造的統一資源定位符(Uniform Resource Locator, URL)來執行腳本,但二者之間的差異在于DOM XSS的URL不會被發送至服務器,而是在用戶瀏覽器本地執行,因而威脅更大,也更難以防御。

由于DOM XSS攻擊直接在客戶端執行而不經過服務器端,因而無法直接應用傳統的XSS漏洞檢測技術來檢測XSS漏洞。Klein[4]在發現并分析DOM XSS形成原因的基礎上,提出應檢查有可能被攻擊者影響或使用的對于DOM對象的引用,來防止DOM XSS攻擊,但文中并未給出對DOM對象引用的分析方法。FLAX[5]針對字節碼bytecode進行動態污點分析,來表示JavaScript腳本中不安全的數據流,然而FLAX采用基于程序切片的靜態分析技術,將程序切片翻譯為JavaScript腳本的簡化版本JASIL(JavaScript Simplified Instruction Language),而未真正將動態污點分析應用于JavaScript引擎。DexterJS[6]采用插裝技術執行字符精度的動態污點追蹤,然而,DexterJS并未在bytecode層面實現數據流追蹤,而僅是在源代碼層面追蹤對原始污點數據的操作可能導致的污點字符串的輸出,因而具有很大的局限性。賈文超等[7]采用正則表達式匹配程序的輸入點和輸出點,通過混合驅動爬蟲檢測,雖然其基于污點傳播模型,但并沒有實現污點數據的追蹤過程,并未真正地應用動態污點分析技術,而且該方法需要對每個輸出點進行檢測,檢測時間增加,因而具有局限性。

本文在對DOM XSS漏洞原理和動態污點追蹤技術研究的基礎上,提出了一種基于動態污點分析的DOM XSS漏洞檢測方法,通過對Firefox SpiderMonkey瀏覽器引擎進行修改,實現了動態的、基于bytecode的污點追蹤方法,該方法直接修改SpiderMonkey引擎中底層字符串類型的表示方法和DOM對象類的特征屬性,完成污點分析過程中對JavaScript腳本語言特性和DOM API的完全覆蓋。

1 問題描述

與反射型XSS和存儲型XSS等傳統的XSS攻擊依賴于從服務器返回瀏覽器的惡意載荷實施攻擊的方式不同[8-9],DOM XSS是一種基于DOM文檔對象模型的漏洞,并不依賴于服務器返回的惡意數據,僅受客戶端瀏覽器的腳本所影響,其產生的原因是HTML頁面以不安全的方式使用了document等攻擊者可以操縱的對象來操作數據。

客戶端瀏覽器的JavaScript腳本可以訪問瀏覽器的DOM,通過DOM動態檢查和修改頁面內容,且可以不依賴于服務器端數據,從客戶端瀏覽器獲得DOM中的數據,例如可以從URL中提取數據等,并在本地執行。另一方面,客戶端瀏覽器的JavaScript腳本可以操縱DOM中的對象,若用戶在客戶端輸入的數據包含了惡意JavaScript腳本,而這些腳本未經過適當的過濾,則應用程序可能遭受DOM XSS攻擊。

此時,客戶端瀏覽器將HTML文本解析為DOM,而上述URL屬性值的一部分會被寫入HTML文本中產生DOM XSS。由于URL中#之后的字符串不會被當作瀏覽器的查詢字符串發送至服務器,因而作為代碼片段在客戶端瀏覽器本地解釋和執行。

由上例可見,DOM XSS的請求不會被發送至服務器,而是在客戶端瀏覽器本地執行,因而更難以防御,威脅更大。針對DOM XSS存在的上述問題,本文提出一種基于動態污點分析的DOM XSS漏洞檢測方法,通過跟蹤document.referrer等JavaScript腳本能夠操縱的屬性,查看其獲得的數據是否會在document.write等能夠使字符串在頁面上輸出的方法或函數中執行,從而確定是否會造成DOM XSS攻擊。

2 DOM XSS漏洞檢測算法研究

2.1 基本思想

DOM XSS漏洞的產生是因為攻擊者可以輸入不可信的數據,而在客戶端瀏覽器與用戶交互時,JavaScript腳本能夠對DOM進行操縱從而獲得敏感的本地數據,并將敏感數據泄露出去。由于DOM XSS漏洞是由于客戶端代碼的非正確執行而導致的,且客戶端代碼呈現出多種多樣且動態的特點,因而,采用一般的掃描技術或者黑盒測試方法[11]無法檢測DOM XSS漏洞。

動態污點分析(Dynamic Taint Analysis, DTA)[12]能夠在運行時對軟件中的不可信數據進行信息流追蹤,從而發現漏洞或惡意行為。動態污點分析通常包括污點標記、污點傳播和污點檢測三個過程,在執行動態污點分析時,首先將來自污點源(source)的數據標識為污點數據,然后跟蹤污點數據可能發生的操作和運算過程,并記錄污點數據的傳播路徑。當污點數據傳播到敏感操作點(sink)時,則按相應的策略觸發操作。

由于動態污點分析技術能夠有效追蹤敏感數據的傳播路徑,因而可以將其應用于DOM XSS漏洞檢測。本文方法的基本思想是:首先標記可以觸發DOM XSS漏洞的屬性,例如document.referrer、window.name、location等JavaScript腳本可以操縱的屬性,將其標記為污點數據源;然后利用污點傳播方法跟蹤標記數據的傳播路徑,即標記數據傳遞時所經過的方法,例如substr()、concat()等,以標記發生轉換后的污點數據;最后,檢查產生字符串輸出的方法,例如eval()、document.write()等,以確定其中是否包含了標記的污點數據,從而可以確定是否發生了敏感信息的泄露。另外,本文還設計并生成了測試用例集合,對提出的漏洞檢測算法進行了實驗驗證,以確定算法的有效性。

基于動態污點分析的DOM XSS漏洞檢測算法中敏感數據的污點標記、傳播以及檢測過程的示意圖如圖1所示。

圖1中,首先將可能觸發DOM XSS漏洞的方法作為外部數據的可能注入點,并對該方法的輸入變量1,2,…,n進行污點標記,構造污點源;對JavaScript腳本引擎進行修改,使得在腳本執行過程中能夠分析指令與函數對污點變量的操作,追蹤污點傳播過程,例如污點變量1在執行過程中,由于指令或函數的操作,將其污點傳播至變量a和變量b,從而使得與污點源1相關的污點數據集變為{1,a,b};最后,檢測輸出點函數或方法是否對污點數據集中的數據進行了執行操作,若是則判定存在DOM XSS漏洞。

2.2 算法描述

基于動態污點分析的DOM XSS漏洞檢測算法通過構造DOM模型和修改SpiderMonkey引擎,實現了對DOM漏洞的檢測。具體的檢測算法如下所示。

2.3 算法實現

本文算法利用了爬蟲程序Heritrix來搜集頁面,并為搜集到的頁面URL構造DOM XSS攻擊載荷payload。同時,為了模擬瀏覽器DOM模型,構造了DOM模塊,以模擬document和window等可能的DOM XSS攻擊對象,并實現污點標記功能。另外,為了實現污點傳播,對Firefox SpiderMonkey腳本引擎進行了修改。

2.3.1 污點標記

為了實現動態污點追蹤,要獲取污點源并實現污點源的標記。本文首先對有可能觸發DOM XSS漏洞的DOM對象進行分析,確定了window.location.href、location.href、location.pathname、location.search、location.protocol、location.hostname和document.referrer等14個可以操縱數據的注入點方法,然后修改瀏覽器對象所對應類的屬性,在其中增加污點屬性taint,以標記該對象所獲得的變量是否為污點變量。

對于SpiderMonkey腳本引擎的字符串表示方法進行修改,將其中的字符串編碼格式由4位擴展至5位,并使用擴展位作為污點標記位。

通過對于DOM類屬性和SpiderMonkey字符串編碼格式的修改,算法可以實現對于注入點數據的污點標記。

2.3.2 污點傳播

JavaScript腳本在執行過程中,污點數據受到數據操作和控制結構的影響,會產生新的污點數據,新污點數據與源污點數據存在依賴關系,稱為源污點數據的依賴污點數據。同樣,依賴污點數據在執行過程中也會產生新的污點數據,因而在程序執行過程中需要遞歸處理依賴污點數據以產生污點數據集。為了存儲污點數據集以及源污點數據和依賴污點數據之間、依賴污點數據之間的傳遞依賴關系,本文算法定義了用于保存污點數據集的結構體TaintEntry,如下所示:

TaintEntry中,TaintDep鏈表存儲了獲得污點數據的DOM對象以及從源污點數據開始污點傳播過程中所影響的污點數據集,而TaintEntry結構體則存儲了污點數據相關信息,包括源污點數據、產生依賴污點數據的操作以及依賴關系污點數據信息。

另外,為了實現污點傳播過程中污點數據的記錄,算法對JavaScript腳本引擎的字符串操作方法進行了修改。在操作方法中對所獲得的字符串進行污點判斷,若該字符串為污點字符串,則其返回的結果字符串也保存為污點字符串;為了實現程序控制結構中污點數據的傳播,對bytecode指令的執行過程進行了修改,以獲得bytecode的執行路徑,若控制結構中有數據是污點數據,則其執行路徑中的其他數據也將變為污點數據。

2.3.3 污點檢測

DOM XSS的基本檢測方法是檢測注入腳本能否在sink點執行。因此,算法監控sink點,添加analyse()方法,首先,判定sink點方法中獲得的實參是否是污點數據,若是,則從污點數據集中獲得該污點數據的依賴關系,通過逆向遍歷污點數據集,獲得該污點數據的源污點數據來源,若其源污點數據來自標記對象產生的污點數據,并且該污點數據存在執行路徑。則在分析方法將測試結果輸出。

2.4 測試用例生成

為了測試提出的DOM XSS漏洞檢測算法的有效性,本文對DOM XSS漏洞利用點的上下文進行了分析,并根據以下規則設計DOM XSS攻擊載荷以生成測試用例:

Usecase ::= URL‖截斷序列‖有效載荷‖轉義序列

其中:URL表示待測網站的URL地址,攻擊者可以對URL進行修改以實施DOM XSS攻擊;截斷序列通常用于閉合頁面漏洞利用點中未結束的標簽;有效載荷標識攻擊者用于實施攻擊的代碼片段;而轉義序列通常為截斷序列的反序列,其目的是能夠使得經過修改的漏洞利用點能夠在當前上下文中正常執行。

本文根據上述提出的測試用例生成規則,生成針對不同注入點的攻擊載荷集,并結合fuzzing測試方法[13],生成一些特殊的載荷,組成攻擊載荷集合,依次將攻擊載荷集合中的載荷注入到待檢驗的URL中,完成攻擊過程的模擬。

3 實驗結果分析

為了測試算法的檢測率和檢測性能,本文收集了XSSed、Wooyun等漏洞公布平臺上發布的DOM XSS漏洞,搭建執行環境,構造了一個本地樣本集,其中包含DOM XSS漏洞的網頁分為兩類:1)未對用戶輸入進行過濾的網站,樣本數為106;2)雖然含有過濾方法,但過濾不完全,導致漏洞的產生,樣本數為64。評價指標為檢測到的樣本數、檢測率、平均樣本檢測時間。實驗中將本文算法與應用較為廣泛的DOM XSS檢測工具DOMinator[14]進行了比較分析,比較實驗結果如表1所示。

由實驗結果分析可知:在檢測未過濾樣本時,本文算法的檢測率略低于DOMinator。經過對未檢測到頁面的分析發現,本文算法實現中輸出點集合不夠完善,部分輸出點函數未包含在內,導致漏報,可以在后續工作中改進輸出點集合。在檢測過濾樣本時,本文算法和DOMinator的檢測率基本持平,然而,本文算法的平均檢測時間明顯少于DOMinator,這是因為本文系統實現了自動化測試功能,檢測效率明顯提升。

為了評價算法的實際可用性,本文對真實的網頁進行了測試驗證。實驗中,首先利用爬蟲程序Heritrix搜集頁面,共計27411個頁面,并依次對其進行檢測,檢測結果如下:檢測到可疑樣本數為123,實際漏洞樣本數為114,誤報率為7.89%。因無法對所有真實樣本進行手工分析,因而對于真實樣本實驗采用誤報率來檢驗算法的可行性。經分析,產生誤報率的原因是算法在生成和使用測試用例時匹配規則過于嚴格,也由于部分網站使用安全策略過濾,導致有些書寫不完善的語句也被算法誤報為DOM XSS漏洞。

4 結語

本文分析了DOM XSS漏洞的特點,提出了一種基于動態污點分析的DOM XSS檢測算法。為了實現動態污點傳播,對Firefox SpiderMonkey引擎進行修改,實現了動態的、基于bytecode的污點追蹤。實驗結果表明,本文算法具有較好的有效性與可行性。為了進一步提高算法的檢測率并降低誤報率,后續工作將利用fuzzing測試技術進一步完善污點數據集,實現DOM XSS漏洞的自動化檢測。

參考文獻:

[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]賈文超, 汪永益, 施凡,等. 基于動態污點傳播模型的DOM XSS漏洞檢測[J]. 計算機應用研究, 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中基于分類器和改進ngram模型的跨站腳本檢測方法[J].計算機應用,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]朱貫淼,曾凡平,袁園,等.基于污點跟蹤的黑盒fuzzing測試[J].小型微型計算機系統,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]吳世忠, 郭濤, 董國偉, 等. 軟件漏洞分析技術進展[J].清華大學學報(自然科學版), 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.

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合