2002/02/12
DoSの話4
最後です。
実は、今回2ちゃんねるが食らったと思われる攻撃はSYNfloodという攻撃だと思われます。そのため、これだけは最後の一回分を丸々使って説明します(もしMSDNやMFCのヘルプを保有しているのでしたら、その中のCAsyncSocketの項目を見ながら読むと解かりやすい)。ちょっとTCP接続の説明をしますと、TCPからのアクセス要求はListenと呼ばれる状態のポートに対してConnectを要求することで発生します。サーバはConnectに対してAcceptを発行し、応答を返します。クライアントはこれに対して応答の応答を返すことで接続が完了するという手順になります。接続にはSYNフラグというものを用います。サーバからの接続応答はACKとSYNの両方で、これを受け取ったクライアントはACKを送ることで双方向接続が完了します。複数のConnectが要求された場合、サーバはそれをリストテーブルに保持し、そのリストを順に処理します。このリストから溢れた要求は無視されます。例えばマイクロソフトのMFCを使用すると、このリストの最大数はたったの5件しかありません。そこでSYNフラグを立てた状態で発信元がランダムなアドレスとなっているようなパケットを大量に生成し、それを攻撃対象のサーバに連続的に投げ込むのがSYNflood攻撃です。これを食らうと、サーバは接続応答を返し、接続を確認しますが、ランダムなアドレスに対するACK応答が行われないため、設定された時間だけ接続を待ってしまいます(一般にこの数値は3分程度が取られている)。もちろんサーバの接続順番待ちリストは溜まったままですから、本当に接続したい要求がサーバに無視されることになり、サーバに接続できなくなります。さすがにこの攻撃でリソースリークが起こったりしてサーバが壊れることは今となっては希ですが、接続処理ができなくなるわけですから、事実上サーバが死んでいるのと同じ状態に陥ります。
今回の2ちゃんねるの場合は個別のマシンに対してSYNflood攻撃が行われたようです。そのため、異様に繋がりにくいサーバと簡単に繋がるサーバができたのです。


 

Topへ