APP下载

面向规则缺陷的浏览器XSS过滤器测试方法

2018-12-25桂智杰舒辉

网络与信息安全学报 2018年11期
关键词:样例过滤器浏览器

桂智杰,舒辉



面向规则缺陷的浏览器XSS过滤器测试方法

桂智杰1,2,舒辉1,2

(1. 中国人民解放军信息工程大学网络空间安全学院,河南 郑州 450001;2. 数学工程与先进计算国家重点实验室,河南 郑州 450001)

为了缓解跨站脚本(XSS,cross-site scripting)攻击,现代浏览器使用XSS过滤器进行防御,现有方法很难有效对浏览器XSS过滤器的安全性进行测试与评估。规则缺陷是浏览器XSS过滤器实现过程中的缺陷和安全问题。面向浏览器XSS过滤器规则缺陷,给出其形式化定义,设计测试样例和场景生成算法。为了定量测试与评估不同浏览器XSS过滤器的过滤水平,结合过滤成功率、误报率、输入损耗计算过滤能力。基于所提方法,设计原型系统对几种主流浏览器XSS过滤器进行自动化测试,得到了不同浏览器的XSS过滤能力。经过实际测试,该系统具备发现未公开漏洞的能力。

跨站脚本攻击;浏览器XSS过滤器;规则缺陷;过滤能力

1 引言

XSS攻击[1]是一种利用服务器端防御不严导致针对Web应用前端的攻击方式。在不加防御的情况下,攻击者利用XSS漏洞可以向用户发送恶意脚本,最终被浏览器解释执行,达到盗取cookie和登录账号等目的。到目前为止,攻击者发送的恶意脚本已经不限于JavaScript片段,而是包括HTML、SVG或者Flash等可能执行的任何其他类型的代码。

由于XSS攻击的影响,如何缓解XSS显得尤为重要。目前有如下几种防御或者缓解方式:浏览器XSS过滤器、内容安全策略、HTML sanitizers和WAF(Web application firewall)。除基于客户端浏览器XSS过滤器外,其余几种都有较为通用的绕过思路和一般性安全问题,并且有系统的评估和测试方法。然而,目前测试评估浏览器XSS过滤器的方法还比较欠缺,无法有效地综合评估现有XSS过滤器的过滤能力。在此基础上,挖掘浏览器XSS过滤器模块漏洞主要采取模糊测试的方法,该方法为了提高代码覆盖率,导致产生大量误用测试样例,漏洞挖掘效率低。

Microsoft从Internet Explorer 8开始实现了初代的XSS过滤器,称为XSS Filter。浏览器内核Webkit自身也内嵌一个XSS过滤器,称为XSS Auditor,故基于Webkit的浏览器(如Chrome、Safari等)使用的是XSS Auditor,国内的一些浏览器(如搜狗和猎豹)也是内置XSS Auditor。Firefox浏览器由于多种原因并没有XSS过滤器,在本文测试过程中主要用于对照实验。本文中浏览器XSS过滤器泛指所有浏览器XSS的过滤模块,XSS Filter特指Internet Explorer(IE)浏览器的XSS过滤模块,XSS Auditor特指基于Webkit内核浏览器的XSS过滤模块。

浏览器XSS过滤器研究领域已经有一些关于XSS Filter设计理念和实现原理的文章和综述。Ross在文献[2]介绍了IE 8浏览器XSS Filter的体系结构和实现思路。IE浏览器XSS Filter通过监控Request URL,基于正则表达式进行匹配XSS攻击向量。若匹配成功,则建立一个签名(Signature),并在HTTP Response中使用中性字符替换。

在IE XSS Filter提出后,Nava等在文献[3]给出了IE 8 XSS Filter滥用导致的问题。该方法利用IE XSS Filter正则替换存在的漏洞,注入虚假参数,导致XSS过滤器响应,对正常页面进行修改。

2010年Bates等在文献[4]中提出了基于正则表达式的XSS Filter存在的错报误报问题和过滤不严被绕过问题,并在Webkit中构建了XSS Auditor,在文章中说明了该模块的体系架构和技术原理。XSS Auditor作用于网页解析时,通过对Webkit解析出的Token序列进行审计,检测如内联事件处理程序和资源引用等危险属性,并在Response中进行匹配。

综上所述,在浏览器XSS过滤器研究领域,目前尚无很好的测试过滤器的方法和定量的测试结果。在评估的基础上,现有的浏览器XSS过滤器漏洞挖掘效率低,无法有效找出其潜在的安全问题。

针对上述问题,本文有如下贡献。

1) 通过源码审计或者逆向分析,分析目前2种主流浏览器XSS过滤器原理以及实现上的问题,列举了4种典型的规则缺陷。

