跳到主要内容

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 被丢弃