SYN flood

SYN flood攻撃 (シン・フラッドこうげき) とは、インターネットにおけるDoS攻撃（サービス拒否攻撃）のひとつ。インターネット上に公開されているウェブサーバなどの負荷を増大させ、対象となるサイトを一時的に利用不能に陥らせてしまう効果がある。
原理.
一般に、インターネット上の TCP接続は次のような手順で行われる (3ウェイ・ハンドシェイク):
SYN flood 攻撃は、クライアント側がこの 3. の操作を意図的に行わないようにして、サーバを「中途半端な」状態にすることである。SYN flood攻撃をおこなう (悪意ある) クライアントは、サーバに大量の SYN パケットを送ったあと、サーバから返された SYN ACK パケットを無視して、そのまま放置する。サーバ側からすれば、クライアントから ACK パケットが届かないということは、ネットワークに障害が発生しているか、あるいは通信速度が非常に遅いかのどちらかである。このような場合、TCP/IP ではサーバはクライアントからの ACK パケットを一定時間 (数十秒) のあいだ待たなければならないと決められている。しかし、サーバは待っている間もクライアントの情報を保持しつづけなければならないので、SYN パケットをひとつ受けとるたびに使用するメモリ領域は増大する。この現象がきわめて短時間のうちに大量に発生すると、サーバは TCP接続のために使えるメモリをすべて使いはたしてしまい、新たな TCP接続がひとつも準備できなくなってしまう。このときサーバはいわゆるライブロック状態に陥っており、継続して動作はしているものの、他のクライアントから TCP接続要求を送っても反応しないため、完全にダウンしてしまったように見える。オペレーティングシステムによっては、最悪の場合システムがクラッシュしてしまうこともある。
サーバへの負荷.
SYN flood 攻撃はサーバ上のメモリをどれくらい消費するのだろうか。サーバが帯域 1Gbps のイーサネットでインターネットと接続されていると仮定すると、外部から送られてくるデータ量は最大約 100メガバイト/秒である。通常の TCP SYN パケットの大きさは 60バイトであるので、1秒間に外部から送信されうる TCP SYN パケットは最大約 200万個になる。SYN flood攻撃では、これらの接続元アドレスは通常すべて異なるアドレスに偽装されているので、サーバは SYN パケットがひとつくるごとに最低でも 16バイトの情報を必要とする。したがって 1Gbps の帯域をフル活用した SYN flood 攻撃がおこなわれた場合、1秒間にサーバが消費するメモリは約 30メガバイトである。さらにサーバは各 SYN パケットを最大 30秒間にわたって保持しなければならない。すると、サーバが持たねばならない合計記憶容量は 900メガバイトになる。SYN flood 攻撃が継続して行われている間は 30秒ごとにこれらの記憶領域がほぼ全面的に書き換えられるうえ、サーバは新しいパケットがくるたびにそれがこれらの情報と一致しているかどうか照合しなければならない。このための処理能力やメモリアクセス速度は現在のほとんどの PC の能力を超えており、このような大規模な SYN flood 攻撃を通常の方法で負荷分散するためには高い能力とTCAMなどの専用メモリをもった非常に高価なルータが必要である。
対策.
SYN flood 攻撃は、1996年に米国の大手プロバイダ Panix のメールサーバがこの攻撃によってダウンしてからよく知られるようになった。当初、この攻撃に対する効果的な防御は存在しないと考えられていた。理由としては攻撃者は TCP SYN パケットの IPアドレスを偽装することができたためである。サーバから見ると、これは単にランダムな IPアドレスから大量の接続要求が来ているだけで、そのうちのどれが本当に応答すべきでないパケットなのか判断することはできない。しかしその後 SYN cookies や SYN cache といった手法が考案され、SYN flood 時でも正当なクライアントからの接続をある程度処理できるようになった。また、最近はプロバイダによるIngress フィルタリングも普及してきたため、偽装されたパケットによる攻撃は難しくなっている。
この攻撃法による被害.
2007年2月20日〜22日までに、この攻撃法によって、ニコニコ動画のWebサーバ、メッセージサーバなどが攻撃され、23日11:20分よりサービスが停止される被害に遭った。
始めは、30台程度による小規模な攻撃であったが、その後増大。
結果、3000台以上による攻撃となり、サービスを停止した。