syn_flood攻击原理是什么?如何防范syn_flood攻击?

SYN- Flood攻击是网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,SYN- Flood攻击会造成可用TCP连接队列很快阻塞,系统资源急剧下降,致使服务不可用,危害巨大。本文介绍了syn_flood攻击原理以及对应的防范措施。

一、syn_flood攻击原理是什么?

syn_flood攻击利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。这种攻击早在1996年就被发现,但至今仍然显示出强大的生命力。很多操作系统,甚至防火墙、路由器都无法有效地防御这种攻击,而且由于它可以方便地伪造源地址,追查起来非常困难。

客户端发起连接的报文即为syn报文。当攻击者发送大量的伪造IP端口的syn报文时,服务端接收到syn报文后,新建一共表项插入到半连接队列,并发送syn_ack。但由于这些syn报文都是伪造的,发出去的syn_ack报文将没有回应。TCP是可靠协议,这时就会重传报文,默认重试次数为5次,重试的间隔时间从1s开始每次都番倍,分别为1s + 2s + 4s + 8s +16s = 31s,第5次发出后还要等32s才知道第5次也超时了,所以一共是31 + 32 = 63s。 

也就是说一共假的syn报文,会占用TCP准备队列63s之久,而半连接队列默认为1024,系统默认不同,可 cat /proc/sys/net/ipv4/tcp_max_syn_backlog c查看。也就是说在没有任何防护的情况下,每秒发送200个伪造syn包,就足够撑爆半连接队列,从而使真正的连接无法建立,无法响应正常请求。 

一台普通的每秒就可以轻松伪造100w个syn包。因此即使把队列大小调大最大也无济于事。  

二、如何防范syn_flood攻击?

针对syn_flood攻击有2种比较通用的防范机制:

1. cookie源认证:  

原理是syn报文首先由DDOS防护系统来响应syn_ack。带上特定的sequence number (记为cookie)。真实的客户端会返回一个ack 并且Acknowledgment number 为cookie+1。 而伪造的客户端,将不会作出响应。这样我们就可以知道那些IP对应的客户端是真实的,将真实客户端IP加入白名单。下次访问直接通过,而其他伪造的syn报文就被拦截。防护示意图如下:

2.reset认证:  

Reset认证利用的是TCP协议的可靠性,也是首先由DDOS防护系统来响应syn。防护设备收到syn后响应syn_ack,将Acknowledgement number (确认号)设为特定值(记为cookie)。当真实客户端收到这个报文时,发现确认号不正确,将发送reset报文,并且sequence number 为cookie + 1。 

而伪造的源,将不会有任何回应。这样我们就可以将真实的客户端IP加入白名单。 

通常在实际应用中还会结合首包丢弃的方式结合源认证一起使用,首包丢弃原理为:在DDOS防护设备收到syn报文后,记录5元组,然后丢弃。正常用户将重传syn报文,防护设备在收到报文命中5元组,并且在规定时间内,则转发。当重传syn报文到达一定阀值时,在启用上述的源认证。这样就能减少反射syn_ack报文的数量,缓解网络拥堵,同时对防护不产生影响。 

以上是syn_flood的攻击原理和防范措施,后续将分析TCP其他类型的攻击和防护。  

相关阅读:

Flood攻击有哪些类型?如何防御Flood攻击?

零日漏洞(0day)是什么?如何防范零日攻击?

盘点:常见UDP反射放大攻击的类型与防护措施

DDoS是什么?