Xss检测方法和设备的制作方法

文档序号:6575238阅读:198来源:国知局
专利名称:Xss检测方法和设备的制作方法
技术领域
本发明涉及网站安全扫描和分析领域,尤其涉及一种用于对网站中的网页是否具 有XSS (跨站脚本攻击)漏洞进行检测的方法和设备。
背景技术
从二十世纪九十年代开始,XSS漏洞开始被披露,其发现和利用为人们所关注。 XSS,即跨站脚本攻击,是利用网站漏洞从用户那里恶意盗取信息的方式之一。用户在浏览 网站、使用即时通讯软件、或者在阅读电子邮件时,通常会点击其中的链接。恶意攻击者在 链接中插入恶意代码,当用户点击这些链接时,生成相应网页的网络服务器由于没有过滤 这些恶意代码而具有XSS漏洞,因此生成包含恶意代码的页面,而这个页面看起来就像是 那个网站应当生成的合法页面一样,从而导致这些恶意代码最终在用户计算机上执行,绕 过用户本地的安全机制来盗取用户信息,甚至在用户机器上进行挂马攻击而远程获得用户 机器的控制权等。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀 疑它的合法性。XSS在目前互联网站点上普遍存在,给直接用户带来极大的威胁。近年来, XSS—举超过缓冲区溢出而成为最流行的安全漏洞之一。大约至少有68%的网站存在XSS 漏洞。检测XSS从检测的途径来看可分为远程主动检测和本地被动检测两种方式。本地 被动检测技术主要应用在浏览器里,目前IE8,firefox的noscript插件都支持XSS检测。 远程主动检测则主要应用在远程漏洞扫描器类的检测类工具里。本发明主要是针对远程检 测技术进行改进。随着网站程序员对安全的认识也有所增强,会对用户输入的参数进行一些特别处 理,这部分特别处理给远程扫描XSS漏洞带来了一定的难度,尤其是更容易给远程扫描带 来误报。目前已经提出了几种用于远程扫描网络服务器的XSS漏洞的方法。美国专利US 7343626B1公开了一种测试网站是否具有XSS漏洞的自动化方法和系统,其中包括对于 网络服务器的网页,找出其所有参数_值对;对于每个参数_值对,构造特定的跟踪值,并 且将构造的参数-值对提交到网络服务器以请求网页;如果返回的网页中包含特定的跟踪 值,则说明该网页可能具有XSS漏洞;此时基于网页中特定跟踪值出现的位置,构造包括脚 本的第二特定跟踪值,并再次提交到网络服务器,并根据返回的网页是否执行该脚本来判 断网页是否具有XSS漏洞。然而,美国专利US 7343626B1所公开的方法需要两次提交参 数_值对,因此执行效率不高。此外该方法还需要基于特定跟踪值出现的位置来构造包括 脚本的第二特定跟踪值,由于随着网络技术的发展,XSS漏洞可能以其他位置出现,这也会 导致该方法不能完整地检测出XSS漏洞。一些开源软件中也公开了其它用于远程检测XSS漏洞的方法,其大致原理如下, 对于某个要检测的网页,首先确定该网页接受的参数-值对,然后对于每个参数,构造特定 的值,并且利用这些特定构造的参数-值对向网络服务器请求该网页,最后根据返回信息来判断漏洞是否存在。对返回信息的分析方法,这些方法采用的是基于正则表达式的匹配。 在这些开源软件的检测方法中,通过基于特征串的正则表达式匹配来分析返回信息以判断 是否具有XSS漏洞,这在某些情况下会产生一些误报或者漏报。此外,在基于DOM的XSS漏 洞中,该方法无法判断漏洞能否被触发。例如,返回的网页虽然包含了构造的特定值,但是 该特定值不会被执行时,该方法仍然认为网页存在XSS漏洞,但是实际上并非如此。可以看出,在本技术领域,还没有一种方法和设备可以完全且高效地检测XSS漏 洞,本发明力图通过对开源软件中所提出的方法进行改进来提供一种完全自动化的、可以 全面且高效地检测XSS漏洞的方案
发明内容

