📜  如何使用 SYN cookie 来防止 SYN Flood 攻击

📅  最后修改于: 2022-05-13 01:57:02.367000             🧑  作者: Mango

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

在谈论 SYN cookie 以及它们如何用于防止 SYN Flood 攻击之前,让我们先看看 TCP 连接是如何建立的,直到 1990 年代中期。

TCP连接是如何建立的:
当一个 TCP 实体打开一个 TCP 连接时,会创建一个 TCB(传输控制块),一个 TCB 包含整个连接状态。连接状态包含:

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

直到 1990 年代中期,为了避免 TCB 溢出实体的内存,“半开”TCP 连接(处于 SYN RCVD 状态的 TCP 连接)的数量有一个限制,最常见的是 100。因此,服务器可以只有 100 个“半开”的 TCP 连接。当达到限制时,TCP 实体将停止接受任何新的 SYN 段。

TCP 实现必须为每个已建立的 TCP 连接维护一个传输控制块 (TCB)。 TCB 必须包含发送和接收段所需的所有信息。它们如下:

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

下图显示了 TCP 连接过程:

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

客户端发送 SYN 连接请求

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

第 2 步:服务器向客户端发送 SYN 连接请求和确认

服务器发送确认

服务器发送一个SYN连接请求和一个确认

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

客户端发送确认

客户端发送确认

SYN 洪水攻击:
SYN Flood 攻击是一种拒绝服务攻击,在这种攻击中,攻击者通过向服务器发送 SYN 请求快速启动 TCP 连接,并且不响应来自服务器的 SYN+ACK。服务器必须花费资源(为连接请求创建 TCB)等待半打开的连接,因为“半打开”TCP 连接的数量存在限制。服务器将不再接受任何新连接。这将使系统对合法流量无响应。以下步骤显示了它是如何执行的。

  1. 攻击者每秒会向服务器发送 100 个 SYN 段。
  2. 攻击者不会回复任何收到的 SYN+ACK 段。
  3. 攻击者将使用与他们自己的 IP 地址不同的 IP 地址发送这些 SYN 段,以避免被捕获。
  4. 一旦服务器进入 SYN RCVD 状态,它将保持该状态几秒钟,等待 ACK 并且不接受任何新的,可能是真正的连接,因此变得不可用。

以下是描述 SYN 洪水攻击的一些图表:

STEP 1:客户端向服务器发送一个SYN连接请求

客户端发送 SYN 连接请求

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

第 2 步:服务器向客户端发送 SYN 连接请求和确认

服务器发送 SYN 连接请求和确认

服务器发送一个SYN连接请求和一个确认

第 3 步:客户端不响应 ACK 以完成三次握手

客户端以 ACK 响应

客户端不响应 ACK

第 4 步:攻击者从不同的 IP 地址创建 100 个其他半开放连接

攻击者创建 100 个半开连接

攻击者从不同的 IP 地址创建 100 个其他半开放连接

第 5 步:服务器端的 TCP 缓冲区将满,服务器将无法接受任何新连接

服务器无法接受新连接

服务器端的 TCP 缓冲区将满

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

  1. 直接攻击——
    攻击者的 IP 地址没有被欺骗的 SYN 洪水攻击称为直接攻击。在直接攻击中,攻击者使用具有真实IP地址的单一源设备,因此可以很容易地追踪到攻击者,并且可以阻止来自恶意系统IP地址的请求以防止攻击。
  2. 欺骗攻击-
    在每个 SYN 数据包上欺骗攻击者的 IP 地址的 SYN 泛洪攻击称为欺骗攻击。即使 IP 地址在每个数据包上都被欺骗,也可以在 Internet 服务提供商 (ISP) 的帮助下追溯到其来源。
  3. 分布式攻击——
    使用僵尸网络创建的 SYN 洪水攻击称为分布式攻击。追踪这些攻击源头的机会极低。攻击者还可能伪造每个分布式设备的 IP 地址,使其更难追踪。

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

  1. 增加积压队列-
    目标设备上每个操作系统的半开连接数都有限制。处理大量 SYN 数据包的一种方法是增加操作系统允许的最大半开连接数。为了增加最大积压,系统必须保留可以处理所有新请求的额外内存资源。如果系统没有足够的内存来处理增加的积压队列大小,系统的性能会受到影响,但它会比拒绝服务更好。
  2. 回收最旧的半开 TCP 连接-
    在这种策略中,一旦积压被填满,最旧的半开连接就会被覆盖。只有当连接可以在比积压中充满恶意 SYN 数据包的时间更短的时间内完全建立时,此策略才有效。当攻击量增加或积压太小时,它会失败。
  3. SYN Cookies-
    SYN cookie 是一种 IP 欺骗攻击缓解技术,服务器使用精心设计的 SYN-ACK 回复 TCP SYN 请求,而无需为 TCP 连接创建新的 TCB。仅当客户端回复此精心制作的响应时,才会为相应的 TCP 连接创建 TCB。此技术用于保护服务器的资源不会在 TCP SYN 泛洪下被填满。

如何使用 SYN Cookie 来防止 SYN Flood 攻击:
SYN Cookies 解决这个问题(SYN Flood 攻击)的方法是使用一个函数,该函数使用来自客户端的 SYN 数据包的一些信息和来自服务器端的一些信息来计算一个随机的初始序列号。让我们假设这个数字为 y-1,y-1 在 SYN + ACK 消息中发送给客户端。如果收到一个序号为 y 的 ACK 包,借助一些包头字段和一些服务器端信息,反向函数可以验证确认号是否有效。如果有效,则创建 TCB 并建立连接。如果无效,则拒绝连接。 SYN cookie 的优点是服务器不必在收到 SYN 段时创建和存储 TCB。