TCP SYN洪水(又名SYN洪水)是一种分布式拒绝服务(DDoS)攻击,它利用正常TCP三向握手的一部分来消耗目标服务器上的资源并使其无响应。本质上,对于SYN flood DDoS,攻击者发送TCP连接请求的速度比目标机器处理请求的速度快,从而导致网络饱和。
什么是SYN洪水攻击
什么是SYN(同步)攻击
攻击描述
当客户端和服务器建立正常的TCP“三次握手”时,交换看起来像这样:
客户端通过向服务器发送SYN(同步)消息来请求连接。
服务器通过向客户端发送回SYN-ACK(同步确认)消息进行确认。
客户端以ACK(确认)消息响应,并建立连接。
在SYN泛洪攻击中,攻击者向目标服务器上的每个端口重复发送SYN数据包,通常使用伪造的IP地址。服务器不知道受到攻击,收到多个看似合法的请求以建立通信。它使用来自每个开放端口的SYN-ACK数据包响应每次尝试。
恶意客户端要么不发送预期的ACK,要么(如果IP地址被欺骗)从一开始就不会收到SYN-ACK。无论哪种方式,受到攻击的服务器都会等待一段时间来等待对其SYN-ACK数据包的确认。
在此期间,服务器无法通过发送RST数据包关闭连接,连接保持打开状态。在连接超时之前,另一个SYN数据包将到达。这导致越来越多的连接处于半开状态——事实上,SYN泛洪攻击也被称为“半开”攻击。最终,当服务器的连接溢出表填满时,对合法客户端的服务将被拒绝,服务器甚至可能出现故障或崩溃。
虽然上面描述的“经典”SYN泛洪试图耗尽网络端口,但SYN数据包也可用于DDoS攻击,这些攻击试图用虚假数据包堵塞您的管道以实现网络饱和。数据包的类型并不重要。尽管如此,SYN数据包仍经常被使用,因为它们在默认情况下最不可能被拒绝。
SYN缓解方法
虽然现代操作系统可以更好地管理资源,这使得连接表溢出变得更加困难,但服务器仍然容易受到SYN洪水攻击。
有许多常用技术可以缓解SYN泛洪攻击,包括:
微块——管理员可以在服务器内存中为每个传入的SYN请求分配一个微记录(少至16字节),而不是一个完整的连接对象。
SYN cookies——使用加密哈希,服务器发送其SYN-ACK响应,其中包含一个序列号(seqno),该序列号由客户端IP地址、端口号和可能的其他唯一标识信息构成。当客户端响应时,此哈希包含在ACK数据包中。服务器验证ACK,然后才为连接分配内存。
RST cookies——对于给定客户端的第一个请求,服务器故意发送无效的SYN-ACK。这应该会导致客户端生成一个RST数据包,告诉服务器出了什么问题。如果收到,服务器知道请求是合法的,记录客户端,并接受来自它的后续传入连接。
堆栈调整——管理员可以调整TCP堆栈以减轻SYN泛洪的影响。这可能涉及减少超时,直到堆栈释放分配给连接的内存,或有选择地丢弃传入连接。
显然,上述所有方法都依赖于目标网络处理大规模流量DDoS攻击的能力,其流量为每秒数十G(甚至数百G)。
领取专属 10元无门槛券
私享最新 技术干货