MS09-008: DNS 和 WINS 服务器安全更新的详细说明 [转译]

<<本文章转译自 Security Research & Defense 博客文章 “MS09-008: DNS and WINS Server Security Update in More Detail">>

在发布了安全更新 MS09-008 之后,我们收到了一些关于更新公告中涉及 WPAD (CVE-2009-0093) 的问题,并有声称说这个更新是无效的。
在此,请允许我明确声明:这个更新能够提供保护,而且它应该被尽早部署。以下是关于这个安全更新如何保护系统的概述。

这个安全更新修复了几个不同攻击媒介中的漏洞:

  1. DNS 服务器查询验证漏洞 (CVE-2009-0233)
  1. DNS 服务器响应验证漏洞 (CVE-2009-0234)
  1. WPAD 注册漏洞中的 DNS 服务器漏洞 (CVE-2009-0093)
  1. WPAD WINS 服务器注册漏洞 (CVE-2009-0094)

我们会从验证漏洞开始逐步深入回顾这些漏洞,然后再对引起了最多疑问的 WPAD 注册问题进行深入分析。

DNS 服务器查询和响应验证漏洞

CVE-2009-0233CVE-2009-0234 是两个允许攻击者通过构造特定的 DNS 请求,来成功欺骗 DNS 响应的漏洞。

DNS 事务 ID 是一个能够唯一标识单个 DNS 事务的数字。DNS 服务器使用它来识别对某个查询的响应是否合法。当事务 ID 可预测的时候,攻击者就可以伪造出对 DNS 查询的有效的响应,
从而将任意的地址引入到 DNS 缓存中。

这两个漏洞中,服务器不会缓存特定的 DNS 响应,从而允许攻击者使 DNS 服务器不断请求一个特定的资源记录 (RR)。这使攻击者更轻易地构造相匹配的事务 ID 和源端口,从而成功伪造响应。这个安全更新改进了 DNS 服务器缓存和重用这些特定类型查询的应答的方式。

WPAD 注册漏洞中的 DNS 服务器漏洞

CVE-2009-0093 描述了攻击者如何滥用网页代理自动发现协议 (WPAD) 和站内自动隧道地址协议 (ISATAP) 的问题。

这是一种典型的本地域攻击,在这种环境下,域成员之间有一定程度的信任。Windows DNS 服务器允许客户端在使用动态更新的 DNS 服务器上注册自己的主机名。
这通常会发生在 安全动态更新 部署下,即通过验证的客户端可以在 DNS 服务器上更新自己的主机名。如果 WPAD 或者 ISATAP 还没有被注册,那么一个在域里的被验证的用户可以将自己的机器注册为 WPAD 或者 ISATAP。

ISATAP 和 WPAD 的注册引起攻击者兴趣的原因是 ISATAP 和 WPAD 是默认的名字,客户通过解析它们来获取特定的功能。比如 WPAD 会告诉客户连接哪里可以获得代理的配置,ISATAP 则指向在 IPv4 网络上连接 IPv6 主机的隧道服务器。

特别是 WPAD,它在企业中是一个最通常的功能,因此当微软发布安全更新时,必须非常注意两点,一是如何保护我们的客户安全,二就是不能破坏这些依赖功能。

本次新发布的安全更新是通过在 DNS 服务器上配置一个阻止列表来保护客户的,列表中包含了 DNS 服务器不再解析的名字,配置存在于以下的键值中:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters\GlobalQueryBlockList

(3/18/09: 更新的键值)

如果 DNS 服务器上还没有注册 WPAD 和 ISATAP,那么安装本次安全更新会填充这两个名字。当客户向 DNS 服务器请求这两个名字时,DNS 服务器会反馈一个否定的回答,包括攻击者申请注册这两个名字的请求。

