首页 > Technology > 正文

IP 分片攻击(IP Fragmentation Attack)是什么?类型、风险与防御

fenij 2026-07-14 116 Technology

先给结论:IP 分片攻击是利用 IPv4 数据包分片与重组过程制造安全问题的攻击方式。防御重点不是盲目禁止所有分片,而是识别异常偏移、重叠分片和超量分片,并在主机、防火墙与 CDN 层分别限制。

如果你正在排查服务器异常流量,可以继续阅读 VPS DDoS 防护指南,并结合 Linux SSH 安全加固 一起检查入口暴露和日志。

IP 分片本身不是攻击,它是网络协议为了适配不同链路最大传输单元(MTU)而设计的一个机制。一个 IP 包太大,中间路由器就把它切成几个小包继续传。问题出在分片可以被滥用——攻击者故意构造异常的分片包,让目标主机在重组时崩溃、占满内存,或者绕过基于包内容的防火墙规则。

分片攻击类型对比

类型 原理 危害
Tiny Fragment 把 TCP 头分到极小分片 绕过防火墙检测
Overlapping Fragment 分片重叠覆盖 绕过 ACL 规则
Teardrop 恶意偏移量 老系统崩溃蓝屏
MTU
默认 1500 字节
🔧
drop
丢弃重叠分片
📊
Linux
2.2+ 已修复 Teardrop

IP 分片是怎么工作的

当一个 IP 包超过下一跳链路的 MTU 时,路由器会把它拆成多个分片。每个分片都有自己的 IP 头,携带以下关键字段:

  • 标识(Identification):同一个原始包的所有分片这个值相同
  • 标志(Flags):More Fragments 位表示后面还有没有分片
  • 片偏移(Fragment Offset):当前分片在原始包中的位置

接收端收到所有分片后,按偏移排序重组。这个重组过程需要占用内存和 CPU,攻击者就盯着这里做文章。

常见的 IP 分片攻击类型

泪滴攻击(Teardrop Attack)

攻击者发送偏移重叠的分片包。比如第一个分片说占 0-100 字节,第二个又说占 50-150 字节。操作系统重组时指针重叠,老的系统会蓝屏或崩溃。现代内核已经修复了这个漏洞,但概念上它是最经典的 IP 分片攻击。

微小分片攻击(Tiny Fragment Attack)

攻击者把 TCP 头切得只剩几个字节,藏到第一个分片里,然后把真正的载荷放到后面的分片。某些只检查第一个分片的防火墙会漏掉载荷里的恶意内容。

分片重叠 / 分片耗尽

发送大量不完整、重叠或顺序错乱的分片,让目标主机一直缓存等待重组,最终内存耗尽、连接表被占满。

Ping of Death

虽然和 ICMP 关系更大,但本质也是 oversized packet 的分片重组问题。发送超过 65535 字节的 ICMP echo 请求分片,老的系统处理不了会崩溃。

为什么这些攻击有效

分片重组是操作系统协议栈里比较复杂的部分。为了支持分片,系统必须:

  • 为每个待重组的流保留内存缓冲区
  • 处理超时(等不到后续分片时要释放)
  • 处理重叠、顺序错乱等边界情况

每一步都是潜在的攻击面。而防火墙为了性能,有时只对第一个分片做深度检测,后面的分片放行,这就给了绕过检测的机会。

防御方法

1. 限制或禁用分片重组

如果业务不需要处理大量分片,可以在边界路由器或防火墙上限制分片速率。Linux 内核本身也支持:

sysctl -w net.ipv4.ipfrag_low_thresh=196608
sysctl -w net.ipv4.ipfrag_high_thresh=262144
sysctl -w net.ipv4.ipfrag_time=30

这些参数控制分片缓冲区的内存上限和超时时间,避免内存被无限占用。

2. 防火墙正确处理分片

iptables 的分片处理规则:

iptables -A INPUT -f -j DROP

这条规则丢弃所有后续分片(非首片),简单粗暴但可能影响正常业务。更稳妥的是用连接跟踪让防火墙能看到重组后的包:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

3. 使用现代内核

泪滴、Ping of Death 这类古老漏洞在现代 Linux/Windows 内核里已经修好了。保持系统更新是最有效的防御。

4. 网络层清洗

对于大流量的分片攻击,靠单台服务器扛不住。需要上游 ISP 或 CDN 做流量清洗,把异常分片在到达服务器前过滤掉。

实战排查

如果你怀疑正在遭受 IP 分片攻击,可以用 tcpdump 抓包看:

tcpdump -nn -i eth0 ip[6:2] & 0x2000 != 0 or ip[6:2] & 0x1fff != 0

这条命令过滤出有 More Fragments 标志或者片偏移非零的包。如果短时间内这种包暴增,说明有人在玩分片。

看 /var/log/kern.log 或 dmesg 也能发现端倪:

dmesg | grep -i frag
dmesg | grep -i "out of memory"

更多网络安全教程,请访问 fenij.com

常见问题

问:IP 分片攻击现在还常见吗?
答:像 Teardrop、Ping of Death 这种老攻击已经很少能得手了,因为现代系统都打了补丁。但分片仍然是绕过防火墙和消耗系统资源的一种手段,在针对性攻击中仍会出现。

问:为什么防火墙会怕分片?
答:传统防火墙只看每个包的内容。如果一个 TCP 包被分成 10 个分片,防火墙只看到 10 个 IP 分片,不一定能还原出完整的 TCP 载荷,规则就可能失效。

问:完全禁止分片行不行?
答:不行。互联网中不同链路的 MTU 不一样,有些路径必须经过分片才能传输。正确的做法是限制异常分片、用连接跟踪做状态检测,而不是一刀切。

相关完整手册

系统化的排查与配置思路,建议顺手收藏这几篇完整手册: