PDA

查看完整版本 : 如何发现,减弱,防范SYN FLOOD


Tony
2003-10-22, 07:32 PM
第一部分:Synflood的监视和识别 

就目前来说,Synflood是针对IPv4的协议漏洞进行攻击,根本没有彻底的解决办法和防御办法。只能使用某些手段来减轻系统负荷,降低损失。对Synflood进行识别,如果发现系统负荷突然上升(例如IIS所提供的Web服务不能正常的访问,如***的网站时好时坏,很难建立http连接),我们可以通过Win2000自带的命令行工具Netstat来对当前的网络连接情况进行查看,如果发现有很多的SYN_RCVD连接存在,则我们可以大致的推断出当前系统正在受到Synflood攻击。

 另外我们可以利用Netstat -n -p tcp>log.txt 来记录当前的连接状况,或者我们可以利用一些Sniffer工具来查看连接状况。 


Microsoft Windows 2000 [Version 5.00.2195] (C) 版权所有 1985-2000 Microsoft Corp. C:\>Netstat -n -p tcp Active Connections Proto Local Address Foreign Address State TCP 61.149.33.44:4212 66.115.177.42:80 CLOSE_WAIT TCP 61.149.33.44:4299 61.139.77.80:6667 ESTABLISHED TCP 61.149.33.44:4332 207.46.106.188:1863 ESTABLISHED TCP 61.149.33.44:4633 202.108.44.204:110 TIME_WAIT TCP 61.149.33.44:4634 202.108.44.204:110 TIME_WAIT C:\>


 


Proto:协议 Local Address:本地地址以及端口 Foreign Address:外部地址以及端口 State:连接状态
 

根据上面的记录状况,我们可以很清楚地了解,当前系统是否正在受到Synflood的攻击。

如果发现记录中有很多连接状态(State)属于SYN_RCVD并且Local Address为本地的80端口的话。就能大致说明有Synflood攻击本地Web端口。
 

第二部分:Synflood的抵御方案

单机修改本机TCP/IP参数,来降低损失
 

通过修改TCP/IP注册表键值强化Win2000自身的TCP/IP堆栈

注意:在修改注册表之前,必须对注册表进行备份。以防止系统难以修复。

以下的键位于HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters 下

首先打开Regedit,找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters ;

--------------------------------------------------------------------------------

键的名称: SynAttackProtect
键的具体位置: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Tcpip\Parameters
键的类型: REG_DWORD
可选值: 0,1,2
系统默认值: 0

该注册表键值能够引起TCP来调节SYN-ACKS的重发。在配置该键值之后,当系统受到SYN攻击时连接的超时响应时间将会大大加快。

下面是该键具体可设置值的描述:

· 0 (系统默认值): 该值为系统默认值,当SynAttackProtect设置为1的时候,系统几乎不具有抵御Synflood攻击的能力。

· 1: 设置SynAttackProtect为1能够更好的防御SYNflood攻击。该参数将引起TCP来调节SYN-ACKS的重发。在配置该键值为1之后,当系统受到SYN攻击时连接的超时响应时间将会大大加快。Windows系统使用下列键值来检测系统是否正在遭受Synflood攻击:

o TcpMaxPortsExhausted

o TCPMaxHalfOpen

o TCPMaxHalfOpenRetried

· 2:设置SynAttackProtect为2能够最好的抵御Synflood攻击。该值添加了附加的延时到连接指示,并且在系统遭受到Synflood攻击时,TCP连接超时响应加快了更多。该参数是推荐的配置。

注意:当SynAttackProtect设置为2时,当系统发现自己受到攻击时,任何套接字上的下列选项不再启用:
可缩放窗口 (RFC 1323)
每个适配器上已配置 TCP 参数(初始 RTT、窗口大小)

这是因为当保护生效时,在发送 SYN-ACK 之前不再查询路由缓存项,并且连接过程中
Winsock 选项不可用。 

说明:SYN 攻击保护包括减少 SYN-ACK 重传次数,以减少分配资源所保留的时间。路由缓存项资源分配延迟,直到建立连接为止。如果 synattackprotect = 2,则 AFD 的连接指示一直延迟到三路握手完成为止。注意,仅在 TcpMaxHalfOpen 和 TcpMaxHalfOpenRetried 设置超出范围时,保护机制才会采取措施。 

