ネットワークインシデント調査:キャプチャ手法の比較
内部サーバーで予期せぬアラートが発生したり、ネットワーク監視で外部向けトラフィックの急増が検知されたりした場合、根本原因を特定するにはパケットレベルの可視性が必要です。サーバーのリソースやインシデントの規模に応じて、セキュリティチームは通常、以下の3つの調査ワークフローを活用します。
| アプローチ | 主なユースケース | リソースへの負荷 | ペイロードの可視性 |
|---|---|---|---|
| GUIディープパケットインスペクション(Wireshark) | インシデント発生後のフォレンジックトリアージ、プロトコルの再構築、シグネチャの検証。 | 大容量ファイルではメモリ消費量が大きいため、アナリストのワークステーションでの使用に最適。 | レイヤー2からレイヤー7までの完全なペイロード検査が可能。 |
| CLIパケットスニファー(tcpdump / tshark) | 本番環境ノードでのヘッドレスリアルタイムキャプチャ、スクリプトによるパケットフィルタリング、低オーバーヘッドでの記録。 | メモリ使用量は極小。10 Gbps以上のスループットではCPU負荷が高くなる。 | 完全なペイロードを取得可能。ターミナル出力または未加工のPCAP形式で保存。 |
| フローレコード(NetFlow / IPFIX / sFlow) | 長期的なトラフィックベースラインの策定、トラフィック量の異常検知、帯域幅の監査。 | サンプリング収集(例:1/1000パケット)によりストレージオーバーヘッドが極めて小さい。 | メタデータのみ(IPアドレス、ポート、パケット数、タイムスタンプなど。ペイロードはなし)。 |
フローサマリーからは「午前3時15分に内部ホストが未知の外部IPへ2.4GBのデータを送信した」という事実が分かります。一方Wiresharkを使用すれば、それらのパケットの内部に含まれていたもの(平文のデータベースダンプ、C2(Command & Control)ビーコン、公開サービスを標的にしたSQLインジェクション文字列など)まで詳細に把握できます。
Wiresharkによるディープパケットインスペクションのメリット・デメリット
メリット
- 網羅的なプロトコル解析力: Wiresharkは標準で3,000以上のプロトコルをデコードでき、TCP、TLSハンドシェイク、DNSレコード、さらには独自プロトコルに至るまで、ネストされたヘッダーを詳細に解析します。
- セッション全体の再構築: ワンクリックでTCPストリーム全体を再構築し、平文ペイロード、HTTPトランザクション、生のバイナリペイロードをそのまま確認できます。
- きめ細かな表示フィルター構文: 高度なブール式を活用することで、マイクロ秒単位のタイミング異常、突発的なTCPウィンドウサイズの縮小、不審なTCPフラグの組み合わせなどをピンポイントで特定できます。
デメリット
- 大量のメモリ消費: 1〜2GBを超える生のPCAPキャプチャファイルをWiresharkに直接読み込むと、メモリを圧迫してデスクトップUIがフリーズする原因になります。
- 暗号化による死角: 最新のWebトラフィックはTLS 1.3で保護されているため、ペイロードの検査にはプリマスターセッションシークレット(
SSLKEYLOGFILE経由)やアップストリームのSSL終端ログが必要です。 - 本番環境でのリスク: 本番サーバー上でデスクトップGUIのパケットアナライザーを直接実行してはいけません。アタックサーフェスが拡大し、貴重なサーバーリソースを浪費することになります。
安全なトラフィック分析のための推奨アーキテクチャ
キャプチャ層と分析環境は厳格に分離してください。対象サーバー上では軽量なCLIツールを用いてパケットを収集し、キャプチャファイルを隔離されたワークステーションへ転送した上で、Wiresharkによる分析を行います。
エンジニアに完全なroot権限を付与せずにLinux上でトラフィックを記録するには、専用のLinuxケーパビリティ(Capabilities)をtcpdumpに設定します。
# パケットキャプチャ専用のユーザーグループを作成
sudo groupadd pcap
sudo usermod -a -G pcap $USER
# tcpdumpバイナリにキャプチャ用ケーパビリティを付与
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
踏み台ホストやフォレンジックキャプチャ用サーバーには、初期構築時から強固で一意なパスワードを設定する必要があります。筆者は toolcraft.app/ja/tools/security/password-generator のパスワードジェネレーターを使って32文字のサーバー認証情報を生成しています。このツールはネットワーク経由でデータを送信せず、ブラウザのクライアントサイドで完全に処理されるため安全です。キャプチャノードのセキュリティを確保したら、PCAPファイルをローカルに取得してトリアージを開始しましょう。
ステップ別実践ガイド
1. tcpdumpによるヘッドレスパケットキャプチャ
制限を設けずにパケットキャプチャを実行すると、数分でサーバーのディスク容量を枯渇させてしまう恐れがあります。そのため、個々のファイルサイズを制限して自動ローテーションするリングバッファを設定します。
# eth0でキャプチャし、100MBごとのファイルを最大5世代でローテーション
tcpdump -i eth0 -nn -s 0 -W 5 -C 100 -w /var/log/incident_capture.pcap
インシデント調査対象の時間帯にキャプチャを実行し、Ctrl+Cでプロセスを停止したら、生成されたincident_capture.pcapをローカルの分析用端末に転送します。
2. 必須の表示フィルターの適用
表示フィルターは、メモリ上に読み込まれたキャプチャデータに対して適用されます。一般的なセキュリティ侵害インジケーター(IoC)を抽出するために、以下のフィルター構文をWiresharkのフィルターバーに直接入力してください。
- 疑わしいIPを抽出し、標準サービスポートを除外:
ip.addr == 192.168.1.50 && !(tcp.port in {80, 443, 22, 53}) - 平文の認証情報送信を検出:
http.request.method == "POST" || ftp.request.command in {"USER", "PASS"} - NXDOMAINエラーをキャッチ(マルウェアのDGAドメイン生成時によく見られる挙動):
dns.flags.rcode == 3
3. ネットワーク偵察とポートスキャンの検知
攻撃者はエクスプロイトを試みる前に標的をスキャンします。それぞれのスキャン手法は、パケットヘッダーに特徴的な痕跡を残します。
TCP SYNステルススキャンの検知
ステルスSYNスキャン(例:nmap -sS -T4)は、SYNフラグのみが設定されたTCPパケットを送信します。スキャナー側は3方向ハンドシェイクを完了させず、返ってきたSYN-ACKに対してRSTを返して接続を破棄します。このようなハーフオープン接続の試行を抽出するには、次のフィルターを使用します。
tcp.flags.syn == 1 && tcp.flags.ack == 0 && tcp.window_size <= 1024
Packet Listペインを確認します。単一のIPがわずか数秒の間に数千もの連続した宛先ポートへアクセスしている場合、アクティブなポートスキャンが行われていると判断できます。
NULLスキャン、FINスキャン、XMASスキャンの検知
攻撃者は従来のステートレスファイアウォールを回避するために、標準的ではないTCPフラグの組み合わせを使用することがあります。
- NULLスキャン(フラグ未設定):
tcp.flags == 0x000 - FINスキャン(FINフラグのみ設定):
tcp.flags == 0x001 - XMASスキャン(FIN、PSH、URGフラグが設定):
tcp.flags == 0x029
RFC 793に準拠したプロトコルスタックは、これらの不正パケットを破棄します。正当なアプリケーションがこれらを生成することはないため、フィルターに一致したパケットは即座に調査対象とすべきです。
4. セッションの再構築とバイナリの抽出
対話型シェルや不正なAPIリクエストなど、不審な通信を発見した場合は、ストリーム全体を再構築できます。
- パケットリスト内の不審なパケットを右クリックします。
- Follow > TCP Streamを選択します。
- ASCII形式の対話内容を確認します(クライアントのコマンドは赤色、サーバーの応答は青色で表示されます)。
攻撃者が暗号化されていないHTTP経由でセカンドステージのペイロードやWebシェルをダウンロードした場合、Wiresharkから直接ファイルをエクスポートできます。
- File > Export Objects > HTTP… をクリックします。
- オブジェクト一覧から対象のペイロードを見つけます。
- Saveをクリックし、静的解析を行うために隔離された仮想マシン(VM)やサンドボックスフォルダーへバイナリをエクスポートします。
5. DNSトンネリングによるデータ流出の検知
DNSトンネリングは、他のすべての送信ポートが遮断されている場合でも、攻撃者に秘密の送信チャネルを提供します。マルウェアは、攻撃者が管理するネームサーバーに向けて、持ち出し対象のファイルやC2コマンドをサブドメイン文字列(例:a8f3b2.c2server.com)にエンコードして送信します。
外部リゾルバーに送信された長いクエリ名を検出するには、次のフィルターを実行します。
dns.flags.response == 0 && dns.qry.name.len > 35
クエリ文字列を確認してください。単一のルートドメインに対して毎分50回以上のペースで送信される、エントロピーが高くBase64に似たサブドメインは、アクティブなデータ流出が行われている可能性が高いことを示しています。

