7. 处理 Fragment
IPsec 通过将 packet 内容与 SPD 中定义的 selector 关联来执行其 access control function. 当 packet 被分片时, 这种关系可能被破坏, 从而可能允许未经授权的 traffic 穿过 IPsec boundary.
Fragment Handling 挑战
Fragmentation 给 IPsec processing 带来挑战, 因为:
- Transport Mode: IP header 在 IPsec processing 期间被修改, 使 fragment 匹配变得困难
- Tunnel Mode: Fragmentation 可能发生在 IPsec encapsulation 之前或之后
- Selector Matching: Port 信息 (以及其他 next-layer protocol data) 只在第一个 fragment 中可用
Stateful Fragment Checking
为应对这些挑战, IPsec implementation SHOULD 支持 stateful fragment checking. 此功能:
- 跟踪 packet 的第一个 fragment 以提取 selector 信息
- 根据 cached state 验证后续 fragment
- 确保 packet 的所有 fragment 均按 SPD policy 一致处理
Fragment Reassembly 考虑
IPsec Processing 之前:
- 在 IPsec processing 之前重组可简化 selector matching
- 需要用于 fragment reassembly 的 buffering capacity
- 可能易受 fragment-based attack 影响
IPsec Processing 之后:
- Fragment 逐个通过 IPsec 处理
- Reassembly 发生在 protected side
- 需要 stateful checking 来维持安全性
实现要求
- IPsec implementation MUST 支持处理单个 fragment
- Stateful fragment checking SHOULD 被支持, 并 SHOULD 可按每个 SA 配置
- 如果不执行 stateful checking, 缺少 selector 信息的 fragment MUST 被丢弃