服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-09-18 简米科技 4,065 字 10 分钟阅读

分片报文是如何干扰正常协议处理的?常见干扰方式有哪些

导读分片报文干扰正常协议处理的核心方式,是利用分片重组逻辑中的重叠、缺失、乱序和超时缺陷,让防火墙、IDS或服务器协议栈在重组前做出错误判断或耗尽资源,分片报文干扰正常协议处理的常见方式IP分片本来是为了穿透不同MTU链路而设计的机制,但攻击者会故意制造异常分片,让中间设备或主机在重组时踩坑,你可以把分片理解成把一……

分片报文干扰正常协议处理的核心方式,是利用分片重组逻辑中的重叠、缺失、乱序和超时缺陷,让防火墙、IDS或服务器协议栈在重组前做出错误判断或耗尽资源。

分片报文干扰正常协议处理的常见方式

IP分片本来是为了穿透不同MTU链路而设计的机制,但攻击者会故意制造异常分片,让中间设备或主机在重组时踩坑,你可以把分片理解成把一封信拆成几张明信片寄出,每张明信片都写了偏移量,如果偏移量互相重叠,或者缺了几张,收信方就可能拼错内容。

干扰方式主要有下面几种:

  • 重叠分片:多个分片携带相同的偏移量,但内容不同,防火墙和主机的重组策略经常不一致,一个采用先到优先,一个采用后到优先,结果防火墙拼出来的内容和主机最终收到的内容不一样,攻击就能穿透策略。
  • 微小分片:把TCP或UDP头部强行拆到多个分片里,有的分片长度极小,只包含端口字段的一部分,边界设备如果只检查首片,就会因为看不到完整端口而直接放行。
  • 乱序分片:故意把后续分片先发,首片最后发,部分设备没有正确处理乱序,会长时间等待首片,或者把后续分片直接丢弃,造成连接异常。
  • 分片洪水:发送大量永远不完整的分片,占用重组缓冲区,服务器或防火墙的内存会被慢慢耗尽,正常分片的组装也会被拖垮。
  • 超时挂起:只发首片,后续分片一直不发,每个首片都会在重组缓存中挂起一段时间,大量这样的首片会把缓存占满。

这些方式都有一个共同点:它们不靠高流量硬碰硬,而是利用协议栈在重组时的状态管理缺陷,行业共识认为,分片重组是协议栈实现中较容易出错的环节之一。

分片报文攻击怎么防御:从防火墙到内核参数

防御分片干扰,核心思路只有一条:先重组,再检测;控缓存,限速率。 下面按边界设备、主机加固、应急成本三个层面拆开说。

边界设备强制重组与丢弃可疑分片

防火墙或路由器如果先执行ACL匹配再重组,就容易被微小分片绕过,正确做法是让边界设备先完成分片重组,再交给策略引擎。

具体操作可以按这个顺序检查:

  • 确认防火墙是否支持“先重组后检测”模式,不支持就考虑更换或前置专用抗D设备。
  • 在Linux防火墙上使用netfilter的conntrack模块,并开启分片重组相关选项,较新内核默认会在连接跟踪前处理分片,但老系统不一定。
  • 分片报文是如何干扰正常协议处理的?常见干扰方式有哪些

  • 对首片不包含完整四层头部的分片直接丢弃。
  • 对每源IP的分片速率做限制,比如限制每秒允许进入的重组分片数量。
  • 设置合理的分片缓存超时时间和缓存上限,避免被挂起首片占满内存。

主机侧内核参数加固

Linux主机如果直接暴露在公网,建议检查下面几个内核参数,这些参数控制IP分片重组的缓存阈值和超时时间。

sysctl -w net.ipv4.ipfrag_time=30
sysctl -w net.ipv4.ipfrag_high_thresh=4194304
sysctl -w net.ipv4.ipfrag_low_thresh=3145728
sysctl -w net.ipv4.ipfrag_max_dist=64
  • ipfrag_time:分片在重组队列中的最长保留时间,单位是秒,调小可以更快释放缓存。
  • ipfrag_high_thresh:重组缓存占用达到这个值后,内核会开始丢弃新来的分片。
  • ipfrag_low_thresh:缓存占用回落到这个值以下后,内核恢复接受分片。
  • ipfrag_max_dist:允许的分片乱序程度,数值越小,越能抵抗乱序干扰,但正常乱序流量也可能被丢。

执行完用sysctl -p让配置生效,如果是容器环境,需要确认宿主机内核参数是否可修改。

应急服务成本考量

如果自己排查后仍然无法定位,可以考虑采购外部应急响应,北京网络安全应急响应价格差异较大,通常按事件等级、到场时间和业务影响范围计费,从几千元到数万元不等,建议先通过抓包和内核日志判断是否属于分片干扰,再决定是否需要外部支撑,避免花冤枉钱。

IP分片和TCP分段有什么区别?先分清两个概念

很多人把IP分片和TCP分段混为一谈,其实它们发生在不同层,干扰方式也不同,下面用表格做个对比:

对比项 IP分片 TCP分段
发生层级 网络层 传输层
触发原因 链路MTU限制 双方协商的MSS限制
重组位置 目的主机IP层或中间设备 目的主机TCP层
报文单位 IP数据报被拆成多个分片 TCP数据流被拆成多个段
端口信息 仅在首片包含完整四层头部 每个段都包含完整TCP头部
干扰影响 影响防火墙、路由器、IDS/IPS和主机协议栈 主要影响端到端传输性能和连接稳定性

