深入解析MS08-001:ICMP路由器公告漏洞与系统缓解措施

本文详细分析了MS08-001安全公告中的ICMP漏洞(CVE-2007-0066),探讨Windows TCP/IP处理碎片化ICMP路由器公告消息时的内存读取错误导致系统崩溃的机制,并说明通过注册表配置禁用路由器发现功能的缓解方案。

MS08-001(第二部分)——中度ICMP缓解措施案例分析

这是关于MS08-001的三部分系列文章中的第二篇。本篇将详细探讨ICMP漏洞(CVE-2007-0066)。该漏洞由Windows TCP/IP处理ICMP协议(特别是路由器公告消息)的方式引起。本文更详细地介绍了该漏洞的缓解因素。

漏洞技术描述

互联网控制消息协议(ICMP)路由器发现是指当未手动配置或通过DHCP分配默认网关时,使用ICMP消息来发现网络段上的默认网关。ICMP路由器发现包括两种ICMP消息:路由器请求和路由器公告。主机发送路由器请求以发现网络上的路由器;路由器则响应路由器请求或定期发送路由器公告,以通知网络上的主机该路由器仍然可用。

Windows TCP/IP错误地处理碎片化的ICMP路由器公告消息。(当消息太大无法一次性发送时,IP允许将其分片为多个部分,接收机器负责重新组装原始消息。)碎片化的路由器公告消息可能导致系统读取无效内存,从而引发系统崩溃。(崩溃的发生取决于接收ICMP消息时内存的内容,因此是偶发性的。)由于最坏情况下目标机器会崩溃,且无法执行代码,此问题导致拒绝服务(DoS)。

缓解措施

该漏洞的缓解因素在于,仅当启用路由器发现处理时才能触发该漏洞。Win2k与Win2k3/WinXP在路由器发现处理的默认设置上存在一些差异。

重要提示:修改注册表前请确保备份。确保了解如何在出现问题时恢复注册表。有关如何备份、恢复和修改注册表的信息,请点击以下文章编号查看Microsoft知识库中的文章:256986(http://support.microsoft.com/kb/256986/)Microsoft Windows注册表说明

该设置由注册表项PerformRouterDiscovery控制,位于:HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ interface_name

对于Win2K,PerformRouterDiscovery有两个值:

  • 0(禁用)
  • 1(启用)

如果该键不存在,默认设置为0。因此,Win2k默认禁用ICMP路由器发现。

对于Win2k3和WinXP,PerformRouterDiscovery键新增了一个值:

  • 2(仅在DHCP发送执行路由器发现选项时启用)

如果注册表键不存在,默认设置为2,这意味着在运行Windows XP或Windows Server 2003操作系统的主机上,除非主机从DHCP服务器接收到执行路由器发现选项,否则TCP/IP默认禁用ICMP路由器发现。

您还可以配置运行Windows Server 2003和路由与远程访问服务的服务器以支持作为路由器的ICMP路由器发现。http://technet2.microsoft.com/windowsserver/en/library/a70f1bb7-d2d4-49f0-96d6-4b7414ecfaae1033.mspx?mfr=true 包含有关哪个DHCP选项控制此设置的更多详细信息。

基于以上信息,您可以判断您的系统是否受此漏洞影响。

接下来,我们将更详细地探讨IGMP漏洞,并解释为什么尽管我们在大多数平台上将其评级为严重,但我们认为在实践中成功利用以实现远程代码执行的可能性不大。

更新:文本已更新为正确的CVE编号。

  • 安全漏洞研究与防御博客团队
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计