日期:2008-11-26  浏览次数:20373 次

Matt Powell
Microsoft Corporation
2001 年 9 月 5 日

简介


在与开发人员就 XML Web 服务的将来谈话的过程中我们得知,他们最大的担心之一就是害怕软件中存在的弱点可能使服务受到不怀好意的用户的攻击。这可以说既是一个坏消息,又是一个好消息。说它是坏消息,是因为攻击可能导致服务的可用性受限制、私有数据泄露,更糟糕的情况是,使计算机的控制权落入这些不怀好意的用户的手中。说它是好消息,是因为您可以获得一些真正的保护,以减少这些攻击所带来的风险。我们将介绍已出现的攻击类型,以及您如何保护自己在部署、设计和开发领域的心血。此主题的第一篇专栏文章将集中讲述部署时应考虑的问题,下一篇专栏文章将讲述在开发 XML Web 服务时需注意的设计和开发问题。

攻击类型


要找出风险所在并了解如何避免,第一步应了解服务可能遭受的攻击类型。在了解了可能遇到的问题种类后,就可以采取适当的措施来减小这些问题所带来的风险。
攻击通常可分为三大类:
  • 欺骗
  • 利用错误
  • 拒绝服务

欺骗


在要求身份验证的系统上,最常见的黑客攻击之一是算出某个用户的身份验证证书,以该用户登录,然后访问该用户的信息。这已经很糟糕了,但如果被泄露的证书属于系统管理员或其他某个具有更高权限的用户,则风险会更大。因为,在这种情况下,攻击可能不仅限于泄露单个用户的数据,而且有泄露所有用户数据的可能。
黑客可能会使用多种方法来确定用户的密码。例如:尝试对该用户有意义的字,如该用户的姓名、其宠物的名字或生日。更有恒心的黑客甚至会尝试字典中的每个字(字典攻击)。获取证书信息的其他方法包括:捕捉网络数据包并读取发送的数据中的信息;通过 DNS 欺骗,插入一台不怀好意的计算机,作为客户端和服务器之间的中介;假装系统管理员,以排除故障为由,要求用户给出其证书;或者,记录与服务器的登录握手,然后重复这一过程,尝试通过身份验证。
可以通过采取诸如强制实现加强密码等措施以及使用安全身份验证机制,来缓解由欺骗所带来的大多数风险。

利用错误


决定系统弱点的关键因素之一是运行在该系统上的代码的质量。系统错误不仅仅局限于使某个特定的线程出现异常。黑客可能利用这些弱点在系统上执行他们自己的代码,访问具有较高权限的资源,或者,只是利用可能潜在地引起系统速度减慢或变得不可用的资源漏洞(由错误引起的)。这种攻击中最著名的一个例子就是红色代码蠕虫病毒,这种病毒利用 Index Server ISAPI 扩展中的错误,在受感染的系统上执行它选择的代码,然后继续寻找其他有弱点的计算机。
另外一种常见攻击就是利用输入数据的有效性假设方面的错误。例如,XML Web Service 希望用户名作为参数输入的情况。如果您假设用户名仅包含 ASCII 字符串,并因此将它直接放入您的 SQL 查询,可能会使您的服务出现严重的弱点。例如,假设您的代码中有一个 SQL 查询,如下所示:
sqlQuery = "SELECT * FROM Users WHERE (Username='" & UsernameInput & "')

如果 UsernameInput 参数包含的内容恰好如下所示
Bob') or not (Username='0

那么您的服务可能会返回所有记录,而不只是特定用户的记录。

拒绝服务


拒绝服务攻击的目的不在于闯入一个站点,或更改其数据,而在于使站点无法服务于合法的请求。红色代码蠕虫病毒不仅感染计算机,并继而寻找并感染其他计算机,而且,还使得被感染的计算机向官方的白宫 Web 站点发送大量的数据包。因为数千台计算机被感染,所以发往白宫 Web 站点的请求的数目极高。因为红色代码蠕虫病毒会导致从大量计算机发出请求,所以被视作“分布式拒绝服务攻击”。由于涉及到如此众多的计算机,因此这种攻击极难限制。
拒绝服务请求可能有多种形式,因为可以通过多种级别发送伪请求,以攻击您的系统。例如,您的站点可能允许用户 PING 您的 IP 地址,从而使 ICMP 消息被发送到您的服务器,然后又被返回。这是一种排除连接故障的有效方法。但是,如果数百台计算机同时向您的服务器发送数千个数据包,您会发现您的计算机忙于处理 PING 请求,而无法获得 CPU 时间来处理其他正常的请求。
级别稍高的是 SYN 攻击,这种攻击需要编写一个低级网络程序,所发送的数据包看起来有如 TCP 连接握手中的第一个数据包(SYN 包)。这种攻击比 PING 请求攻击危害更大,因为对于 PING 请求,您可以在必要时将其忽略,但对于 SYN 攻击,只要有应用程序在侦听 TCP 端口(如 Web 服务器),则无论您何时收到看似有效的连接请求,都需要花费资源。
最高级别的拒绝服务攻击可以呈现一种向 XML Web Service 发送多个基本有效的 SOAP 请求的形式,这种请求将导致数据库开始查找操作。数据库查找可能需要花费一段很长的时间。因此,如果每秒钟向服务器发送数千个这样的请求,会使得接收请求的 Web 服务器和后端数据库服务器变得非常忙。而且,这也会使您的服务无法及时处理其他请求。
如果您的计算机上有包含错误的代码,那么拒绝服务攻击会更加容易。例如,如果投入使用的 Web Service 有这样一个错误:当出现某个特定类型的错误时,会显示一个消息框,黑客可以利用这一缺陷向您的计算机发送数目相对较少的请求,使该消息框显示出来。这会锁定所有的线程处理请求,因此有效地阻止了其他人访问您的服务。