「SYN flood」の版間の差分

削除された内容 追加された内容
JAnDbot (会話 | 投稿記録)
m ロボットによる 追加: cs:SYN-flood
節に分ける
3行目:
 
'''SYN flood攻撃''' (スィン・フラッドこうげき) とは、[[インターネット]]における[[DoS攻撃]](サービス拒否攻撃)のひとつ。インターネット上に公開されている[[ウェブサーバ]]などの負荷を増大させ、対象となるサイトを一時的に利用不能に陥らせてしまう効果がある。
 
== 原理 ==
 
一般に、インターネット上の [[Transmission_Control_Protocol|TCP]]接続は次のような手順で行われる ([[3ウェイ・ハンドシェイク]]):
11 ⟶ 13行目:
 
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 時でも正当なクライアントからの接続をある程度処理できるようになった。また、最近はプロバイダによる[[Egress フィルタリング]]も普及してきたため{{要出典}}、偽装されたパケットによる攻撃は難しくなっている。