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