こんにちは!ネットワークセキュリティの迷宮へようこそ。
日々、見えない脅威と戦い、パケットの海を泳ぎ続けるエンジニアの皆さま、本当にお疲れ様です。
「社内のPCがマルウェアに感染したかもしれない……!」
そんな緊迫した状況に直面したとき、私たちセキュリティスペシャリストが真っ先に求めるもの。それは、犯人の足跡が克明に刻まれた「通信の記録」です。
今日は、ネットワークフォレンジックの要(かなめ)である「PCAP(ピーキャップ)データ」について、難しい専門用語を現実世界の「郵便配達」に例えながら、初心者の方でもスッと腹落ちするように解説していきます。
「パケットって何?」「解析なんて難しそう……」と思っているあなたも大丈夫。一歩ずつ、一緒に紐解いていきましょう!
—
1. PCAPとは「ネットワークの防犯カメラ」である
ネットワーク上を流れるデータは、実は「パケット」という小さな塊に分割されて運ばれています。このパケットを丸ごとキャプチャ(記録)したファイルが PCAP データです。
これを現実世界で例えるなら、「郵便局を通過するすべての手紙のコピーを取っておくこと」に似ています。
- 宛先はどこか?(IPアドレス)
- 誰が送ったのか?(送信元IPアドレス)
- どんな封筒(プロトコル)を使っているのか?
- 中身の手紙(データ本体)には何が書いてあるのか?
インシデントが起きた後で、「どのPCが、どの悪いサイトに、どんな情報を送ってしまったのか」を1ビットの狂いもなく復元できるのが、PCAPデータの強みです。ログ(台帳)が「誰がいつ来たか」という記録なら、PCAPは「やり取りのすべてを収めた防犯カメラの映像」と言えるでしょう。
—
2. どうやってデータを集めるの?(ミラーポートとTAP)
「よし、パケットを保存しよう!」と思っても、普通のPCでは自分宛ての通信しか見えません。ネットワーク全体の通信をのぞき見るには、特別な「仕掛け」が必要です。
ネットワークTAP(タップ)
道路にこっそり設置する「分回路」のようなものです。物理的な装置をLANケーブルの間に挟み込み、流れる電気信号をそのままコピーします。ネットワーク機器に負荷をかけず、最も正確にデータを取れる職人好みの道具です。
ミラーポート(SPAN)
こちらは、賢いスイッチ(L2/L3スイッチ)の設定で実現する方法です。「1番ポートを通るパケットを、そっくりそのまま10番ポートにも流してね!」と命令を出します。
例えば、Ciscoのスイッチで特定の通信を監視ポートにコピーする設定は、こんなイメージになります。
# スイッチの設定モードに入ります
conf t
# 監視したい元(ソース)のポートを指定します
# 例:社員のPCがつながっている1番ポート
monitor session 1 source interface fastEthernet 0/1
# コピーしたパケットを送り出す先(デスティネーション)を指定します
# ここに解析用のPCや専用装置をつなぎます
monitor session 1 destination interface fastEthernet 0/10
# 設定を確認して終了
end
show monitor
このように、ネットワークの「通り道」からデータを分岐させて、解析用のサーバーへ流し込むのが第一歩です。
—
3. パケットの中身を「検分」する
さて、手元に sample.pcap というファイルが手に入ったとしましょう。これを開く魔法の虫眼鏡が、有名な Wireshark や、コマンドラインで動く tcpdump です。
パケットの構造は、よく「封筒の中に封筒が入っているマトリョーシカ」に例えられます。
1. 一番外側の封筒(イーサネット):近所の家(MACアドレス)に届けるためのもの。
2. 二番目の封筒(IP):遠くの住所(IPアドレス)へ届けるためのもの。
3. 三番目の封筒(TCP/UDP):家の中のどの部屋(ポート番号)に届けるか決めるもの。
4. 最後の中身(ペイロード):実際のメッセージやファイルの一部。
マルウェア感染の調査では、この「中身」をじっくり見ていきます。「あ、このPC、変な海外のサーバーに GET /malware.exe ってリクエストを送っているぞ!」という証拠を見つけ出すのです。
—
4. 実践!コマンドで怪しい通信を絞り込む
膨大なパケットの中から、手作業で犯人を探すのは砂漠でコンタクトレンズを探すようなものです。そこで、tcpdump というツールを使って、必要な情報だけを「フィルタリング」します。
インフラエンジニアが現場でよく使う、基本的なコマンド例を見てみましょう。
# 特定のIPアドレス(192.168.1.50)が関わっている通信だけを表示する
# 「このPC、怪しいぞ?」と思った時に使います
tcpdump -r investigation.pcap host 192.168.1.50
# HTTP通信(80番ポート)だけを抜き出して、中身(テキスト)を表示する
# 何をダウンロードしようとしたかが見えてきます
tcpdump -A -r investigation.pcap port 80
# 特定のIPアドレスから送られた通信だけを、別のファイルに保存し直す
# 証拠保全のために「これだ!」という部分だけを切り出します
tcpdump -r full_log.pcap src 192.168.1.50 -w suspicious_only.pcap
さらに、Pythonが使える方なら、Scapy というライブラリを使って「怪しいURLにアクセスしているパケット」を自動でリストアップすることも可能です。
from scapy.all import rdpcap, TCP, Raw
# PCAPファイルを読み込みます
packets = rdpcap('evidence.pcap')
for pkt in packets:
# TCP通信で、かつデータの中身(Raw)があるかチェック
if pkt.haslayer(TCP) and pkt.haslayer(Raw):
payload = pkt[Raw].load.decode(errors='ignore')
# HTTPのGETリクエストが含まれているか探します
if "GET" in payload:
print(f"[!] 発見! 送信元: {pkt[1].src} -> 内容: {payload.splitlines()[0]}")
# ここで特定のドメインやファイル名が含まれていないかチェックできます
—
5. 最後に:パケットは嘘をつかない
インシデント調査において、攻撃者はサーバーのログを消去したり、改ざんしたりすることがあります。しかし、「一度ネットワークを流れてしまったパケット」を後から書き換えることはできません。
PCAPデータは、まさにネットワークにおける「沈黙の証言者」なのです。
最初は 16進数 の羅列や複雑なヘッダー名に目が回るかもしれません。でも、基本は「誰が、どこへ、何を届けようとしたか」を追いかけるシンプルなパズルです。
もし明日、あなたの職場で「何か通信がおかしい」という声が上がったら、勇気を持ってパケットを覗いてみてください。そこには、テキストベースのログだけでは決して見えない、ドラマチックな真実が隠されています。
一歩ずつ、パケットと仲良くなっていきましょう。皆さんのネットワークが、今日も平穏であることを願っています!
—
執筆者の独り言:
フォレンジックの世界は奥が深く、暗号化された通信(HTTPSなど)をどう解読するかといった次なる冒険も待っています。それはまた、別の機会にお話ししましょう。それでは、また次回の記事でお会いしましょう!
コメント