01 · 源端分片模型:仅源节点可分片的全部含义
IPv6分片模型与IPv4存在根本差异(RFC 8200 §4.5):中间路由器不得对转发的报文分片,遇到超过出接口MTU的报文时只能发送ICMPv6 Packet Too Big(Type 2)通知源节点。这一设计把分片节奏的控制权完全收归端系统,其安全含义需要完整理解,而非停留在"中间节点不分片所以更安全"的浅层结论:
- 分片决策的可见性转移:何时分片、按什么尺寸分片,完全由源主机依据其PMTUD状态决定——网络中观察到的分片行为直接反映源端的协议栈状态与路径认知,为指纹识别与异常检测提供了真实信号;
- 重组收敛于终端:重组必须发生在最终目的地,而重组是有状态、耗资源、带超时的操作——攻击面从"沿途所有路由器"收缩为"每个终端协议栈",收敛不等于缩小,而是更集中的可利用目标;
- 每分片首部冗余:IPv6头+逐跳选项头+路由头必须出现在每个分片中,造成带宽开销并扩展了每个分片的解析面;
- 对ICMPv6的绝对依赖:源节点只有收到Packet Too Big才知道需要分片——抑制或伪造该消息直接操纵源节点的分片行为(第6页专论)。
| 维度 | IPv4 | IPv6 | 安全研究含义 |
|---|---|---|---|
| 分片发起方 | 源节点+中间路由器(Don't Fragment位控制) | 仅源节点 | 无DF位博弈;但PMTUD对ICMPv6的依赖成为唯一信息通道 |
| 重组位置 | 终点(路由器一般不重组) | 终点(明确不应在中间重组) | 攻击收敛于终端协议栈;中间设备只做转发判断 |
| 最小MTU | 576字节 | 1280字节 | 合法分片下限更高;"微小分片"的构造空间被压缩但未消除 |
| Identification宽度 | 16位 | 32位 | 暴力猜测不可行;可预测计数器成为主要弱点(RFC 7739) |
| 首部重复 | 每个分片重复IP头(20字节)+选项 | 每个分片重复IPv6头+逐跳/路由头+分片头 | 分片数量相同时IPv6开销更大;首部差异可留指纹 |
| 上层头位置 | 首分片含上层头(8字节粒度约束同) | 首分片必须含完整扩展头链+完整上层头(RFC 7112) | 7112是首分片完整性的规范锚点;中间设备是否执行是设备质量分水岭 |
02 · 分片算法与分片头的工程语义
2.1 源节点分片算法(规范级描述)
- 确定报文的分片边界:每分片首部=IPv6头+逐跳选项头+路由头(如有);"可分片部分"=其余扩展头+上层头+数据(RFC 8200 §4.5定义);
- 按出接口MTU(或PMTUD学到的路径MTU)切分可分片部分,每片(除最后一片)载荷为8字节整数倍;
- 为所有分片生成相同的32位Identification;首分片偏移置0、M位置1;中间分片M=1;末分片M=0、偏移=前序字节数/8;
- 每个分片获得独立的IPv6头(跳数限制等字段与原始报文一致)并分别发送。
2.2 分片头的字段级语义要点
- Next Header字段:标识分片头之后的头部类型;只有首分片该字段指向真正的上层头,后续分片指向的是"原报文在此偏移处的头部"——解析器必须结合偏移量理解,这是无状态设备最常见的误解析点;
- Fragment Offset(13位):以8字节为单位编码,理论编码空间0—8191;受16位载荷长度(最大65535字节)约束,实际可构造的最大偏移量级为8190(本课题以约数表述,不将具体边界值视为规范事实),配合M位可覆盖约64KB(65535字节)载荷——含分片头自身8字节的开销;偏移与M位的组合构成测试矩阵的离散状态空间,每个状态都是一格;
- Identification(32位):由源节点生成,同一数据报的所有分片共享。RFC 7739指出:若实现采用简单的逐目的或全局递增计数器,ID可被预测——攻击者观测若干分片后即可推测后续数据报的ID区间,为分片注入(第4页)创造先决条件;规范的缓解方向是随机化初始值并采用不可预测的选择机制;
- 保留字段:接收节点必须忽略——与IPv4"保留位必须为0"的演化史类似,保留位曾长期是"高灵敏探针"(IPv4记录路由/安全位历史上被用于指纹识别)。
03 · 重组状态机:有状态即有风险
3.1 状态机要素
重组以(源地址、目的地址、Identification)三元组关联分片。接收协议栈为每个进行中的数据报维护:分片到达位图(bit map,按8字节粒度标记已收区间)、数据缓存、最早分片到达时间(计时起点)、计数器(当前占用缓存的数据报数/总字节数)。状态机的每一步都有对应的资源语义,也各有对应的操纵手法:
| 状态机要素 | 资源语义 | 对应的操纵手法(概念层) |
|---|---|---|
| 数据报槽位 | 每个未完成数据报占用一个控制块(内存+哈希表项) | 以随机源地址大量发送首分片——槽位耗尽,合法数据报被逐出 |
| 数据缓存 | 累计缓存所有已收分片字节 | 少量特大分片即可占满字节配额(相比槽位攻击更省包) |
| 位图/区间管理 | 重叠区间的合并策略决定最终字节内容 | 注入重叠分片利用合并策略差异——同一报文在不同系统还原出不同内容(第4页) |
| 重组计时 | 超时值由实现定义(数十秒量级),超时即整体丢弃 | 慢速发送分片长期占槽;或精确计时探测实现指纹 |
| 首分片等待 | 首分片未到而后续分片先到时,后续分片仍会被缓存 | 先灌后续分片再补首分片,打乱检测设备的报文序关联 |
3.2 超时参数的事实性说明
RFC 8200未规定重组超时值,常见实现采用数十秒量级(如Linux内核net.ipv6.ip6frag_time默认值为60秒;不同系统、不同内核版本存在差异,且多可通过内核参数调整)。因此:①任何声称"RFC规定60秒"的说法均不严谨;②测量研究在报告具体数值时必须指明系统版本与配置;③防御配置(如Linux的net.ipv6.ip6frag_*参数族——ip6frag_time/ip6frag_high_thresh/ip6frag_low_thresh,及分片ND报文丢弃开关suppress_frag_ndisc,见第2页RFC 6980;BSD系的net.inet6.ip6frag系列)应纳入主机加固基线——在网关/服务器上限制未完成数据报数量与占用字节数,是抵御重组资源耗尽的直接手段。
04 · 分片的成本结构:带宽、CPU与状态
- 带宽开销:每个分片重复40字节IPv6头+8字节分片头(若带逐跳/路由头则更多)。以路径MTU 1280、发送6000字节载荷为例:可分片部分约5960字节,切分为5片,头部开销总计约240字节——开销占比约4%;MTU越低或首部链越长,占比越高。隧道场景下内外两层头叠加,开销进一步放大(RFC 4459分析的对象);
- CPU开销:发送端分片为O(n)内存拷贝操作;接收端重组涉及缓存管理、区间合并、校验——重组完成后才能上交上层,恶意高负载分片流可造成不成比例的CPU消耗;
- 状态开销:如3.1节所述,每个未完成数据报都是一份有生命周期的状态——这是分片与普通报文在防御经济学上的本质差异:处理一个分片流所需的状态资源,是其字节量的数倍;
- 丢包放大:任一分片丢失即整体重传(对TCP而言是整个数据报重传,不仅是丢失的分片),高丢包路径上分片传输效率显著恶化——这既是性能事实,也是"高丢包率环境分片率异常"可作为威胁狩猎线索的原因。
运营推论:现代应用架构(CDN、对象存储、大文件传输)普遍通过TCP分段与MSS协商避免IP层分片;现网中异常高的分片占比往往指向三类情况之一:PMTUD失效后的强制小MTU传输、隧道叠加导致的被动分片、或攻击/探测流量。分片率基线监测(分片报文数/总报文数)应纳入SOC常规指标。
05 · 与上层协议的协同:TCP、UDP与DNS
5.1 TCP与MSS协商
TCP通过MSS(最大报文段长度)选项在三次握手时协商每个报文段的上限——MSS本质上就是"对端发送给本端的数据量上限",合理设置MSS使TCP分段在源头即适配路径MTU,是避免IP分片的主要工程手段。常见实践包括按出接口MTU设置MSS(如1280−40−20)以及在边界实施MSS钳制(MSS Clamping)改写过大MSS——钳制动作本身属于防火墙/路由器的常规基线,但需注意:钳制改的是TCP载荷上限,无法约束UDP等无协商协议,也无法消除隧道叠加场景下的被动分片。
5.2 UDP、DNS与"避免分片"运动
UDP无协商机制,应用层缓冲区决定报文尺寸——DNS是UDP大报文的经典载体。RFC 8900(2020年)系统论证了避免IP分片的必要性并给出EDNS缓冲区建议值(如1232字节以适应隧道叠加的最常见场景);DNS Flag Day 2019(由多家DNS软件厂商与运营商联合发起)清退了对"截断后回退TCP"的懒惰兼容,其背景正是分片DNS报文的不可靠性。对安全研究而言,DNS over UDP的大报文仍有诊断价值(如路径MTU测量),但应明确:任何依赖IP分片的应用协议设计都已被社区标记为反模式。
5.3 隧道与VPN:分片的二次方
隧道封装为报文追加外层头(IPv6-in-IPv6为40字节,ESP隧道为ESP头+IV+ICV等更可观的开销),原报文紧贴MTU时封装后即超限——源端PMTUD若未感知隧道真实MTU,由隧道出口回送的内层PTB(经RFC 4459讨论的信令路径)才能纠正;该过程中可能出现"外层再分片+内层分片"的双重分片嵌套。RFC 4459(2006年)将此类问题归纳为网络内隧道化的通用MTU课题,其结论今天依然适用:隧道MTU管理(显式配置/PMTUD联动)是数据中心与VPN运营的直接安全事项。
06 · 合法分片的流量指纹:识别基线
| 指纹维度 | 合法形态 | 异常形态(值得告警) |
|---|---|---|
| 分片尺寸 | 各片(除末片)载荷相等且为8字节整数倍,与路径MTU一致 | 全片尺寸普遍为8的极小倍数(微小分片模式);尺寸与已知路径MTU不符 |
| 偏移序列 | 偏移严格递增、连续无重叠 | 重叠区间、乱序比例异常高、重复偏移 |
| M位模式 | 恰最后一个分片M=0 | 同一三元组出现多个M=0分片(原子分片与真末片并存) |
| Identification模式 | 同三元组各片ID一致;跨数据报ID呈随机/无规律 | 跨数据报ID单调可推(RFC 7739场景);同数据报ID不一致 |
| 首分片完整性 | 首分片含完整头链+完整上层头(RFC 7112) | 首分片截断在上层头中间(长度小于最小上层头) |
| 首部分首部 | 各分片逐跳/路由头内容一致 | 分片间首部内容漂移(理论上不应发生) |
上述指纹的检测落点:NetFlow/IPFIX可导出分片标记位与ID(字段依实现而异),逐包深度检测需Suricata/Snort类引擎或专用探针;对"合法形态"的刻画应以本组织真实流量为基准自学习,表中描述为通用参考而非阈值标准。
07 · 分片流量的监测思路(衔接第5、8页)
- 比例基线:分片报文占比、分片数据报平均片数、分片协议分布(TCP/UDP/ICMPv6)——偏离基线即告警;
- 异常模式匹配:微小分片、重叠偏移、多末片、首分片不完整——四类模式的检出规则可直接对应第4页滥用模式清单;
- 资源侧监测:终端/网关的重组槽位占用、分片丢弃计数、重组超时计数——资源耗尽攻击往往先在计数器上显形;
- 关联分析:分片风暴与PTB消息异常(第6页)的时序关联——伪造PTB诱发原子分片的攻击链在流量侧呈现"PTB突增→分片形态突变"的耦合特征。
本节参考来源(第3页)
以下均为真实可查的权威来源,用于支撑本页事实性表述。
IETF RFC 8200(2017年7月)§4.5源节点分片、§4.6分片头处理、§5最小MTU:rfc-editor.org/rfc/rfc8200。
IETF RFC 7112《Implications of Oversized IPv6 Header Chains》(2013年1月,首分片完整性要求):rfc-editor.org/rfc/rfc7112。
IETF RFC 7739《Security Implications of Predictable Fragment Identification Values》(2016年2月,Gont):rfc-editor.org/rfc/rfc7739。
IETF RFC 1981《Path MTU Discovery for IPv6》(1996年8月):rfc-editor.org/rfc/rfc1981。
IETF RFC 4459《MTU and Fragmentation Issues with In-the-Network Tunneling》(2006年3月):rfc-editor.org/rfc/rfc4459。
IETF RFC 8900《Avoiding IP Fragmentation in the DNS》(2020年9月):rfc-editor.org/rfc/rfc8900;DNS Flag Day官方网站(2019年,多家DNS厂商联合):dnsflagday.net/2019。
IETF RFC 4821《Packetization Layer Path MTU Discovery》(2007年3月):rfc-editor.org/rfc/rfc4821;RFC 8899《DPLPMTUD》(2020年9月):rfc-editor.org/rfc/rfc8899。
IETF RFC 5722《Handling of Overlapping IPv6 Fragments》(2009年12月);RFC 6946《Processing of IPv6 "Atomic" Fragments》(2013年5月);RFC 8021《Generation of IPv6 Atomic Fragments Considered Harmful》(2017年1月)。