详解SYN Flood攻击原理与防范
SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,它是利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式……
SYN Flood攻击的监测与防御初探
对于SYN Flood攻击,特别是DDos,目前尚没有很好的监测和防御方法,不过如果系统管理员熟悉攻击方法和系统架构,通过一系列的设定,可以在最大程度上降低被攻击系统的负荷,不会对系统的正常工作造成无法挽回的影响。如果一台主机负荷突然升高甚至失去响应,使用Netstat 命令能看到大量SYN_RCVD的半连接,可以认定,这台主机遭到了SYN Flood攻击。
遭到SYN Flood攻击后,首先要做的是取证,通过在命令行下使用 Netstat –n –p tcp >resault.txt记录目前所有TCP连接状态是必要的,如果有嗅探器或TcpDump之类的工具,详细记录TCP SYN报文会更有助于追查和防御,需要记录的字段有:源地址、IP首部中的标识、TCP首部中的序列号、TTL值(Time to Life,生存周期)等,这些信息虽然很可能是攻击者伪造的,但是用来分析攻击攻击程序不无帮助。特别是TTL值,如果大量的攻击包似乎来自不同的IP但是TTL值却相同,我们往往能推断出攻击者与我们之间的路由器距离,至少也可以通过过滤特定TTL值的报文降低被攻击系统的负荷,确保TTL值与攻击报文不同的用户就可以恢复正常访问。
对于Win2000系统,还可以通过修改注册表降低SYN Flood的危害,在注册表中作如下改动:
首先,打开regedit,找到[HKEY_LOCAL_MACHINE\Sytem\CurrentControlSet\Services\Tcpip\Parameters]
增加一个SynAttackProtect的键值,类型为REG_DWORD,取值范围是0-2,这个值决定了系统受到SYN攻击时采取的保护措施,包括减少系统SYN+ACK的重试的次数等,默认值是0(没有任何保护措施),推荐设置为2;
增加一个TcpMaxHalfOpen的键值,类型为REG_DWORD,取值范围是100-0xFFFF,这个值是系统允许同时打开的半连接数,默认情况下windows2000是100,ADVANCED SERVER版本的windows 2000是500,这个值很难确定,取决于服务器TCP负荷的状况和可能受到的攻击强度。具体的值需要经过管理员的尝试测试/预测一下访问峰值时期的半连接打开量,以其作为参考设定TcpMaxHalfOpenRetried的值,需要保留一定的余量,然后再以TcpMaxHalfOpenRetried的1.25倍作为TcpMaxHalfOpen值,这样可以最大限度地发挥windows 2000自身的SYN攻击保护机制。
增加一个TcpMaxHalfOpenRetried的键值,类型为REG_DWORD,取值范围是80-0xFFFF,默认情况下windows2000是80,ADVANCED SERVERwindows2000是400,这个值决定了在什么情况下系统会打开SYN攻击保护。
我们来分析一下windows 2000的SYN攻击保护机制:正常情况下,windows 2000对TCP连接的三次握手有一个常规的设置,包括SYN Timeout时间、SYN-ACK的重试次数和SYN报文从路由器到系统再到Winsock的延时等,这个常规设置是针对系统性能进行优化的,所以可以给用户提供方便快捷的服务;一旦服务器受到攻击,SYN半连接的数量超过TcpMaxHalfOpenRetried的设置,系统会认为自己受到了SYN Flood攻击,此时设置在SynAttackProtect键值中的选项开始作用,SYN Timeout时间被减短,SYN-ACK的重试次数减少,系统也会自动对缓冲区中的报文进行延时,避免对TCP/IP堆栈造成过大的冲击,力图将攻击危害减到最低;如果攻击强度不断增大,超过了TcpMaxHalfOpen值,此时系统已经不能提供正常的服务了,更重要的是保证系统不会崩溃,所以系统将会丢弃任何超出TcpMaxHalfOpen值范围的SYN报文(应该是使用随机丢包策略),保证系统的稳定性。
通过设置注册表防御SYN Flood攻击,采用的是被动的策略,无论系统如何强大,始终不能靠被动的防护支撑下去,下面我们来看看另外一种比较有效的方法。
我称这种策略为“牺牲”策略,基于SYN Flood攻击代码的一个缺陷,我们重新来分析一下SYN Flood攻击者的流程:SYN Flood程序有两种攻击方式,基于IP的和基于域名的,前者是攻击者自己进行域名解析并将IP地址传递给攻击程序,后者是攻击程序自动进行域名解析,但是它们有一点是相同的,就是一旦攻击开始,将不会再进行域名解析,我们就是要利用这一点,假设一台服务器在受到SYN Flood攻击后迅速更换自己的IP地址,那么攻击者仍在不断攻击的只是一个空的IP地址,并没有任何主机,而管理员只需将DNS解析更改到新的IP地址就能在很短的时间内恢复用户通过域名进行的正常访问,这种做法取决于DNS的刷新时间。为了迷惑攻击者,我们甚至可以放置一台“牺牲”服务器,对攻击数据流进行牵引。
同样的原因,在众多的负载均衡架构中,基于DNS解析的负载均衡本身就拥有对SYN Flood的免疫力,基于DNS解析的负载均衡能将用户的请求分配到不同IP的服务器主机上,攻击者的一次攻击永远只能是其中一台服务器,虽然说攻击者也能不断去进行DNS请求来持续对用户的攻击,但是这样增加了攻击者的攻击强度,同时由于过多的DNS请求,可以帮助管理员查找到攻击者的地址,这主要是由于DNS请求需要返回数据,而这个数据是很难被伪装的。
如今DDOS攻击仍然没有彻底的解决方案,但各个厂商都在考虑将负载均衡、流量牵引以及带宽控制等技术综合利用,配合不断生机的包分析能力,甚至虚拟技术,力求将SYN Flood攻击降到最低点。让用户和我拭目以待新产品和新技术的诞生。
IT专家网原创文章,未经许可,严禁转载!
- 本文关键词:

