一、介绍
Web2.0 是几项技术的综合应用的结果,这些技术有:AJAX(Asynchronous JavaScript and XML),Flash, JSON(JavaScript Object Notation),SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)等。这些技术加上跨域的信息访问(Cross-Site Access)。它们共同支持了Web2.0这项复杂的应用。随着Web2.0应用的逐渐广泛,有目共睹的一个变化是终端用户浏览器的功能逐渐强大。
这些变化给传统扫描工具和信息安全研究人员带来了新的挑战。这篇文章的目标是研究以下内容:
(1)新一代Web应用中扫描的复杂性和挑战;
(2)Web2.0客户端扫描对象和方法;
(3)Web2.0漏洞检测(RSS feeds中的跨站脚本攻击);
(4)使用JSON进行跨域注入;
(5)客户端浏览器过滤的防御对策;
二、Web2.0 扫描的复杂性
Web2.0应用异常复杂,这给扫描技术带来了新的挑战。它的复杂性可以归为以下几个因素:
丰富的客户端接口:AJAX和Flash利用复杂的Java Scripts和Action scripts脚本,提供了丰富的应用接口,使得从这些脚本中发现应用逻辑和关键资源变得异常困难。
信息来源:有些Web2.0应用整合了许多不同站点的信息,信息资源复杂。例如一个应用可以整合不同站点的RSS feeds或者博客资源,在一个站点建立一个大的信息库,或者利用不同来源的数据资源建立自己的Mashup。
数据结构:不同应用之间交换数据使用的数据结构多样,可以是XML,JSON,JavaScript数组等。
协议:除了简单的HTTP Get和Post,Web2.0应用可以选择其他不同的协议,例如,SOAP,REST和XML-RPC。
我们应用的目标,可以是从不同的站点获得RSS feeds,利用JSON在不同的博客站点之间交换数据,使用SOAP与证券交易所的Web Service进行通信等。所有这些服务都要使用AJAX技术,以RIA(Rich Internet Applications)的形式进行。
三、Web2.0应用的扫描技术面临的挑战
针对Web2.0应用的扫描技术面临的挑战,可以分为以下两个方面:
1.扫描服务端应用组件:当扫描Web2.0应用时,面临的最大挑战,就是获得服务器中的资源。当扫描传统的WEB应用时,可以运行一个网络爬虫,通过寻找“href”的方式,即可知道一个Web应用有哪些页面资源。但是在Web2.0的应用环境下,实现扫描,需要识别后端的网络应用,第三方的Mashup,后端的代理服务等。
2.扫描客户端组件:一个Web2.0应用,需要在浏览器中加载一些Java Scripts脚本,Flash组件和其他的一些小程序。这些组件和脚本利用XMLHTTPRequest对象同后方的WEB服务器进行通信,同时,在浏览器内部获得跨域信息也是可能的。由于Web2.0框架使用了多种客户端脚本,从不可信的第三方获得资源,这使得跨站脚本攻击(XSS)成为应用程序使用者面临的潜在威胁。AJAX,JSON技术,跨域访问和动态DOM操作技术被增加到传统的跨站脚本攻击(XSS)方法中,使得客户端组件的安全威胁大大增加。客户端组件扫描和漏洞检测是本文讨论的重点。
四、客户端扫描对象
为了能清楚的理解扫描对象,我们先举一个简单例子来说明一个WEB应用是如何部署的:如图1所示,一个Web应用运行在example.com上。客户通过浏览器访问这个应用。这个Web应用根据其使用和逻辑,分成以下几个部分:
图1 Web 2.0 应用部署
应用资源:这些资源被example.com解释成各种形式,例如,HTML,ASP/JSP和Web Services。这些资源在信任域内,被example.com所拥有。
Feed代理:XMLHTTPRequest不能对后端服务器进行跨域访问。因此,需要建立一个代理服务器,通过代理服务器访问第三方的RSS feeds,例如,假设这个feeds是“每日新闻”,那么example.com的用户也可以获得“每日新闻”这项资讯。
博客访问:终端用户通过访问example.com可以获得因特网上的博客资源,这是因为example.com在用户的浏览器上下载了一些脚本,允许用户访问一些跨域博客。
以下是四个关键的扫描对象,来决定客户端是否存在漏洞:
1.函数库指纹:Web2.0应用是由AJAX和Flash函数库创建和支持的,这些函数库被加载到用户浏览器,以供程序运行时使用。所以,有必要提取这些函数库的指纹,和已经公布的漏洞库中的数据进行比对,例如,假设某个用户浏览器下载的某个库函数存在漏洞,并被记录在公布的漏洞库中,那么通过指纹比对可以发现这个有潜在威胁的库函数。
2.第三方不可信的信息点:在图1中,我们把Web应用划分成可信和不可信两部分。不可信的信息在加载到用户浏览器之前要进行安全扫描。图1的例子中,RSS feeds是通过应用服务器的Feed代理到达用户浏览器的,而博客信息则是直接进入用户浏览器,信息进入浏览器后都以DOM(文档对象模型)的形式存在。如果在这些信息进入用户浏览器之前,进行安全扫描,则可以避免一些安全威胁。
3.DOM访问点:由于浏览器中任何东西都以DOM的形式运行,加载的Java Scripts脚本也是来操作DOM的,所以,恶意信息在任何一个DOM访问点进入,都会对浏览器造成威胁。因此,DOM的访问点的安全扫描也至关重要。
4.利用函数和变量的漏洞检测:为了发现威胁和漏洞,需要对浏览器的运行逻辑和相应的轨迹有深入的理解,这样,一旦DOM访问点和第三方信息被识别出来,能够及时发现调用的函数,进行安全扫描。