SC Workbook
科目 A-2 · ネットワーク

SYN クッキーの仕組み

SYN クッキーを有効にした Web サーバが,送信元 IP アドレスを詐称した大量の SYN を受信している間に,正規の利用者 A から SYN を受信し,SYN/ACK を返した後に A から ACK を受信した。この間のサーバの動作として,適切なものはどれか。

  1. ア詐称された SYN と A の SYN のそれぞれについて,接続情報を通常の TCB よりも小さいエントリに縮めてハッシュ表に保持し,A から ACK を受けたときに,そのエントリから接続の状態を作成する。
  2. イ詐称された SYN は送信元を確認して SYN/ACK を返さずに破棄し,A の SYN にだけ SYN/ACK を返すので,詐称されたアドレスのホストに SYN/ACK が送り付けられることはない。
  3. ウSYN/ACK の代わりにクッキーだけを A に返し,A がそのクッキーを付けて SYN を送り直してきたときに,クッキーを検証してから SYN/ACK を返して接続の状態を作成する。
  4. エSYN を受けた時点では接続の状態を保持せず,アドレスやポート番号,秘密値などから計算した値を SYN/ACK の初期シーケンス番号とし,ACK を受けたときに値を計算し直して一致すれば接続の状態を作成する。
正解と解説を見る

正解 エ

この問題の基礎知識

  • TCP の 3 ウェイハンドシェイクでは,クライアントの SYN にサーバが SYN/ACK を返し,クライアントの ACK で接続が確立する。サーバが ACK を待つ間の接続を SYN-RECEIVED(ハーフオープン)の状態という。
  • SYN フラッド攻撃は,送信元を詐称した SYN を大量に送り,ハーフオープンの接続でサーバのバックログ(接続待ちの領域)を埋めて,正規の接続を受け付けられなくする攻撃である。
  • TCP では各端点が初期シーケンス番号を選び,相手はその値に 1 を加えた値を確認応答番号として返す。したがって,サーバが SYN/ACK に入れた値は,正規の相手からの ACK で戻ってくる。
  • SYN フラッドへのサーバ側の対策には,バックログの拡大,ハーフオープンの接続ごとに保持する状態を小さくする SYN キャッシュ,SYN クッキーなどがあり,それぞれ仕組みが異なる。
ア詐称された SYN と A の SYN のそれぞれについて,接続情報を通常の TCB よりも小さいエントリに縮めてハッシュ表に保持し,A から ACK を受けたときに,そのエントリから接続の状態を作成する。

これは SYN キャッシュの動作である。SYN キャッシュは SYN ごとに割り当てる状態を小さくするが,状態自体は保持する。SYN クッキーは SYN-RECEIVED の接続について状態を一切割り当てない点が異なる。

イ詐称された SYN は送信元を確認して SYN/ACK を返さずに破棄し,A の SYN にだけ SYN/ACK を返すので,詐称されたアドレスのホストに SYN/ACK が送り付けられることはない。

サーバは SYN を受けた時点では送信元が詐称されているかを判別できず,どの SYN にもクッキーを埋め込んだ SYN/ACK を返す。送信元が正規であることは,クッキーに対応する ACK が返ってきたことで初めて確かめられる。

ウSYN/ACK の代わりにクッキーだけを A に返し,A がそのクッキーを付けて SYN を送り直してきたときに,クッキーを検証してから SYN/ACK を返して接続の状態を作成する。

SYN クッキーは,通常の 3 ウェイハンドシェイクの SYN/ACK の初期シーケンス番号としてクッキーを送る方式であり,クライアントに SYN を送り直させることはない。クライアント側の TCP 実装を変える必要もない。

エSYN を受けた時点では接続の状態を保持せず,アドレスやポート番号,秘密値などから計算した値を SYN/ACK の初期シーケンス番号とし,ACK を受けたときに値を計算し直して一致すれば接続の状態を作成する。正解

