要約

  • SYNフラッドは時間差を利用する。サーバーは開始側がハンドシェイクを完了する前に有限の半開状態を確保するため、安価な要求が待ち行列を埋められる。
  • RFC 4987が比較する主要な端点防衛は、小さな状態を有界SYNキャッシュに置く方法と、状態をSYN Cookieに符号化し、有効なACKの後で完全な接続を再構築する方法である。

SYNを受け取った待受サーバーは、小さく見えて重大な決定をする。試行を記憶し、SYN-ACKを送り、待つ。正当なクライアントにとってはTCPの日常動作だが、攻撃者にとっては前払いの信用枠である。サーバーはメモリーとタイマーを使うのに、相手はまだ応答を聞けることすら示していない。

RFC 4987は、この前払いがどう悪用されるかを整理している。通常のTCP実装は、三者間ハンドシェイクが終わるまでSYN-RECEIVED状態を保持する。半開接続の待ち行列は有限だ。回収より速く要求を流し込めば、正当な新規接続の場所がなくなる。文書の対象はホストのTCP状態と待受アプリケーションに対するサービス妨害であり、パケット量そのものが回線容量を先に使い切る攻撃ではない。

送信元アドレスの偽装はSYN-ACKへの応答を消す便利な手段だが、攻撃の必須条件ではない。侵害されたホストは到達可能な実在アドレスから同じ圧力をかけられる。必要なのは、SYNごとに状態が作られること、半開状態の総量が限られること、到着が回収を上回ることだ。RFCが述べる仕組みでは、直接の対象は狙われた待受ポートへの新しい着信接続であり、すでに成立した接続や発信接続の状態ではない。

直感的な対策の多くは、非対称性を変えずに閾値だけを動かす。backlogを大きくすれば防御側はメモリーを増やすが、攻撃者が埋める数字も大きくなる。SYN-RECEIVEDのタイマーを短くすれば早く空く一方、通常の遅延を受けた正当な利用者を捨て、攻撃側は送信頻度を上げればよい。最古の半開制御ブロックを再利用しても、年齢を犠牲の基準にするだけで正当性は分からない。イングレスフィルタリングは偽装依存の攻撃を弱めるが、世界全体への導入を前提にできず、正規アドレスを持つボットには効かない。

少なく覚え、上限を明確にする

SYNキャッシュは最初のメッセージの価格を下げる。完全なTCP制御ブロックを直ちに作らず、ハンドシェイク完了に必要な小さな記録だけを保持する。キャッシュには明示的な上限がある。RFCはさらに、秘密を使ったハッシュで複数のバケットへ分散する方法を説明する。関数が予測可能なら、全体に余裕があっても一つのバケットだけを狙って埋められる。秘密はその集中を難しくし、上限はメモリーと探索処理を抑える。

ただしキャッシュも状態である。期限切れを処理し、失われたSYN-ACKを再送できなければならない。一度だけ返信して再送責任を忘れれば、通常のパケット損失が接続失敗に変わる。価値はTCPの振る舞いを消すことではなく、最終ACKに到達するための最小限を残しながら、高価なオブジェクトを先送りすることにある。

返信の中に受領証を埋め込む

SYN Cookieは同じ原則を無状態に近づける。サーバーは要求ごとのSYN-RECEIVED記録を保持しない。代わりに初期シーケンス番号を構成し、最後のACKが戻ったときに交換を検証し接続状態を再構築できる情報を運ばせる。有効なACKを確認して初めて、完全な制御ブロックを割り当てる。

付録Aの例は、開始側のシーケンス番号、最大セグメントサイズの符号、時間カウンター、双方のアドレスとポート、秘密関数を組み合わせる。ACKが戻ると、サーバーは秘密と最近のカウンター値で検査する。これは一回のハンドシェイクに対する小さな受領証であり、人間やアプリケーションの認証ではない。ACK送信者がSYN-ACK由来の情報を持つことを、推測耐性の範囲で示すだけで、永続的な身元は作らない。

無状態には意味上の代償もある。TCPはSYNとACKの間に交渉したオプションを普通なら記憶するが、Cookieに符号化できる空間は小さい。一般的な構成ではウィンドウスケーリング、SACK、将来のオプション状態が制約され得る。RFCはSYN上のデータにも触れている。最後のACKが失われ、サーバー側アプリケーションがクライアントデータを受けるまで話さない場合、SYN-ACKを通常どおり再送するための状態がないこともある。資源確保を遅らせると、プロトコルの記憶も一部遅れる。

二つを組み合わせることもできる。通常はSYNキャッシュを使い、上限に達したときだけCookieへ切り替える。ハイブリッド方式は余裕がある間は豊かな交渉を保ち、過負荷時に無状態の受領証を使う。ファイアウォールやプロキシもハンドシェイクを仲介できるが、状態負担を移し、エンドツーエンドの意味を変える場合がある。資源判断は消えず、所有者が変わる。

RFC 4987は2007年8月公開のInformational文書で、Standards Trackの義務ではない。当時の分析はSYNキャッシュとSYN Cookieを実用的な端点変更とし、可能なら通常時はキャッシュを使う考えを示した。これは歴史的評価であり、現在のOSの既定値を示す証拠ではない。

残る原則は広い。安価で可逆な表現によって交換を続けられるなら、未検証の最初のメッセージに対し、攻撃者が向きを決められる高価で希少な資源を直ちに確保しない。応答に含まれた情報が返るまで待てば、戻り経路の到達性について証拠が増える。しかし身元認証にはならず、先送りによって有用な文脈も失い得る。防衛は、節約した資源と弱めた意味の両方を明らかにしなければならない。

唯一の資料は RFC 4987「TCP SYN Flooding Attacks and Common Mitigations」である。本稿は端点TCP状態、RFCが比較した防衛、その明示的な限界に範囲を絞り、現在の導入率、既定設定、攻撃頻度を推測しない。