SYN flood
SYN flood或称SYN洪水、SYN洪泛是一种阻断服务攻击,起因于攻击者传送一系列的SYN
请求到目标系统。[1][2]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Tcp_normal.svg/220px-Tcp_normal.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Tcp_synflood.png/220px-Tcp_synflood.png)
当用户端试著与伺服器间建立TCP连线时,正常情况下用户端与伺服器端交换一系列的信息如下:
- 用户端透过传送
SYN
同步(synchronize)信息到伺服器要求建立连线。 - 伺服器透过响应用户端
SYN-ACK
以抄收(acknowledge)请求。 - 用户端答应
ACK
,连线随之建立。
这即是所谓TCP三向交握,并且这是每个使用TCP传输协议建立连线的基础。
SYN flood是一种广为人知的攻击,一般对现代网路不太有效。这种攻击只有在伺服器在收到SYN
后分配资源,但在收到ACK
之前这个区段有效。
SYN flood攻击目前有两种方法,不过都与伺服器端没收到ACK
有关。恶意用户可以跳过传送最后的ACK
信息;或者在SYN
里透过欺骗来源IP位址,这让伺服器送SYN-ACK
到假造的IP位址,因此永不可能收到ACK
。因为没有ACK
也可能是因为一次简单的网络堵塞造成的,所以伺服器会花点时间等抄收通知。
如果这些半开通连线绑定伺服器资源,透过海量SYN
信息淹没伺服器是有可能耗尽其资源。一旦所有资源都拨给半开通连线所保留,没有新的连线(不管合法不合法)可被建立,导致阻断服务攻击。如果系统调用函数需要使用到此类被消耗资源,某些系统可能会出现极为严重的故障,甚至宕机。
过去(1996年)用来分配资源给半开通连线的技术牵涉到通常相当短的伫列[3]。伫列的每个空位可在连线完成、或者到期时[4]被清空。当伫列满时,新进来的连线建立会失败。以上面的范例来说,所有新进来的连线在总共8个封包被送出之前会被阻挡下来。也就是说,每3分钟正时算好的8个封包将阻断所有新进的TCP连线完成。这让这种阻断服务攻击只须占很小的传输量。
建议的反制方法包括SYN cookie或者限定某一段时间内来自同一来源请求新连线的数量,不过因为现代的TCP/IP堆叠没有上面所述的瓶颈,因此介于SYN flood与其它种基于通道容量类型的攻击应该会只有很小或几乎没有差别。
反射路由器亦可以被攻击者所利用,以取代客户端机器。SYN讲的是黑客利用TCP协议发送大量的半连接请求去攻击目标服务器或者主机,致使目标服务器发生拒绝服务,或者蓝屏。
对策
编辑在 RFC 4987 中有许多著名的对策,包括:
- 过滤
- 增加积压
- 减少SYN-RECEIVED定时
- 复用古老的半开通TCP
- SYN缓存
- SYN Cookie
- 混合方法
- 防火墙和代理
相关概念
编辑参考资料
编辑外部链接
编辑- CERT官方对SYN攻击的建议(页面存档备份,存于互联网档案馆)
- Iptables protege contra SYN FLOOD?. [2008-09-25]. (原始内容存档于2008-06-28) (巴西葡萄牙语).