本发明的申请人发现,XSS漏洞的最终结果是要在被攻击者的机器上执行非预期 的脚本代码,因此,如果利用javascript解析引擎来确定非预期的脚步代码是否在被攻击 者的机器上执行,则可以非常全面地检测XSS漏洞。本发明基于此做出。根据本发明的一个方面,提供了一种检测网页中的XSS漏洞的XSS漏洞检测方 法,包括步骤确定网页可接收的参数-值对集合;以及为所述参数-值对集合中的每个参 数-值对构造在值中插入了特定脚本的参数-值对;基于该插入了特定脚本的参数-值对 来组装对应于所述网页的URL ;获取对应于所组装的URL的动态网页内容;以及模拟执行所 获取的动态网页内容,如果执行了所述特定脚本,则认为所述网页中对该参数的处理存在 XSS漏洞。根据本发明的一个实施例,在所述模拟执行所获取的动态网页内容的步骤中,使 用脚本解析引擎来模拟执行所述网页内容中,该脚本解析引擎被构造为基于特定脚本是否 被触发来确定是否存在XSS漏洞。根据本发明的另一方面,提供了一种检测网页中的XSS漏洞的XSS漏洞检测设备, 包括网页参数-值对集合确定装置,用于确定所述网页可以接收的参数-值对集合;测试 URL组装装置,为所述参数-值对集合中的每个参数-值对组装测试用的URL,其中在组织 所述测试用的URL时,在所述值中插入特定的脚本;请求和接收装置,用于将所述测试用的 URL发送到网络服务器,并接收从所述网络服务器返回的网页内容;以及模拟执行装置,用 于模拟执行所述网页内容,并且在所述特定脚本被执行时,确定相应参数存在XSS漏洞。根据本发明的一个实施例,该XSS漏洞检测设备还包括脚本解析引擎,所述模拟 执行装置在模拟执行所述网页内容时使用所述脚本解析引擎来执行脚本,所述脚本解析引 擎根据所述特定脚本是否被触发来确定所述相应参数是否存在XSS漏洞。本发明通过组装具有特定脚本的参数值的URL,并检测该URL返回的动态网页内 容是否会触发该特定脚本来确定该动态网页是否具有XSS漏洞。和传统上仅仅通过判断相 应内容是否会出现在动态网页中的特征匹配相比,其准确度更高而且检测更加全面。


