如何强化 TCP/IP 堆栈

类别:编程语言 点击:0 评论:0 推荐:
Microsoft Corporation

请参阅着陆页以获得《改进 Web 应用程序安全性:威胁和对策》的起点和完整的概述。

摘要: 您可以在 Windows 注册表中配置各种 TCP/IP 参数,以便防止网络级拒绝服务的攻击,包括 SYN 洪水攻击、ICMP 攻击和 SNMP 攻击。您可以将注册表项配置为:

当检测到攻击时,启用 SYN 洪水保护。

设置用于确定攻击构成要素的阈值。

该方法文档为管理员展示了必须配置的注册表项和注册表值,以防止受到基于网络的拒绝服务攻击。

这些设置会修改 TCP/IP 在服务器上的工作方式。Web 服务器的特性将决定要触发拒绝服务对策的最佳阈值。有些值可能对您的客户端连接的限制非常严格。在部署到产品服务器之前,请先测试本文档的建议。

本页内容 预备知识 防止 SYN 攻击 防止 ICMP 攻击 防止 SNMP 攻击 AFD.SYS 保护 其他保护 缺陷 其他资源 预备知识

TCP/IP 是一种本质上不安全的协议。但是,Windows 2000 实现可以使您配置其操作以防止网络的拒绝服务攻击。默认情况下,本文中所涉及的一些项和值可能并不存在。在这些情况下,请创建该项、值或值数据。

有关 Windows 2000 的注册表所控制的 TCP/IP 网络设置的详细信息,请参阅白皮书“Microsoft Windows 2000 TCP/IP Implementation Details”,位于 http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.asp。

防止 SYN 攻击

SYN 攻击利用 TCP/IP 连接建立机制中的安全漏洞。要发动 SYN 洪水攻击,攻击者要使用程序来发送大量的 TCP SYN 请求来填充服务器上挂起的连接队列。这将导致其他用户无法建立网络连接。

要防止网络受到 SYN 攻击,请遵循下列通用的步骤,这些步骤稍后将于本文档中进行解释:

启用 SYN 攻击保护

设置 SYN 保护阈值

设置其他保护

启用 SYN 攻击保护

启用 SYN 攻击保护的命名值位于下面的注册表项中: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.

值名称:SynAttackProtect

建议值: 2

有效值: 0 - 2

说明: 引起 TCP 调整 SYN-ACKS 的重新传输。如果您配置这个值,当发生 SYN 攻击时,连接响应的超时速度会比较快。当超出 TcpMaxHalfOpenTcpMaxHalfOpenRetried 的值时,便会触发 SYN 攻击。

设置 SYN 保护阈值

下列值确定要触发的 SYN 保护的阈值。本部分中的所有项和值都位于注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 中。这些项和值如下所示:

值名称:TcpMaxPortsExhausted

建议值: 5

有效值: 0-65535

说明: 指定 TCP 连接请求的阈值,必须超过该阈值才会触发 SYN 洪水保护。

值名称:TcpMaxHalfOpen

建议值数据: 500

有效值: 100-65535

说明: 启用 SynAttackProtect 时,该值会指定在 SYN_RCVD 状态下的 TCP 连接的阈值。超过 SynAttackProtect 时,便会触发 SYN 洪水保护。

值名称:TcpMaxHalfOpenRetried

建议值数据: 400

有效值: 80-65535

说明: 启用 SynAttackProtect 时,该值指定在 SYN_RCVD 状态下的 TCP 连接的阈值,其中至少已经进行了一次重新传输。超过 SynAttackProtect 时,便会触发 SYN 洪水保护。

设置其他的保护

本部分中的所有项和值都位于注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 中。这些项和值如下所示:

值名称:TcpMaxConnectResponseRetransmissions

建议值数据: 2

有效值: 0-255

说明: 对取消尝试响应 SYN 请求之前要重新传输 SYN-ACK 的次数进行控制+。

值名称:TcpMaxDataRetransmissions

建议值数据: 2

有效值: 0-65535

说明: 指定 TCP 在中止连接前,要重新传输单独数据片断(而并非连接请求片断)的次数。

值名称:EnablePMTUDiscovery

建议值数据: 0

有效值: 0, 1

说明: 将该值设置为 1(默认值)时,便会强制 TCP 在到远程主机的路径上找到最大传输单位或最大数据包大小。攻击者可能会强制数据包分割,造成堆栈负荷过重。将该值设置为 0 会强制不是本地子网的主机连接都使用 576 字节的 MTU。

值名称:KeepAliveTime

建议值数据: 300000

有效值: 80-4294967295

说明: 通过发送保持活动数据包,指定 TCP 尝试验证闲置连接是否仍然原封不动的频率。

值名称:NoNameReleaseOnDemand

建议值数据: 1

有效值: 0, 1

说明: 当计算机接收到名称释放请求时,指定不要释放计算机的 NetBIOS 名称。

请使用表 1 中总结的值来建立最大保护。

表 1 建议值 值名称 值 (REG_DWORD)

SynAttackProtect

2

TcpMaxPortsExhausted

1

TcpMaxHalfOpen

500

TcpMaxHalfOpenRetried

400

TcpMaxConnectResponseRetransmissions

2

TcpMaxDataRetransmissions

2

EnablePMTUDiscovery

0

KeepAliveTime

300000 (5 minutes)

NoNameReleaseOnDemand

1

防止 ICMP 攻击

本部分中指定的值位于注册表项HKLM\System\CurrentControlSet\Services\AFD\Parameters

值:EnableICMPRedirect

建议值数据: 0

有效值: 0(禁用)、1(启用)

说明: 将该注册表值修改为 0 可以防止接收到 ICMP 重定向数据包时,创建代价高昂的主机路由。

请使用表 2 中总结的值来建立最大保护。

表 2 建议值 值名称 值 (REG_DWORD)

EnableICMPRedirect

0

防止 SNMP 攻击

本部分中指定的值位于注册表项HKLM\System\CurrentControlSet\Services\Tcpip\Parameters 下。

值:EnableDeadGWDetect

建议值数据: 0

有效值: 0(禁用)、1(启用)

说明: 防止攻击者强制切换到次要网关

请使用表 3 中总结的值来建立最大保护。

表 3 建议值 值名称 值 (REG_DWORD)

EnableDeadGWDetect

0

AFD.SYS 保护

下列项指定内核模式驱动程序 Afd.sys 的参数。Afd.sys 用于支持 Windows 套接字应用程序。本部分中的所有项和值都位于注册表项 HKLM\System\CurrentControlSet\Services\AFD\Parameters 中。这些项和值如下所示:

值:EnableDynamicBacklog

建议值数据: 1

有效值: 0(禁用)、1(启用)

说明: 指定 AFD.SYS 功能来有效抵御大量的 SYN_RCVD 连接。有关详细信息,请参阅“Internet Server Unavailable Because of Malicious SYN Attacks”,位于 http://support.microsoft.com/default.aspx?scid=kb;en-us;142641。

值名称:MinimumDynamicBacklog

建议值数据: 20

有效值: 0-4294967295

说明: 指定侦听终结点上允许的可用连接的最小数量。如果可用连接的数目低于该值,线程便会排入队列以创建其他的可用连接。

值名称: MaximumDynamicBacklog

建议值数据: 20000

有效值: 0-4294967295

说明: 指定可用连接再加上 SYN_RCVD 状态中的连接的总数的最大值。

值名称:DynamicBacklogGrowthDelta

建议值数据: 10

有效值: 0-4294967295

默认为存在: No

说明: 指定需要其他连接时将创建的可用连接数量。

请使用表 4 中所总结的值来建立最大保护。

表 4 建议值 值名称 值 (REG_DWORD)

EnableDynamicBacklog

1

MinimumDynamicBacklog

20

MaximumDynamicBacklog

20000

DynamicBacklogGrowthDelta

10

其他保护

本部分中的所有项和值都位于注册表项 HKLM\System\CurrentControlSet\Services\Tcpip\Parameters 中。

保护筛选的网络详细信息

网络地址转换 (NAT) 用于筛选来自传入连接的网络。攻击者可以使用 IP 源路由来避开该筛选以确定网络拓扑。

值:DisableIPSourceRouting

建议值数据: 1

有效值: 0(转发所有数据包)、1(不转发源路由的数据包)、2(丢弃所有传入源路由的数据包)。

说明: 禁用 IP 源路由,发送方可以利用 IP 源路由来确定数据包通过网络时应该采用的路由。

避免接收分段的数据包

处理分段数据包的代价可能很高。虽然拒绝服务极少来自周边网络的内部,但是该设置可以防止分段数据包的处理。

值:EnableFragmentChecking

建议值数据: 1

有效值: 0(禁用)、1(启用)

说明: 防止 IP 堆栈接受分段的数据包。

不转发送往多主机的数据包

多主机可能会响应多播数据包,进而造成在网络中广泛传播的响应。

值:EnableMulticastForwarding

建议值数据: 0

有效范围: 0 (false)、1 (true)

说明: 路由服务使用这个参数来控制是否要转发 IP 多播。该参数是由路由和远程访问服务创建的。

只有防火墙在网络间转发数据包

多主服务器不能在所连接的各个网络间转发数据包。防火墙是明显的例外。

值:IPEnableRouter

建议值数据: 0

有效范围: 0 (false)、1 (true)

说明: 将该参数设置为 1 (true) 可使系统在所连接的各个网络间路由 IP 数据包。

掩码网络拓扑详细信息

使用 ICMP 数据包可以请求主机的子网掩码。公开该信息本身并无大碍;但是,多主机的响应可能会被用于构建内部网络的信息。

值:EnableAddrMaskReply

建议值数据: 0

有效范围: 0 (false)、1 (true)

说明: 该参数控制计算机是否响应 ICMP 地址掩码请求。

请使用表 5 中总结的值来建立最大保护。

表 5 建议值 值名称 值 (REG_DWORD)

DisableIPSourceRouting

1

EnableFragmentChecking

1

EnableMulticastForwarding

0

IPEnableRouter

0

EnableAddrMaskReply

0

缺陷

测试这些值的更改时,请根据您在生产中预期使用的网络卷来进行测试。这些设置会修改被认为是正常的阈值,而且偏离经过测试的默认值。如果各个客户端的连接速度差异很大,那么有些设置可能过于狭隘而无法稳定地支持客户端。

其他资源

有关 TCP/IP 的其他详细信息,请参考下列资源:

有关强化 TCP/IP 堆栈的详细信息,请参阅 Microsoft 知识库文章 315669“How To:Harden the TCP/IP Stack Against Denial of Service Attacks in Windows 2000”。

有关 Windows 2000 TCP/IP 实现的详细信息,请参阅 Lee Davies 的“Windows 2000 TCP/IP Protocols and Services”(Microsoft Press 书籍)。

有关 Windows 2000 TCP/IP 实现的详细信息,请参阅 TechNet 网站上的“Microsoft Windows 2000 TCP/IP Implementation Details”,位于 http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.asp。

本文地址:http://com.8s8s.com/it/it26198.htm