一、SYN攻击
TCP连接三次握手是酱紫的:
Client Server
------------ ------------
1. SYN-------------------->
2. <--------------------SYN-ACK
3. ACK-------------------->
4. <----- 数据通信 ----->
1.首先是Client发送一个SYN报文给服务端
2.然后这个服务端发送一个SYN-ACK包以回应Client,
3.接着,Client就返回一个ACK包来实现一次完整的TCP连接。
4.就这样,Client到Server的连接就建立了,就可以互相交换数据了。
但是这么个情况,Server可能收不到第3步中Client发来的ACK。“握手握到一半”就是所谓的半开放连接。
Server需要耗费一定的系统资源来维护这个未决的连接(当然未决连接数是有受限的),来等待ACK。
恶意者可以通过创建很多的半开放式连接来发动SYN洪水攻击。
受攻击的Server永远不会得到第3步的ACK,半开放连接将最终耗用所有的TCP资源,受害者将不能再接收任何其他的TCP请求。
当然,等待ACK返回包有超时限制,所以半开放连接将最终超时,而受害者系统也会自动修复。虽然这样,但是在受害者系统修复之前,攻击者可以很容易的一直发送虚假的SYN请求包来持续攻击。
这种攻击不会影响到已经存在的进站或者是出站连接。虽然这样,受害者系统还是可能耗尽系统资源,以导致其他种种问题。
当受到SYN洪水攻击时,使用netstat查看TCP连接状况时,会发现大量的SYN_RECV状态的socket。
当然,高并发情况下,accept的不及时,会看到SYN_RECV这种状态
二、SYN cookie
SYN cookie就是用一个cookie来响应TCP
SYN请求的TCP实现,用来防止SYN洪水攻击。
在正常的TCP实现中,当Server接收到一个SYN数据包,他返回一个SYN-ACK包来应答,然后进入TCP-
SYN-RECV(半开放连接)状态来等待最后返回的ACK包。Server用一个数据空间来描述所有未决的连接,然而这个数据空间的大小是有限的,所以攻击者将塞满这个空间。
在TCP SYN
COOKIE的执行过程中,当Server接收到一个SYN包的时候,他返回一个SYN-ACK包,这个数据包的ACK序列号是经过加密的,也就是说,它由源地址、端口源次序、目标地址、目标端口和一个加密种子计算得出,然后Server释放所有的状态。
一个ACK包从Client返回,Server将计算它来判断它是不是上个SYN-ACK的返回包。
若是,Server就可以直接进入TCP连接状态并打开连接。
这样,Server就可以避免守侯半开放连接了。
现在SYN COOKIE已经是linux内核的一部分了(默认配置是no),但它只保护本地linux系统。
三、SYN Cookie Firewall
SYN COOKIE Firewall就是使用SYN cookie的Firewall,有些高级路由器支持SYN Cookie Firewall功能。
它可以保护你的网络,避免遭受SYN洪水攻击。
下面是SYN cookie firewall的原理 :
client firewall server
------ ---------- --------
1. SYN------------->
2. <------------SYN-ACK(cookie)
3. ACK------------->
4. SYN----------------->
5. <--------------SYN-ACK
6. ACK----------------->
7. <------------> 数据relay <--------->
简单来说,就是Client必须先跟Firewall设备建立TCP连接,然后才能和Firewall后面的Server通信。
这样,Firewall设备就成了SYN洪水攻击的目标,后面网络的Server就被保护起来。
而Firewall设备用SYN cookie来应付SYN洪水攻击
四、相关资源
ip_scfw-0.92.tar.gz ()
最新的版本,他包括一个for linux 2.2.17内核的补丁和管理工具,下载他并按照readme文件安装。
Design ()
是一个详细的解释了这个代码的文档,它也包含在这个tar-gz包内,你也可以在线阅读它
ChangeLog ()
说到了这个计划的进展。
tcpdos.tgz ()
一个发起SYN洪水攻击的工具,你可以使用它来测试你的SYN cookie防火墙
阅读(2525) | 评论(0) | 转发(1) |