桂智杰,舒輝
?
面向規(guī)則缺陷的瀏覽器XSS過濾器測試方法
桂智杰1,2,舒輝1,2
(1. 中國人民解放軍信息工程大學網(wǎng)絡空間安全學院,河南 鄭州 450001;2. 數(shù)學工程與先進計算國家重點實驗室,河南 鄭州 450001)
為了緩解跨站腳本(XSS,cross-site scripting)攻擊,現(xiàn)代瀏覽器使用XSS過濾器進行防御,現(xiàn)有方法很難有效對瀏覽器XSS過濾器的安全性進行測試與評估。規(guī)則缺陷是瀏覽器XSS過濾器實現(xiàn)過程中的缺陷和安全問題。面向瀏覽器XSS過濾器規(guī)則缺陷,給出其形式化定義,設計測試樣例和場景生成算法。為了定量測試與評估不同瀏覽器XSS過濾器的過濾水平,結合過濾成功率、誤報率、輸入損耗計算過濾能力?;谒岱椒ǎO計原型系統(tǒng)對幾種主流瀏覽器XSS過濾器進行自動化測試,得到了不同瀏覽器的XSS過濾能力。經(jīng)過實際測試,該系統(tǒng)具備發(fā)現(xiàn)未公開漏洞的能力。
跨站腳本攻擊;瀏覽器XSS過濾器;規(guī)則缺陷;過濾能力
XSS攻擊[1]是一種利用服務器端防御不嚴導致針對Web應用前端的攻擊方式。在不加防御的情況下,攻擊者利用XSS漏洞可以向用戶發(fā)送惡意腳本,最終被瀏覽器解釋執(zhí)行,達到盜取cookie和登錄賬號等目的。到目前為止,攻擊者發(fā)送的惡意腳本已經(jīng)不限于JavaScript片段,而是包括HTML、SVG或者Flash等可能執(zhí)行的任何其他類型的代碼。
由于XSS攻擊的影響,如何緩解XSS顯得尤為重要。目前有如下幾種防御或者緩解方式:瀏覽器XSS過濾器、內(nèi)容安全策略、HTML sanitizers和WAF(Web application firewall)。除基于客戶端瀏覽器XSS過濾器外,其余幾種都有較為通用的繞過思路和一般性安全問題,并且有系統(tǒng)的評估和測試方法。然而,目前測試評估瀏覽器XSS過濾器的方法還比較欠缺,無法有效地綜合評估現(xiàn)有XSS過濾器的過濾能力。在此基礎上,挖掘瀏覽器XSS過濾器模塊漏洞主要采取模糊測試的方法,該方法為了提高代碼覆蓋率,導致產(chǎn)生大量誤用測試樣例,漏洞挖掘效率低。
Microsoft從Internet Explorer 8開始實現(xiàn)了初代的XSS過濾器,稱為XSS Filter。瀏覽器內(nèi)核Webkit自身也內(nèi)嵌一個XSS過濾器,稱為XSS Auditor,故基于Webkit的瀏覽器(如Chrome、Safari等)使用的是XSS Auditor,國內(nèi)的一些瀏覽器(如搜狗和獵豹)也是內(nèi)置XSS Auditor。Firefox瀏覽器由于多種原因并沒有XSS過濾器,在本文測試過程中主要用于對照實驗。本文中瀏覽器XSS過濾器泛指所有瀏覽器XSS的過濾模塊,XSS Filter特指Internet Explorer(IE)瀏覽器的XSS過濾模塊,XSS Auditor特指基于Webkit內(nèi)核瀏覽器的XSS過濾模塊。
瀏覽器XSS過濾器研究領域已經(jīng)有一些關于XSS Filter設計理念和實現(xiàn)原理的文章和綜述。Ross在文獻[2]介紹了IE 8瀏覽器XSS Filter的體系結構和實現(xiàn)思路。IE瀏覽器XSS Filter通過監(jiān)控Request URL,基于正則表達式進行匹配XSS攻擊向量。若匹配成功,則建立一個簽名(Signature),并在HTTP Response中使用中性字符替換。
在IE XSS Filter提出后,Nava等在文獻[3]給出了IE 8 XSS Filter濫用導致的問題。該方法利用IE XSS Filter正則替換存在的漏洞,注入虛假參數(shù),導致XSS過濾器響應,對正常頁面進行修改。
2010年Bates等在文獻[4]中提出了基于正則表達式的XSS Filter存在的錯報誤報問題和過濾不嚴被繞過問題,并在Webkit中構建了XSS Auditor,在文章中說明了該模塊的體系架構和技術原理。XSS Auditor作用于網(wǎng)頁解析時,通過對Webkit解析出的Token序列進行審計,檢測如內(nèi)聯(lián)事件處理程序和資源引用等危險屬性,并在Response中進行匹配。
綜上所述,在瀏覽器XSS過濾器研究領域,目前尚無很好的測試過濾器的方法和定量的測試結果。在評估的基礎上,現(xiàn)有的瀏覽器XSS過濾器漏洞挖掘效率低,無法有效找出其潛在的安全問題。
針對上述問題,本文有如下貢獻。
1) 通過源碼審計或者逆向分析,分析目前2種主流瀏覽器XSS過濾器原理以及實現(xiàn)上的問題,列舉了4種典型的規(guī)則缺陷。
2) 形式化定義規(guī)則缺陷,并且設計面向規(guī)則缺陷生成測試樣例和測試場景的算法??紤]過濾成功率、誤報率、輸入損耗,給出計算瀏覽器XSS過濾器過濾能力的公式。
3) 設計與實現(xiàn)原型測試系統(tǒng),對目前幾種主流的瀏覽器進行實際測試,得到了不同瀏覽器XSS過濾器的過濾能力。
4) 在分析規(guī)則缺陷和實際測試的基礎上,對瀏覽器XSS過濾器潛在的安全漏洞進行挖掘,找到了多個瀏覽器最新版XSS過濾器的未公開漏洞,并通知廠商及時修補。
本文主要探討Chrome和Internet Explorer 2種瀏覽器,其XSS過濾器有著不同的實現(xiàn)方式。Chrome的XSS Auditor內(nèi)嵌于Webkit,作用在HTML解析過程中,對HTML解析器生成的詞語流進行過濾。Internet Explorer的XSS Filter實現(xiàn)在mshtml.dll動態(tài)鏈接庫中,作用于服務器與客戶端之間的數(shù)據(jù)請求與響應,對瀏覽器返回數(shù)據(jù)進行匹配過濾。
在對瀏覽器XSS過濾器模板進行分析和調試的基礎上,下面介紹2種瀏覽器XSS過濾器的規(guī)則缺陷。
XSS Auditor作用于HTML語言的解釋構建DOM過程,在詞語生成后,Webkit調用XSS Auditor驗證詞語流來緩解XSS攻擊。XSS Auditor模塊架構如圖1所示。
圖1 XSS Auditor模塊架構
HTML是將HTML從字節(jié)流解釋構建為DOM樹的過程,由HTML解釋器(HTML Parser)負責實施。在Webkit實現(xiàn)過程中,HTML Parser模塊中的HTMLDocumentParser類用于完成上述過程。在上述過程中,輸入的資源首先從字節(jié)流轉化為詞語流(Tokens)。當詞語生成后,XSS Auditor模塊對詞語進行過濾。經(jīng)過對XSS Auditor實現(xiàn)源碼的閱讀與實際測試,發(fā)現(xiàn)存在2種典型的規(guī)則缺陷,并且這里的規(guī)則缺陷適用于所有使用Webkit的瀏覽器。
1) 規(guī)避HTML解析
正如上述XSS Auditor模塊架構所描述的,該過濾器基于HTML解析過程,如果返回代碼沒有經(jīng)過HTML解析,就完全不會啟動XSS Auditor[5]。
這種情況在實際Web開發(fā)中時常出現(xiàn),如Web應用前端頁面中使用eval函數(shù)執(zhí)行從服務器端返回的數(shù)據(jù),此時就不進行HTML解析,不啟動XSS Auditor,這樣就從避免HTML解析的角度完全繞過XSS Auditor的過濾,這是一種XSS Auditor實現(xiàn)上的規(guī)則缺陷,利用該規(guī)則缺陷,在合適場景的情況下,將可以繞過該過濾器。
2) 請求代碼與解析代碼相異
在XSS Auditor作用中最為關鍵的步驟是比對解析后代碼與請求是否相同,若相同,則判定存在反射性XSS攻擊。從反射性XSS原理上來講,就是通過攻擊者發(fā)送惡意Request,然后瀏覽器解析服務器端的Response,輸出到頁面上,從而執(zhí)行JavaScript代碼。
想要繞過XSS Auditor,這是與XSS攻擊原理相矛盾的。這種情況下較為巧妙的繞過思路:通過構造payload令請求代碼與解析代碼相異,達到繞過的目的。具體來說,有2種情況可以使用該規(guī)則缺陷:加密傳輸場景和HTML規(guī)范化渲染。
XSS Filter并不是作用于HTML頁面解析,而是作用于客戶端瀏覽器與服務器之間,攔截瀏覽器與服務器之間請求和返回的數(shù)據(jù)。XSS Filter模塊架構如圖2所示。
圖2 XSS Filter模塊架構
細化來看,XSS Filter的工作邏輯為:瀏覽器監(jiān)控Request URL,通過正則表達式匹配Http Request。若匹配成功,則認為識別出一組XSS攻擊向量,就建立一個簽名。生成的Signature用于掃描HTTP Response,如果在響應中也掃描到XSS攻擊向量,就返回修改。經(jīng)過對mshtml.dll的逆向分析,該過濾器有如下2種規(guī)則缺陷。
1) 正則表達式非預期利用
在過濾器測試系統(tǒng)中,不僅要看其過濾的成功率,還要看誤報率。Internet Explorer的XSS Filter采用正則表達式匹配Request,并且在Response中將匹配到的字符替換為中性字符,這是一種較為徹底的中和XSS攻擊向量的方式。
正則表達式被期望用來尋找匹配攻擊向量進行替換,通過構造可以導致正則表達式被非預期利用。若用戶輸入了匹配正則規(guī)則的Request參數(shù),但這個參數(shù)并沒有返回到頁面,此時若頁面已經(jīng)有匹配項,XSS Filter無法識別是用戶輸入與頁面已經(jīng)存在的,就將頁面中已有的匹配項做替換。
這種正則表達式的非預期使用將導致HTML頁面被破壞[6],在場景合適的情況下,還會利用誤報導致XSS。
2) 正則匹配規(guī)則繞過
XSS Filter的匹配是基于正則表達式的,該表達式在mshtml.dll動態(tài)鏈接庫中。隨著Internet Explorer的更新,這些表達式愈加復雜。圖3顯示了mshtml.dll動態(tài)鏈接庫中部分正則表達式。這些表達式無法通盤考慮攻擊向量的變化形式,可以對攻擊向量進行編碼繞過。
圖3 IDA中顯示的mshtml.dll的正則表達式
對瀏覽器的XSS過濾器或者廣義上的任意XSS過濾模塊來說,其功能是緩解XSS攻擊效果的,即若編寫不當?shù)腤eb應用存在XSS漏洞,使用XSS過濾器可以使常見攻擊向量失去作用。本節(jié)在分析規(guī)則缺陷特征基礎上,形式化定義規(guī)則缺陷向量、攻擊模板向量和場景模板向量,并面向瀏覽器XSS過濾器規(guī)則缺陷,生成測試場景和測試樣例,結合過濾成功率、誤報率和輸入損耗計算過濾能力,評價XSS過濾器的過濾能力。
為了使規(guī)則缺陷的概念具有一般性和普適性,從缺陷發(fā)生位置loc、繞過方法way、作用效果res這3個角度提取其特征,利用多元組進行表示,從而定義規(guī)則缺陷向量:
其中,向量的各個元素都是非空有限集合,在分析已有瀏覽器規(guī)則缺陷的基礎上,對上述元素再次細分,做如下定義,并通過序號進行替代量化,如表1所示。
表1 規(guī)則缺陷向量
在規(guī)則定義量化的基礎上,分析XSS攻擊向量結構特征[7],建立XSS攻擊模板向量。
多元組元素分別為HTML標簽外文本、HTML標簽、HTML標簽屬性名稱、HTML標簽屬性值、HTML標簽內(nèi)文本和注釋。在這種定義下,可以通用地描述各類XSS攻擊向量[8],以如下攻擊向量為例。
將上述攻擊向量根據(jù)sampleTemp形式化后,結果如下。
在測試系統(tǒng)中,場景是指后端服務器處理程序,一般使用PHP語言編寫,用于處理前端的Request。對場景結構特征進行分析,建立場景模板向量。
多元組元素分別為場景文本、場景判斷邏輯、場景處理邏輯和注釋。以一個測試場景(測試場景一般用PHP編寫)為例,形式化后的結構如圖4所示。
圖4 形式化后的測試場景
3.2.1 算法概述
在形式化定義規(guī)則缺陷向量、攻擊模板向量和場景模板向量的基礎上,可以面向規(guī)則缺陷生成測試樣例和測試場景,用于對瀏覽器XSS過濾器進行自動化測試。為了將生成過程表述清楚,定義向量的二元運算符模板嵌入符號。
在生成算法中,定義2個子算法,分別實現(xiàn)測試樣例生成子算法和測試場景生成子算法。
3.2.2 測試樣例生成
表2 基本測試集合攻擊向量
該集合計算過程如下:
結合模板嵌入符號可以計算其余3項內(nèi)容。
3.2.3 測試場景生成
測試場景是一個存在XSS漏洞的后端代碼,為了測試方便,所有場景基本邏輯都是將輸入返回到前端頁面,程序本身不加過濾或者轉義處理。在自動化測試過程中,為了進行對照實驗,同時設置基本測試場景和面向規(guī)則缺陷的測試場景進行測試。本系統(tǒng)測試場景一般使用PHP語言編寫。
其余幾項的計算方法如下
在自動化測試系統(tǒng)中,為了直觀地評價XSS過濾器的過濾能力(filter capacity),系統(tǒng)根據(jù)過濾成功率、誤報率、輸入損耗計算該值。下面分別介紹過濾能力及各個子參數(shù)的意義。
算法1 計算輸入損耗值的算法
2) if 過濾成功{
3) for (=0; 5) 如果返回值與請求的樣例值不相同{ 7) } 8) } 同時,在過濾成功情況下,需要考慮過濾的損失,為了合理評估各個測試樣例的過濾損失,需要考慮其樣例的長度。這里定義一個測試場景下,定量計算特定測試場景的過濾損失。 綜合上述定義,該值計算公式為(為測試場景個數(shù)) 為了驗證本文方法的有效性,本節(jié)構建了基于該方法的原型系統(tǒng)[10-11],對目前常用的3種瀏覽器(Internet Explorer、Chrome、Firefox)進行了測試,得到了測試結果。在測試過程中,基于該測試方法,找到了多個瀏覽器XSS過濾器未公開漏洞。 測試系統(tǒng)架構如圖5所示。 生成場景測試模塊:分為基本測試場景和面向規(guī)則缺陷的測試場景,使用PHP語言編寫后端場景邏輯,布置在Web服務器上[12]。 捕獲記錄模塊:捕獲頁面彈窗,并收集記錄[13],通過過濾能力計算公式計算。 本節(jié)利用原型系統(tǒng),選擇不同的瀏覽器進行自動化測試,驗證面向規(guī)則缺陷的瀏覽器XSS過濾器測試方法對過濾器的評估和測試水平。進一步地,將該方法用于對主流瀏覽器XSS過濾器的漏洞挖掘[14]。本節(jié)測試環(huán)境如下: 測試機器配置:Windows 10 1803 64 bit;python 2.7.13 64 bit; 測試服務器環(huán)境: Centos 7 32bit;php version 5.5.38; 測試瀏覽器版本:Chrome 68;Firefox 61;IE 11。 4.2.1 多場景測試結果 1) 基本測試場景 在基本測試場景中,測試代碼的基本邏輯是將瀏覽器通過GET方式傳參內(nèi)容回顯到前端頁面上,所以該場景Web應用有最為基礎的XSS漏洞。在基本測試樣例中,輸入基本測試樣例和混淆樣例進行測試,結果如表3所示。 表3 基本測試場景測試結果 上述實驗結果表明:對于基本的測試集合,不加任何其他邏輯的XSS漏洞,IE和Chrome的XSS過濾器能夠進行過濾。但在此基礎上,IE瀏覽器的XSS Filter過濾存在較為嚴重的誤報問題。 2) HTML解析規(guī)避場景 圖5 測試系統(tǒng)架構 規(guī)避HTML解析是本文提出的關于Chrome XSS Auditor實現(xiàn)上的一種規(guī)則缺陷,這里面向該規(guī)則缺陷編寫HTML解析規(guī)避場景進行測試。為了實現(xiàn)該場景,前端使用eval等動態(tài)執(zhí)行代碼函數(shù)。在這種情況下,測試結果如表4所示。 上述實驗結果表明:對于基于HTML解析規(guī)避的規(guī)則缺陷的場景,IE和Chrome的XSS過濾器都不能很好地進行過濾,并且Chrome的XSS Auditor對該測試樣例的過濾效果更差。 3) 加密傳輸場景 在加密傳輸?shù)哪承﹫鼍?,前端請求值與服務器端返回值不相同。瀏覽器XSS過濾器從實現(xiàn)原理上無法對這種存在XSS漏洞的情形進行處理,利用這種原理上的規(guī)則缺陷,生成一個前后端簡單的加密場景,測試結果如表5所示。 表4 HTML解析規(guī)避場景測試結果 表5 加密傳輸場景測試結果 上述實驗結果表明:對于基于加密傳輸?shù)囊?guī)則缺陷的場景,IE和Chrome的XSS過濾器完全無法進行防御。也就是說,如果Web應用涉及加密傳輸,瀏覽器XSS過濾器無法對該應用提供保護[15]。 4.2.2 瀏覽器XSS過濾器過濾能力分析 經(jīng)過上述實驗,根據(jù)瀏覽器XSS過濾器過濾能力的定義公式,可以計算得到上述3種瀏覽器XSS過濾器的過濾能力,結果如表6所示。 表6 不同瀏覽器的過濾能力 在分析多款瀏覽器XSS過濾器規(guī)則缺陷的基礎上,使用本文方法進行實際測試,發(fā)現(xiàn)多個瀏覽器XSS過濾器的未公開漏洞(CVE-2018-16415、CVE-2018-16734、CVE-2018- 16735等)。本文以國內(nèi)最新搜狗瀏覽器(截至測試,最新版本號為8.0.5.28300)為例,該瀏覽器XSS過濾器模塊存在處理零字節(jié)不嚴格問題,經(jīng)過合理構造,可以做到無場景限制繞過其過濾模塊(由于還未修補,這里并不直接給出攻擊向量),已經(jīng)通知廠商(搜狗安全應急響應中心)及時修補,該漏洞目前已經(jīng)被確認。 本文針對瀏覽器XSS過濾器提供了一種面向規(guī)則缺陷的多場景測試方法,該方法在分析瀏覽器XSS過濾器規(guī)則缺陷的基礎上,給出規(guī)則缺陷形式化定義及基于規(guī)則缺陷生成測試樣例和測試場景的算法。為了更加直觀地評估各個瀏覽器XSS過濾器的過濾能力,定量定義了瀏覽器XSS過濾器過濾能力,并給出了計算公式。本文實現(xiàn)了原型自動化測試系統(tǒng),選擇測試了部分主流瀏覽器XSS過濾器。實驗結果表明,所提方法具有良好的測試與評估XSS過濾器的能力,且該方法生成的測試樣例集合能夠發(fā)現(xiàn)未知漏洞。 [1] GUPTA BB, GUPTA S, GANGWAR S, et al. Meena PK (2015) cross-site scripting (XSS) abuse and defense: exploitation on several testing bed environments and its defense[J]. J Inf Privacy Secur 11(2): 118-136. [2] ROSS D. IE8 security part IV: the XSS filter[EB/OL]. http:// blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the- xss-filter.aspx, July 2008. [3] NAVA E, LINDSAY D. Abusing Internet Explorer 8's XSS filters[C]// BlackHat Europe. 2010. [4] BATES D, BARTH A, JACKSON C. Regular expressions considered harmful in client-side XSS filters[C]//19th International World Wide Web Conference. 2010. [5] LEKIES S, STOCK B, JOHNS M. 2014. A tale of the weaknesses of current client-side filtering[C]//Black Hat Europe. 2014. [6] 劉雅楠. Web前端攻擊及安全防護技術研究與實現(xiàn)[D]. 北京: 北京郵電大學,2017. LIU Y N. Research and implementation of Web front-end attack and protection technology[D]. Beijing: Beijing University of Posts and Telecommunications, 2017. [7] LIU J D. An improved XSS vulnerability detection method based on attack vector[C]//2018 International Conference on Modeling, Simulation and Analysis. 2018:6. [8] PAN J K, et al. Taint inference for cross-site scripting in context of URL rewriting and HTML Sanitization[J]. ETRI Journal, 2016(2): 376-386. [9] 黃娜娜, 萬良. 一種基于序列最小優(yōu)化算法的跨站腳本漏洞檢測技術[J]. 信息網(wǎng)絡安全,2017(10):55-62. HUANG N N, WAN L. A cross site script vulnerability detection technology based on sequential minimum optimization algorithm[J]. Netinfo Securi, 2017(10):55-62. [10] SALUNKE S S. Selenium Web driver in Python: learn with examples[M]. CreateSpace Independent Publishing Platform, 2014. [11] BEKRAR S, BEKRAR C, GROZ R, et al.Finding software vulnerabilities by smart fuzzing[C]//IEEE Fourth International Conference on Software Testing Verification and Validation. 2011. [12] ANASTASIOS S, NTANTOGIAN C, XENAKIS C. Bypassing XSS auditor: taking advantage of badly written PHP code[C]// IEEE International Symposium on Signal Processing and Information Technology. 2015: 290-295. [13] Taint inference for cross-site scripting in context of URL rewriting and HTML sanitization[J]. ETRI Journal, 2016, (2): 376-386. [14] LIU B W. XSS vulnerability scanning algorithm based on anti-filtering rules[C]//International Conference on Computer, Electronics and Communication Engineering. 2017. [15] LEKIES S, KOTOWICZ K, GROB S, et al. Code-reuse attacks for the Web: breaking cross-site scripting mitigations via script gadgets[C]//ACM SIGSAC Conference on Computer and Communications Security. 2017: 1709-1723. Rule-defect oriented browser XSS filter test method GUI Zhijie1,2, SHU Hui1,2 1. School of Cyberspace Security, Information Support Engineering University of PLA, Zhengzhou 450001, China 2. State Key Laboratory of Mathematical Engineering and Advanced Computing, Zhengzhou 450001, China In order to alleviate XSS (cross-site scripting) attacks, modern browsers use XSS filters for defense. It is difficult to effectively test and evaluate the security of browser XSS filters. The rule-defect is the defect and security problem in the implementation process of browser XSS filter. The formal definition, design test sample and scene generation algorithm were presented for browser XSS filter rule-defects. In order to quantitatively test and evaluate the filtering level of different browser XSS filters, combined with filtering success rate, false positive rate, input loss calculation filtering ability. Based on the proposed method, the prototype system is designed to automate the testing of several mainstream browser XSS filters, and the XSS filtering capabilities of different browsers are obtained. Further, after actual testing, the system also has the ability to discover undisclosed vulnerabilities. cross-site scripting attack, browser XSS filter, rule-defect, filtering capabilitiy TP309 A 10.11959/j.issn.2096-109x.2018093 桂智杰(1996-),男,安徽馬鞍山人,中國人民解放軍信息工程大學碩士生,主要研究方向為軟件漏洞挖掘與利用、逆向分析、嵌入式設備。 舒輝(1974-),男,江蘇鹽城人,中國人民解放軍信息工程大學教授,主要研究方向為逆向工程。 2018-10-10; 2018-11-05 桂智杰,2448405909@qq.com4 系統(tǒng)設計及實驗分析
4.1 系統(tǒng)設計與實現(xiàn)
4.2 實驗結果分析
4.3 未公開漏洞發(fā)現(xiàn)
5 結束語