2) 形式化定义规则缺陷,并且设计面向规则缺陷生成测试样例和测试场景的算法。考虑过滤成功率、误报率、输入损耗,给出计算浏览器XSS过滤器过滤能力的公式。

3) 设计与实现原型测试系统,对目前几种主流的浏览器进行实际测试,得到了不同浏览器XSS过滤器的过滤能力。

4) 在分析规则缺陷和实际测试的基础上,对浏览器XSS过滤器潜在的安全漏洞进行挖掘,找到了多个浏览器最新版XSS过滤器的未公开漏洞,并通知厂商及时修补。

2 浏览器XSS过滤器规则缺陷分析

本文主要探讨Chrome和Internet Explorer 2种浏览器,其XSS过滤器有着不同的实现方式。Chrome的XSS Auditor内嵌于Webkit,作用在HTML解析过程中,对HTML解析器生成的词语流进行过滤。Internet Explorer的XSS Filter实现在mshtml.dll动态链接库中,作用于服务器与客户端之间的数据请求与响应,对浏览器返回数据进行匹配过滤。

在对浏览器XSS过滤器模板进行分析和调试的基础上,下面介绍2种浏览器XSS过滤器的规则缺陷。

2.1 Chrome XSS Auditor规则缺陷

XSS Auditor作用于HTML语言的解释构建DOM过程,在词语生成后,Webkit调用XSS Auditor验证词语流来缓解XSS攻击。XSS Auditor模块架构如图1所示。

图1 XSS Auditor模块架构

HTML是将HTML从字节流解释构建为DOM树的过程,由HTML解释器(HTML Parser)负责实施。在Webkit实现过程中,HTML Parser模块中的HTMLDocumentParser类用于完成上述过程。在上述过程中,输入的资源首先从字节流转化为词语流(Tokens)。当词语生成后,XSS Auditor模块对词语进行过滤。经过对XSS Auditor实现源码的阅读与实际测试,发现存在2种典型的规则缺陷,并且这里的规则缺陷适用于所有使用Webkit的浏览器。

1) 规避HTML解析

正如上述XSS Auditor模块架构所描述的,该过滤器基于HTML解析过程,如果返回代码没有经过HTML解析,就完全不会启动XSS Auditor[5]。

这种情况在实际Web开发中时常出现,如Web应用前端页面中使用eval函数执行从服务器端返回的数据,此时就不进行HTML解析,不启动XSS Auditor,这样就从避免HTML解析的角度完全绕过XSS Auditor的过滤,这是一种XSS Auditor实现上的规则缺陷,利用该规则缺陷,在合适场景的情况下,将可以绕过该过滤器。

2) 请求代码与解析代码相异

在XSS Auditor作用中最为关键的步骤是比对解析后代码与请求是否相同,若相同,则判定存在反射性XSS攻击。从反射性XSS原理上来讲,就是通过攻击者发送恶意Request,然后浏览器解析服务器端的Response,输出到页面上,从而执行JavaScript代码。

想要绕过XSS Auditor,这是与XSS攻击原理相矛盾的。这种情况下较为巧妙的绕过思路:通过构造payload令请求代码与解析代码相异,达到绕过的目的。具体来说,有2种情况可以使用该规则缺陷:加密传输场景和HTML规范化渲染。

2.2 Internet Explorer规则缺陷

XSS Filter并不是作用于HTML页面解析,而是作用于客户端浏览器与服务器之间,拦截浏览器与服务器之间请求和返回的数据。XSS Filter模块架构如图2所示。

图2 XSS Filter模块架构

细化来看,XSS Filter的工作逻辑为:浏览器监控Request URL,通过正则表达式匹配Http Request。若匹配成功,则认为识别出一组XSS攻击向量,就建立一个签名。生成的Signature用于扫描HTTP Response,如果在响应中也扫描到XSS攻击向量,就返回修改。经过对mshtml.dll的逆向分析,该过滤器有如下2种规则缺陷。

1) 正则表达式非预期利用

在过滤器测试系统中,不仅要看其过滤的成功率,还要看误报率。Internet Explorer的XSS Filter采用正则表达式匹配Request,并且在Response中将匹配到的字符替换为中性字符,这是一种较为彻底的中和XSS攻击向量的方式。

正则表达式被期望用来寻找匹配攻击向量进行替换,通过构造可以导致正则表达式被非预期利用。若用户输入了匹配正则规则的Request参数,但这个参数并没有返回到页面,此时若页面已经有匹配项,XSS Filter无法识别是用户输入与页面已经存在的,就将页面中已有的匹配项做替换。

