1.AJAX中的跨站点脚本
前几个月,人们发现了多种跨站点的脚本攻击。在此类攻击中,受害者的包含信息的浏览器上会运行来自特定网站的恶意JAVA脚本代码。Yamanner蠕虫就是一个最近的范例,它利用Yahoo邮件的AJAX调用中的跨站点脚本机会来攻击受害者。另一个近期的范例就是Samy蠕虫,它利用MySpace.com的跨站点脚本漏洞来攻击。AJAX在客户端上运行,它允许错误书写的脚本被攻击者利用。攻击者能够编写恶意链接来哄骗那些没有准备的用户,让他们用浏览器去访问特定的网页。传统应用中也存在这样的弱点,但AJAX给它添加了更多可能的漏洞。例子, Yamanner蠕虫利用了YahooMail的AJAX的跨站脚本漏洞,Samy蠕虫利用了MySpace.com的跨站脚本漏洞。
2.XML中毒
很多Web2.0应用中,XML传输在服务器和浏览器之间往复。网络应用接收来自AJAX客户端的XML块。这XML块很可能染毒。多次将递归负载应用到产出相似的XML节点,这样的技术还并不普遍。如果机器的处理能力较弱,这将导致服务器拒绝服务。很多攻击者还制作结构错误的XML文档,这些文档会扰乱服务器上所使用的依赖剖析机制的逻辑。服务器端的剖析机制有两种类型,它们是SAX和DOM。网络服务也使用相同的攻击向量,这是因为网络服务接收SOAP消息,而SOAP就是XML消息。在应用层大范围地使用XMLs使攻击者有更多的机会利用这个新的攻击向量。
XML外部实体参照是能被攻击者伪造的一个XML的属性。这会使攻击者能够利用人意的文件或者TCP连接的缺陷。XMLschema中毒是另一个XML中毒的攻击向量,它能够改变执行的流程。这个漏洞能帮助攻击者获得机密信息。攻击者可以通过复制节点进行DOS攻击,或者生成不合法的XML导致服务器端逻辑的中断。攻击者也可以操纵外部实体,导致打开任何文件或TCP连接端口。XML数据定义的中毒也可以导致运行流程的改变,助攻击者获取机密信息。
3.恶意AJAX代码的执行
AJAX调用非常不易察觉,终端用户无法确定浏览器是否正在用XMLHTTP请求对象发出无记载的调用。浏览器发出AJAX调用给任意网站的时候,该网站会对每个请求回应以cookies。这将导致出现泄漏的潜在可能性。例如,约翰已经登陆了他的银行,并且通过了服务器认证。完成认证过程后,他会得到一个会话cookie。银行的页面中包含了很多关键信息。现在,他去浏览器他网页,并同时仍然保持银行账户的登陆状态。他可能会刚好访问一个攻击者的网页,在这个网页上攻击者写了不易被察觉的AJAX代码,这个代码不用经过约翰的同意,就能够发出后台调用给约翰的银行网页,因而能够从银行页面取得关键信息并且把这些信息发送到攻击者的网站。这将导致机密信息的泄漏甚至引发安全突破。AJAX编码可以在不为用户所知的情形下运行,假如用户先登录一个机密网站,机密网站返回一个会话cookie,然后用户在没有退出机密网站的情形下,访问攻击者的网站,攻击者网页上的AJAX编码可以(通过这个会话cookie?)去访问机密网站上的网页,从而窃取用户的机密信息。(注:这里的解释有点含糊,理论上讲,浏览器不会把一个网站的会话cookie传给另外一个网站的,即文中的这句“When the browser makes an AJAXcall to any Web site it replays cookies for each request. ”,不完全对)
4.RSS/Atom 注入
这是一项新的web2.0攻击。RSS反馈是人们在门户网站或者网络应用中共享信息的常用手段。网络应用接受这些反馈然后发送给客户端的浏览器。人们可以在该RSS反馈中插入文本的JavaScript来产生对用户浏览器的攻击。访问特定网站的终端用户加载了带有该RSS反馈的网页,这个脚本就会运行起来——它能够往用户的电脑中安装软件或者窃取cookies信息。这就是一个致命的客户端攻击。更糟糕的是,它可以变异。随着RSS和ATOM反馈成为网络应用中整合的组件,在服务器端将数据发布给终端用户之前,过滤特定字符是非常必要的。攻击者可以在RSSfeeds里注入Javascript脚本,如果服务器端没有过滤掉这些脚本的话,在浏览器端会造成问题。
5.WSDL扫描和enumeration
WSDL(网络服务界定语言)是网络服务的一个接口。该文件提供了技术,开放方法,创新形式等等的关键信息。这是非常敏感信息,而且能够帮助人们决定利用什么弱点来攻击。如果将不必要的功能或者方法一直开着,这会为网络服务造成潜在的灾难。保护WSDL文件或者限定对其的访问是非常重要的。在实际情况中,很有可能找到一些使用WSDL扫描的一些漏洞。WSDL提供了Web服务所用的技术,以及外露的方法,调用的模式等信息。假如Web服务对不必要的方法没有禁止的话,攻击者可以通过WSDL扫描找到潜在的攻击点。
6.AJAX常规程序中客户端的确认
基于web2.0的应用使用AJAX常规程序来在客户端上进行很多操作,比如客户端数据类型的确认,内容检查,数据域等等。正常情况下,服务端也应该备份这些客户端检查信息。大部分开发者都没有这么做;他们这样做的理由是,他们假设这样的确认是由AJAX常规程序来负责的。避开基于AJAX的确认和直接发送POST或者GET请求给那些应用——这些应用是诸如SQL注入,LDAP注入等类随确认进入的攻击主要来源,它们能够攻击网络应用的关键资源——都是可以做到的。这都增加了能够为攻击者所利用的潜在攻击向量的数量。假如开发人员只依赖客户端验证,不在服务器端重新验证的话,会导致SQL注入,LDAP注入等等。
7.网络服务路由问题
网络服务安全协议包括WS-Routing服务。WS-Routing允许SOAP消息在互联网上各种各样不同的节点中的特别序列中传输。通常加密的信息在这些节点来回传送。交互的节点中的任意一个被攻击都将致使攻击者能够访问到在两个端点之间传输的SOAP消息。这将造成SOAP消息的严重的安全泄漏。随着网络应用开始被网络服务框架所采用,攻击者们开始转而利用这些新协议和新的攻击向量。Web服务安全协议使用WS-Routing服务,假如任何中转站被攻占,SOAP消息可以被截获。
8.SOAP消息的参数操作
网络服务接收信息和来自SOAP消息的变量。修改这些变量是很可能的。例如,“10”是SOAP消息中多个节点中的一个。攻击者可以修改点,并且尝试不同种的注入攻击——比如,SQL,LDAP,XPATH,命令行解释器——并且探索能被他用来掌握及其内部信息的攻击向量。网络服务代码中错误的或者不够完备的输入确认使网络服务应用易于发生泄漏.这是一个目标指向网络服务所带的网络应用的一项新的攻击向量。类似于SQL注入,假如对SOAP消息里节点的数据不做验证的话。
9.SOAP消息中的XPATH注入
XPATH是一种用来查询XML文档的语言,它跟SQL语句很类似:我们提供某些信息(参数)然后从数据库中得到查询结果。很多语言都支持XPATH解析的功能。网络应用接收大型XML文档,很多时候这些应用从终端用户和XPATH语句中取得输入量。这些代码的段落对XPATH注入没有什么防御能力。如果XPATH执行成功,攻击者能够绕过认证机制或者造成机密信息的一些损失。现在人们只知道很少部分的能够被攻击者利用的XPATH的漏洞。阻止这个攻击向量的唯一方法就是在给XPATH语句传递变量值的时候提供适当的输入确认。类似于SQL注入,假如对数据不做验证而直接做XPATH查询的话。
10. RIA瘦客户端二进制的伪造
丰富网络应用(RIA)使用非常丰富的UI要素比如Flash,ActiveX控件或者Applets,它使用这些要素作为网络应用的基本接口。这个框架存在几个安全问题。其中最主要的一个就是关于会话管理。它是在浏览器中运行的,并且共享相同的会话。同时,由于客户端将下载整个二进制元件到自己的主机,攻击者就可以颠倒工程的那个二进制文件并且反编译代码。把这些二进制串打包并绕过一些包含在代码中的认证逻辑是有可能实现的。这是WEB2.0框架下的另一个有趣的攻击向量。因为Rich InternetApplications的组件是下载到浏览器本地的,攻击者可以对二进制文件进行逆向工程,反编译编码,通过改动文件,跳过认证逻辑。
结论
AJAX,RIA以及网络服务是WEB2.0应用空间的三项重要的技术向量。这些技术很有前景,它们带给桌面新的程式,加强了网络应用的整体效率和效用。随着这些新技术而来的是新的安全问题,忽略这些问题将会导致整个世界发生巨大的灾难。本文中,我们只讨论了10种攻击。但是实际上还有很多其他的攻击向量。对这些新的攻击向量的最好的防御方法是增加WEB2.0的安全意识,提高代码操作的安全性以及配置的安全性