Files
2025-09-25 03:32:26 +08:00

85 lines
4.5 KiB
Markdown

### 讲讲 SYN FLOOD 原理,防御,检测手段
**SYN Flood 攻击原理**
SYN Flood 是一种利用 TCP 三次握手过程中的漏洞发起的攻击
**正常的三次握手流程:**
1. **SYN**:客户端向服务器发送一个 `SYN` 包,请求建立连接
2. **SYN-ACK**:服务器收到 `SYN` 包后,分配资源,并回复一个 `SYN-ACK`
3. **ACK**:客户端收到 `SYN-ACK` 后,回复一个 `ACK` 包,三次握手完成,连接建立
**SYN Flood 攻击原理:** 攻击者利用这个过程,向服务器发送大量的 `SYN` 包。但与正常连接不同的是,攻击者不会回复第三步的 `ACK`
1. **大量 SYN 包**:攻击者利用伪造的源 IP 地址(以隐藏自己的真实身份),向目标服务器发送海量的 `SYN`
2. **服务器资源耗尽**:服务器收到每个 `SYN` 包后,都会为它在半开连接队列(Half-Open Connection Queue)中分配一个连接状态,并发送一个 `SYN-ACK`
3. **无响应**:由于攻击者使用的是伪造的 IP 地址,服务器发送的 `SYN-ACK` 包永远不会被响应
4. **队列饱和**:随着半开连接队列被大量伪造连接迅速填满,服务器无法再处理新的合法连接请求。最终,新的正常用户无法连接,导致服务不可用,即达到了拒绝服务攻击的目的
这种攻击的危害在于,攻击者利用极小的代价,就可以耗尽服务器大量的内存和 CPU 资源
**SYN Flood 防御手段**
防御 SYN Flood 攻击主要从两个方向入手:**增加服务器处理能力**和**优化连接处理机制**
**1. 调整 TCP/IP 参数**
这是最简单直接的防御措施,可以通过修改 Linux 内核参数来增加半开连接队列的容量和缩短超时时间
- **`net.ipv4.tcp_max_syn_backlog`**: 增加这个参数的值,可以增大半开连接队列的容量
- **`net.ipv4.tcp_synack_retries`**: 减少服务器发送 `SYN-ACK` 重试的次数,从而缩短半开连接的超时时间,更快地释放资源
**2. SYN Cookie**
这是一种非常有效的防御机制,它改变了服务器处理 `SYN` 包的方式,使其在受到攻击时表现得更加健壮
**工作原理:**
1. **不分配资源**:服务器收到 `SYN` 包后,不会立即为它分配资源
2. **生成 Cookie**:服务器将客户端的 IP、端口、MSS 等信息,加上一个服务器独有的密钥,通过哈希算法生成一个 `SYN Cookie`
3. **发送 SYN-ACK**:服务器把这个 `SYN Cookie` 作为 TCP 序列号,发送 `SYN-ACK`
4. **客户端回复**:如果客户端是合法的,它会回复一个 `ACK` 包,该包中的序列号正是 `SYN Cookie` 加 1 的值
5. **验证 Cookie**:服务器收到 `ACK` 包后,不检查半开连接队列,而是根据其中的序列号,反向计算并验证 `SYN Cookie`。如果验证成功,才分配资源并建立连接
这种机制的优点是,在完成三次握手前,服务器不会为连接分配任何资源,从而大大降低了被 SYN Flood 攻击的风险。
**3. 硬件和软件防火墙**
现代防火墙和入侵检测系统(IDS)通常内置了 SYN Flood 检测和防御功能
- **速率限制**:对来自同一 IP 或同一网段的 `SYN` 请求进行速率限制
- **白名单/黑名单**:通过规则限制可疑 IP 的访问
- **使用负载均衡器**:将请求分发到多台服务器,可以分散攻击流量
**SYN Flood 检测手段**
及时发现 SYN Flood 攻击是防御的第一步。
**1. 系统网络状态监控**
使用 `netstat``ss` 命令是监控 TCP 连接状态最常用的方法
```bash
# 查看所有 TCP 连接
netstat -nt | grep tcp
# 使用 ss 查看 SYN_RECV 状态的连接
ss -s
```
- 在正常情况下,`SYN_RECV` 状态的连接数量应该很小。如果这个数字突然暴增,就可能正在遭受 SYN Flood 攻击
**2. 网络流量分析**
使用网络抓包工具(如 `tcpdump`)可以对流量进行深入分析
```bash
# 只抓取 SYN 包
tcpdump -n 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0'
```
- **分析结果**:如果抓到的流量中,大部分都是带有伪造源 IP 的 `SYN` 包,且没有后续的 `ACK` 包,那么基本可以断定是 SYN Flood 攻击
**3. IDS/IPS 日志**
如果系统中部署了入侵检测系统(IDS)或入侵防御系统(IPS),它们会记录可疑的网络流量。通过查看 Snort、Suricata 等工具的日志,可以快速发现大量来自同一源 IP 或不同源 IP 的 `SYN` 攻击事件