TCP SYN FLOOD

Author: Xu FC

1. 概述


SYN flood 是 Network layer 的 DDoS 攻击之一。
该攻击利用 TCP 握手缺陷消耗被攻击方的资源从而导致被攻击方拒绝服务。
相关 RFC 请见tools.ietf.org/html/rfc4987

2. TCP 正常握手


client ---------SYN (sequence: s_no, acknowledgment: 0)--------------> server

        <-------SYN + ACK  (sequence: a_no, acknowledgement: s_no + 1)--

        --------ACK (sequence: a_no +1, acknowledgement: s_no + 1)----->
  • Client 发送 SYN
  • Server 回 SYN+ACK 后建立一个半打开状态(SYN-RECEIVED)的连接,并存储在 backlog 中;
  • Client 收到 SYN + ACL 后发送 ACK;
  • Server 收到 ACK 后,从 blacklog 中取出相应的半打开的连接,并建立TCB(Transmission Control Block)。

3. SYN flood 攻击原理


  • Client 发送大量 SYN 后不再有任何回应(可以使用 IP 欺骗);
  • Server 回 SYN+ACK 后建立大量半打开状态的连接,并存储在 backlog 中等待 ACK;
  • Backlog 中累积大量的等待 ACK 的半打开状态的连接,导致资源耗尽,新来的 SYN 被丢弃, 从而导致无法建立正常连接,服务器拒绝服务。

4. 防护


4.1 SYN Cache

  • Server 收到 client 发的 SYN
  • 计算 hash(ip, port, secret bits) 并随机均匀分配到 hash table bucket, 如果 hash table bucket 满了,则除旧迎新;
  • Server 收到 ACK 后, 查 hash table,创建 TCB

4.2 SYN Cookies, 该方法不使用存储资源

  • Server 收到 SYN 后,将组成连接的最基本的数据 ecode 成 ACK 的sequence number(+ Timestamp option)-- a_no;
  • Server 发送携带该 sequence number(+ Timestamp option)的 SYN + ACK,不再分配 SYN-RECEIVED 状态的 connection;
  • Server 收到 ACK 后,decode 该 sequence number(+ Timestamp option)-- a_no,创建TCB

5. 流量构造


  • IPv4
hping -p dstPort -S dstIP --flood -a srcIP
-p dstPort: 指定目的端口号
-S: 指定 SYN
dstIP: 指定目的 IP
--flood: 发送 flood
-a srcIP: 指定源 IP
  • IPv6
thcsyn6 eth1 dstIP dstPort -s srcIP
eth1: 指定发包 interface
dstIP: 目的 IP
dstPort:目的端口
-s srcIP: 指定源 IP

你可能感兴趣的:(TCP SYN FLOOD)