SYN Flood
1.原理
先讲一下TCP的三次握手,如图6所示。

图6
首先请求端发送一个包含SYN标志的同步的TCP报文给服务器,服务器收到这个包后产生一个自己的SYN标志,并且把收到的包的SYN加1作为 ACK标志返回给请求端,请求端收到该包后又会发送一个ACK=SYN+1的包给服务器,经过这三次握手,连接才正式建立。而在服务器向请求端发返回包时,它会等待请求端的ACK确认包并会重试,这时这个连接被加到未完成的连接队列中,直到收到ACK应答后或超时(这段时间长度我们称为SYN Timeout,一般说来它是分钟的数量级,大约为30到120秒不等)才从队列中删除。而攻击者就是利用了这种等待,他会大量的模拟这种等待,服务器就会为了维护一个非常大的半连接列表而消耗非常多的资源(如此多的半连接,即使是简单的保存并遍历也会消耗大量的CPU处理时间和内存空间,何况还要不断的对这个列表中的IP地址进行“SYN+ACK”的重试)。如果服务器的TCP/IP栈不够强大的话,则会导致堆栈溢出崩溃,如果足够强大,那么也会忙于这些虚假请求而无暇顾及正常的请求。
SYN Flood图解,如图7所示:

图7
2.攻击
实现SYN Flood是非常简单的,网上有很多源程序可以下载。介绍一个国产的SYN Flood工具:SYN潜伏攻击者,如图8所示:

图8
3.防御
在防火墙上过滤掉来自同一主机的后续连接,但是在出现DoS这种全新的攻击方式后,SYN Flood将会特别令人担忧,很难防守,这在下面会提到。
