インターネット制御メッセージプロトコル(ICMP)は、ネットワーク機器間の通信に不可欠なネットワーク層プロトコルです。エラーの検出と報告、クエリーメッセージの送信、ネットワークの輻輳に関するホストへの通知に役立ちます。
ICMPは、IPv4およびIPv6ネットワークでパケットメッセージングを使用し、基盤となるネットワークの状態に関する情報を提供します。ICMP自体がデータを管理するわけではありませんが、データが宛先に届かなかった場合や、順序どおりに受信されなかった場合に送信元へ通知します。
ICMPの機能により、ネットワーク上の通信はよりスムーズで信頼性の高いものとなり、情報を正確かつ効率的に届けられます。
ICMPv4とICMPv6はこのプロトコルの異なる2つのバージョンです。共通点がある一方で、いくつかの点で違いもあります。
ネットワーク機器間の通信を実現するという本来の機能に加え、ICMPはさまざまな攻撃を受けやすいことから、悪意のある攻撃者の標的にもなっています。そのため、ネットワークのセキュリティを確保するには、ICMPの仕組みと適切な設定方法を理解することが重要です。
ICMPの仕組みとは?
ICMPはネットワーク管理に使われるコネクションレス型プロトコルです。これに対して、インターネットプロトコル(IP)では、TCPやUDPなどのトランスポート層プロトコルが必要です。
ICMPには、TCPのように接続の確立や切断に関わるプロセスが含まれず、機器上の特定のポートを指定することもできません。
他のプロトコルが採用するコネクション指向の方式とは異なり、ICMPは最初にハンドシェイクを行わずにメッセージを送信します。そのため、機器間で情報を伝達するための全体的な構造がよりシンプルになります。
ICMPメッセージの構成要素
ICMPメッセージは、可変長のデータセクションをカプセル化するIPヘッダーで構成されます。
ICMPデータには次のフィールドが含まれます。
- タイプ:8ビットのフィールドでICMPメッセージのタイプを識別します。ICMPv6メッセージでは、取り得る値は0~127です。128~255の値は情報通知を表します。
- コード:送信されるICMPメッセージの種類を決定する、サブタイプ識別用の8ビットフィールドです。
- チェックサム:メッセージにエラーがあるかどうかを検出するための16ビットフィールドです。
- ポインター:元のメッセージ内の問題を特定する可変長フィールドです。このフィールドはオプションです。
- 元のデータグラム:エラーの原因となった元のIPパケットの一部を含む、もう1つの可変長フィールドです。このフィールドもオプションです。
ICMPメッセージの2つのタイプ
ICMPメッセージには、エラー報告とクエリーという2種類のカテゴリがあります。
エラー報告メッセージ
エラー報告メッセージは、ノードまたはルーターでエラーが発生したときに送信されます。
エラー報告メッセージの例として、次のようなものがあります。
- 宛先到達不能:機器がIPパケットを受信し、宛先にアクセスできないと判断したときに送信されます。
- 送信元抑制:通常はネットワークの輻輳や、ルーターが高いデータ転送速度に対応できないといった技術的な制約を理由に、データの送信速度を下げるよう送信元の機器に通知します。
- 時間超過:ルーターがパケットのTime-to-Live(TTL)フィールドが0になったことを検出すると、このメッセージをパケットの送信元に送信します。
- パラメーター問題:ルーターが無効なIPヘッダーまたはパケット長を検出したときに送信されます。
- リダイレクト:パケットの送信元が宛先に到達するための、より適切な経路がある場合に送信されます。
クエリーメッセージ
これらのメッセージは、宛先の機器から特定の情報を問い合わせるために送信されます。
クエリーメッセージには次のようなものがあります。
- エコー要求/応答:エコー要求メッセージを送信し、宛先からエコー応答メッセージが返るのを待つことで、機器がネットワーク上で稼働しているかどうかを確認します。
- タイムスタンプ要求/応答:2つのタイムスタンプフィールドを使用します。1つは要求に、もう1つは応答に含まれます。
- アドレスマスク要求/応答:機器から宛先機器のサブネットマスクを問い合わせられるようにします。
ICMPの使い方
ネットワークにおけるICMPの用途は、エラー報告、診断ツール、またはサービス拒否(DoS)攻撃によるネットワークパフォーマンスの低下の3つです。
エラーの報告
ICMPは、主にエラーを報告する役割で知られています。インターネット経由で接続された2台の機器間でICMPを使用すると、何らかの理由でデータ転送に失敗したことを検出して報告できます。
たとえば、ルーターが処理できないほど大きなデータパケットを破棄した場合に、ICMPがトリガーされることがあります。このような場合、問題に関する情報を含むICMPメッセージがルーターから送信元へ送信されます。送信側の機器は問題を修正するか、データを再送信できるため、インターネット接続上で効果的な通信を確保できます。
診断ツールとしての利用
ICMPは、ICMPとSimple Network Management Protocol(SNMP)を使用して、ネットワーク内のシステムの可用性、経路、健全性を確認する診断ツールとして利用できます。
最も一般的なICMP診断ツールの1つがpingです。pingはネットワーク機器にICMPエコー要求を送信し、ICMPエコー応答を待ちます。また、ネットワーク内のパケット損失や遅延の確認にも利用できます。
もう1つのICMP診断ツールがtracerouteです。ICMPメッセージを使って、あるホストから別のホストまでのパケットの経路を追跡します。
ネットワークパフォーマンスの低下
犯罪者は、サービス拒否(DoS)攻撃を実行してネットワークパフォーマンスを低下させるためにICMPを利用できます。
DoS攻撃は、ICMP要求を大量に送り付けてシステムをフラッド状態にすることで実行されます。ICMPメッセージが多すぎると、コンピューターやネットワークの動作が大幅に遅くなったり停止したりし、標的システムのリソースが枯渇します。
以下の「ICMPのセキュリティ脅威」セクションで説明するように、ICMPはSmurf攻撃やping of death攻撃にも利用されます。
IPv4とIPv6におけるICMP
予想されるとおり、ICMPはIPv4とIPv6でさまざまな点が異なります。IPv6のICMPは、より堅牢で動的なプロトコルです。より多くのタスクに対応し、チェックサム報告の範囲が広く、メッセージタイプも細かく区別できます。
より広い機能
インターネット制御メッセージプロトコル バージョン6(ICMPv6)は、IPv6において、ICMPv4がIPv4で担うよりも包括的な機能を備えています。IPv6では、ICMPv6がルーター広告、パスMTU探索、マルチキャストグループ管理で重要な役割を果たします。これらはICMPv4が対応していないタスクです。
メッセージの形式
ICMPv4とICMPv6ではメッセージ形式が異なります。具体的には、各バージョンのICMPでチェックサムを計算する際、対象となる範囲に応じて結果が異なります。
ICMPv4ではメッセージ自体だけがチェックサム計算の対象となります。一方、ICMPv6ではメッセージ自体に加え、IPv6ヘッダーの一部のフィールドを含む疑似ヘッダーも計算に含まれます。
メッセージタイプ
ICMPv6メッセージでは、上位ビットのタイプフィールドを使ってエラーと情報メッセージを区別しますが、ICMPv4にはこの仕組みがありません。また、特定のメッセージコードはICMPv4またはICMPv6のいずれか一方にのみ存在します。
Next Headerフィールドの値
ICMPv6には、プロトコルフィールドの値として1を使用するICMPv4とは異なるNext Headerフィールドの値があります。IPv6では、ICMPv6メッセージは1つ以上の拡張ヘッダーの後に始まる場合があります。最後の拡張ヘッダーには、ICMPv6メッセージであることを示す値58のNext Headerフィールドが含まれます。
さらに、ICMPv6メッセージは他のプロトコルで運ぶことができますが、ICMPv4ではできません。
ICMPのセキュリティ脅威
他のネットワークプロトコルと同様、ICMPもトンネリング、ルーター探索、Smurf攻撃、Fraggle攻撃、ping of death攻撃など、複数のセキュリティ脅威に対して脆弱です。
ICMPトンネリング
ICMPトンネリングは、ファイアウォールを迂回したり検知を逃れたりするために、他のプロトコルやデータをICMPパケット内にカプセル化する手法です。
ICMPルーター探索
ICMPルーター探索は、ホストがネットワーク上のルーターを検出できるICMPメッセージの一種です。通常は無害ですが、攻撃者がルーター広告を偽装し、トラフィックを悪意のある宛先へリダイレクトするために利用することもできます。
Smurf攻撃
Smurf攻撃は、偽装した送信元アドレスを使い、ネットワークのブロードキャストアドレスに大量のICMPエコー要求を送信するDoS攻撃の一種です。その結果、ネットワーク上のすべてのホストが偽装されたアドレスにICMPエコー応答を返し、被害者の帯域幅とリソースを圧迫します。
Fraggle攻撃
Fraggle攻撃はSmurf攻撃に似ていますが、ICMPパケットではなくUDPパケットを使います。攻撃者は、偽装した送信元アドレスを使い、ポート7(echo)またはポート19(chargen)のネットワークブロードキャストアドレスにUDPパケットを送信します。その結果、ネットワーク上のすべてのホストが偽装されたアドレスにUDPパケットを返し、被害者のネットワークをフラッド状態にします。
ICMPフラッド攻撃
ICMPフラッドは、標的ホストに大量のICMPパケット(エコー要求や宛先到達不能メッセージなど)を送信するDoS攻撃の一種です。標的のCPUサイクルとメモリを消費させ、正当なトラフィックを処理できなくすることが目的です。
ping of death攻撃
ping of deathは、65,536バイトを超えるICMPパケットを処理できない一部のシステムの脆弱性を悪用する、古いタイプの攻撃です。攻撃者は、サイズ超過のICMPパケット(通常はエコー要求)を送信し、標的システムをクラッシュまたは再起動させます。
情報収集
情報収集は、ICMPメッセージ(エコー要求、タイムスタンプ要求、アドレスマスク要求、tracerouteなど)を使って標的ネットワークを調査し、トポロジー、構成、オペレーティングシステム、脆弱性に関する情報を得る手法です。
まとめ:ICMPの利用とセキュリティ対策
ICMPはインターネットプロトコルスイートに不可欠な要素であり、IP通信で重要な役割を果たします。ルーター、ホスト、ゲートウェイなどのネットワーク機器間で、制御メッセージやエラーメッセージを交換するために使われます。
すべてのネットワークプロトコルと同様、ICMPにも脆弱性があります。攻撃からネットワークと組織を守るには、それらを理解することが重要です。
これらの概念を理解することで、攻撃者の一歩先を行き、潜在的な脅威からネットワークを安全に保てるようになります。
組織のデータを安全に保つために信頼できる最高のエンタープライズネットワークセキュリティ企業はこちらです。