通过注册表值修改加强TCP/IP防止DoS[转帖]

作者 TombCrow, 2004 七月 23, 20:59:05

« 上一篇主题 - 下一篇主题 »

TombCrow

chen23547发表于蓝色魔法论坛

通过注册表值修改加强TCP/IP堆栈以防止拒绝服务式攻击(DoS)

摘要:

拒绝服务式攻击是一种旨在让一台联网计算机或者运行某些服务的服务器无法被网络用户访问的网络攻击行为,拒绝服务式攻击很难被防范。防范这种攻击,你可以用到以下两种解决方案:

·保证你的操作系统安装了最新的安全补丁(可以通过开始菜单中的Windows Update轻松获得,而不用去微软安全公告板自行查找 --chen23547注)
·加强基于Windows 2000的工作站或者服务器上的传输控制协议和Internet通讯协议(TCP/IP)堆栈。系统默认的TCP/IP堆栈配置只为进行一般的Internet通讯而设定,如果你把一台机器直接连接到Internet,我们建议你加强TCP/IP堆栈以防范拒绝服务式攻击。

加强TCP/IP堆栈的TCP/IP注册表项
(警告部分从略,用户应当充分意识到修改注册表可能带来的后果,并在修改前备份注册表---chen23547注)

下面的列表提供了与TCP/IP相关的注册表值,你可以通过一定修改达到加强与Internet直接连接计算机的TCP/IP堆栈的目的。这些相关注册表值都包含在下面的注册表键中:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices
[注意:所有键值如非特别说明,均用16进制代码表示]

一、
·值:SynAttackProtect
·键:TcpipParameters
·值类型:REG_DWORD
·值域:0、1、2
·默认设定:0

这个注册表值可以引起TCP/IP调整SYN-ACKS的中继(转播),当你配置这个值以后,遇到SYN攻击(一种拒绝服务攻击)时候的连接响应超时将会更快。

以下列表列出了你在这个注册表值中可以用的所有参数的详细说明:
·0:默认设定,设定SynAttackProtect到0提供计算机遇到SYN攻击的时候最基本的防护
·1:设定SynAttackProtect为1以获得更好一些的遇到SYN攻击时的计算机防护。这个参数使得TCP可以调整SYN-ACKS的中继。当你设定SynAttackProtect为1以后,遇到SYN攻击时的TCP的连接响应超时将会更加快。Windows使用下列值判断是否一个SYN攻击正在进行:TcpMaxPortsExhausted、TCPMaxHalfOpen、TCPMaxHalfOpenRetried
·2:设定SynAttackProtect为2可以获得最好的SYN攻击防护。这个值对连接使用了额外的延迟,并且可以在遭受到SYN攻击的时候更快的将连接超时。我们建议使用这个参数作为此键值的配置。[注意:当你设定此键值到2以后,下列Socket选项将不再工作在任何Socket上:Scalable windows、TCP parameters that are configured on each adapter]

二、
·值:EnableDeadGWDetect
·键:TcpipParameters
·值类型:REG_DWORD
·值域:0、1(无效、有效)
·默认设定:1(有效)

以下列表列出了你可以在这个键值中使用的参数的详细说明:
·1:当你设定EnableDeadGWDetect为1,TCP就会尝试找到最大的传输单元(MTU)或者是通过这条通道到达远端主机的最大的包的大小。由于通过发现此通道的MTU并且限制TCP段达到此大小而产生的使用不同的MTU值连接网络,此通道上的路由器因此而产生的碎片会被TCP排除掉。碎片相反的会影响TCP的效率。
·0:推荐你将EnableDeadGWDetect设定为0,一个576KB的MTU将会被应用到与所有非本地子网主机的通讯中。如果你不设定此键值为0,攻击者可以将MTU设定成一个非常小的值从而使你的TCP堆栈超负荷工作。

三、
·值:KeepAliveTime
·键:TcpipParameters
·值类型:REG_DWORD(时间单位是毫秒)
·值域:1-0xFFFFFFFF
·默认设定:7,200,000(两个小时)

这个键值控制TCP每隔多长时间就发送一个确认包来确认一个空闲的连接是否仍然有效。如果远端计算机连接仍然有效,这个确认包将会被返回。确认包在默认情况下不会被发送出去。你可以使用一个程序来配置某一连接上的值。推荐的值设定为:300,000 (五分钟)

四、
·值:NoNameReleaseOnDemand
·键:NetbtParameters
·值类型:REG_DWORD
·值域:0、1(有效、无效)
·默认设定:0(无效)

这个值用来探测当一台计算机接收到一个名称释放请求的时候是否释放掉它的NetBIOS名。这个值用来允许计算机管理员在计算机遇到一个恶意的名称释放攻击的时候,能够进行相应的防范。推荐将NoNameReleaseOnDemand的值设定为1[注意:要使用此键值,你必须确保操作系统已经安装了Service Pack 2(SP2)或者更晚的Service Pack版本]