「SYN flood」の版間の差分

削除された内容 追加された内容
m 3way handshake
編集の要約なし
10行目:
# SYN ACK パケットを受けとったクライアントは、接続開始をあらわす [[ACK]]パケットを送信し、サーバとの通信を開始する。
 
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]]などの専用メモリをもった非常に高価な[[ルータ]]が必要である。