第218篇:网络攻击基础:SYN Flood、ICMP Flood

关键词:SYN Flood、ICMP Flood、DDoS攻击、TCP三次握手、半连接队列、 syn-cookies、速率限制、攻击检测、流量清洗

一、引言

在第217篇中,我们学习了 DNS 过滤与防域名劫持的安全防护技术。DNS 攻击只是网络攻击的一个侧面。在网络安全的广阔领域中,拒绝服务攻击(Denial of Service, DoS)及其分布式变体(DDoS)是最直接、最常见的攻击方式之一。

SYN Flood 和 ICMP Flood 是两种经典的 DoS 攻击手段。它们分别利用了 TCP 协议的三次握手机制和 ICMP 协议的特性,通过消耗目标服务器的资源(连接队列、带宽、CPU)使其无法正常服务。理解这些攻击的原理和防护机制,是网络安全的必修课。

二、核心概念

2.1 TCP 三次握手回顾

TCP 连接的建立需要三次握手:

步骤 报文 标志位 说明
第 1 步 SYN SYN=1 客户端发送 SYN,进入 SYN_SENT 状态
第 2 步 SYN-ACK SYN=1, ACK=1 服务端回复 SYN-ACK,进入 SYN_RCVD 状态
第 3 步 ACK ACK=1 客户端发送 ACK,连接建立,进入 ESTABLISHED 状态

2.2 SYN Flood 攻击原理

SYN Flood 攻击利用 TCP 三次握手中"半连接"(Half-Open Connection)的状态维持机制。攻击者向目标服务器发送大量伪造源 IP 的 SYN 报文,服务器为每个 SYN 分配资源并回复 SYN-ACK,但由于源 IP 是伪造的,SYN-ACK 无法到达攻击者,第 3 步的 ACK 永远不会到达。服务器的半连接队列被耗尽,无法接受新的合法连接。

SYN Flood 攻击原理 - 图示

2.3 ICMP Flood 攻击原理

ICMP Flood 攻击通过向目标发送大量 ICMP 报文(通常是 Echo Request,即 ping 请求),消耗目标服务器的带宽和处理能力。与 SYN Flood 不同,ICMP Flood 是一种带宽消耗型攻击,攻击效果取决于攻击流量大小与目标带宽的比例。

攻击类型 消耗资源 攻击特征
SYN Flood 服务器连接队列、CPU 大量半连接、源 IP 伪造
ICMP Flood 带宽、CPU 大量 ICMP Echo Request
UDP Flood 带宽、UDP 端口 大量 UDP 报文到随机端口
HTTP Flood 应用层资源 大量 HTTP 请求(模拟正常用户)

2.4 DoS 与 DDoS 的区别

维度 DoS(拒绝服务) DDoS(分布式拒绝服务)
攻击源 单一来源 多个来源(僵尸网络)
攻击规模 小(单点) 大(TB 级别)
防护难度 较低(封锁源 IP) 较高(源 IP 分散且伪造)
常见工具 自制脚本 Botnet、僵尸网络
检测方式 源 IP 流量突增 整体流量突增、模式异常

三、技术细节

3.1 SYN Flood 攻击参数

参数 说明
半连接队列长度 默认约 128-1024 个(系统相关)
SYN-ACK 重试次数 通常 5 次,每次间隔加倍
SYN-ACK 重试超时 总计约 3 分钟
TCB 资源占用 每个半连接约 256 字节
攻击效果 每秒数千 SYN 即可耗尽队列

3.2 SYN Flood 防护机制

防护机制 原理 优缺点
增大半连接队列 扩大 syn-backlog 队列长度 简单但治标不治本
减小 SYN-ACK 重试超时 快速释放无效半连接 可能影响正常慢速客户端
Syn-Cookie 不使用队列,通过哈希计算验证 SYN 最有效但增加 CPU 开销
速率限制(Rate Limit) 限制单位时间内的 SYN 报文数量 可能误伤正常高并发用户
状态检测防火墙 仅允许有完整 TCP 三次握手的连接 需要状态检测能力
流量清洗 在云端或网络边缘清洗恶意流量 需要专门的清洗设备

Syn-Cookie 是应对 SYN Flood 最有效的单机防护机制。其核心思想是不使用半连接队列,而是通过加密哈希算法将连接信息编码到 SYN-ACK 的序列号中:

  1. 服务器收到 SYN 后,不分配 TCB,而是计算一个基于源 IP、源端口、目标 IP、目标端口和密钥的哈希值
  2. 将哈希值作为 SYN-ACK 的初始序列号发送
  3. 当客户端回复 ACK 时,服务器验证 ACK 的确认号是否匹配预期的哈希值
  4. 验证通过后才分配 TCB 建立连接

3.4 ICMP Flood 防护机制

防护机制 原理
ICMP 速率限制 限制单位时间内 ICMP 报文的数量
ICMP 类型过滤 仅允许必要的 ICMP 类型(Echo Reply、Time Exceeded 等)
黑名单封锁 检测并封锁攻击源 IP
流量镜像清洗 将流量镜像到清洗设备进行深度分析
CDN/Anycast 分流 通过 CDN 分散流量,稀释攻击效果

四、实战配置/案例分析

4.1 华为 USG 防火墙:SYN Flood 防护配置

# ========== SYN Flood攻击防护配置 ==========
system-view
sysname HQ-Firewall

