Lesson3まではICMPメッセージの役割やメッセージの内容,ICMPを使ったコマンドのしくみなどを見てきた。ここまででICMPの基本的な内容を押さえられただろう。

 最後のLesson4では,ICMPの運用で考えられる危険性について説明する。ICMPの危険性を知ったうえでネットワークの運用に役立てよう。

エコー要求を大量に送りつける

 Lesson1で説明したとおり,ICMPは,IPを実装する機器すべてが実装しなければならないという重要なプロトコルである。ただし,悪意のあるユーザーがICMPを悪用し,サーバーに対してサービスを提供できない状態にしてしまうという攻撃が実際に起こっている。ICMPがどのように悪用されるのか,二つの例で見ていこう。

 まずは,pingコマンドで攻撃対象となるサーバーに大量のパケットを送信し,サーバーのサービスを止めてしまうという例だ(図4-1)。この攻撃はpingフラッドまたはpingストームなどと呼ばれる。

図4-1●pingコマンドの嵐でサーバーがサービス不能になる
図4-1●pingコマンドの嵐でサーバーがサービス不能になる
pingコマンドを攻撃対象サーバーに対して連続実行することでエコー要求パケットを大量に送りつけ,サーバーのサービスを不能にさせる。
[画像のクリックで拡大表示]

 pingコマンドを実行すると,送信元のパソコンはエコー要求というICMPメッセージを送信する。Windowsのデフォルト設定では,エコー要求を4回送り出すようになっているが,pingフラッドでは設定を変更して,攻撃対象に向けて連続して大量にエコー要求メッセージを送りつける。

 大量のICMPメッセージを送りつけられたサーバーは,エコー応答を返信しようとする。ところが,あまりに要求が大量なので処理が追いつかなくなり,本来のサービスを提供できなくなってしまう。

踏み台を使い身元を隠す

 pingコマンドを連続実行するものには,さらに手の込んだ攻撃手法もある。送信元のパソコンと攻撃対象のサーバーの間に,別のサーバーを経由させて攻撃する場合だ。このような攻撃は,smurfアタックなどと呼ばれている(図4-2)。smurfアタックの狙いは,中継サーバーを使って攻撃することで,攻撃元をわかりにくくすること。攻撃対象に送られるパケットの送信元が中継サーバーのIPアドレスになるからだ。

図4-2●踏み台サーバーから応答パケットを送りつけるsmurfアタック
図4-2●踏み台サーバーから応答パケットを送りつけるsmurfアタック
smurfアタックでは送信元を攻撃対象サーバーのIPアドレスに偽装したエコー要求パケットを踏み台となるサーバーに大量に送信する。すると,踏み台となるサーバーはエコー応答パケットを攻撃対象にされたサーバーに送信する。
[画像のクリックで拡大表示]

 まず悪意のあるユーザーは,送信元パソコンから踏み台サーバーに向けてエコー要求を送信する。このとき,悪意のあるユーザーは,パケットの送信元IPアドレスを攻撃対象サーバーのIPアドレスに書き換えておく。エコー要求を受け取った踏み台サーバーは,正常に動いていることを知らせるため,エコー応答を返信しようとする。このとき,踏み台サーバーがエコー応答を送る先は,送りつけられてきたエコー要求のIPパケットに書かれている送信元IPアドレスになる。

 つまり,本来ならエコー要求を送った送信元パソコンに返信するはずの応答メッセージ(エコー応答)が,送信元IPアドレスを書き換えられたことによって,本来返信するのとは異なる攻撃対象の機器に向けて送られるのだ。

 こうして,攻撃対象のサーバーは送ってもいないエコー要求に対する応答メッセージを受け取ることになる。これが連続的に送信されたり,複数の踏み台サーバーから送りつけられたりすることで,攻撃対象サーバーに処理能力を超えるエコー応答が押し寄せてくると,攻撃対象にされたサーバーはサービス不能に陥ってしまう。

ICMPを無効にするという手段もある

 このような攻撃に対してはファイアウォールなどで防げる場合がある。送信元のIPアドレスを特定して,その送信元からのパケットをフィルタリングするほか,パケットの送信パターンを分析して大量に連続して送られてくるパケットを遮断する機能を備えるファイアウォールもある。

 また,ファイアウォールの設定でICMPの通信をすべて遮断するという方法もある。クライアント・パソコンの場合,エコー要求を受け取ることはまれなので,ICMPメッセージの着信を無効にしておいてもよいだろう。

 WindowsXPのファイアウォール機能では,デフォルト状態でICMPメッセージの着信を遮断する設定になっている。また,ルーターについても,よく使うICMPメッセージだけを通すように設定しておくという方法も採れる。

 ただし,インターネットに公開しているサーバーの場合は判断が難しい。公開サーバーだと,通信状態を調べたり,エラー通知を受け取ったりするICMPの機能が必要となる機会は多い。できればICMPを使える状態にしておきたい。その一方で,pingフラッドなどの攻撃を受けてサービス不能になるのを避けるためにICMPを無効にするという判断もあり得る。

 ICMPの利用の有無は,管理者がネットワークのポリシーに沿って検討することになるだろう。