Wiresharkによるネットワークセキュリティ分析:パケットフィルタリング、ポートスキャン検知、トラフィックフォレンジック

Security tutorial - IT technology blog
Security tutorial - IT technology blog

ネットワークインシデント調査:キャプチャ手法の比較

内部サーバーで予期せぬアラートが発生したり、ネットワーク監視で外部向けトラフィックの急増が検知されたりした場合、根本原因を特定するにはパケットレベルの可視性が必要です。サーバーのリソースやインシデントの規模に応じて、セキュリティチームは通常、以下の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リクエストなど、不審な通信を発見した場合は、ストリーム全体を再構築できます。

  1. パケットリスト内の不審なパケットを右クリックします。
  2. Follow > TCP Streamを選択します。
  3. ASCII形式の対話内容を確認します(クライアントのコマンドは赤色、サーバーの応答は青色で表示されます)。

攻撃者が暗号化されていないHTTP経由でセカンドステージのペイロードやWebシェルをダウンロードした場合、Wiresharkから直接ファイルをエクスポートできます。

  1. File > Export Objects > HTTP… をクリックします。
  2. オブジェクト一覧から対象のペイロードを見つけます。
  3. Saveをクリックし、静的解析を行うために隔離された仮想マシン(VM)やサンドボックスフォルダーへバイナリをエクスポートします。

5. DNSトンネリングによるデータ流出の検知

DNSトンネリングは、他のすべての送信ポートが遮断されている場合でも、攻撃者に秘密の送信チャネルを提供します。マルウェアは、攻撃者が管理するネームサーバーに向けて、持ち出し対象のファイルやC2コマンドをサブドメイン文字列(例:a8f3b2.c2server.com)にエンコードして送信します。

外部リゾルバーに送信された長いクエリ名を検出するには、次のフィルターを実行します。

dns.flags.response == 0 && dns.qry.name.len > 35

クエリ文字列を確認してください。単一のルートドメインに対して毎分50回以上のペースで送信される、エントロピーが高くBase64に似たサブドメインは、アクティブなデータ流出が行われている可能性が高いことを示しています。

Share: