江 导
(顺德职业技术学院 广东 528000)
WEB 浏览器是一个软件程序,用于与 WWW 建立联结,并与之进行通信,它可以在 WWW 系统中根据链接确定信息资源的位置,并将用户感兴趣的信息资源取回来,对 HTML 文件进行解释,然后将文字图像显示出来,或者将多媒体信息还原出来。浏览器主要包括用户界面、浏览器引擎、网络、JS解释器、数据存储等组件。目前典型的 WEB 浏览器有 Internet Explorer、360极速浏览器、360安全浏览器、搜狗浏览器、猎豹浏览器等,它们适用于各种不同的环境。
WEB漏洞:
WEB应用程序的正常运行,涉及到客户端浏览器、网络协议传输、服务器响应、数据库査询等许多方面。其中无论哪一方面出现漏洞,均可能导致WEB安全问题。漏洞即某个程序(包括操作系统)在设计时未考虑周全,当程序遇到一个看似合理,但实际无法处理的问题时,引发的不可预见的错误。系统漏洞又称安全缺陷,如漏洞被恶意用户利用,会造成信息泄漏,如黑客攻击网站即利用网络服务器操作系统的漏洞。任何事物都非十全十美,作为应用于桌面的操作系统—Windows 以及运行于该环境中的 WEB 浏览器也是如此。这直接危害到我们使用计算机的安全行为,漏洞受病毒及恶意代码利用,容易导致巨大损失。OWASP于2010年发布的Top 10应用程序,其中涉及到WEB应用程序的方面的有:客户端的注入漏洞、跨站脚本漏洞、服务端的授权管理、安全误配置、不安全的密码存储、网络传输层的失效的 URL访问重定向、弱保护等。
跨站脚本是服务端代码漏洞产生的问题,因此唯有从服务端入手才能彻底解决。下面我们就主要讨论浏览器XSS动态检测技术。
动态检测技术之所以称为“动态”,是指它不直接在文本层次分析可执行代码的行为,而是在代码运行时进行动态调试、分析。动态检测技术将代码语义分析工作交给现成的代码解析器,可以极大降低系统复杂度,避免语法语义分析不到位导致的误判。
在XSS攻击检测领域,动态检测意味着浏览器端XSS过滤器不再是一个相对独立的附加組件,而是与浏览器各组件结合更紧密的一个安全机制。从浏览器架构的角度看,动态检测技术工作在HTML解析器和Javascript解析器之间,即在HTML解析器生成的文档对象模型(Document Object Model,简称DOM)树中检测脚本节点,完成后才将DOM树中的脚本结点传递给JavaScript引擎执行。因此,动态检测技术可以完全规避浏览器的 HTML解析“怪癖”,直接在 DOM树中命中HTML文档中的可执行脚本,准确率大幅提升。动态检测技术有其优点,动态检测技术在DOM树的基础上作检测,因此与静态检测技术相比,它最显著的优点就是不受浏览器解析怪癖的影响。无论多么复杂晦涩的HTML文档,只要浏览器能解析出DOM树,动态检测时就不会产生歧义。同时,动态检测直接从DOM树的脚本节点下手还有个优点,它无须重复扫描分析HTML文档。与传统的模拟解析方法相比,这可以提升一定的性能。有优点,自然也少不了缺点,XSSAuditor假设服务端只采用简单的几种参数变换,并使用字符串精确匹配算法从URL中查找可疑脚本,这显然不能覆盖所有场景。一旦攻击者发现服务端采用了XSSAuditor未知的参数转换方法,就可以绕过它的检测。另外,检测策略不够完善,对间接脚本注入无能为力。常见的反射型XSS攻击都是将可执行脚本作为参数直接注入HTML响应中的,而XSSAuditor也作了针对性的匹配检测。然而,对于间接注入的恶意代码,XSSAuditor就无能为力了。
针对XSSAuditor未考虑复杂的服务端参数转换,攻击者可以针对存在复杂参数转换的服务端发起反射型XSS攻击。
例如,下面的服务端代码会把参数中的“you”改成“me”,然后返回给浏览器:
1
2
Hello3
4 $name=$_GET[‘name’];
5 $new_name=str_replace("you",''me",$name);
6 echo $new_name;
7 ?>
正常的URL请求如下所示:
http://l 27.0.0.l/xss5.php?name=you
服务端收到请求后,会将参数中的“you”替换成“me”,因此正常的HTTP回应内容如下段代码所示:
2
3 Hello
4 me
5