一种XSS漏洞检测方法的设计与实现
左丹丹 王 丹 付利华
【摘 要】摘 要 跨站脚本(XSS)漏洞是近年来较为流行的一种漏洞,随着Ajax技术的广泛应用,其危害性及快速的传播能力也越来越强。现有的漏洞检测技术没有充分对该类漏洞的漏洞注入点进行研究,使用的漏洞检测技术也没有充分考虑测试请求后响应的页面,导致漏洞检测率相对较低。针对现有漏洞检测技术的不足之处,加强对隐含页面的DOM结构分析,提出基于DOM状态改变的方式查找漏洞注入点的方法。在此基础上提出基于页面交互点相关的漏洞检测方法,设计并实现了漏洞检测原型系统。实验证明,该原型系统能够找到更多的漏洞注入点,能有效地提高漏洞检测率。 【期刊名称】计算机应用与软件 【年(卷),期】2016(033)007 【总页数】5
【关键词】关键词 跨站脚本漏洞 漏洞注入点 隐含页面 漏洞检测
0 引 言
Web应用程序的漏洞已经成为互联网最严重的安全隐患之一。SANS研究所最新的数据显示高达60%互联网攻击都来自于Web应用程序[1]。常见的漏洞攻击包括跨站脚本漏洞、SQL注入漏洞、跨路请求伪造攻击,而跨站脚本漏洞是其中最突出的一种。在2013年OWASP公布的Web漏洞榜单中,跨站脚本漏洞(XSS)位居第三名[2]。
增强Web应用系统漏洞检测能力、减少漏报的关键问题之一是如何充分地对漏洞注入点进行分析、识别和提取。然而,由于JavaScript语言的动态特性[3],
隐含页面内容的大量存在[4],导致漏洞注入点并不能充分地被查找到用来进行漏洞的检测。现有的XSS漏洞检测针对漏洞注入点的查找主要关注的是当前检测的静态页面,关注的对象一般都是表单输入和超链接[5-8],并没有考虑那些隐含页面可能存在的漏洞注入点。此外,现有的漏洞测试技术一般都是通过分析服务器响应后的页面进行漏洞检测的判断[9],实际上这种方法是有待改进的。因为对于存在存储型跨站脚本漏洞的网页来说,该方法的测试用例对应的输出结果不一定显示在服务器响应后的跳转页面或当前测试请求注入的页面,也有可能在整个Web应用的其他相关页面,因此存在漏报。
本文提出基于DOM状态改变[10]的方式进行漏洞注入点的查找方法。这种查找漏洞注入点的方法的特点是不仅考虑当前指定URL的静态页面,还考虑了其对应的隐含页面。 同时,本文提出基于页面交互点相关的漏洞检测方法,充分分析了测试请求注入Web应用后相关的页面。该方法对于存储型跨站脚本漏洞检测比较明显。 本文的主要贡献如下:
(1) 提出了基于DOM状态改变的方式进行XSS漏洞注入点的查找方法,能够查找到更多的隐含页面的漏洞注入点。
(2) 提出了基于页面交互点相关的方法进行漏洞的检测,该方法主要是针对存储型跨站脚本漏洞,能够减少漏洞漏报率。
(3) 基于上述理论设计并实现了XSS漏洞检测工具的原型系统,并对原型系统做了真实的实验评估,效果良好。
1 相关工作
一般将XSS漏洞分为三类:包括反射性跨站脚本漏洞、存储型跨站脚本漏洞、
基于DOM的跨站脚本漏洞。
(1) 反射型跨站脚本漏洞(Reflected XSS),也称作非持久性跨站脚本漏洞。这种类型的跨站脚本漏洞最常见的形式是攻击者通过特定手法,诱使用户去访问包含恶意代码的URL。当受害者浏览这些超链接时,恶意代码就会在受害者的浏览器上执行。
(2) 存储型跨站脚本漏洞(Stored XSS),是指通过提交恶意数据到存储器,当包含这些恶意数据的网页被用户浏览到时,用户便会受到漏洞攻击。Stored XSS一般出现在网站的留言、评论、博客日志等交互处。
(3) 基于DOM型的跨站脚本漏洞(DOM based XSS),一般称之为本地跨站脚本的攻击,是指客户端的脚本程序可以通过DOM(Document Object Model)动态地检查和修改页面内容。浏览器用户可以操纵DOM中的对象,比如URL、Location、refer等。如果用户在客户端输入的数据包含了恶意脚本,而这些数据没有经过有效的输入验证机制,就可能会产生基于DOM的XSS漏洞。 在Web 2.0环境下的漏洞注入点的查找方面,文献[5-8]认为漏洞的注入点为表单和含有参数的URL。文献[11-13]漏洞注入点提取的思路主要是通过基于URL的广度爬虫算法获取相关页面,并通过正则表达式提出相关注入点。 文献[6,7]认为造成漏洞的值空间(相当于本文中的漏洞注入点)不仅包括表单输入数据、URL类数据,还包括客户端与服务器交互过程中交换的数据信息。与以上文献相比,本文提出的基于DOM状态改变的方式查找漏洞注入点的方法不仅考虑了待测页面的漏洞注入点,还考虑了其隐含页面的漏洞注入点。
在相关的漏洞测试方法研究方面,文献[11,13]使用的漏洞测试模块主要是通过构造数据包发送到服务器,然后分析返回的代码从而判定Web的安全性。