深入解析MS09-008:DNS与WINS服务器安全更新技术细节

本文详细解析了微软安全更新MS09-008针对DNS服务器查询验证漏洞(CVE-2009-0233)、响应验证漏洞(CVE-2009-0234)、WPAD注册漏洞(CVE-2009-0093)及WINS服务器WPAD注册漏洞(CVE-2009-0094)的技术修复方案,包括事务ID预测防护、查询缓存机制优化及注册表阻断列表实现。

MS09-008:DNS与WINS服务器安全更新技术详解

发布安全更新MS09-008后,我们收到许多关于WPAD问题(CVE-2009-0093)的疑问。有观点称此更新无效,但需明确:该更新可提供有效防护,应尽快部署。以下全面解析该安全更新如何保护系统。

漏洞概述

本次安全更新修复了多个不同攻击向量的漏洞:

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

DNS查询与响应验证漏洞深度分析

CVE-2009-0233和CVE-2009-0234允许攻击者通过特制DNS查询成功伪造DNS响应。
技术机制
DNS事务ID是唯一标识单个DNS事务的数字,服务器用它验证查询响应的合法性。若事务ID可预测,攻击者可伪造对服务器查询的有效响应,从而向DNS缓存注入任意地址。
在这两个漏洞中,服务器未缓存特定类型的DNS响应,导致攻击者可迫使DNS服务器持续请求特定资源记录(RR),从而更容易匹配正确的事务ID与源端口组合以成功伪造响应。
修复方案
安全更新通过改进DNS服务器缓存和重用这些特定查询类型答案的方式解决此问题。

WPAD注册的DNS服务器漏洞

CVE-2009-0093涉及攻击者滥用Web代理自动发现(WPAD)和站点内自动隧道寻址协议(ISATAP)的机制。
攻击场景
此为本地域攻击,依赖域成员间的信任关系。Windows DNS服务器允许客户端通过动态更新在DNS服务器中注册自己的主机名。最常见场景中,客户端经域认证后可通过安全动态更新在DNS服务器上更新自身名称。若WPAD或ISATAP名称尚未注册,经域认证的用户可将自己的机器注册为这两个名称之一。
攻击价值
ISATAP和WPAD是客户端默认解析以获取特定功能的关键名称。WPAD指示主机连接代理配置信息的位置,ISATAP指向通过IPv4网络连接IPv6主机的隧道服务器。
防护方案
安全更新在DNS服务器上实现阻断列表,包含服务器不再解析的名称列表。该列表通过以下注册表项实现:

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

(2009年3月18日更新注册表项)
部署逻辑

  • 若安装安全更新时WPAD和ISATAP名称未在DNS服务器注册,阻断列表将包含这两个名称。客户端查询这些名称时,DNS服务器返回否定响应(即使攻击者注册了该名称)。
  • 若更新前DNS服务器已有WPAD或ISATAP条目,该名称不会加入阻断列表,服务器继续响应其请求。例如:若DNS服务器已配置名为WPAD的资源记录,安全更新仅将ISATAP加入阻断列表;若未配置两者,则阻断列表包含两个名称。

注意事项

  • 该设计旨在避免破坏客户正常功能(许多客户合法使用此功能)。
  • 若攻击者已通过动态DNS更新注入恶意WPAD条目,安装更新后WPAD名称不会加入阻断列表,攻击持续有效(安全更新仅防护未来攻击,不修复已发生的攻击)。
  • 管理员可通过DNS MMC管理单元验证当前WPAD/ISATAP条目的IP地址:
    1. 从管理工具组打开DNS MMC管理单元
    2. 展开“正向查找区域”
    3. 检查每个区域中名为“WPAD”或“ISATAP”的主机(A)、IPv6地址(AAAA)或别名(CNAME)记录

KB文章968732详细说明DNS管理员如何手动编辑DNS阻断列表以适应环境。

WPAD WINS服务器注册漏洞

CVE-2009-0094覆盖与DNS服务器WPAD注册漏洞相同的攻击,但通过WINS实现。配置WPAD的客户端可通过WINS(而非DNS)解析名称WPAD查找主机。
防护方案
安全更新安装WINS阻断列表,预填充WPAD、“WPAD.”和ISATAP名称(除非该名称已存在于当前WINS数据库)。WINS阻断列表通过以下注册表项实现:

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

验证方法
管理员可通过WINS MMC管理单元验证当前WINS数据库中是否注册了WPAD名称:

  1. 从管理工具组打开WINS MMC管理单元
  2. 右键单击“活动注册”并选择“显示记录”
  3. 在“记录映射”选项卡中勾选“筛选匹配此名称模式的记录”并输入“wpad”

任何活动的WPAD名称注册将显示在“活动注册”窗口中。
KB文章968731详细说明WINS管理员如何编辑WINS阻断列表。注意:WINS阻断列表独立于DNS阻断列表,且两种阻断列表均不在多服务器间复制。

额外说明

除本更新解决的WPAD协议问题外,可能存在其他导致客户端意外重定向至WPAD服务器的方式。我们持续调查此类问题,相关指南可参考:http://www.microsoft.com/technet/security/advisory/945713.mspx。

总结

本安全更新修复多个漏洞,建议尽快安装。

  • Maarten Van Horenbeeck, MSRC项目经理
    致谢贡献者:
  • Robert Hensing, MSRC工程部
  • Bruce Dang, MSRC工程部
  • Jeff Westhead, Windows核心网络部
  • Shyam Seshadri, Windows核心网络部

本文按“原样”提供,无任何担保,不授予任何权利。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计