摘要

  • RFC 5961 只在已建立连接的 RST 序列号精确等于 RCV.NXT 时立即接受重置;窗口内但不精确的 RST 会触发 Challenge ACK,随后被丢弃。
  • 同一证明机制保护同步状态免受盲 SYN 攻击;可选 ACK 范围校验降低数据注入概率,可调限速则约束新增的响应成本。

旧弱点不是 TCP 没有序列号,而是整个接收窗口内的号码都拥有破坏性权力。路径外攻击者无需看到连接,只要按估计窗口间隔持续发送伪造 RST,就可能有一次落入窗口并终止连接。窗口越大,需要的猜测越少。

RFC 5961 收紧了授权。窗口外 RST 静默丢弃;只有精确匹配下一个期望字节 RCV.NXT 的 RST 立即关闭连接。若 RST 在窗口内却不精确,端点发送 <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>,丢弃原报文并保持连接继续运行。

质询要求对端暴露状态

这个 ACK 不是身份认证,而是状态质询。真正已经关闭连接的对端不再持有相应控制块,收到 ACK 后会按普通 TCP 规则返回一个由确认号推导出的新 RST。第二个 RST 因而精确匹配,可以完成关闭。盲攻击者通常看不到质询,无法构造这项证明。

同步状态中的 SYN 采用相同逻辑:不论序列号如何,端点都发送 Challenge ACK、丢弃 SYN,并等待真正重启的对端用有效 RST 确认旧连接已消失。在 SYN-SENT 中,只有 ACK 确认了原 SYN 的 RST 才可接受。一个极少见的既有边界仍存在:重启端复用同一四元组,又恰好选择 RCV.NXT-1,可能忽略质询并反复超时。

数据注入要猜中两个范围

可选的数据防线把可接受 ACK 限定在 SND.UNA-MAX.SND.WND 到 SND.NXT。MAX.SND.WND 记录对端曾通告的最大窗口,包括扩展后的值。攻击者既要猜中接收序列,也要猜中连接特定的确认范围。它还能增强对伪造 FIN 的抵抗,但只能降低概率,不能消除注入。因此 RST 与 SYN 防线为 SHOULD,数据防线为 MAY。

每次质询都会消耗带宽和 CPU。RFC 建议采用管理员可调的 ACK 限速;“五秒不超过十个”只是经验示例,不是普适常数。更低阈值保护资源,却会延迟合法陈旧状态的清理;更高阈值加快清理,同时承担更多响应。

不合规中间盒可能反复发送错误编号的 RST,形成 RST/ACK 循环,必须由限速约束。伪造的窗口内 RST 或 SYN 也能向受害者反射一个 ACK,但不存在放大,因为每个响应都需要一个攻击报文。

唯一来源是 2010 年 8 月进入标准化轨道的 RFC 5961。它提高路径外猜测成本,却不认证 TCP、不阻止路径上攻击者,也不覆盖伪造 ICMP 等全部攻击面。RFC 将 IPsec AH 或 ESP 视为完整保护边界。Challenge ACK 只能说明首个报文尚未证明权力,不能证明恶意。