网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

如何使用SYN Cookie来防止SYN Flood攻击

更新时间:2026年03月27日   作者:spoto   标签(Tag):

在讨论SYN Cookie以及它们如何被用来防止SYN Flood攻击之前,我们先来看看在1990年代中期之前,TCP连接是如何建立起来的。

TCP连接是如何建立的:
在TCP实体建立TCP连接时,会创建一个传输控制块。该传输控制块包含了连接的完整状态信息。连接的状态包括:

  1. 本地序列号。
  2. 由远程客户端发送的顺序号。

在20世纪90年代中期之前,为了避免实体的内存被过多的TCP连接所占用,对“半开放”状态的TCP连接数量有严格的限制。通常情况下,这个限制为100个。因此,一个服务器最多只能拥有100个处于“半开放”状态的TCP连接。当达到这个限制时,TCP实体就会停止接受新的SYN请求。

在TCP实现中,必须为每一个已建立的TCP连接维护一个传输控制块(Transmission Control Block, TCB)。该传输控制块必须包含用于发送和接收数据段所需的所有信息。这些信息包括:

  1. 本地IP地址。
  2. 远程IP地址。
  3. 本地TCP端口号。
  4. 远程TCP端口号。
  5. TCP FSM的当前状态。
  6. 最大段大小(MSS)。

以下图表展示了TCP连接的整个过程:

步骤/阶段1: CLient向服务器发送了一个SYN连接请求。

最初,客户端会发送一个SYN连接请求。

步骤2:服务器向客户端发送SYN连接请求以及确认消息。

服务器发送了一个SYN连接请求以及相应的确认消息。

步骤3:客户端向服务器发送确认消息。

客户发送了确认消息。


SYN洪水攻击:
SYN洪水攻击是一种拒绝服务攻击。在这种攻击中,攻击者会迅速向服务器发起TCP连接请求,然后使用SYN请求。而服务器则不会对SYN+ACK响应进行回应。 服务器需要消耗资源来为连接请求创建TCP连接。由于“半开状态”的TCP连接数量存在限制,因此服务器必须等待这些半开状态的连接被关闭之后才能继续处理其他连接请求。 服务器将不再接受任何新的连接请求。 这将会使系统无法处理合法的流量请求。 以下步骤展示了具体的实施过程。

  1. 攻击者每秒会向服务器发送数百个SYN请求。
  2. 攻击者不会回应任何接收到的SYN+ACK段消息。
  3. 攻击者会使用与自己IP地址不同的IP地址来发送这些SYN段,从而避免被捕获。
  4. 一旦服务器进入SYN RCVD状态,它就会保持这种状态数秒,等待收到ACK响应。同时,它不会接受任何新的、可能是真实的连接请求,因此该服务器会变得不可用。

以下是一些描绘SYN洪水攻击的示意图:

步骤1:客户端向服务器发送SYN连接请求。

最初,客户端会发送一个SYN连接请求。

步骤2:服务器向客户端发送SYN连接请求以及确认消息。

服务器发送了一个SYN连接请求以及相应的确认消息。

步骤3:客户端没有响应ACK信号,因此三次握手未能完成。

客户端没有作出任何响应。

步骤4:攻击者从多个IP地址处创建了100个半开放的连接。

攻击者从多个IP地址处创建了100个半开放的连接。

步骤5:在服务器端,TCP缓冲区将会达到满状态,因此服务器将无法接受任何新的连接请求。

在服务器端,TCP缓冲区将会被填满。


SYN洪水攻击可以通过三种不同的方式实施:

  1. 直接攻击
    当攻击者的IP地址没有被伪造时,这种SYN洪水攻击被称为直接攻击。在直接攻击中,攻击者使用的是具有真实IP地址的单一设备。因此,攻击者很容易被追踪到,而来自恶意系统的请求也可以被阻止,从而防止攻击的发生。
  2. 伪造攻击
    这种 SYN 洪水攻击中,攻击者的 IP 地址被伪造在每一个 SYN 数据包上。这种攻击被称为“伪造攻击”。尽管每个数据包的 IP 地址都被伪造了,但借助互联网服务提供商的支持,仍然可以将这些数据包追溯到它们的来源。
  3. 分布式攻击
    利用僵尸网络发起的SYN洪水攻击被称为分布式攻击。要追踪这些攻击的源头是非常困难的。攻击者还可能伪造每个分布式设备的IP地址,从而难以被追踪到。


SYN洪水攻击预防:
SYN洪水攻击可以通过多种不同的方式来预防。其中一些方法包括:

  1. 积压任务数量正在增加。
    在目标设备的每个操作系统中,半开连接的数量都是有限制的。 处理大量SYN数据包的一种方法是增加操作系统允许存在的半开连接的最大数量。 为了增加最大等待时间,系统必须预留更多的内存资源来应对所有新的请求。 如果系统没有足够的内存来处理不断增加的待处理任务数量,那么系统的性能将会受到影响。不过,这种情况仍然比拒绝服务攻击要好一些。
  2. 重新利用最古老的半开放TCP连接——
    在这种策略中,当积压的数据量达到一定程度时,最旧的半开放连接会被覆盖掉。这种策略只有在连接建立所需的时间短于恶意SYN包填充积压数据的时间时才能有效发挥作用。如果攻击规模增加,或者积压的数据量过小,这种策略就会失效。
  3. SYN Cookies –
    SYN Cookie是一种针对IP欺骗攻击的缓解技术。通过这种技术,服务器在收到TCP SYN请求时,会返回经过构造的SYN-ACK响应,而无需为该TCP连接创建一个新的TCP连接标识符。只有当客户端对该构造的响应进行回复时,才会为该TCP连接创建一个TCP连接标识符。这种技术可以用来防止服务器的资源因TCP SYN洪水攻击而耗尽。


SYN Cookie是如何被用来防止SYN Flood攻击的:
SYN Cookies解决这个问题的方式是:利用一些来自客户端SYN数据包的信息以及来自服务器方面的信息,来计算出一个随机的初始序列号。 我们假设这个数值为 y-1。然后,y-1 会通过 SYN+ACK 消息被发送给客户端。 如果接收到带有序列号y的ACK数据包,那么通过一些数据包头部字段以及服务器端的某些信息,就可以验证该确认号码是否有效。 如果这一假设成立的话,那么就会创建一个TCB,并建立起连接。 如果它无效的话,那么连接就会被拒绝。 SYN cookie的优势在于,服务器在接收到SYN段后,无需再创建并存储TCP连接标识。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料