Wiresharkは、ネットワーク上のトラフィックを詳細に可視化するための強力なパケットキャプチャツールです。
サイバーセキュリティの調査やネットワークのトラブルシューティングにおいて、膨大なデータから必要な情報だけを抽出するスキルは非常に重要です。
ネットワーク内を流れる膨大なパケットの中から、特定の通信相手や端末の挙動を追跡するには、表示フィルタの活用が欠かせません。
本記事では、特定のIPアドレスからの通信を効率的に抽出するための表示フィルタの使い方について詳しく解説します。
Wiresharkにおける表示フィルタの重要性
パケットキャプチャを実行すると、秒単位で数千ものパケットが記録されることがあります。
膨大なログの中から手作業で目的の通信を見つけ出すのは現実的ではありません。
表示フィルタを使いこなすことで、解析に必要なデータのみを画面上に表示させることが可能になります。
これにより、調査時間を大幅に短縮し、見逃してはならない重要なパケットを確実に特定できます。
表示フィルタはキャプチャ済みのデータに対して適用されるため、元のデータを失うことなく、何度でも条件を書き換えて解析を試行できます。
セキュリティエンジニアにとって、特定のホスト間の通信を迅速に分離する能力は、インシデントレスポンスの質を左右する重要な要素です。
特定のIPアドレスを指定する基本的なフィルタ構文
Wiresharkで最も頻繁に使用されるのは、特定のホストに関連する通信を抽出するフィルタです。
ここでは、基本となるIPv4およびIPv6のフィルタ記述方法を見ていきましょう。
送信元または送信先を指定する
特定のIPアドレスが関与するすべてのパケットを表示するには、ip.addrプロパティを使用します。
ip.addr == 192.168.1.10
このフィルタを適用すると、192.168.1.10が送信元であるパケットと、送信先であるパケットの両方が表示されます。
トラブル調査の第一歩として、まず対象デバイスのIPアドレスで絞り込む際に非常に有効な手法です。
送信元IPアドレスで抽出する
特定の端末から発信された通信のみを調査したい場合は、ip.srcを使用します。
ip.src == 192.168.1.10
このフィルタは、指定したIPアドレスがパケットの「Source(送信元)」フィールドにある場合のみ一致します。
例えば、マルウェアに感染した疑いのある端末が、外部のどのサーバーへ通信を試みているかを特定する際に役立ちます。
送信先IPアドレスで抽出する
特定のサーバーへ向かう通信のみを確認したい場合は、ip.dstを使用します。
ip.dst == 10.0.0.5
このフィルタは、指定したIPアドレスがパケットの「Destination(送信先)」フィールドにある場合にのみ一致します。
ウェブサーバーやデータベースサーバーへのリクエスト状況を集中的に監視したい場合に適しています。
論理演算子を組み合わせた高度な抽出手法
単一のIPアドレスだけでなく、複数の条件を組み合わせることで、より精度の高い解析が可能になります。
Wiresharkでは、複数のフィルタ条件を論理演算子で連結することができます。
複数のIPアドレスを対象にする(OR条件)
複数の特定のIPアドレス間のやり取り、または複数を同時に監視したい場合は「or」演算子(または「||」)を使用します。
ip.addr == 192.168.1.10 or ip.addr == 192.168.1.20
これにより、指定した2つのIPアドレスのいずれかに関連するすべてのパケットが表示されます。
特定のサーバーグループとクライアント間の通信を一括で確認したい場合に非常に便利です。
特定のホスト間の通信のみを表示する(AND条件)
特定の送信元から、特定の送信先への通信だけを表示したい場合は「and」演算子(または「&&」)を使用します。
ip.src == 192.168.1.10 and ip.dst == 10.0.0.5
この記述により、192.168.1.10から10.0.0.5へ送信されたパケットのみが抽出されます。
ノイズとなる他の通信を排除し、特定のセッションだけに焦点を当てることができます。
特定のIPアドレスを除外する(NOT条件)
解析において、既知の安全な通信や管理用トラフィックが邪魔になることがあります。
そのような場合は「not」演算子(または「!」)を使用して、特定のIPアドレスを除外します。
not ip.addr == 192.168.1.1
このフィルタを適用すると、デフォルトゲートウェイなど頻繁に通信が発生する機器のパケットを非表示にし、異常な通信を見つけやすくできます。
サブネットや範囲によるフィルタリング
個別のIPアドレスだけでなく、ネットワークセグメント全体を対象にフィルタをかけることも可能です。
これにより、特定の部門や拠点のトラフィックを一括で解析できます。
CIDR表記を用いたサブネットの指定
Wiresharkでは、CIDR(Classless Inter-Domain Routing)形式でネットワークを指定できます。
ip.addr == 192.168.1.0/24
このフィルタにより、192.168.1.0から192.168.1.255までの範囲にあるすべてのホストの通信が表示されます。
ネットワーク全体の挙動を把握したい場合や、外部セグメントからのアクセスを確認する際に多用されます。
比較演算子による範囲指定
IPアドレスを数値として扱い、比較演算子を使用することも可能です。
ip.addr >= 192.168.1.10 and ip.addr <= 192.168.1.20
この例では、192.168.1.10から192.168.1.20までの連続するIPアドレス範囲を抽出します。
特定の動的割り当て範囲(DHCPレンジ)を調査する際に役立つテクニックです。
フィルタリング手法の比較まとめ
用途に応じて適切なフィルタを選択できるよう、主要なフィルタ構文を以下の表にまとめました。
| フィルタ項目 | 記述例 | 主な用途 |
|---|---|---|
| 特定ホスト | ip.addr == 192.168.1.1 | 対象端末の全通信を確認 |
| 送信元限定 | ip.src == 192.168.1.1 | 特定端末からの発信を調査 |
| 送信先限定 | ip.dst == 192.168.1.1 | 特定サーバーへのアクセスを調査 |
| サブネット | ip.addr == 10.0.0.0/8 | セグメント全体の通信を監視 |
| 除外設定 | ! (ip.addr == 127.0.0.1) | 不要なトラフィックを非表示化 |
IPv6環境におけるIPアドレスの抽出
近年のネットワーク環境では、IPv6の普及により、IPv6アドレスを対象としたフィルタリングの機会も増えています。
基本的な考え方はIPv4と同じですが、プロパティ名が ipv6 に変わります。
IPv6アドレスでのフィルタリング
特定のIPv6アドレスを指定するには、ipv6.addrを使用します。
ipv6.addr == fe80::1ff:fe23:4567:890a
IPv6では、リンクローカルアドレスやグローバルユニキャストアドレスなど、一つのインターフェースに複数のアドレスが割り当てられることがあります。
解析対象の端末がどのアドレスを使用して通信しているかを事前に把握しておくことが重要です。
IPv6の送信元と送信先の指定
送信元を指定する場合は ipv6.src、送信先を指定する場合は ipv6.dst を使用します。
ipv6.src == 2001:db8::1
IPv4とIPv6の両方のトラフィックが混在する環境で、特定のホストを追跡したい場合は、論理演算子で両方のプロトコルを繋げることも可能です。
ip.addr == 192.168.1.10 or ipv6.addr == 2001:db8::10
このように記述することで、デュアルスタック環境においても漏れなく解析を行うことができます。
GUI機能を活用した効率的なフィルタ作成
フィルタ構文をすべて暗記していなくても、WiresharkのGUI機能を活用すれば素早くフィルタを適用できます。
パケットリストペインに表示されているIPアドレスを直接利用する方法が最も効率的です。
「フィルタとして適用」機能の活用
まず、対象としたいIPアドレスが含まれるパケットをリストから選択します。
次に、パケット詳細ペインで該当するIPアドレスの項目(SourceやDestination)を右クリックします。
メニューから「フィルタとして適用(Apply as Filter)」を選び、「選択済(Selected)」をクリックします。
すると、上部のフィルタツールバーに自動的に対応する構文が入力され、即座にフィルタが実行されます。
この方法は入力ミスを防ぐだけでなく、複雑なプロトコルフィールドのフィルタ名を調べる手間を省けるため、実務で非常に多用されます。
「フィルタの準備」機能の活用
「フィルタの準備(Prepare as Filter)」機能も非常に便利です。
この機能を使用すると、フィルタを即座に適用するのではなく、ツールバーに構文をコピーするだけにとどめます。
これにより、既存の複雑なフィルタ条件に新しい条件を付け加えたり、手動で微調整したりしてから実行することができます。
効率的な解析のためのベストプラクティス
特定のIPアドレスを抽出する際、より深い知見を得るためのコツがいくつか存在します。
単にパケットを並べるだけでなく、文脈を意識したフィルタリングを心がけましょう。
会話(Conversation)機能との併用
特定のIPアドレスを抽出した後、そのホストが「誰と、どの程度の通信を行っているか」を俯瞰することが重要です。
Wiresharkのメニューから「統計(Statistics)」→「会話(Conversations)」を選択してください。
「IPv4」タブなどを開くと、通信のペアごとのパケット数やバイト数が一覧表示されます。
ここで異常な通信量を見つけた場合、その行を右クリックして「フィルタとして適用」を選択することで、詳細なパケット解析へスムーズに移行できます。
名前解決(Name Resolution)の利用
IPアドレスの羅列では、どの端末が何であるかを直感的に理解しにくい場合があります。
Wiresharkの設定で「名前解決」を有効にすると、IPアドレスをホスト名やドメイン名で表示させることができます。
eth.addr[0:3] == 00:00:5e
ただし、大量のパケットを処理する場合、リアルタイムの名前解決は解析動作を重くする可能性があるため注意が必要です。
事前にhostsファイルを読み込ませることで、解析対象の重要サーバーにわかりやすい名前を付けて表示させる手法も推奨されます。
まとめ
Wiresharkで特定のIPアドレスを抽出する手法は、パケット解析の基礎でありながら、最も応用範囲が広いスキルです。
ip.addr や ip.src といった基本構文をマスターし、さらに論理演算子やCIDR表記を組み合わせることで、複雑なネットワークトラフィックを自在に制御できるようになります。
また、GUIの右クリック機能を併用することで、迅速かつ正確に解析を進めることが可能です。
セキュリティインシデントの調査やネットワークトラブルの解決において、本記事で紹介したフィルタリング技術をぜひ活用してください。
日頃からフィルタ構文に慣れておくことで、いざという時の初動対応を劇的に改善できるはずです。
