SYN Flood攻撃について
SYN flood攻撃は、
インターネットにおける
DoS攻撃の一形態であり、主に
Webサーバを標的としています。この攻撃により、対象サイトの負荷が増大し、一時的にサービスが利用できなくなります。具体的には、攻撃者は
サーバに対し大量のTCP SYN
パケットを送信し、
サーバの応答を無視することで、リソースを消費させる仕組みです。
攻撃の原理
通常、TCP接続の過程は3つのステップで進行します。この過程は「
3ウェイ・ハンドシェイク」と呼ばれます。以下がその手順です:
1.
クライアントからの接続要求:まず、クライアントが
サーバにSYN
パケットを送信します。
2.
サーバの応答:
サーバはSYN ACK
パケットを返信し、接続を許可します。この際、
サーバは接続のための情報を保持するメモリを割り当てます。
3.
クライアントからの確認応答:最後に、クライアントがACK
パケットを送信し、接続が確立されます。
しかし、SYN flood攻撃では、攻撃者がクライアントの役割を務め、大量のSYN
パケットを
サーバに送るものの、ACK
パケットを送信せずに放置します。これにより、
サーバは「中途半端な」接続状態に陥ります。
サーバはACK
パケットが時間内に届かないことを理由に、接続に対する待機状態を維持しますが、その間もメモリを消費し続けるのです。
このようにして攻撃が繰り返されると、
サーバのリソースは急速に枯渇してしまい、他のクライアントからの接続要求に応答できなくなります。この状態をライブロックと呼び、
サーバは稼働しているものの、事実上はダウンしたかのように見えます。特に悪化した状況では、
オペレーティングシステム自体がクラッシュする危険性もあります。
SYN flood攻撃によって、
サーバはどれだけのメモリを消費するのでしょうか。例えば、
サーバが1Gbpsの
イーサネットに接続されている場合、受信するデータは最大約100メガバイト/秒です。各TCP SYN
パケットは約60バイトの大きさであるため、1秒間に送信される
パケット数は最大で約200万個になります。
攻撃者は通常、その接続元アドレスを偽装するため、
サーバは受信したSYN
パケットに応じて16バイトの情報を消費します。この結果、1Gbpsの帯域を使用するSYN flood攻撃が行われた場合、
サーバは1秒間に約30メガバイトのメモリを消費します。さらに、
サーバは各SYN
パケットを30秒以上保持する必要があるため、総消費メモリは約900メガバイトに達します。このような条件下では、
サーバは新しい接続要求に対応することがほぼ不可能になります。
対策
SYN flood攻撃が広く知られるようになったのは、
1996年に米国の大手プロバイダであるPanixのメール
サーバがこの攻撃によりダウンした事件がきっかけです。当初は効果的な防御策が存在しないと考えられましたが、後にSYN cookiesやSYN cacheなどの技術が開発され、一定程度、正当なクライアントからの接続を維持できるようになりました。
また、最近ではプロバイダによるIngressフィルタリングが普及し、偽装された
パケットによる攻撃が軽減されています。これにより、攻撃の難易度は下がっていますが、依然として有効な対策が求められています。
具体的な被害事例
2007年2月、
ニコニコ動画の
Webサーバやメッセージ
サーバがSYN flood攻撃の標的となり、サービスが一時停止する事態が発生しました。当初は30台程度による攻撃でしたが、最終的には3000台以上からの攻撃に増大し、
サーバは機能しなくなりました。このように、SYN flood攻撃は数的な規模が重要で、短時間で大きな影響を及ぼすことが確認されています。