This post is also available in: English (英語)
概要
Wireshark は無料で利用できるプロトコル アナライザです。 Wireshark を使うと、ネットワーク トラフィックをキャプチャーしたり、キャプチャーしたパケットを表示させることができます。ITの専門職についているかたがたは、このツールを使って日々ネットワークのさまざまな問題を解決しています。セキュリティの専門家も、この Wireshark を使ってマルウェアが生成するトラフィックを確認しています。
そこで、今回は Wireshark の便利な機能のひとつである表示列のカスタマイズをご紹介したいと思います。Wireshark はデフォルトでは、非常にたくさんの情報を列表示してくれますが、これをカスタマイズすることで皆さん自身の用途に使いやすいようにできます。
本稿は Wireshark のチュートリアル シリーズの連載第 1 回です。本シリーズでは、悪意のあるネットワーク トラフィックの調査に役立つカスタマイズ オプションを紹介します。本稿は 2018 年 8 月に初版を公開し、2023 年に更新しています。
関連する Unit 42 のトピック | pcap, Wireshark, Wireshark Tutorial |
前提条件
BSD 系、Linux 系、macOS など、Windows 以外の環境の利用をお勧めします。Windows の感染から得た Pcap には、悪意のあるバイナリーが含まれている可能性があります。このバイナリーを扱うのに Windows コンピューター上の Wireshark を使った場合、Windows 環境への感染リスクがあります。本チュートリアルの作成には Xubuntu という Linux ディストリビューションを利用しています。
可能なかぎり、お使いの環境用の Wireshark の最新バージョンを使うことをお勧めします。以前の Wireshark バージョンより機能・性能ともに上がり、不具合も修正されています。少なくともバージョン 3.6.2 以降をお勧めします。本チュートリアルは Wireshark バージョン 4.0.7 を使っています。
本稿はある程度ネットワーク トラフィックの基本知識をお持ちの Wireshark ユーザーを読者として想定しています。また、本チュートリアル シリーズでは IPv4 のトラフィックを中心に取り上げます。ここで言う「基本知識」はひとによって捉えかたが異なると思いますが、細かい知識までは必要ありません。
たとえば、パブリック (グローバル) な IPv4 アドレスと、ルーティングができない内部 (プライベート) の IPv4 アドレスの違いは理解しておく必要がありますし、ネットワークの基本知識として TCP や UDP のトラフィックを見てそれとわかることや、DNS について知っていることは求められます。また、デスクトップ コンピューターなどの内部クライアントと、Web サイトなどの外部サーバーとの間で、どのようにしてネットワーク トラフィックがルーティングされているのかについても、ある程度は理解している必要があります。
要するに、本チュートリアル シリーズは、読者の皆さんが悪意のあるネットワーク トラフィックのレビューについて、すでに何らかの背景知識や関心をお持ちであることを前提としています。
補足資料
本チュートリアルで使う pcap は こちらの GitHub リポジトリーにホストしてあります。以下の図 1 にしたがって pcap をダウンロードしてください。
![画像 1 は、Unit 42 Wireshark チュートリアル GitHub のスクリーンショットです。黒い矢印は、ファイルをダウンロードするためのアイコンを示しています。ここでこれは列設定のチュートリアルです。2 つめの黒い矢印は、Zip アーカイブをダウンロードするためのポップアップ ウィンドウの保存ボタンを指しています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-1.jpeg)
今回ダウンロードする ZIP アーカイブ名は Wireshark-tutorial-column-setup.pcap.zip です。ZIP アーカイブの展開用パスワードは「infected」です (図 2)。
![画像 2 は、ZIP ファイルをエンド ユーザーのダウンロード フォルダーに展開する方法を示しています。ダウンロード フォルダー内の ZIP ファイルをクリックすると、黒い矢印がメニューを指していて「Extract Here (ここに展開)」が選択されています。パスワードのポップアップには、入力済みのパスワードフィールドが表示されています。「OK」という緑色のチェックがついたボタンを押すと、.pcap ファイルが展開されます。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-2.jpeg)
このチュートリアル用に展開された pcap 名は Wireshark-tutorial-column-setup.pcap です。では pcap を用意できたところで、まずは Wireshark のバージョンを確認してみましょう。
Wireshark のバージョンを確認する
pcap ファイルを開いていない状態では、Wireshark は以下の図 3 に示すように [Welcome to Wireshark (Wireshark へようこそ)] の画面にバージョン番号を表示します。
![画像 4 は、[Welcome to Wireshark (Wireshark へようこそ)] のスクリーンショットです。[Help (ヘルプ)] メニューが選択されています。黒い矢印は [About Wireshark] を選択するよう示しています。[About Wireshark] メニューのポップアップに最初のタブである [Wireshark] が表示されています。バージョン番号が赤い四角形と赤い矢印で示されています。ここではバージョン 4.0.7 です。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-4.jpeg)
設定プロファイル
Wireshark バージョン 3.6.2 以降を使用していることを確認したら、Wireshark の [Edit (編集)] メニューで [Configuration Profile (設定プロファイル)] を選びます。以下の図 5 に示すように、コピー ボタンをクリックし、デフォルトの設定プロファイルのコピーを作成します。
Web トラフィックとデフォルトの Wireshark 列表示設定
マルウェアの配布は Web トラフィック経由で起きることが多いですし、データ漏出やコマンド & コントロールのアクティビティにも Web トラフィックは使われます。ただ、こうした悪意のあるアクティビティを確認するさい、Wireshark のデフォルトの列表示設定は理想的とはいえません。
さいわい、列表示をカスタマイズすれば Web トラフィックを確認しやすくなります。Wireshark のデフォルトのレイアウトを表示するため、このチュートリアル用にダウンロードしておいた pcap を開きましょう。Wireshark バージョン 4.0.7 の場合、デフォルト レイアウトは以下の図 7 のようになっています。
![画像 7 は、デフォルトのレイアウトを示す Wireshark のスクリーンショットです。黒い矢印は、上から順に、display filter (表示フィルタ)、column display (パケット一覧部)、frame details (パケット詳細部)を示しています。右下のウィンドウは hexiadecimal view of frame (パケットデータ部) で、フレームの 16 進数ビューが表示されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/09/word-image-129755-7-ja.png)
Column Display (パケット一覧部) を確認してみましょう。Wireshark のデフォルトの列設定を表 1 に示します。
列名 | 列の説明 |
No. | pcap の先頭からのフレーム番号。最初のフレームは常に 1 になる。 |
Time | pcap の最初のフレームからのマイクロ秒 (ms) 単位の秒数。最初のフレームは常に 0.000000 になる。 |
Source | 送信元アドレス。通常は IPv4、IPv6、ないし Ethernet のアドレス。 |
Destination | 宛先アドレス。通常は IPv4、IPv6、ないし Ethernet のアドレス。 |
Protocol | Ethernet フレーム、IP パケット、または TCP セグメントで使用されているプロトコル (ARP、DNS、TCP、HTTP など)。 |
Length | バイト単位のフレームの長さ。 |
Info | Ethernet フレーム、IP パケット、または TCP セグメントに関する情報。 |
表1. Wireshark のデフォルトの列表示
Windows ベースのマルウェア トラフィックを詳しく調査するため、本チュートリアルでは、以下の表 2 に示す列を使用するように Wireshark をカスタマイズします。
列名 | 列の説明 |
Time | UTC での日付と時刻。 |
Src | IPv4、IPv6、ないし Ethernet の送信元アドレス。 |
Src port | IPv4 または IPv6 トラフィックの送信元アドレスが使用している TCP または UDP ポート。 |
Dst | IPv4 か、IPv6 か、Ethernet の宛先アドレス。 |
Dst port | IPv4 または IPv6 トラフィックの宛先アドレスが使用している TCP または UDP ポート。 |
Host | HTTP または HTTPS トラフィックで使用されているホスト名。 |
Info | Ethernet フレーム、IP パケット、または TCP セグメントに関する情報。 |
表2. Wireshark のカスタマイズされた列表示
では Wireshark の列表示をカスタマイズしていきましょう。まず [Time (時刻)] の列を変更して、日付と時刻を協定世界時 (UTC) で表示させます。
日付と時刻を UTC に変更する
皆さんがマルウェア感染に関する情報を公開して共有する場合、その受け取り手が世界のどこにいるかはわかりません。そこで、タイムゾーンが問題にならないよう、悪意のあるアクティビティの時刻を報告するときは UTC を標準形式として使います。
時刻表示形式を変更するには、[View (表示)] メニューを開いて[Time Display Format (時刻表示形式)] を選択し、[Seconds Since Beginning of Capture (最初にキャプチャしたパケットからの経過時間)] を [UTC Date and Time of Day (UTC 日時)] に変更します。つづけて同じメニューで時間の分割単位を [Automatic (自動)] から [Seconds (秒)] に変更します。図 8 はこのメニューでこれらのオプションを表示したところです。
![画像 9 は、変更された時間表示を示す Wireshark のスクリーンショットです。Time の列が黒い四角形で強調表示されています。これで時刻が UTC 形式と秒単位で表示されるようになりました。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-9.jpeg)
次は、ふだん Wireshark を使うさいに必要ない列を削除していきましょう。
列を削除する
Web ベースのトラフィックを確認するのに No.、Protocol、Length などの列は使わないので削除するとよいでしょう。削除するには、以下の図 10 に示したように、削除したい列名の上で右クリックし、表示されたコンテキスト メニューから [Remove this Column (この列を削除)] を選びます。
![画像 11 は、更新された列表示の 4 つの列を示す Wireshark のスクリーンショットです。Time (時刻)、Source (送信元)、Destination (宛先)、Info (情報) の 4 つの列が表示されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-11.jpeg)
不要な列を削除できたら次は Wireshark に新しい列を追加していきましょう。
列を追加する
Wireshark での列の追加は [Column Preferences (列の設定)] メニューから行います。このメニューを開くには、いずれかの列名上で右クリックし、表示されたコンテキスト メニューで [Column Preferences (列の設定)] をクリックします (図 12)。
- Time - Time (format as specified)
- Src - Src addr (unresolved)
- Src port - Src port (unresolved)
- Dst - Dest addr (unresolved)
- Dst port - Dest port (unresolved)
- Info - Information
図 21 はこの変更結果がどのようになるかを示しています。
![画像 21 は、Wireshark のパケット一覧部に追加された新しい列を示しています。黒い矢印はその名前と順序を示しています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-21.jpeg)
図 21 は、新しく作成された「Src port」と「Dst port」の列の内容は右揃えで表示されており、ほかのすべての列の内容は左揃えで配置されているようすを示しています。右揃えになっている各列の列名を右クリックし、コンテキスト メニューを表示したら、[Align Left (左揃え)] チェックボックスをクリックして、これらの列を左揃えにしてください。図 22 は、[Src port] の列の例を示しています。
カスタマイズした列の追加
その場合に使えるのが Wireshark のカスタム列追加機能です。カスタム列には、Wireshark のパケット詳細部ウィンドウに含まれるほぼどんな値でも利用できます。パケット詳細部を見やすくするには、16 進数表示をしているパケットデータ部を一時的に非表示にする必要があります。図 24 に示すように、[View (表示)] メニューで [Packet Bytes (パケット バイト列)] のチェックを外します。
まず、平文の HTTP Web トラフィックで使用されるドメイン用にカスタマイズした列を作る必要があります。そのためには、Wireshark の [表示フィルタ] ツールバーに「http.request」と入力してから Enter を押します。[パケット一覧部] の最初のフレームを選択します。[パケット詳細部] で「Hypertext Transfer Protocol」の行を展開します。ここで「Host:」から始まる行を見つけます。この例では、「www.msftconnecttest.com」という名前を含む行になっています。Host: の行を左クリックして選択してから右クリックしてコンテキスト メニューを表示します。コンテキスト メニューから、[Apply as (列として適用)] を選択します (図 25)。
パケット詳細部で、Transport Layer Security の行を展開します。その下の TLSv1.2 Record Layer: Handshake Protocol: Client Hello を展開します。さらにその下にある Handshake Protocol: Client Hello 行を展開します。展開されたパケット詳細部を以下の図 27 に示します。
![画像 27 は Wireshark のスクリーンショットです。黒い矢印はある 1 行が選択されていることを示します。下部ペインの 3 つの黒い矢印はその行の詳細を示しています。図には、Transport Layer Security、TLSv1.2 Record Layer、Handshake Protocol が表示されています。使用した表示フィルター: tls.handshake.type. eq 1](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-27.jpeg)
パケット詳細部を下にスクロールしていき、Extension: server_name で始まる行を見つけて展開します。その下から Server Name Indication extension という行を見つけて展開します。その下に Server Name: geo.prod.do.dsp.mp.microsoft.com という行があります。この行を左クリックして選んでから、右クリックしてコンテキスト メニューを表示し、以下の図 28 に示すように [Apply as Column (列として適用)] を選択します。
Wireshark の表示フィルタ ツールバーに次のように入力してみましょう。
http.request or tls.handshake.type eq 1
Wireshark で更新した列の表示結果をスクロールします。図 35 の Wireshark スクリーンショットのように見えるはずです。
列を非表示にする
マルウェアが生成した Web トラフィックの pcap を確認していると、感染したホストの使っているある単一の内部 IP アドレスから生じたアクティビティを大量に収集することがよくあります。たとえば、マルウェア解析用のオンライン サンドボックスが生成する pcap がそうした例の 1 つです。感染疑いに関連したアラートを調査するさい、トラフィックが手に入るのであれば、アナリストはそのアラートに関連付けられた内部 IP からのトラフィックを用意することになります。
このような場合、Web トラフィックをフィルタリングすると、[Src] の列にはいつも同じ内部 IP アドレスが表示されることになります。たとえば本チュートリアルの pcap は 172.16.1[.]135 という内部 IP アドレスからのトラフィックをキャプチャしました。したがって、Web トラフィックをフィルタリングする場合、パケット一覧部の [Src] 列にはこの IP アドレスが常に表示されることになります。
それなら [Src] 列も [Src port] 列も隠して、Web トラフィックに集中するほうがよいでしょう。
Wireshark で列を非表示にするには、列名のいずれかを右クリックして、コンテキスト メニューから非表示にする列のチェックを外します。図 36 は、[Src] 列と [Src port] 列のチェックボックスをオフにしたことを示しています。
![画像 37 は、Web トラフィックの見え方を簡潔にした Wireshark のスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-37.jpeg)
せっかく列表示をカスタマイズしてきたので、更新した設定プロファイルをエクスポートしておきましょう。
更新した設定プロファイルをエクスポートする
Wireshark の最新バージョンは、個人用の設定プロファイルをエクスポートしたりロードしたりできます。この機能は Wireshark を新しい環境にインストールしたときに便利です。本チュートリアルの手順を一からやり直さずとも、エクスポート済みの設定から保存したプロファイルをロードできます。
新しくカスタマイズした設定プロファイルをエクスポートするには、以下の図 38 に示すように、[Edit (編集)] メニューで [Configuration Profiles (設定プロファイル)] を選択します。
![画像 40 は、エクスポートされたプロファイルを Wireshark から zip として保存する方法を示しています。ここでは zip ファイル名を「customized-profile.zip」にしてあります。また zip ファイルの保存場所としてデスクトップが選択されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-40.jpeg)
保存されたプロファイルをインポートするには、以下の図 41 に示すように、[Configuration Profiles (設定プロファイル)] ウィンドウで [Import (インポート)] をクリックします。
![画像 41 は、zip から Wireshark にプロファイルをインポートする方法を示しています。黒い矢印で示されているのは [Import (インポート)] ボタンです。ここではドロップダウン メニューから [from zip file (zip ファイルより)] を選んでいます。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/08/word-image-129755-41.jpeg)
結論
Wireshark のデフォルトの列表示でじゅうぶん、という方も多いと思います。ただ、カスタマイズすれば、個人の用途にあったさらに使いやすいものにすることができます。たとえば、本チュートリアルで行ったカスタマイズは、Web トラフィックを確認して感染チェーンを識別したい場合にとても便利です。
本シリーズの次回のチュートリアルでは、表示フィルタ式を中心に取り上げます。この表示フィルタ式は、不審なネットワーク トラフィックの調査に役立ちます。
追加リソース
- Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定 – パロアルトネットワークス Unit 42
- Wireshark によるパケット解析講座 3: ホストとユーザーを特定する – パロアルトネットワークス Unit 42
- Wireshark によるパケット解析講座 4: Pcapからのオブジェクトのエクスポート – パロアルトネットワークス Unit 42
- Wiresharkによるパケット解析講座 8:HTTPSトラフィックの復号 – パロアルトネットワークス Unit 42
- Wireshark チュートリアル: Wireshark ワークショップビデオシリーズを公開 – パロアルトネットワークス Unit 42
- Wireshark によるパケット解析講座および WireShark クイズの全リスト – パロアルトネットワークス Unit 42