在 TCP 三次握手中,服务器为了响应一个收到的 SYN,分配并初始化连接变量和缓存。然后服务器发送一个 SYNACK 进行相应,并等待来自客户的 ACK 报文段。
如果某客户不发送 ACK 来完成三次握手的第三步,最终服务器将终止该半开连接并回收资源。
这种 TCP 连接管理协议为经典的 Dos 攻击即 SYN 洪泛攻击提供了环境。在这种攻击中,供给者发送大量的 TCP SYN 报文段,而不完成第三步握手的步骤。随着这种 SYN 报文段纷至沓来,服务器不断为这些半开连接分配资源,导致服务器的连接资源被消耗殆尽。 这种 SYN 洪泛攻击是被记载的众多 Dos 攻击中的第一种。
防御系统 : SYN cookie
- 服务器收到一个 SYN 报文段时,不会为该报文段生成一个半开连接,而是根据 SYN 报文段的源和目的地址与端口号以及仅有该服务器知道的秘密数的一个复杂函数(散列函数)生成一个初始 TCP 序列号。这种精心制作的初始序列号被称为 “cookie”。服务器并不记忆该 cookie 或任何对应于 SYN 的其他状态信息。 根据这个序列号,生成一个 SYNACK,发送给客户端。
- 如果客户合法,它将返回一个 ACK 报文段。根据报文段中的信息,可以获取该 TCP 连接的源和目的地 IP 地址和端口号。根据这些信息以及秘密数,运行相同的散列函数,得到一个值。如果该函数的结果加 1 与在客户的 SYNACK 中的确认 (cookie) 值相同的话,服务器认为该 ACK 对应于较早的 SYN 报文段,因此它是合法的。此时,服务器才生成一个具有套接字的全开的连接。
- 如果客户端没有返回一个 ACK 报文段,那么初始的 SYN 并没有对服务器产生危害,因为服务器并没有为它分配任何资源。
时间: 2024-11-06 07:22:21