这种正则表达式的非预期使用将导致HTML页面被破坏[6],在场景合适的情况下,还会利用误报导致XSS。

2) 正则匹配规则绕过

XSS Filter的匹配是基于正则表达式的,该表达式在mshtml.dll动态链接库中。随着Internet Explorer的更新,这些表达式愈加复杂。图3显示了mshtml.dll动态链接库中部分正则表达式。这些表达式无法通盘考虑攻击向量的变化形式,可以对攻击向量进行编码绕过。

图3 IDA中显示的mshtml.dll的正则表达式

3 测试方法概述

对浏览器的XSS过滤器或者广义上的任意XSS过滤模块来说,其功能是缓解XSS攻击效果的,即若编写不当的Web应用存在XSS漏洞,使用XSS过滤器可以使常见攻击向量失去作用。本节在分析规则缺陷特征基础上,形式化定义规则缺陷向量、攻击模板向量和场景模板向量,并面向浏览器XSS过滤器规则缺陷,生成测试场景和测试样例,结合过滤成功率、误报率和输入损耗计算过滤能力,评价XSS过滤器的过滤能力。

3.1 形式化定义

为了使规则缺陷的概念具有一般性和普适性,从缺陷发生位置loc、绕过方法way、作用效果res这3个角度提取其特征,利用多元组进行表示,从而定义规则缺陷向量:

其中,向量的各个元素都是非空有限集合,在分析已有浏览器规则缺陷的基础上,对上述元素再次细分,做如下定义,并通过序号进行替代量化,如表1所示。

表1 规则缺陷向量

在规则定义量化的基础上,分析XSS攻击向量结构特征[7],建立XSS攻击模板向量。

多元组元素分别为HTML标签外文本、HTML标签、HTML标签属性名称、HTML标签属性值、HTML标签内文本和注释。在这种定义下,可以通用地描述各类XSS攻击向量[8],以如下攻击向量为例。

将上述攻击向量根据sampleTemp形式化后,结果如下。

在测试系统中,场景是指后端服务器处理程序,一般使用PHP语言编写,用于处理前端的Request。对场景结构特征进行分析,建立场景模板向量。

多元组元素分别为场景文本、场景判断逻辑、场景处理逻辑和注释。以一个测试场景(测试场景一般用PHP编写)为例,形式化后的结构如图4所示。

图4 形式化后的测试场景

3.2 测试样例和场景生成算法

3.2.1 算法概述

在形式化定义规则缺陷向量、攻击模板向量和场景模板向量的基础上,可以面向规则缺陷生成测试样例和测试场景,用于对浏览器XSS过滤器进行自动化测试。为了将生成过程表述清楚,定义向量的二元运算符模板嵌入符号。

在生成算法中,定义2个子算法,分别实现测试样例生成子算法和测试场景生成子算法。

3.2.2 测试样例生成

表2 基本测试集合攻击向量

该集合计算过程如下:

结合模板嵌入符号可以计算其余3项内容。

3.2.3 测试场景生成

测试场景是一个存在XSS漏洞的后端代码,为了测试方便,所有场景基本逻辑都是将输入返回到前端页面,程序本身不加过滤或者转义处理。在自动化测试过程中,为了进行对照实验,同时设置基本测试场景和面向规则缺陷的测试场景进行测试。本系统测试场景一般使用PHP语言编写。

其余几项的计算方法如下

3.3 计算过滤能力算法

在自动化测试系统中,为了直观地评价XSS过滤器的过滤能力(filter capacity),系统根据过滤成功率、误报率、输入损耗计算该值。下面分别介绍过滤能力及各个子参数的意义。

算法1 计算输入损耗值的算法

2) if 过滤成功{

3) for (=0;

5) 如果返回值与请求的样例值不相同{

7) }

8) }

同时,在过滤成功情况下,需要考虑过滤的损失,为了合理评估各个测试样例的过滤损失,需要考虑其样例的长度。这里定义一个测试场景下,定量计算特定测试场景的过滤损失。

综合上述定义,该值计算公式为(为测试场景个数)

4 系统设计及实验分析

为了验证本文方法的有效性,本节构建了基于该方法的原型系统[10-11],对目前常用的3种浏览器(Internet Explorer、Chrome、Firefox)进行了测试,得到了测试结果。在测试过程中,基于该测试方法,找到了多个浏览器XSS过滤器未公开漏洞。

4.1 系统设计与实现

测试系统架构如图5所示。

生成场景测试模块:分为基本测试场景和面向规则缺陷的测试场景,使用PHP语言编写后端场景逻辑,布置在Web服务器上[12]。