--------------------------------------------------------------------------------

键的名称: EnableDeadGWDetect
键的具体位置: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Tcpip\Parameters
键的类型: REG_DWORD
可选值: 0, 1 (False, True)
系统默认值: 1 (True)

下面是该键具体可设置值的描述:
1: 系统默认值,当你设置EnableDeadGWDetect为1时,TCP允许执行Dead-Gateway检查。当Ded-Gateway检查激活时,且一定数量的连接连接困难时,TCP将向IP请求切换到备份网关。备份网关在TCP/IP配置对话框里面的高级选项中配置。
0: 推荐值,如果没有把该键值设置为0,攻击可以强制服务器切换网关到备份网关上。
说明:当该参数设为 1 时,允许 TCP 执行间隔网关检测。启用该功能时,如果处理多个连接有困难时,TCP 可以请求 IP 改到备份网关。备份网关可以在“网络控制面板”中“TCP/IP 配置”对话框的“高级”部分进行定义。

--------------------------------------------------------------------------------

键的名称: EnablePMTUDiscovery
键的具体位置: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Tcpip\Parameters
键的类型: REG_DWORD
可选值: 0, 1 (False, True)
系统默认值: 1 (True)

下面是该键具体可设置值的描述:
1: 系统默认值,当你设置EnablePMTUDiscovery为1时,CP 将查找到达远程主机路径上的最大传输单位(MTU 或最大的数据包大小) 通过发现路径 MTU 并将 TCP 字段限制到这个大小,TCP 可以限制在连结到不同的 MTU 网络的路由器上的碎片。碎片会影响TCP 吞吐量和网络堵塞。
0: 推荐值。 会导致为所有不在本地子网上主机连接使用 576 字节的 MTU。 

--------------------------------------------------------------------------------

键的名称: KeepAliveTime
键的具体位置: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Tcpip\Parameters
键的类型: REG_DWORD(时间,单位毫秒)
可选值: 1-0xFFFFFFFF
默认值: 7,200,000 (2个小时)
推荐值: 300,000 (5分钟)

通过发送保留的数据包,该参数可确定 TCP 要隔多长时间验证一次闲置连接仍仍未断开。如果远程系统仍可以连接并正在运行,它就会确认保留传输。默认情况下,不发送保留数据包。应用程序可以在连接上启用这一功能。推荐设置该键值为300,000(5分钟)。

--------------------------------------------------------------------------------

在上面我们提到了TcpMaxHalfOpen和TcpMaxHalfOpenRetried两个键值,说明如下: 

键的名称:TcpMaxHalfOpen 

键的具体位置: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Tcpip\Parameters 

数值类型: REG_DWORD - 数字 

有效范围: 100-0xFFFF 

默认值: 100 (Professional、Server)、500 (Advanced Server) 

说明:该参数控制 SYN 攻击保护启动前允许处于 SYN-RCVD 状态的连接数量。如果将 SynAttackProtect 设为 1,确保该数值低于要保护的端口上 AFD 侦听预备的值。这个值很难确定,取决于服务器TCP负荷的状况和可能受到的攻击强度,具体的值需要经过试验才能决定。

键的名称:TcpMaxHalfOpenRetried 

键的具体位置: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Tcpip\Parameters

数值类型: REG_DWORD - 数字 

有效范围: 80-0xFFFF 

默认值: 80 (Professional、Server)、400 (Advanced Server) 

说明:该参数控制在 SYN 攻击保护启动前处于 SYN-RCVD 状态的连接数量,对于该连接至少有一个 SYN 重传已经发送。这个值决定了在什么情况下系统会打开SYN攻击保护。

TcpMaxPortsExhausted

该值项的默认值为5,表示定义了系统拒绝连接请求的次数。当系统保留的连接端口都被使用掉时,系统将拒绝所有的连接请求。SYN淹没攻击通常会发生这种情况,因此保护特性将该值作为SYN淹没攻击发生的一个征兆。当被拒绝的连接请求的数目超过该值项的定义时,系统认为SYN淹没攻击发生了,自动启用保护特性。