摘要

  • 当两个端点仍保留有效的 TCP-AO 连接状态时,TCP-AO 可以认证重置报文。
  • 对端重启后,无法验证的重置会被丢弃;残留连接必须依靠存活检测或应用恢复来清理。

重启制造了不对称的状态

在故障发生前,两端都掌握 TCP 连接、初始序列号以及该连接所需的流量密钥。因此,处于同一安全上下文中的重置可以通过认证。

路由器重启后,可能仍记得要与邻居使用 TCP-AO,却已经丢失那条具体连接的状态。RFC 5925 说明:如果不知道初始序列号对,例如重启后发送重置时,重置应当不带认证。要求使用 TCP-AO 的接收端无法验证该报文,只能丢弃它。

于是,一端认为连接已经不存在,另一端却仍保存着旧连接;后者没有得到能够接受的证明。

为什么不能接受这个诚实的重置

如果把未认证重置当作恢复例外,攻击者也能伪造同样的报文并终止受保护会话。接收端无法仅凭报文判断发送者是重启后的诚实对端,还是伪造者。

代价是清理速度变慢。存活的一端可能继续保存过时状态,直到自己的存活机制确认连接不再推进。RFC 5925 建议使用 TCP 或应用层 keepalive,并要求实现检测并清除过量的 TCP 连接状态,以保护内存。

来源