MS08-037:增强DNS解析器的随机性以提升安全性

本文详细介绍了微软安全更新MS08-037如何通过随机化DNS事务的源端口来增强安全性,使攻击者更难伪造DNS响应,同时提供了相关注册表配置的技术细节。

我们两个月前发布了安全公告MS08-020来改进DNS事务ID的随机性。您可以在这篇博客文章中阅读有关MS08-020算法更改的更多信息。增加随机性使攻击者更难伪造DNS响应。今天我们发布了MS08-037,进一步增加了伪造DNS事务的难度。

我们修改了DNS客户端和服务器解析器,使其从随机源端口发送请求。以前,攻击者只需要猜测正确的事务ID。在应用MS08-037后,攻击者需要同时猜测事务ID和源端口才能成功伪造DNS响应。简而言之,DNS事务的随机源端口为DNS事务添加了另一个独特的信息片段,这使得伪造更加困难。

在Win2k3及以下平台上,随机套接字池的默认大小为2500个端口,可以通过修改以下注册表值进行配置:

1
HKLM\System\CurrentControlSet\Services\DNS\Parameters\SocketPoolSize

另一个值得注意的注册表值是:

1
HKLM\CurrentControlset\services\tcpip\parameters\MaxUserPort

有关MaxUserPort的更多信息,请参考:Microsoft Technet文档。在Win2k3上,MaxUserPort定义为通配符绑定可能分配的最大端口号。基本上,如果设置了MaxUserPort,它就定义了动态端口范围。需要注意的是,MaxUserPort在Vista和Win2k3中的含义不同。在Win2k3中,如果设置了MaxUserPort,它定义了动态端口范围(从1024到MaxUserPort)。在Vista中,如果设置了MaxUserPort,它表示动态端口的数量,因此范围是从StartRange(无论配置了什么,默认为49k)到StartRange+MaxUserPort。参考:Microsoft支持文档

总结来说,安装补丁后Win2k3及以下平台的固定行为是:

  • 如果设置了MaxUserPort,则从1024-MaxUserPort范围内随机分配端口
  • 如果未设置MaxUserPort,则端口将从49152-65535范围内随机分配

默认端口池选择从与BSD传统一致的范围内随机获取端口,许多系统安全地从该范围动态分配端口。在该范围之外这样做有很小的可能导致网络故障,但在大多数情况下不会引起问题。如果您想增加随机性,可以通过修改MaxUserPort和相关注册表键来增加端口限制。

  • 安全漏洞研究与防御团队 文章按"原样"提供,不提供任何担保,也不授予任何权利。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计