web2.0是表述新一代网络应用的新鲜术语。start.com,google maps,writely以及myspace.com都是使用web2.0的范例。技术水平的不断进步,推动了web2.0应用的发展。在网络服务方面,它加强了服务端的核心技术组件,而在客户端方面,ajax和丰富网络应用(ria)则改进了浏览器中的客户端用户接口。
xml语言对表示层和传输层(http/https)有巨大的影响。soap成为基于xml的传输机制的特别选择后,从某种程度上说,xml在表示层上取代了html语言。
web2.0关注点——重整行业
技术变革带来了新的安全关注点和新的攻击向量。yamanner,samy以及spaceflash这些典型蠕虫正在攻击包含保密信息的ajax架构的客户端,它们提供攻击途径。
在服务器端,基于xml的网络服务正在取代一部分的关键功能。它提供可通过网络服务接口来访问的分布式应用。用户可以从浏览器端远程激活基于get,post或者soap的方法,这项能力给各种应用带来新的缺陷。另一方面,使用xml,xul,flash,applets和javascripts的ria框架增加了更多可用的攻击向量。ria,ajax以及网络服务给网络应用安全增加了新的维度。
下面是10个攻击向量的列表以及简短介绍:
1.ajax中的跨站点脚本
前几个月,人们发现了多种跨站点的脚本攻击。在此类攻击中,受害者的包含信息的浏览器上会运行来自特定网站的恶意java脚本代码。yamanner蠕虫就是一个最近的范例,它利用yahoo邮件的ajax调用中的跨站点脚本机会来攻击受害者。另一个近期的范例就是samy蠕虫,它利用myspace.com的跨站点脚本漏洞来攻击。ajax在客户端上运行,它允许错误书写的脚本被攻击者利用。攻击者能够编写恶意链接来哄骗那些没有准备的用户,让他们用浏览器去访问特定的网页。传统应用中也存在这样的弱点,但ajax给它添加了更多可能的漏洞。
2.xml中毒
很多web2.0应用中,xml传输在服务器和浏览器之间往复。网络应用接收来自ajax客户端的xml块。这xml块很可能染毒。多次将递归负载应用到产出相似的xml节点,这样的技术还并不普遍。如果机器的处理能力较弱,这将导致服务器拒绝服务。很多攻击者还制作结构错误的xml文档,这些文档会扰乱服务器上所使用的依赖剖析机制的逻辑。服务器端的剖析机制有两种类型,它们是sax和dom。网络服务也使用相同的攻击向量,这是因为网络服务接收soap消息,而soap就是xml消息。在应用层大范围地使用xmls使攻击者有更多的机会利用这个新的攻击向量。
xml外部实体参照是能被攻击者伪造的一个xml的属性。这会使攻击者能够利用人意的文件或者tcp连接的缺陷。xml schema中毒是另一个xml中毒的攻击向量,它能够改变执行的流程。这个漏洞能帮助攻击者获得机密信息。
3.恶意ajax代码的执行
ajax调用非常不易察觉,终端用户无法确定浏览器是否正在用xmlhttp请求对象发出无记载的调用。浏览器发出ajax调用给任意网站的时候,该网站会对每个请求回应以cookies。这将导致出现泄漏的潜在可能性。例如,约翰已经登陆了他的银行,并且通过了服务器认证。完成认证过程后,他会得到一个会话 cookie。银行的页面中包含了很多关键信息。现在,他去浏览器他网页,并同时仍然保持银行账户的登陆状态。他可能会刚好访问一个攻击者的网页,在这个网页上攻击者写了不易被察觉的ajax 代码,这个代码不用经过约翰的同意,就能够发出后台调用给约翰的银行网页,因而能够从银行页面取得关键信息并且把这些信息发送到攻击者的网站。这将导致机密信息的泄漏甚至引发安全突破。
4.rss/atom 注入
这是一项新的web2.0攻击。rss反馈是人们在门户网站或者网络应用中共享信息的常用手段。网络应用接受这些反馈然后发送给客户端的浏览器。人们可以在该rss反馈中插入文本的javascript来产生对用户浏览器的攻击。访问特定网站的终端用户加载了带有该rss反馈的网页,这个脚本就会运行起来——它能够往用户的电脑中安装软件或者窃取cookies信息。这就是一个致命的客户端攻击。更糟糕的是,它可以变异。随着rss和atom反馈成为网络应用中整合的组件,在服务器端将数据发布给终端用户之前,过滤特定字符是非常必要的。
5.wsdl扫描和enumeration
wsdl(网络服务界定语言)是网络服务的一个接口。该文件提供了技术,开放方法,创新形式等等的关键信息。这是非常敏感信息,而且能够帮助人们决定利用什么弱点来攻击。如果将不必要的功能或者方法一直开着,这会为网络服务造成潜在的灾难。保护wsdl文件或者限定对其的访问是非常重要的。在实际情况中,很有可能找到一些使用wsdl扫描的一些漏洞。
6.ajax常规程序中客户端的确认
基于web2.0的应用使用ajax常规程序来在客户端上进行很多操作,比如客户端数据类型的确认,内容检查,数据域等等。正常情况下,服务端也应该备份这些客户端检查信息。大部分开发者都没有这么做;他们这样做的理由是,他们假设这样的确认是由ajax常规程序来负责的。避开基于ajax的确认和直接发送post或者get请求给那些应用——这些应用是诸如sql注入,ldap注入等类随确认进入的攻击主要来源,它们能够攻击网络应用的关键资源——都是可以做到的。这都增加了能够为攻击者所利用的潜在攻击向量的数量。
7.网络服务路由问题
网络服务安全协议包括ws-routing服务。ws-routing允许soap消息在互联网上各种各样不同的节点中的特别序列中传输。通常加密的信息在这些节点来回传送。交互的节点中的任意一个被攻击都将致使攻击者能够访问到在两个端点之间传输的soap消息。这将造成soap消息的严重的安全泄漏。随着网络应用开始被网络服务框架所采用,攻击者们开始转而利用这些新协议和新的攻击向量。
8.修改soap参数
网络服务接收信息和来自soap消息的变量。修改这些变量是很可能的。例如,“10”是soap消息中多个节点中的一个。攻击者可以修改点,并且尝试不同种的注入攻击——比如,sql,ldap,xpath,命令行解释器——并且探索能被他用来掌握及其内部信息的攻击向量。网络服务代码中错误的或者不够完备的输入确认使网络服务应用易于发生泄漏.这是一个目标指向网络服务所带的网络应用的一项新的攻击向量。
9.soap消息中的xpath注入
xpath是一种用来查询xml文档的语言,它跟sql语句很类似:我们提供某些信息(参数)然后从数据库中得到查询结果。很多语言都支持xpath 解析的功能。网络应用接收大型xml文档,很多时候这些应用从终端用户和xpath语句中取得输入量。这些代码的段落对xpath注入没有什么防御能力。如果xpath执行成功,攻击者能够绕过认证机制或者造成机密信息的一些损失。现在人们只知道很少部分的能够被攻击者利用的xpath的漏洞。阻止这个攻击向量的唯一方法就是在给xpath语句传递变量值的时候提供适当的输入确认。
10. ria瘦客户端二进制的伪造
结论
ajax,ria以及网络服务是web2.0应用空间的三项重要的技术向量。这些技术很有前景,它们带给桌面新的程式,加强了网络应用的整体效率和效用。随着这些新技术而来的是新的安全问题,忽略这些问题将会导致整个世界发生巨大的灾难。本文中,我们只讨论了10种攻击。但是实际上还有很多其他的攻击向量。对这些新的攻击向量的最好的防御方法是增加web2.0的安全意识,提高代码操作的安全性以及配置的安全性