SYNフラッド攻撃

読み:しんふらっどこうげき / 英語表記:SYN flood attack

TCPの接続要求(SYN)を大量に送り、接続が完了する前の状態を増やしてサーバの接続の準備のための資源を圧迫するDoS攻撃。正規の利用者が接続しにくくなる。

イマシルちゃんの解説

TCPで通信を始めるときは、接続要求とその返事、最後の確認を交換する3ウェイハンドシェイクという手順を踏むよ。
SYNフラッド攻撃は、この途中の待ち状態を大量に作り、正規の利用者を接続しにくくする攻撃なんだ。
攻撃者が接続要求のSYNを大量に送ると、サーバは返事をして最後の確認であるACKを待つよ。
その間は通常、接続相手の情報を保存するメモリなどを使っているんだ。
最後の確認が来ないまま待ち状態が増えると、新しい接続を受け付ける余裕がなくなってしまうの。
通信データを大量に送らなくても、接続を始める手順を悪用してサービスを妨げられるんだ。

より深い解説

定義

SYNフラッド攻撃は、TCPの3ウェイハンドシェイクを悪用するDoS攻撃である。攻撃者は、SYNパケットを大量に送るが、サーバが返すSYN+ACKに対する最後のACKを送らない。

仕組み

  1. サーバは、SYNを受け取るたびに、コネクションの情報を保存するメモリを確保し、SYN+ACKを返す
  2. サーバは、最後のACKが届くまで、その接続を途中の状態(SYN-RECEIVED、ハーフオープン)のまま保持する
  3. 攻撃者はACKを送らず、送信元IPアドレスを偽ってSYNを送り続ける
  4. 途中の状態の接続が上限に達すると、正規の利用者からの接続要求を受け付けられなくなる

送信元アドレスを偽ることが多いため、送信元を特定して遮断するのが難しい。

対策

対策内容
SYN CookieSYN受信時には通常の接続状態を保存する領域を確保せず、検証用の値をシーケンス番号へ埋め込んでSYN+ACKを返す。正しい最終ACKを確認してから接続状態を作る
待ち時間の短縮ハーフオープンの接続を保持する時間を短くする
待ち行列の拡大途中の状態の接続を保持できる数を増やす
ファイアウォール、IPS短時間に大量のSYNを送る送信元を検知して遮断する

接続の状態を番号へ埋め込む対策

SYN Cookie(SYNクッキー)は、最終確認前の接続ごとの状態を保存する代わりに、検証可能な値をSYN/ACKへ埋め込む方式である。クッキーという名称でも、HTTPのCookieとは別の仕組みである。

  1. サーバは接続要求から送信元・宛先のIPアドレスとポート番号などを読み、時刻やサーバが持つ秘密情報も用いて値を計算する。
  2. 計算した値をTCPヘッダーのシーケンス番号へ設定してSYN/ACKを返す。この段階では通常のハーフオープン接続ごとの状態領域を確保しない。
  3. クライアントから最終ACKが届いたら、サーバは受信情報を基に値を検証する。
  4. ACKの確認応答番号が、検証対象の値に1を加えた値に対応すれば、必要な接続状態を作って通信を受け付ける。

SYNはTCPの番号空間を一つ消費するため、確認応答は受け取った初期シーケンス番号の次を示す。番号は32ビットで巡回するので、上限を越える場合は2³²を法として扱う。

この対策で抑えるのは主に、接続未完了の情報を大量に保存するメモリの消費である。パケットを受信し、値を計算する処理は必要であり、回線帯域を埋める攻撃まで解消するものではない。保持できるTCPオプションなどにも実装上の条件がある。

ほかのDoS攻撃との違い

攻撃使い果たさせるもの
SYNフラッド攻撃TCPの接続の準備のための資源(メモリなど)
Slow HTTP DoS攻撃Webサーバの同時接続数(セッション)
DRDoS攻撃回線の帯域

参考資料

実際の試験ではここに出る!全5問

ネットワークスペシャリスト

午前Ⅱ
午後Ⅱ

この用語が出てくる記事

↑