通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。其中在附图中,参考数字之后的字母标记指示多个相同的部件,当泛指这些部件时,将省略其最后的字母标记。在附 图中图1示出了根据本发明实施例的、用于检测网页的XSS漏洞的方法的流程图;图2示出了根据本发明实施例的、用于确定网络服务器对某个参数的处理是否存 在XSS漏洞的方法的流程图;以及
图3示出了根据本发明实施例的、用于检测网页的XSS漏洞的设备的示意图。 具体实施例下面结合附图和具体的实施方式对本发明作进一步的描述。图1示出了根据本发明实施例的、用于检测网页XSS漏洞的方法的流程图。在步骤Sl 10中,获取要进行XSS漏洞检测的网页的URL,然后在步骤S120中,确定 该网页能够接收的参数-值对集合。根据XSS的原理,具有XSS漏洞的网页为网络服务器 动态生成的网页,因此其通常可以根据HTTP协议接收一些参数和相应的值。例如如果要检 测的网页 URL 为 http//www. test, com/test, asp ? id = l&name = test,则可以确定该 网页可以接收的参数包括id和name。可以通过各种方式来确定动态URL可以接收的参数 集,如通过监视访问该动态网页的详细URL内容,根据HTTP协议检测传递到网络服务器的 FORM表单的内容等。所以这些都在本发明的保护范围之内。在步骤S120获取了该参数_值对集合之后,在步骤S130,选取该集合中的第一组 参数-值对,然后在步骤S140中,对所选择的参数-值对中的值进行修改,以组装测试用的 URL。具体而言,根据本发明的实施例,在该值中嵌入特定的javascript脚本,如果该动态 网页存在XSS漏洞,则该嵌入的javascript脚本将未被网络服务器所处理,并存在于返回 的动态网页内容中。本发明通过监控该javascript脚本是否会存在于动态网页中并被执 行来确定该网页是否存在XSS漏洞。为了防止所嵌入的javascript脚本和本来动态网页 中就有的javascript脚本相冲突,因此所嵌入的javascript脚本应当是唯一的,例如其中 包含了唯一的脚本参数内容。另外,由于javascript脚本中的alert函数的作用是弹出消 息框而不会对文档内容产生其它影响,因此,在本发明的进一步实施例中,将alert函数嵌 入到所选择的参数-值对中。例如,在上面给出的URL http://www. test, com/test, asp ? id = l&name = test 中,在对参数id进行修改时,可以在其对应的值中嵌入函数<SCript>alert(0)</ script〉。因此,所构造得到的URL变为http://www. test, com/test, asp ? id = l<script>alert(0)</script>&name = test。可选的是,根据HTTP协议,提交给网络服务器的参数并没有先后次序,因此,可以 修改参数的前后次序以把嵌入值放到最后,即http://www.test.com/test.asp ? name = test&id = l<script>alert (0) </
SCTTQt> ο另外,在修改参数值时,除了添加javascript脚本之外,还可以添加一些特殊字 符,如“>,,、“〈,,和“% 20”等,因此,构造出的URL还可以是
http://www. test, com /test, asp ? name = test&id =1 % 20<script>alert (0) </script> 或者http://www. test, com /test, asp ? name = test&id =1 % 20><script>alert (0) </script> 等。此外,在修改参数值时,为了确保对该参数的处理存在XSS漏洞时,所插入的脚本 能被javascript解析引擎所执行,还需考虑html语法的恢复问题,例如,如果动态网页生 成的html代码为<pre>你输入的名字是test</pre> 其中test是由动态网页根据参数id的值而产生的。在这种情况下,如果仅仅 在参数id的值中添加javascript脚本,即id = <script>alert (0)〈/script〉,则此时 由动态网页生成的javascript脚本包含在〈preX/pre〉的html标记符中,并不能由 javascript解析引擎来执行,为此,我们需要将参数id值中插入的脚本修改为id = </ preXscript>alert(0)</scriptXpre>,这样动态网页生成的html代码变为<pre> 入的名</pre><script>alert (0) </script><pre>从而确保插入的脚本(如alert函数)能被解析引擎执行。上面的<pre>标签只是一个例子,还存在其他可能会导致插入的脚本的情况, 因此,在参数值中插入javascript脚本时,还必须考虑html语法的恢复问题,以确保在 对参数的处理存在XSS漏洞时,所插入的javascript脚本会被执行。因此,需要在插入 javascript脚本时进行多种方式的插入,从而更精确地确定XSS漏洞。在步骤S140组装了测试用的URL之后,在步骤S150将组装好的URL发送到网络 服务器以请求动态网页内容,并且在步骤S160获取作为响应的动态网页内容。随后,在步 骤S170中,利用根据本发明的javascript解析引擎来模拟执行动态网页内容,并根据在步 骤S140中插入的特定脚本是否有javascript解析引擎执行来确定该参数是否具有XSS漏 洞。下面将参考图2详细描述步骤S170中的处理,这里不再进行赘述。在步骤S170对该参数是否存在XSS漏洞进行了判断之后,在步骤S180确定参数 集中是否还有需要进行判断的参数,如果有,则在步骤S190获取参数集中下一个要处理的 参数_值对,并且返回到步骤S140来处理该参数-值对。如果在步骤S180中判断没有要处 理的参数,则在步骤S210输出对参数集中的所有参数的处理结果,并结束对该网页的XSS 检测。应当注意的是,在上述步骤S140中,已经说明了针对一个参数可以组装出多个特 定URL。根据本发明的另一个实施例,可以重复执行步骤S140-S170来将每个特别组装的 URL发送到网络服务器以确定网页是否存在XSS漏洞。这可以更全面地对网页进行测试。图2示出了在步骤S170中执行的、用于确定网络服务器对某个参数的处理是否存 在XSS漏洞的方法1700的流程图。在步骤S1710中,将所获取的网页内容转换为DOM模型。为了在用户端呈现网页 内容,将网页内容转换为DOM模型是常用的技术手段之一,本发明需要模拟执行所获取的 网页内容,因此首先将网页内容转换为DOM模型。随后在步骤S1720中,利用根据本发明的 javascript解析引擎来执行DOM模型中的javascript脚本。如上所述,在针对某个参数组 装特定URL时,已经把特定的javascript脚本插入到参数值中了。因此,根据在步骤S1730中,根据javascript解析引擎是否执行了该特定的脚本来判断网络服务器针对该参数的 处理是否存在XSS漏洞。如果该特定脚本被触发执行了,则说明存在XSS漏洞(S1740),否 则则说明不存在XSS漏洞(S1750)。此后,在步骤S1760中记录对该参数的处理是否存在 XSS漏洞的判断,并且结束该方法。应当注意的是,图2所示方法的主要目的是利用根据本发明的javascript解析引 擎来模拟执行返回的网页内容,因此所有可以对网页内容进行模拟执行的方式都在本发明 的保护范围之内。另外,如上所述,在javascript脚本中,alert函数的功能为弹出一个提示窗口, 其不会对网页内容产生影响,因此,优选地,插入到参数值中的脚本为alert函数,而根据 本发明的javascript解析引擎也对alert函数的处理进行修改,以便根据alert函数是否 被触发来确定对该参数的处理是否存在XSS漏洞。图3示出了根据本发明实施例的、用于检测网页的XSS漏洞的XSS漏洞检测设备 的示意图。
如图3所示,XSS漏洞检测设备300包括网页参数-值对集合确定装置310、 测试URL组装装置320、请求发送装置330、网页内容获取装置340、模拟执行装置350、 javascript解析引擎360和记录装置370。网页参数-值对集合确定装置310确定某个动态网页可以接收的参数_值对集 合,如上面参考步骤SllO所述的那样,可以通过各种方式来确定动态网页可以接收的参 数_值对集合。随后网页参数_值对集合确定装置310将所确定的参数_值对集合发送到 测试URL组装装置320。测试URL组装装置320为所接收到的参数_值对集合中的每个参数_值对构 造测试用的URL。在为某个参数-值对构造测试URL时,测试URL组装装置320参考本 发明定制的javascript引擎360在值中插入相应的javascript脚本,诸如上面所述的 <script>alert(0)〈/script〉等,以便如果该参数存在XSS漏洞,则该相应的javascript脚 本就会在javascript引擎360中触发。因此,本发明的javascript解析引擎360中提供 了要插入到值中的javascript脚本。如上所述,测试URL组装装置320可以为一个参数-值对构造出多个包含特定 javascript脚本和不同特殊字符的URL,并且可以分别对这些组装的URL进行测试。请求发送装置330接收由测试URL组装装置320组装的URL,并且将该URL发送到 网络服务器400以请求动态网页,作为响应,网络服务器400将所生成的动态网页发送到网 页内容获取装置340。网页内容获取装置获取该动态网页,并且将动态网页内容发送给模拟 执行装置250以检测该动态网页是否具有XSS漏洞。在实践中,可以将请求发送装置330和网页内容获取装置340的功能并入到同一 个请求和接收装置中,以统一执行网络相关功能。这些都在本发明的保护范围之内。模拟执行装置250以各种方式模拟执行所获取的网页内容,例如,可以诸如IE、 Firefox或者Chrome之类浏览器内核的方式来处理网页内容,并且将网页内容转换为DOM 模型,然后利用javascript解析引擎360来执行网页中的javascript脚本。Javascript解析引擎360在执行javascript脚本时,判断所提供的、要插入到值 中的javascript脚本是否被触发了,如果被触发了,则认为网络服务器对该动态网页中的参数的处理存在XSS漏洞,如果未被触发,则认为对该参数的处理不存在XSS漏洞。随后, javascript解析引擎360将该确定结果发送到记录装置370进行记录。在上述XSS漏洞检测设备中,公开了为一个动态网页进行XSS漏洞检测的方式。这 个XSS漏洞检测设备可以并入到网站安全扫描系统或者网络扫描系统中,以便为网站安全 扫描系统或者网络扫描系统所扫描的每个动态网页进行XSS漏洞检测,从而为某个或者多 个网站进行XSS漏洞扫描。由于本发明中的javascript解析引擎360的主要目的就是为了判断特定的 javascript函数是否在返回的动态网页中被触发了,因此,为了提高javascript解析引擎 360的执行效率,可以对其它javascript函数的执行进行简化处理,例如仅仅实现其接口 而不执行任何实质性的操作,从而加快模拟执行动态网页内容的速度。根据本发明的XSS漏洞检测方法和设备通过组装具有特定脚本的参数值 的URL, 并检测该URL返回的动态网页内容是否会触发该特定脚本来确定该动态网页是否具有XSS 漏洞。和传统上仅仅通过判断相应内容是否会出现在动态网页中的特征匹配相比,其准确 度更高。另外,随着AJAX技术等的发展,客户端网页内容呈现和处理方式变得日益复杂,传 统的特征匹配方式不能准确判断XSS漏洞。由于XSS漏洞最终会通过执行脚本来进行,因 此本发明可以很好地应用于富客户端的网页内容中。应该注意的是,上述实施例对本发明进行说明而不是对本发明进行限制,并且本 领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求 中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存 在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个 这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机 来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬 件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释 为名称。
权利要求
一种检测网页中的XSS漏洞的XSS漏洞检测方法,包括步骤确定网页可接收的参数 值对集合;以及为所述参数 值对集合中的每个参数 值对构造在值中插入了特定脚本的参数 值对;基于该插入了特定脚本的参数 值对来组装对应于所述网页的URL;获取对应于所组装的URL的动态网页内容;以及模拟执行所获取的动态网页内容,如果执行了所述特定脚本,则认为所述网页中对该参数的处理存在XSS漏洞。
2.如权利要求1所述的XSS漏洞检测方法,其中在所述模拟执行所获取的动态网页内 容的步骤中,使用脚本解析引擎来模拟执行所述网页内容中,该脚本解析引擎被构造为基 于特定脚本是否被触发来确定是否存在XSS漏洞。
3.如上述权利要求任一个所述的XSS漏洞检测方法,其中所述特定脚本为alert函数。
4.如上述权利要求任一个所述的XSS漏洞检测方法,其中在所述组装对应于网页的 URL的步骤中,通过在URL中改变参数-值对次序和插入其它特殊代码来组装多个URL,并 且为所述多个URL分别执行所述获取动态网页内容和模拟执行动态网页内容的步骤。
5.如上述权利要求任一个所述的XSS漏洞检测方法,还包括步骤 记录所述参数-值对集合中的每个参数是否存在XSS漏洞。
6.一种检测网页中的XSS漏洞的XSS漏洞检测设备,包括网页参数_值对集合确定装置,用于确定所述网页可以接收的参数_值对集合; 测试URL组装装置,为所述参数_值对集合中的每个参数_值对组装测试用的URL,其 中在组织所述测试用的URL时,在所述值中插入特定的脚本;请求和接收装置,用于将所述测试用的URL发送到网络服务器,并接收从所述网络服 务器返回的网页内容;以及模拟执行装置,用于模拟执行所述网页内容,并且在所述特定脚本被执行时,确定相应 参数存在XSS漏洞。
7.如权利要求6所述的XSS漏洞检测设备,还包括脚本解析引擎,所述模拟执行装置在模拟执行所述网页内容时使用所述脚本解析引擎 来执行脚本,所述脚本解析引擎根据所述特定脚本是否被触发来确定所述相应参数是否存 在XSS漏洞。
8.如权利要求6或者7所述的XSS漏洞检测设备,其中所述特定脚本为alert函数。
9.如权利要求6至8中任一项所述的XSS漏洞检测设备,其中所述测试URL组装装置 在为某个参数_值对组装测试用的URL时,通过在URL中改变参数-值对次序和插入其它 特殊代码来组装多个URL,并且将每个组装的URL发送给所述请求和接收装置,以便为每个 组装的URL进行XSS漏洞。
10.如权利要求6至9中任一项所述的XSS漏洞检测设备,还包括记录装置,记录所述 参数-值对集合中的每个参数是否存在XSS漏洞。
11.一种网站安全扫描系统,包括如权利要求6-9中的任一项所述的XSS漏洞检测设备。
12.—种网络扫描系统,包括如权利要求6-9中的任一项所述的XSS漏洞检测设备。
全文摘要
本发明公开了一种检测网页中的XSS漏洞的XSS漏洞检测方法,包括为网页可接收的参数-值对集合中的每个参数-值对构造在值中插入了特定脚本的参数-值对,基于该插入了特定脚本的参数-值对来组装对应于所述网页的URL,获取对应于所组装的URL的动态网页内容,以及模拟执行所获取的动态网页内容,如果执行了所述特定脚本,则认为所述网页中对该参数的处理存在XSS漏洞。本发明还公开了一种相应的XSS漏洞检测设备和使用该设备的网站安全扫描系统和网络扫描系统。
文档编号G06F11/36GK101964025SQ20091008978
公开日2011年2月2日 申请日期2009年7月23日 优先权日2009年7月23日
发明者刘光旭, 刘晓霞, 周大, 温玉杰, 王晓明 申请人:中联绿盟信息技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1