要約

  • RFC 5961は、確立済み接続のRSTをシーケンス番号がRCV.NXTと完全一致するときだけ即座に受理する。ウィンドウ内でも不一致ならChallenge ACKを送り、RSTを捨てる。
  • 同じ証明は同期済み状態のSYN攻撃にも使われ、任意のACK範囲検査はデータ注入を減らし、調整可能な抑制が応答コストを制限する。

古い弱点は番号がないことではなく、受信ウィンドウ全体に破壊権限があったことだ。経路外の攻撃者は接続を観測せず、推定ウィンドウごとに偽造RSTを送り、どれか一つが入れば接続を切断できた。

RFC 5961は権限を狭める。ウィンドウ外RSTは黙って破棄する。次に期待するバイトRCV.NXTとの完全一致だけが即時切断を許される。ウィンドウ内の不一致RSTには<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>を返し、元のセグメントを捨て、接続を続ける。

応答は相手の状態を明らかにする

ACKは認証ではなく状態への問いだ。本当に接続状態を失った正当な相手は、制御ブロックを持たないため、確認番号から導いた新しいRSTを返す。その二つ目のRSTは完全一致し、切断を確定できる。盲目的な攻撃者は通常この問いを見られない。

同期済み状態のSYNも、番号にかかわらずChallenge ACKを受けて破棄される。実際に再起動した相手だけが有効なRSTで旧状態の消滅を確認する。SYN-SENTでは、元のSYNを確認するACKを持つRSTだけを受理する。同じ四つ組を再利用し、偶然RCV.NXT-1を選ぶまれな既存の隅ケースは残る。

データ注入には二つの範囲が要る

任意のデータ防御はACKをSND.UNA-MAX.SND.WNDからSND.NXTに限定する。MAX.SND.WNDはスケーリングを含む相手の最大広告ウィンドウを記録する。受信シーケンスと接続固有のACK範囲を両方当てさせ、偽造FINにも強くするが、注入を消し去るわけではない。そのためRSTとSYNはSHOULD、データ検査はMAYである。

問い返しはCPUと帯域を使う。RFCは管理者が調整できるACK抑制を勧める。5秒に10件という値は経験的な例で、普遍的設定ではない。小さい上限は資源を守るが古い状態の解消を遅らせ、大きい上限は逆の交換を行う。

非準拠ミドルボックスは誤ったRSTを繰り返し、RST/ACK交換を起こし得る。抑制がその費用を囲う。偽造セグメント一つでACK一つを反射できるが、一対一なので増幅ではない。

唯一の情報源は2010年8月に標準化過程で公開されたRFC 5961である。経路外推測を難しくするが、TCPを認証せず、経路上攻撃や偽造ICMPを止めない。完全な保護境界はIPsec AHまたはESPである。Challenge ACKは証明不足を示すだけで、悪意を証明しない。