但是,在安装更新前,如果 DNS 服务器已经有 WPAD 或者 ISATAP 的入口了,它就不会被加入阻止列表,并且会继续回答客户对与 WPAD 和 ISATAP 的请求。比如,如果一个 DNS 服务器有一条配置 WPAD 的资源记录,这么安全更新只会将 ISATAP 的名字加入阻止列表。如果 DNS 服务器中 WPAD 和 ISATAP 都没有配置,那么这两个名字在阻止列表中都会存在。

这样设置更新是有必要的,因为我们很多客户都合法使用着这些功能。如果在任何情况下都将这两个名字放入阻止列表,需要管理员手动将他们去除,就会打破这些配置。

在这里,一位安全研究员提出的质疑是,攻击者也许已经通过动态 DNS 更新将一个恶意的 WPAD 存入 DNS 服务器。安装更新时 WPAD 的名字不会被列入阻止列表,攻击将继续有效。

这并不是我们这个安全更新的目的,任何以往的安全更新中也不会以此为目的。安全更新的作用是帮助系统防止将来的攻击,而不是修复原有的问题。这个更新没有主动地去更改现有的配置。
当安装更新的时候,是没有办法判断这个 WPAD 的入口是管理者还是攻击者配置的。

用户如果有特别的关注可以在 DNS MMC 的管理单元查看当前的 WPAD/ISATAP 入口,来验证 IP 地址是否正确:

1. 从管理工具中打开 DNS MMC 管理单元

2. 展开 “Forward Lookup Zones”

3. 对于每一个区域,查看 ‘WPAD’ 或者 ‘ISATAP’ 名字下是否有主机 (A), IPv6 地址 (AAAA),或者别名 (CNAME) 的记录:

clip_image001

KB 文档 968732 详细描述了 DNS 管理员如何编辑 DNS 阻止列表来满足他的环境需求。

WPAD 注册漏洞中的 WINS 服务器漏洞

CVE-2009-0094 描述了在 WINS 服务器中类似于 DNS 服务器的 WPAD 注册漏洞攻击。一个有 WPAD 配置的客户如果需要查询主机名,可以通过 WINS,而不是通过 DNS 来解析 WPAD。这个安全更新会安装一个 WINS 的阻止列表。此列表与 DNS 列表一样,如果没有 ISATAP 或者 WPAD,会自动填充这两个名字,除非他们已经存在会 WINS 的数据库。
WINS 的阻止列表在以下键值中:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WINS\Parameters\QueryBlockList

客户如果要验证 WPAD 的名字是否已经在 WINS 的数据库中存在,可以用 WINS MMC 管理单元。

1. 用管理工具打开 WINS MMC 管理单元

2. 右击 “Active Registrations”,选择 “Display records”

3. 在 “Record Mapping” 标签中查看 “Filter records matching this name pattern” 有没有 “WPAD” 类型

任何活动的 WPAD 注册都会像下图一样在 “Active Registrations” 中显示

clip_image002

KB 文档 968731 详细描述了 WINS 管理元可以如何编辑 WINS 的阻止列表。注:WINS 的阻止列表独立于 DNS 的阻止列表,而且它们都不会在多个服务器中自动复制。

我们在此讨论的关于 WPAD 协议的这两个问题之外,也许还有别的情况使客户在不知情的情况下被重定向到 WPAD 服务器。我们对此会继续研究。
事实上,对于这个问题的指导,可以从以下链接得到:https://www.microsoft.com/technet/security/advisory/945713.mspx

我们希望这篇博客可以为您解答这次安全更新的内容以及解除您的疑惑。这个安全涉及到一系列的漏洞,因此我们推荐您可以在您方便的时候及时更新。

-Maarten Van Horenbeeck, MSRC 项目管理经理

我们想感谢以下同事对于此次博客的贡献

  • Robert Hensing, MSRC 工程师
  • Bruce Dang, MSRC 工程师
  • Jeff Westhead, Windows Core Networking
  • Shyam Seshadri, Windows Core Networking

· 3/18/09 更新: 修正 DNS 键值中的错误. 感谢 Daniel A Baillargeon 将这个问题向我们提出.