一、预防
SYN
攻击
SYN
攻击利用
TCP/IP
连接建立机制中的漏洞。为了进行
SYN flood
攻击,攻击者会使用程序来发送大量的
TCP SYN
请求来填充服务器上的挂起连接队列。这会阻止其他用户建立网络连接。
1
、启用
SYN
攻击保护(防范
DoS
)
启用
SYN
攻击保护的命名值位于注册表项
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
之下。
值名称:
SynAttackProtect
推荐值:
1
有效值:
1
或
0
。默认配置对于
Windows Server 2003 SP1
为
1
(已启用)。
说明:
使
TCP
来调整
SYN-ACKS
的重传。配置该值后,连接响应在
SYN
攻击事件中会更快地超时。在超过
TcpMaxHalfOpen
或
TcpMaxHalfOpenRetried
值时,触发
SYN
攻击。
此项允许
TCP
调整
SYN-ACK
的重新传输。如果配置此项,连接请求
(SYN)
攻击中未完成的传输开销会降低。使用此项可配置
Windows
发送路由器发现消息作为广播代替多播(如在
RFC 1256
中说明的)。默认情况下,如果启用路由器发现,路由器发现请求将被发送到所有路由器多播组
(224.0.0.2)
。
漏洞:
在
SYN
淹没攻击中,攻击者向服务器持续发送
SYN
数据包流。服务器使处于半打开状态的连接一直保持打开状态,直至被淹没在庞大的数据流中而无法响应合法的请求。
对策:
将(
SynAttackProtect) Syn
攻击保护级别(防范
DoS
)
”
项的值配置为
“
如果探测到
SYN
攻击,连接很快超时
”
。
此注册表项的可能值为:
• 1
或
0
。默认配置对于
Windows Server 2003 SP1
为
1
(已启用)。
潜在影响:
此值将在连接指示中增加更多的延迟。如果发生
SYN
攻击,
TCP
连接请求的超时时间将很短。如果配置此注册表项,在每个适配器中配置的可伸缩窗口和
TCP
参数(包括初始往返时间
(RTT)
和窗口大小)、套接字选项将不再起作用。当计算机受到攻击时,任何套接字上的可伸缩窗口
(RFC 1323)
和为每个适配器配置的
TCP
参数(初始
RTT
,窗口大小)将不能再启用。无法启用这些选项的原因是,如果保护正在发挥作用,则在发送
SYN-ACK
之前不会查询路由缓存项,并且在此连接阶段,
Winsock
选项不可用。
2
、设置
SYN
保护阈值
以下值确定触发
SYN
保护的阈值。本部分中的所有项和值均位于注册表项
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
之下。这些项和值是:
•
值名称:
TcpMaxPortsExhausted
推荐值:
5
有效值:
0�C65535
说明:
指定必须在触发
SYN flood
保护之前超过的
TCP
连接请求阈值。
•
值名称:
TcpMaxHalfOpen
推荐值数据:
500
有效值:
100�C65535
说明:
启用
SynAttackProtect
后,该值指定
SYN_RCVD
状态中的
TCP
连接阈值。超过
SynAttackProtect
时,触发
SYN flood
保护。
•
值名称:
TcpMaxHalfOpenRetried
推荐值数据:
400
有效值:
80�C65535
说明:
启用
SynAttackProtect
后,该值指定至少发送了一次重传的
SYN_RCVD
状态中的
TCP
连接阈值。超过
SynAttackProtect
时,触发
SYN flood
保护。
3
、设置附加保护
本部分中的所有项和值均位于注册表项
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
之下。这些项和值是:
•
值名称:
TcpMaxConnectResponseRetransmissions
推荐值数据:
2
有效值:
0�C255
,默认配置为
2
。
在
SCE UI
中,下列选项分别对应于
0
、
1
、
2
和
3
:
•
不重新传输,
3
秒后中断的连接暂时半打开
• 3
秒,
9
秒后中断的连接保持半打开状态
• 3 & 6
秒,
21
秒后中断的连接保持半打开状态
• 3, 6, & 9
秒,
45
秒后中断的连接保持半打开
•
没有定义
说明:
控制在响应
SYN
请求时,取消尝试之前重传多少次
SYN-ACK
。在指定连接尝试中,每重新传输一次,继续重新传输的超时时间加倍。初始超时时间是
3
秒。
漏洞:
在
SYN
淹没攻击中,攻击者向服务器持续发送
SYN
数据包流。服务器使处于半打开状态的连接一直保持打开状态,直至被淹没在庞大的数据流中而无法响应合法的请求。
对策:
如果连接请求未确认,
SYN-ACK
重新传输
”
项的值配置为
“3
秒,
9
秒后中断的连接保持半打开状态
”
。
潜在影响:
如果将此值配置为大于或等于
2
,堆栈将在内部部署
SYN-ATTACK
保护。如果将此值配置为小于
2
,表示堆栈的
SYN-ATTACK
保护根本不读取注册表值。此项可缩短清理半打开
TCP
连接所需的默认时间。遭受强烈攻击的站点可降低该值至
1
。设置为
0
也有效。但是,如果此参数的设置是
0
,
SYN-ACK
根本不会重新传输,并在
3
秒钟后超时。如果值非常低,远端客户端的合法连接尝试可能会失败。
•
值名称:
TcpMaxDataRetransmissions
推荐值数据:
3
有效值:
0�C65535
,默认
5
说明:
指定在中断连接之前,
TCP
会将单独的数据段(不是连接请求段)重传几次。
TcpMaxDataRetransmissions
:重新传输未确认数据的次数(推荐
3
,默认
5
)。此项可控制中止连接前
TCP
重新传输单个数据段(非连接段)的次数。在连接中,每重新传输一次,继续重新传输的超时时间加倍。超时时间值将在响应恢复时重置。基本超时时间由连接中测量的往返时间动态确定。
漏洞:
如果从不向目标计算机传输的数据发送任何确认消息,则恶意用户可能耗尽目标计算机的资源。
对策:
将重新传输未确认数据的次数(推荐
3
,默认
5
)
”
项的值配置为
3
。
潜在影响:
在每个传出段传至
IP
时,
TCP
将启动重新传输计时器。如果计时器到期前指定段未收到数据确认,该段最多可再重新传输三次。
•
值名称:
EnablePMTUDiscovery
推荐值数据:
0
有效值:
0, 1
说明:
将该值设置为
1
(默认设置)会强迫
TCP
发现到远程主机的路径上的最大传输单位或最大数据包大小。攻击者可以强迫数据包分割,导致堆栈工作过度。指定为
0
会强迫来自主机连接的
576
字节的
MTU
不在本地子网上。
•
值名称:
KeepAliveTime
推荐值数据:
300000
有效值:
80�C4294967295
说明:
指定
TCP
隔多久会通过发送保持活动的数据包来尝试验证一次闲置连接仍然维持原样。
•
值名称:
NoNameReleaseOnDemand
推荐值数据:
1
有效值:
0, 1
说明:
指定计算机在收到名称释放请求时不释放其
NetBIOS
名称。
推荐值
|
值名称
|
值
(REG_DWORD)
|
SynAttackProtect
|
1
|
TcpMaxPortsExhausted
|
1
|
TcpMaxHalfOpen
|
500
|
TcpMaxHalfOpenRetried
|
400
|
TcpMaxConnectResponseRetransmissions
|
2
|
TcpMaxDataRetransmissions
|
3
|
EnablePMTUDiscovery
|
0
|
KeepAliveTime
|
300000 (5 minutes)
|
NoNameReleaseOnDemand
|
1
|