SYN洪水袭击 - AWS DDoS弹性最佳实践

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SYN洪水袭击

当用户连接到传输控制协议 (TCP) 服务(例如 Web 服务器)时,他们的客户端会发送一个SYN数据包。服务器返回同步确认 (SYN-ACK) 数据包,最后,客户端使用确认 () 数据包进行响应,该数据包完成了预期ACK的三次握手。下图说明了这种典型的握手。

描绘SYN三方握手的示意图

描绘SYN三方握手的示意图

在SYN洪水攻击中,恶意客户端发送大量SYN数据包,但从不发送最后ACK的数据包来完成握手。服务器只能等待对半开TCP连接的响应,其想法是目标最终会耗尽容量,无法接受新TCP连接,这会阻止新用户连接到服务器,但是实际影响更加细微差别。默认情况下,现代操作系统都实现了 SYN Cookie,以此作为抵御SYN洪水攻击导致状态表耗尽的机制。SYN队列长度达到预先确定的阈值后,服务器将使用ACK包含精心编制的初始序列号的 SYN-进行响应,而不在其SYN队列中创建条目。如果服务器随后收到ACK包含正确递增的确认号,则可以将该条目添加到其状态表中并照常进行。SYN洪水对目标设备的实际影响往往是网络容量和CPU耗尽,但是防火墙(或EC2安全组连接跟踪)等中间状态设备可能会出现TCP状态表耗尽并丢弃新连接