理解这个区别对排查很重要,比如你看到防火墙放行了流量,但主机没收到完整请求,第一反应应该查IP分片是否被错误处理,而不是去查TCP重传。

分片报文是如何干扰正常协议处理的?常见干扰方式有哪些

路由器分片报文处理异常排查:三个常见节点

路由器是分片问题的高发设备,因为很多路由器默认不重组,只做转发,一旦出现分片报文处理异常,可以从下面三个节点排查。

接口MTU与路径MTU不一致

如果某一跳接口MTU变小,但又禁止了ICMP不可达报文,上游设备就不知道该把包分片,或者分片后下游仍无法重组。

排查命令:

ip link show eth0
ping -M do -s 1472 目标IP

ping -M do -s 1472会强制不分片发送一个1472字节的载荷,加上IP头和ICMP头后总长约1500字节,如果通不过,说明路径上存在更小的MTU。

ACL或策略路由先于重组执行

部分路由器会先匹配ACL,再决定是否重组,如果ACL只检查端口,后续分片没有端口信息,就会被误丢。

确认方法:

  • 在路由器上抓取进入接口的分片流量,观察是否大量分片被丢弃。
  • 修改ACL规则,允许分片流量进入重组流程,或者显式放行fragment流量。
  • 如果设备支持分片重组功能,开启后再观察。

CPU与内存资源异常

分片重组会消耗CPU和内存,出现异常时先看CPU占用和重组缓存使用情况。

不同厂商命令不同,常见的有:

show processes cpu
show memory
show ip cache flow

如果CPU持续偏高,同时重组缓存占用接近上限,很可能正在遭受分片洪水,可以通过流采样或镜像抓包进一步确认分片比例。

分片报文绕过防火墙场景与应对

分片绕过防火墙是攻击者最常用的手法之一,典型场景是:攻击者把TCP SYN包拆成两个分片,首片只包含IP头和TCP源端口,目的端口被放在第二个分片,防火墙如果只检查首片,就看不见目的端口,可能直接放行,之后主机把两个分片重组起来,攻击流量就达到了目标服务。

还有一类场景是IDS/IPS签名匹配前没有重组,攻击者把攻击特征字符串拆到多个分片里,单个分片匹配不到特征,就会绕过检测引擎。

应对方式可以按下面几个步骤落地:

  • 防火墙启用“先重组后检测”策略,确保检测引擎看到的是完整报文。
  • 丢弃偏移量小于一定值的分片,比如首片长度不足以容纳完整TCP头部的直接丢弃。
  • 对分片深度检测,使用支持分片重组状态跟踪的下一代防火墙。
  • 分片报文是如何干扰正常协议处理的?常见干扰方式有哪些

    在IDS/IPS上开启分片重组功能,并设置合理的重组超时时间。

用抓包与内核日志定位分片干扰问题

光靠猜解决不了问题,最终还是要靠抓包和日志,下面给出几个可验证的具体命令。

抓取分片报文

tcpdump -i eth0 'ip[6:2] & 0x1fff != 0'

这条命令抓取所有非首片分片。ip[6:2]是IP头的第6到第7个字节,低13位为分片偏移量,偏移量不为0就是后续分片。

tcpdump -i eth0 'ip[6:2] & 0x1fff == 0'

这条抓首片,配合-w保存文件,再用Wireshark打开分析。

Wireshark里的过滤表达式可以写成:

ip.flags.mf == 1 or ip.frag_offset > 0

查看内核重组失败计数

netstat -s | grep -i frag
cat /proc/net/snmp | grep -i reasm

如果ReasmFails持续增长,说明有分片重组失败,可能是受到干扰。

查看内核日志

dmesg | grep -i frag

有些内核版本会在重组队列溢出时打印告警。

小结

分片报文干扰正常协议处理的本质,就是让不同设备对分片状态的理解出现偏差,防御的重点不是单点修补,而是统一策略:边界强制重组、限制缓存、先重组后检测,只要这三条落地,大多数分片干扰都会失效。

Q&A:关于分片报文干扰正常协议处理的方式

分片报文干扰正常协议处理的方式有哪些典型表现?

典型表现包括:防火墙日志显示放行但主机未收到完整请求、CPU或内存异常升高、连接建立不完整、netstat -s中重组失败计数持续增长、抓包发现大量不完整分片或重叠分片。

怎么判断服务器是否正在遭受分片报文干扰?

先看内核计数器。netstat -s | grep -i frag中重组失败数持续上升是一个强信号,再用tcpdump抓取非首片分片,观察是否有大量没有对应首片的后续分片,或者首片数量远少于后续分片,如果同时出现内存占用升高,基本可以判定为分片干扰。

分片报文干扰正常协议处理的方式能通过升级内核解决吗?

部分分片重组漏洞可以通过升级内核解决,因为近年来多个操作系统都修复过分片重组相关缺陷,但升级内核不能解决所有问题,尤其是边界设备策略不当导致的绕过,内核升级只能修复主机侧的重组逻辑,无法改变防火墙或路由器在重组前就做决策的流程。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