如何强化 TCP/IP 堆栈

      技术 2004-12-9 9:17

如何强化 TCP/IP 堆栈

 

如何强化 TCP/IP 堆栈

发布日期: 09/02/2004 | 更新日期: 09/02/2004
pponline

改进 Web 应用程序安全性:威胁和对策

J.D. Meier、Alex Mackman、Michael Dunner、Srinath Vasireddy、Ray Escamilla 和 Anandha Murukan

Microsoft Corporation

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

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

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

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

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

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

*
本页内容
预备知识 预备知识
防止 SYN 攻击 防止 SYN 攻击
防止 ICMP 攻击 防止 ICMP 攻击
防止 SNMP 攻击 防止 SNMP 攻击
AFD.SYS 保护 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

转到原英文页面


标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}