SYN クッキーは,必要な情報を SYN/ACK のシーケンス番号に符号化し,SYN-RECEIVED の接続について状態を割り当てない。ACK の確認応答番号などを,ACK のアドレス・ポート番号と時刻カウンタ・秘密値から計算し直した値と照合して受け付けるので,詐称された SYN でバックログが埋まらない。

検証用の出典出典照合済み
RFC 4987 TCP SYN Flooding Attacks and Common Mitigations
照合の根拠(9 件)
  • エ(正解): SYN を受けた時点では状態を割り当てず,クッキーを SYN/ACK のシーケンス番号として送る
    When a connection in LISTEN receives a SYN segment, it can generate a SYN cookie and send it in the sequence number of a SYN-ACK, without allocating any other state.
    RFC 4987 · Appendix A(新しいタブで開きます)
  • エ(正解): クッキーはアドレス・ポート番号や時刻カウンタなどから決めた SYN/ACK の初期シーケンス番号である
    A SYN cookie is an initial sequence number sent in the SYN-ACK, that is chosen based on the connection initiator's initial sequence number, MSS, a time counter, and the relevant addresses and port numbers.
    RFC 4987 · Appendix A(新しいタブで開きます)
  • エ(正解): ACK を受けたら,ACK のアドレス・ポート番号とカウンタ・秘密関数から計算し直した値と照合する
    If an ACK comes back, the difference between the acknowledged sequence number and the sequence number of the ACK segment can be checked against recent values of the counter and the secret function's output given those counter values and the IP addresses and port numbers in the ACK segment.
    RFC 4987 · Appendix A(新しいタブで開きます)
  • エ(正解)・ア(誤り): SYN クッキーは SYN-RECEIVED の接続に状態を一切割り当てない(状態を縮めて保持するアとは異なる)
    SYN cookies go a step further and allocate no state at all for connections in SYN-RECEIVED.
    RFC 4987 · Section 3.6(新しいタブで開きます)
  • ア(誤り): 不完全な TCB をハッシュ表に保持するのは SYN キャッシュの動作である
    The secret bits are hashed along with the IP addresses and TCP ports of a segment, and the hash value determines the location in a global hash table where the incomplete TCB is stored.
    RFC 4987 · Section 3.5(新しいタブで開きます)
  • イ(誤り): 攻撃を受けたサーバは詐称された送信元アドレスに対しても SYN/ACK を生成する
    For an effective attack, it is important that the spoofed IP addresses be unresponsive to the SYN-ACK segments that the victim will generate.
    RFC 4987 · Section 2.2(新しいタブで開きます)
  • イ(誤り): 送信元が詐称されていないことはハンドシェイクを完了する ACK が返って初めて分かり,SYN の時点で詐称を見分けて破棄するのではない
    If the SYN was not spoofed, then the acknowledgement number (along with several other fields) in the ACK that completes the handshake can be used to reconstruct the state to be put into the TCB.
    RFC 4987 · Section 3.6(新しいタブで開きます)
  • ウ(誤り): どの実装でも基本は SYN/ACK のシーケンス番号に情報を符号化することであり,クッキーだけを返して SYN を送り直させる方式ではない(RFC に直接の否定文はなく,この記述から排除される)
    There are other slightly different ways of implementing the SYN cookie concept than the exact means described here, although the basic idea of encoding data into the SYN-ACK sequence number is constant.
    RFC 4987 · Appendix A(新しいタブで開きます)
  • ウ(誤り): クッキーは生成したサーバ自身が検証するので,相手側の TCP 実装に影響しない
    Any similar one-way hash could be used instead without impacting interoperability since the hash value is checked by the same host who generates it.
    RFC 4987 · Section 3.6(新しいタブで開きます)

ウを直接否定する一文は RFC 4987 に無いが,Appendix A の「SYN-ACK のシーケンス番号に符号化するのが基本で不変」と 3.6 の相互運用性の記述から,通常の 3 ウェイハンドシェイクのまま動く方式であることが分かるので排除できる。

問題 ID A2-NET-0501 · AI 作成のオリジナル問題 · 正解と各選択肢の根拠を出典の原文で確認しています。 照合日 2026-11-08

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。