# 1. 启用状态检测防火墙的SYN Flood防护
security-policy
 rule name Anti-SYN-Flood
  source-zone untrust
  destination-zone dmz
  action permit
  service tcp
  attack-defense syn-flood
   mode auto
   enable
   # 设置SYN速率阈值(每5秒的SYN报文数)
   threshold 1000
   # 超过阈值后的动作
   action deny
   # 学习模式时长(秒)
   learning-time 120
  quit
 quit
quit

# 2. 配置TCP Syn-Cookie
tcp syn-cookies enable

# 3. 调整TCP参数
tcp syn-retry-count 3
tcp syn-keep-interval 500

# 4. 配置连接数限制
security-policy
 rule name Connection-Limit
  source-zone untrust
  destination-zone dmz
  action permit
  service tcp
  limit-connection
   max-connection 50000
   new-connection-rate 1000
  quit
 quit
quit

# 5. 配置IP频率限制
anti-attack
 ip-frequency
  syn
   enable
   reference-time 5
   threshold 200
   action black-list
   black-list-time 300
  quit
 quit
quit

4.2 华为 USG 防火墙:ICMP Flood 防护配置

# ========== ICMP Flood攻击防护配置 ==========

# 1. 配置ICMP速率限制
security-policy
 rule name ICMP-Rate-Limit
  source-zone untrust
  destination-zone trust
  action permit
  service icmp
  attack-defense icmp-flood
   enable
   threshold 100
   reference-time 5
   action deny
  quit
 quit
quit

# 2. 限制ICMP类型(仅允许必要类型)
acl 3000
 # 允许ICMP Echo Reply(0)
 rule 5 permit icmp icmp-type echo-reply
 # 允许ICMP Time Exceeded(11) - 用于traceroute
 rule 10 permit icmp icmp-type time-exceeded
 # 允许ICMP Destination Unreachable(3)
 rule 15 permit icmp icmp-type unreachable
 # 允许ICMP Echo Request(8)但限制速率
 rule 20 permit icmp icmp-type echo
 # 拒绝其他ICMP类型
 rule 100 deny icmp
quit

# 3. 配置安全策略应用ICMP过滤
security-policy
 rule name ICMP-Filter
  source-zone untrust
  destination-zone trust
  action permit
  service custom-icmp-filter
 quit
quit

# 4. 配置ICMP Flood攻击检测告警
anti-attack
 icmp
  echo-flood
   enable
   reference-time 5
   threshold 500
   action black-list
   black-list-time 600
  quit
 quit
quit

4.3 故障排查案例:Web 服务器遭受 SYN Flood 攻击

故障现象:企业 Web 服务器突然无法响应,用户访问网站超时。服务器 CPU 占用率正常,但新建连接数极高。

排查步骤:

  1. 检查服务器连接状态
# 在服务器上检查TCP连接状态
netstat -an | grep SYN_RCVD | wc -l
# 输出: 4096(半连接队列已满)

netstat -an | grep ESTABLISHED | wc -l
# 输出: 50(正常连接数很少)
  1. 检查防火墙攻击日志
display security log attack-defense

发现大量 SYN Flood 攻击告警,来源 IP 分布在全球多个地区。

  1. 分析攻击流量
display attack-defense syn-flood statistics

显示每秒 SYN 报文数量超过 10000 个,远超正常水平(正常约 100-500 个/秒)。

  1. 根因分析 这是一次典型的 SYN Flood DDoS 攻击,攻击者利用僵尸网络从多个 IP 地址发起 SYN Flood 攻击,攻击流量超过企业出口带宽的 3 倍。防火墙的状态检测功能已开始工作,但攻击流量过大,部分恶意 SYN 仍到达服务器。

  2. 解决方案

# 立即措施:启用最严格的SYN防护
tcp syn-cookies enable

# 提高SYN速率限制的严格度
anti-attack
 ip-frequency
  syn
   threshold 100
   reference-time 5
   action black-list
   black-list-time 600
  quit
 quit
quit

# 长期措施:配置流量清洗联动
traffic-director
  anti-ddos enable
  threshold 80
  action scrub
  scrub-server 203.0.113.100
quit

# 联系云服务商启用DDoS清洗服务

启用 Syn-Cookie 后,服务器的半连接队列不再被消耗,Web 服务在 2 分钟内恢复正常。长期部署了流量清洗服务后,后续的攻击流量在进入企业网络前已被清洗。

五、总结

知识点 要点
SYN Flood 利用 TCP 三次握手半连接队列耗尽服务器资源
ICMP Flood 通过大量 ICMP 报文消耗带宽和 CPU
Syn-Cookie 最有效的单机 SYN Flood 防护机制
速率限制 限制单位时间内的 SYN/ICMP 报文数量
状态检测 防火墙通过 TCP 状态检测丢弃异常连接
DDoS 清洗 大规模攻击需在云端或网络边缘进行流量清洗
黑名单 自动封锁高频攻击源 IP
综合防护 多层防护(防火墙 + 清洗 + CDN)才能应对大规模 DDoS

思考

  1. Syn-Cookie 机制不需要维护半连接队列,理论上可以抵御任意规模的 SYN Flood 攻击。但为什么 Syn-Cookie 不是所有操作系统的默认配置?它有什么局限性?
  2. 如果攻击者使用真实的源 IP 地址发起 SYN Flood 攻击(不伪造 IP),Syn-Cookie 和速率限制还能有效防护吗?攻击效果会有什么变化?
  3. 在区分 SYN Flood 攻击流量和正常的高并发 TCP 连接建立时,有哪些统计特征可以用于精确识别?

下篇预告:第219篇:Anti-DDoS 防护机制