捕获记录模块:捕获页面弹窗,并收集记录[13],通过过滤能力计算公式计算。

4.2 实验结果分析

本节利用原型系统,选择不同的浏览器进行自动化测试,验证面向规则缺陷的浏览器XSS过滤器测试方法对过滤器的评估和测试水平。进一步地,将该方法用于对主流浏览器XSS过滤器的漏洞挖掘[14]。本节测试环境如下:

测试机器配置:Windows 10 1803 64 bit;python 2.7.13 64 bit;

测试服务器环境: Centos 7 32bit;php version 5.5.38;

测试浏览器版本:Chrome 68;Firefox 61;IE 11。

4.2.1 多场景测试结果

1) 基本测试场景

在基本测试场景中,测试代码的基本逻辑是将浏览器通过GET方式传参内容回显到前端页面上,所以该场景Web应用有最为基础的XSS漏洞。在基本测试样例中,输入基本测试样例和混淆样例进行测试,结果如表3所示。

表3 基本测试场景测试结果

上述实验结果表明:对于基本的测试集合,不加任何其他逻辑的XSS漏洞,IE和Chrome的XSS过滤器能够进行过滤。但在此基础上,IE浏览器的XSS Filter过滤存在较为严重的误报问题。

2) HTML解析规避场景

图5 测试系统架构

规避HTML解析是本文提出的关于Chrome XSS Auditor实现上的一种规则缺陷,这里面向该规则缺陷编写HTML解析规避场景进行测试。为了实现该场景,前端使用eval等动态执行代码函数。在这种情况下,测试结果如表4所示。

上述实验结果表明:对于基于HTML解析规避的规则缺陷的场景,IE和Chrome的XSS过滤器都不能很好地进行过滤,并且Chrome的XSS Auditor对该测试样例的过滤效果更差。

3) 加密传输场景

在加密传输的某些场景,前端请求值与服务器端返回值不相同。浏览器XSS过滤器从实现原理上无法对这种存在XSS漏洞的情形进行处理,利用这种原理上的规则缺陷,生成一个前后端简单的加密场景,测试结果如表5所示。

表4 HTML解析规避场景测试结果

表5 加密传输场景测试结果

上述实验结果表明:对于基于加密传输的规则缺陷的场景,IE和Chrome的XSS过滤器完全无法进行防御。也就是说,如果Web应用涉及加密传输,浏览器XSS过滤器无法对该应用提供保护[15]。

4.2.2 浏览器XSS过滤器过滤能力分析

经过上述实验,根据浏览器XSS过滤器过滤能力的定义公式,可以计算得到上述3种浏览器XSS过滤器的过滤能力,结果如表6所示。

表6 不同浏览器的过滤能力

4.3 未公开漏洞发现

在分析多款浏览器XSS过滤器规则缺陷的基础上,使用本文方法进行实际测试,发现多个浏览器XSS过滤器的未公开漏洞(CVE-2018-16415、CVE-2018-16734、CVE-2018- 16735等)。本文以国内最新搜狗浏览器(截至测试,最新版本号为8.0.5.28300)为例,该浏览器XSS过滤器模块存在处理零字节不严格问题,经过合理构造,可以做到无场景限制绕过其过滤模块(由于还未修补,这里并不直接给出攻击向量),已经通知厂商(搜狗安全应急响应中心)及时修补,该漏洞目前已经被确认。

5 结束语

本文针对浏览器XSS过滤器提供了一种面向规则缺陷的多场景测试方法,该方法在分析浏览器XSS过滤器规则缺陷的基础上,给出规则缺陷形式化定义及基于规则缺陷生成测试样例和测试场景的算法。为了更加直观地评估各个浏览器XSS过滤器的过滤能力,定量定义了浏览器XSS过滤器过滤能力,并给出了计算公式。本文实现了原型自动化测试系统,选择测试了部分主流浏览器XSS过滤器。实验结果表明,所提方法具有良好的测试与评估XSS过滤器的能力,且该方法生成的测试样例集合能够发现未知漏洞。

[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前端攻击及安全防护技术研究与实现[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] 黄娜娜, 万良. 一种基于序列最小优化算法的跨站脚本漏洞检测技术[J]. 信息网络安全,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.com

猜你喜欢

样例过滤器浏览器
样例复杂度与学习形式对不同数量样例学习的影响
样例呈现方式对概念训练类别表征的影响
“样例教学”在小学高年级数学中的应用
反浏览器指纹追踪
支持过滤器的REST模型研究与实现
声音过滤器
环球浏览器
再见,那些年我们嘲笑过的IE浏览器
样例教学法回归课堂教学之新认识
基于LOGO!的空气过滤器自洁控制系统