Matt Powell
Microsoft Corporation
简介
在与开发人员就 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 有这样一个错误:当出现某个特定类型的错误时,会显示一个消息框,黑客可以利用这一缺陷向您的计算机发送数目相对较少的请求,使该消息框显示出来。这会锁定所有的线程处理请求,因此有效地阻止了其他人访问您的服务。
部署问题
到目前为止,我们已介绍了几种不同的攻击类型,那么我们能对这些可恶的攻击采取什么措施呢?有一个好消息可以告诉您,您可以采取很多种方法来保护自己的服务,而且,这些保护大都十分简单。让我们首先来看一看只需控制 Web 服务器和后端服务器的配置方法就可以实现的保护类型。
应采取许多重要的保护措施确保您的 Web 服务器不会受到攻击的破坏,包括一些众所周知的措施,如确保具有最新的安全性更新。下面列出了自我保护措施中最重要的步骤。其中的许多步骤并不特别针对托管 Web 服务,而是适用于所有的 Web 服务器托管内容。
安装安全性更新
首先,确保您具有最新的更新,以避免受到红色代码蠕虫病毒的攻击。可以在 Installing the patch that stops the Code Red worm(英文)中找到有关安装更新的说明和下载修补程序的链接。
对红色代码蠕虫病毒的修复以及其他修复最终会包含在 Microsoft® Windows® 2000 的下一个服务包中,并已在 Microsoft® Windows® XP 中得到解决。
当然,更大的问题是如何避免其他潜在的弱点,并保护自己免受将来可能出现的问题的侵害。有关 Microsoft 产品安全问题的信息,可以订阅“Microsoft 安全性通知列表”。对于出现的任何新问题,都将以电子邮件的形式通知订阅者。有关如何订阅的说明,请查看 Product Security Notification(英文)网页。
限制 Web 服务器的访问者
如果您对攻击的问题很关注,尤其是如果您的 XML Web 服务上包含私有信息,那么您应限定仅合法的用户可以访问您的站点。这可以用多种方法来实现,但下面讲述的几种方法可以防止黑客访问您的 XML Web 服务。
通过使用 HTTP 身份验证来对用户进行验证,然后限定他们可以访问哪些资源。身份验证的配置方法:用鼠标右键单击 Internet 服务管理器中的 Web 站点、虚拟目录或单个文件;从弹出菜单中选择“属性”;进入“目录安全性”选项卡,单击“匿名访问和身份验证控制”下面的“编辑”按钮。
限定可以访问您的 Web 服务器的 IP 地址。如果有一些可以使用您站点的合法用户,那么可以只允许这些用户的特定 IP 地址访问您的 Web 站点。您还可以限定某些 IP 地址范围具有访问权限,或拒绝某个 IP 地址或某个 IP 地址范围的访问权限。甚至可以根据域名进行限定,但在与您计算机连接的 IP 地址上,可能需要花费很长的时间来进行域名查找。修改 IP 地址限制的方法:转至步骤 1 中提到的“目录安全性”选项卡,单击“IP 地址及域名限制”下面的“编辑”按钮。图 1 显示了“IP 地址及域名限制”对话框,其中将访问权限限制为三个特定的 IP 地址。
图 1:设置 Web 站点的 IP 地址限制
要求与客户端证书具有安全套接字层 (SSL) 连接。这可能是对访问您站点的用户进行身份验证的最安全的方法。SSL 限制也是在“目录安全性”选项卡的“安全通信”下进行设置。
将路由器配置为仅允许符合要求的访问
路由器就是您的防火墙。它可以阻断发送到您计算机的大量不合法的请求。流行的路由器大多都可以将访问限制在特定的 TCP 端口上,因此您可以只允许从端口 80(默认的 HTTP 端口)传入请求。这可以防止防火墙外的任何人试图连接到您计算机上的其他任何服务。打开其他服务的端口时请务必小心。您可以很方便地从终端服务客户端打开一个端口,连接到您的 Web 服务器,以便进行远程管理。但随后,任何人都可以通过终端服务器连接尝试连接到您的计算机。即便黑客不知道有效的用户名和密码,也仍然可以通过同时建立只显示登录屏幕的多个会话,来用完您计算机上的大量资源。
在筛选掉可能用完您计算机资源的非法数据包时,也需要用到路由器这一重要工具。对于明显存在问题的数据包,只需将它丢弃即可(大多数路由器都会自动执行这一功能)。但是,目前已有许多路由器具有检测诸如 TCP SYN 包的能力,这些数据包慌称它们是从某个 IP 地址发送过来的,但实际并非如此。通过启用这种保护措施,可以避免前面在拒绝服务攻击中提到的那些 SYN 攻击。
而且,请记住,防火墙限制只会影响到防火墙处的流量。这似乎是显而易见的事情,但假定您从 Internet 服务提供商 (ISP) 处购买了一根 T1 线,并在您所在的 T1 线的那一端放置了一个具有安全配置的路由器。如果 ISP 无法在他们的路由器上启用非法 SYN 请求检测功能,那么他们的路由器就有可能受到 SYN 攻击,从而潜在地拒绝对您的 T1 线另一端的服务,最后结果是有效地切断了对您站点的访问。
考虑更复杂的环境,如某个特定连接的两端都放置有多个路由器,由于每个路由器都有可能遭受攻击,因此可能会影响到为您站点的合法用户提供服务。要列出数据包到达您的服务器途中所要经过的路由器,请使用 TRACERT.EXE 实用工具。
配置 TCP/IP 筛选以限制接受连接的端口
如果您没有路由器作为防火墙,或者,如果您由于任何原因无法管理自己的路由器,都可以通过限制您计算机将接收的传入连接种类,有效地使您自己的计算机成为防火墙。在 Windows 2000 中,单击“开始”按钮,选择“设置”,选择“网络和拨号连接”,用鼠标右键单击连接到 Internet 上的网卡,然后选择“属性”。选择“Internet 协议 (TCP/IP)”,单击“属性”按钮,单击“高级”按钮,进入“选项”选项卡。选择“TCP/IP 筛选”,然后单击“属性”按钮。将出现如图 2 所示的一个对话框。您可以在该对话框中限制将接受连接的端口。在如图 2 所示的示例中,限制了只允许在端口 80 和 443 上分别进行 HTTP 和 HTTPS 连接。
图 2:配置 TCP/IP 筛选
删除不必要的服务和软件
计算机上运行的软件越多,就越有可能受到攻击,尤其是在您作为某种具有较高权限的用户运行服务的时候更是如此。如果您的计算机专门运行 Web 服务,且 Web 服务独立于其他服务,那么应在您的计算机上禁用其他某些服务,包括 FTP 服务、SMTP 服务以及诸如终端服务客户端等的 Windows 服务。
也应限制可通过 Internet Information Server 运行或访问的软件数量。确保仅配置了您需要的虚拟站点和目录。首先,应该删除管理 Web 站点。其次,还应该删除 IISSamples 虚拟目录。同样,如果您的计算机专门运行 Web 服务,应删除其他任何虚拟目录。
即便对于已经安装某些软件的虚拟目录,也必须弄清楚哪种软件是访问您的 Web 站点时可以使用的。在 Internet 服务管理器中,用鼠标右键单击某个站点或虚拟目录,从所出现的菜单中选择“属性”,选择“虚拟目录”选项卡,然后单击“配置”按钮,将出现“应用程序映射”选项卡,其中列出了与不同的 ISAPI 扩展或 CGI 应用程序相关联的所有扩展。如果您没有使用这些扩展,请将它们从列表中删除。.IDQ 文件的索引服务器扩展自身存在错误,红色代码蠕虫病毒就利用了这个错误。如果您是在虚拟站点级进行此项更改,那么您不需要为所创建的每个虚拟目录都进行此项工作。
使用 Microsoft Internet Information Server 安全性核对表
Microsoft 为 Internet Information Server 4.0 创建了一个安全性核对表,其中除了我在本文中提到的所有安全事项以外,还提到了其他更多的安全事项。使用此核对表来确保您至少已经考虑了所有的安全性选项。虽然您运行的可能不是 Internet Information Server 4.0(5.0 版是随 Windows 2000 一起发布的版本),但本文中的大多数步骤仍然适用,而且,对于将来 Internet Information Server 版本,也仍然适用。可以从 Microsoft Internet Information Server 4.0 Security Checklist(英文)中找到此核对表。
总结
根据您计算机和网络配置的不同,会有多种保护措施,您应采取相应的措施保护您的 Web 服务器免受黑客攻击。在下一篇专栏文章中,我们将研究开发人员和设计人员在创建其 XML Web Service 时需注意的问题,并继续探讨保护您的 XML Web Service 免受黑客攻击的方法。
--------------------------------------------------------------------------------
At Your Service
Matt Powell 是 MSDN Architectural Samples Team 的成员,他帮助开发了最新的 SOAP Toolkit 1.0。Matt 的其他成就包括与他人合著了由微软出版社出版的《Running Microsoft Internet Information Server》一书以及为各种杂志撰写了大量的文章。他有一个幸福美满的家庭,是他每天眷恋的地方。