网络层清洗如果不先对分片报文做完整的重组校验,攻击者只需把恶意载荷拆成多个碎片,就能让大部分安全策略形同虚设。
网络层清洗是什么意思?分片报文重组校验为什么是第一步
网络层清洗指的是在流量进入业务服务器之前,由清洗设备对IP层报文做合法性检查、异常过滤和速率限制,它不同于传输层清洗只看TCP/UDP端口,也不同于应用层清洗去解析HTTP正文,网络层清洗面对的对象是IP报文本身,分片、协议号、源地址、TTL、IP选项这些字段都在它的职责范围内。
IP分片本身是合法的传输机制,当一条报文超过链路MTU时,发送方会把它拆成多个分片,接收方根据Identification字段、Flag字段和Fragment Offset字段重新拼回原始报文,问题在于,很多安全设备为了性能,只检查第一个分片或者直接放行所有分片,攻击者就利用这个习惯,把恶意内容藏进后续分片。
分片重组校验成了网络层清洗的第一道硬门槛,清洗设备需要先把到达的分片按流缓存起来,确认所有分片到齐、偏移不重叠、总长度不超限,然后重新组装成完整报文,再交给后续安全策略判断,如果跳过这一步,后续所有基于端口、载荷、行为特征的过滤都可能失效。
用一个具体场景来说明:攻击者发送一批分片,首分片只包含一个看起来正常的TCP端口80,后续分片才携带攻击载荷,如果清洗设备只查首分片,就会把这批流量放行,服务器重组后,攻击载荷直接到达应用层。
IP分片攻击怎么防御?先看防火墙分片重组失败原因
防火墙分片重组失败原因不是单一故障,而是多种情况叠加的结果,常见的失败场景包括:
- 重组缓冲区被大量不完整分片占满,新的合法分片被丢弃。
- 分片到达顺序混乱,超过设备等待窗口时间。
- 攻击者故意制造重叠分片,让不同分片对同一偏移位置给出不同数据。
- 分片总长度超过重组上限,触发内存保护机制。
- 设备只缓存首分片,后续分片到达时找不到上下文直接放行。
IP分片攻击怎么防御?答案不是禁止所有分片,而是调整清洗策略,让设备具备完整重组能力之后再放行,具体可以这样做:
- 先设置合理的分片超时时间,通常在1到3秒之间。
- 限制单条流允许缓存的最大分片数,防止重组队列被打满。
- 对重叠分片直接丢弃,不尝试二次重组。
- 对缺失分片的流不做放行,直到超时后清理。
做过防火墙运维的人都知道,防火墙分片重组失败原因经常和内存参数有关,Linux内核中有一个net.ipv4.ipfrag_high_thresh参数,它决定系统最多用多少内存来缓存待重组分片,如果这个值太小,正常大包也可能被丢弃;如果太大,攻击者可以用分片洪水拖垮设备。
没有重组校验的清洗策略,攻击者能钻哪些空子?
跳过重组校验,等于把安全判断建立在不完整的证据上,攻击者可以利用这些空子:
- ACL绕过:访问控制列表通常匹配五元组,攻击者把端口信息放在首分片,把违规载荷放在后续分片,ACL只看到正常端口。
- IDS/IPS失效:入侵检测系统需要匹配完整载荷特征,分片后,攻击特征被拆散,特征库无法命中。
- 状态检测防火墙误判:防火墙可能根据首分片建立连接状态,后续分片作为已建立连接直接放行,不再检查。
- 资源耗尽:大量不完整分片占用重组缓冲区,新连接无法建立,形成拒绝服务。
要验证自己的清洗设备是否存在这类问题,可以在测试环境里用几条命令观察。
先用一条强制分片的ping测试:
ping -s 2000 -M dont 目标IP
如果目标能正常回复,说明网络路径允许分片通过,再用tcpdump观察分片标记:
tcpdump -vvv 'ip[6:2] & 0x1fff != 0'
这条命令会显示所有分片偏移不为零的报文,也就是非首分片,如果清洗设备在首分片放行后,后续分片也能直接到达服务器,基本可以判断没有做严格的先重组后过滤。
行业共识认为,分片重组校验能力是衡量网络层清洗效果的基础指标,缺少这个能力的清洗服务,无论宣传防护带宽多大,都留有明显的绕过路径。
清洗设备上启用分片重组校验的实操路径
不同厂商设备配置项不同,但底层逻辑一致,以Linux环境为例,先检查当前分片缓存参数:
sysctl net.ipv4.ipfrag_high_thresh net.ipv4.ipfrag_low_thresh net.ipv4.ipfrag_time
输出示例中,ipfrag_high_thresh是最大内存字节数,ipfrag_time是分片保留秒数,如果清洗设备基于Linux内核,可以临时调整:
sysctl -w net.ipv4.ipfrag_high_thresh=4194304
sysctl -w net.ipv4.ipfrag_low_thresh=3145728
sysctl -w net.ipv4.ipfrag_time=2
在iptables规则中先丢弃无效连接状态,再允许正常流量:
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -f -m limit --limit 50/s -j ACCEPT
第二条规则限制分片速率,防止分片洪水冲击重组队列,注意,-f匹配的是非首分片,首分片需要单独判断,很多清洗设备默认会放行首分片,这是最容易被利用的地方。
在硬件清洗设备上,一般有“分片处理模式”选项,选择“重组后过滤”而不是“透传分片”,部分设备支持“丢弃无法重组的分片”和“限制分片缓存条目数”,这些选项要在业务低峰期打开,观察是否有正常大包业务受影响。
网络清洗设备价格一般多少?分片重组校验会影响性价比吗
网络清洗设备价格一般多少,不能用一个数字回答,它取决于设备形态、防护容量、清洗精度和是否支持硬件加速重组,入门级软件清洗方案可能只需要一台普通服务器加开源工具,运营商级硬件清洗设备价格则会高出几个数量级。
价格差异里,分片重组能力占很大比重,能够硬件加速重组、支持高并发分片流的设备,成本明显高于只能简单丢弃分片的设备,部分北京DDoS清洗服务商在方案中会把分片重组校验列为默认能力,但采购前需要确认是软件重组还是硬件重组,软件重组在攻击流量增大时容易成为瓶颈,硬件重组延迟更低,但成本更高。
高防IP清洗分片攻击效果怎么样,也取决于这一点,如果高防IP节点在入口就做了完整的先重组后过滤,分片攻击基本能被拦在业务之外,如果只对首分片做检测,攻击者用偏移分片就能绕过,日常可用
hping3做分片测试,但测试前要确认清洗服务商允许这类验证流量。
分片重组校验带来的延迟,多数情况下并不明显
有人担心开启重组校验会拖慢正常业务,多数情况下延迟增加并不明显,尤其是硬件清洗设备,分片重组本身就是IP协议栈的一部分,正常分片流量占比很低,攻击场景下,清洗设备会优先丢弃无法完成重组的分片,反而保护了后续的转发性能。
延迟主要来自重组等待,如果某个流的分片迟迟不到齐,设备要缓存已到达部分,直到超时,把超时时间设得太长,会占用内存;设得太短,正常乱序分片会被误杀,一般建议超时时间设置在1秒左右,既能容忍公网乱序,又不会给攻击者留下太多窗口。
网络层清洗的核心价值,是在不完整流量进入业务系统之前把它拦住,分片报文重组校验不是可选功能,而是网络层清洗的基本前提,缺少这个前提,再贵的清洗设备也无法保证安全。
网络层清洗对分片报文重组校验的必要性:常见问题
防火墙分片重组失败原因有哪些?
常见原因包括重组缓冲区不足、分片超时窗口太短、分片数量超出限制、重叠分片触发异常,以及设备只检查首分片不检查后续分片,维护人员可以通过查看内核分片参数和日志定位具体原因。
IP分片攻击怎么防御?只丢弃首分片有用吗?
只丢弃首分片不可靠,攻击者可以调整Fragment Offset,让攻击载荷出现在非首分片位置,IP分片攻击怎么防御,核心做法是先重组完整报文,再根据完整信息做安全过滤。
网络层清洗是什么意思?和传输层清洗有什么区别?
网络层清洗针对IP层,处理分片、IP选项、源路由、协议异常等,传输层清洗针对TCP/UDP层,处理SYN Flood、连接状态异常、端口扫描等,网络层清洗如果跳过分片重组校验,后续传输层和应用层防护就无法看到完整报文,所有策略都可能被绕过。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/635934.html





