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 をダウンロードしてください。
今回ダウンロードする ZIP アーカイブ名は Wireshark-tutorial-column-setup.pcap.zip です。ZIP アーカイブの展開用パスワードは「infected」です (図 2)。
このチュートリアル用に展開された pcap 名は Wireshark-tutorial-column-setup.pcap です。では pcap を用意できたところで、まずは Wireshark のバージョンを確認してみましょう。
Wireshark のバージョンを確認する
pcap ファイルを開いていない状態では、Wireshark は以下の図 3 に示すように [Welcome to Wireshark (Wireshark へようこそ)] の画面にバージョン番号を表示します。
以下の図 4 に示すように、[Help (ヘルプ)] メニューの [About Wireshark] を選択してバージョン番号を表示することもできます [訳注: macOS をお使いの場合は、[Wireshark] メニューの [About Wireshark] に読み替えてください]。
設定プロファイル
Wireshark バージョン 3.6.2 以降を使用していることを確認したら、Wireshark の [Edit (編集)] メニューで [Configuration Profile (設定プロファイル)] を選びます。以下の図 5 に示すように、コピー ボタンをクリックし、デフォルトの設定プロファイルのコピーを作成します。
「Default」プロファイルをコピーした後、新しい名前を付けます。本チュートリアル シリーズ内で後からこの名前を参照することがあると思いますので、この名前は「Customized」にしておきましょう (図 6)。
[設定プロファイル] ウィンドウをクローズするさい、この新しく作成されたプロファイルが選択状態になっていれば、この後の Wireshark へのカスタマイズはこの新しく作成されたプロファイルに保存されます。
Web トラフィックとデフォルトの Wireshark 列表示設定
マルウェアの配布は Web トラフィック経由で起きることが多いですし、データ漏出やコマンド & コントロールのアクティビティにも Web トラフィックは使われます。ただ、こうした悪意のあるアクティビティを確認するさい、Wireshark のデフォルトの列表示設定は理想的とはいえません。
さいわい、列表示をカスタマイズすれば Web トラフィックを確認しやすくなります。Wireshark のデフォルトのレイアウトを表示するため、このチュートリアル用にダウンロードしておいた pcap を開きましょう。Wireshark バージョン 4.0.7 の場合、デフォルト レイアウトは以下の図 7 のようになっています。
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 に示すように、列表示に UTC の日付と時刻が表示されます。これで pcap を確認すればネットワーク トラフィックの日時がすぐにわかります。
次は、ふだん Wireshark を使うさいに必要ない列を削除していきましょう。
列を削除する
Web ベースのトラフィックを確認するのに No.、Protocol、Length などの列は使わないので削除するとよいでしょう。削除するには、以下の図 10 に示したように、削除したい列名の上で右クリックし、表示されたコンテキスト メニューから [Remove this Column (この列を削除)] を選びます。
更新された列表示には、Time (時刻)、Source (送信元)、Destination (宛先)、Info (情報) の 4 つの列のみが表示されているはずです (図 11)。
不要な列を削除できたら次は Wireshark に新しい列を追加していきましょう。
列を追加する
Wireshark での列の追加は [Column Preferences (列の設定)] メニューから行います。このメニューを開くには、いずれかの列名上で右クリックし、表示されたコンテキスト メニューで [Column Preferences (列の設定)] をクリックします (図 12)。
この設定ウィンドウには、表示・非表示の状態を含む Wireshark のすべての列がリストされています。設定ウィンドウの左下あたりに 2 つボタンがあります。このうち [+] というボタンが列を追加するボタンで、[-] は列を削除するボタンです。ここでは、[+] をクリックして追加します (図13)。
「New Column (新規列)」という「題名 (Title)」の項目が一番下に表示されます。この [Title (題名)] をダブルクリックし、下の図 14 に示すように列名を変更します。
以下の図 15 に示すように、この新しい列に「Src port」という名前を付けてください。次に [Type (種別)]の列の [Number (数値)] をダブルクリックしてください。上下にスクロール可能なコントロールが表示されます。ここから種別を「Number (数値)」からべつの種別に変更していきます。
[Number (数値)] をもう一度クリックしてください。列の種別に使えるオプションをスクロール表示できるリストが表示されます。以下の図 16 に示すように下にスクロールしていき、列の種別として「Src port (unresolved)」を選びます。
次も同様に、新しい列を作成し、「Dst port」という Title (題名) を設定し、列の Type (種別) として「Dest port (unresolved)」を選びます (図 17)。
ここまでで、図 18 に示すように、[Preferences (設定)] ウィンドウに新しく作成された 2 つの列が表示されます。
作成した列の配置は変えられます。「Src port」を「Source」の後ろに移動し、「Dst port」を「Destination」の後ろに移動しましょう。そうするには、対象の列名を左クリックして選び、マウス ボタンを押したままリスト内の新しい位置にドラッグしてドロップします。図 19 は、「Dst port」列を「Destination」の直後の位置に移動しようとしているところです。
新しく作成した「Src port」と「Dst port」を移動したら、「Source」の列の題名を「Src」に変更し、種別を「Src addr (unresolved)」に変更しましょう。また、「Destination」の列の題名を「Dst」に、種別を「Dest addr (unresolved)」に変更しましょう。変更後の [Preferences (設定)] ウィンドウは、図 20 のように見えるはずです。
これらの変更が済んだら [OK] をクリックして [Preferences (設定)] ウィンドウを閉じます。これで Wireshark には次の 6 つの列 <Title (題名)>: <Type (種別)> が表示されているはずです。
- 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 は、新しく作成された「Src port」と「Dst port」の列の内容は右揃えで表示されており、ほかのすべての列の内容は左揃えで配置されているようすを示しています。右揃えになっている各列の列名を右クリックし、コンテキスト メニューを表示したら、[Align Left (左揃え)] チェックボックスをクリックして、これらの列を左揃えにしてください。図 22 は、[Src port] の列の例を示しています。
ここまで済めば、以下の図 23 に示すように、[Src port] と [Dst port] の列が左揃えになってほかの列と文字揃えが一致しているはずです。
このように、[Preferences (設定)] ウィンドウからはさまざまな種類の列を追加できますが、考えうる種別の列をすべてここから追加できるわけではありません。たとえばこの方法だと Web トラフィックに関連付けられたドメインを示す列は追加できません。さいわい、そうした Web トラフィックのドメインを表示するためのカスタマイズした列も追加可能です。
カスタマイズした列の追加
その場合に使えるのが Wireshark のカスタム列追加機能です。カスタム列には、Wireshark のパケット詳細部ウィンドウに含まれるほぼどんな値でも利用できます。パケット詳細部を見やすくするには、16 進数表示をしているパケットデータ部を一時的に非表示にする必要があります。図 24 に示すように、[View (表示)] メニューで [Packet Bytes (パケット バイト列)] のチェックを外します。
これで、pcap データを表示するセクションは [パケット一覧部] と [パケット詳細部] の 2 つだけになりました。
まず、平文の HTTP Web トラフィックで使用されるドメイン用にカスタマイズした列を作る必要があります。そのためには、Wireshark の [表示フィルタ] ツールバーに「http.request」と入力してから Enter を押します。[パケット一覧部] の最初のフレームを選択します。[パケット詳細部] で「Hypertext Transfer Protocol」の行を展開します。ここで「Host:」から始まる行を見つけます。この例では、「www.msftconnecttest.com」という名前を含む行になっています。Host: の行を左クリックして選択してから右クリックしてコンテキスト メニューを表示します。コンテキスト メニューから、[Apply as (列として適用)] を選択します (図 25)。
これにより、図 26 に示すように、「Host (ホスト)」という名前で新しい列が作成されます。
次に、暗号化された HTTPS による Web トラフィックが使うドメイン用に、もう 1 つカスタマイズした列を作りましょう。Wireshark の [表示フィルタ] ツールバーを空にしてから、「tls.handshake.type eq 1」と入力し、Enter を押します。[パケット一覧部] の最初のフレームを選択します。
パケット詳細部で、Transport Layer Security の行を展開します。その下の TLSv1.2 Record Layer: Handshake Protocol: Client Hello を展開します。さらにその下にある Handshake Protocol: Client Hello 行を展開します。展開されたパケット詳細部を以下の図 27 に示します。
パケット詳細部を下にスクロールしていき、Extension: server_name で始まる行を見つけて展開します。その下から Server Name Indication extension という行を見つけて展開します。その下に Server Name: geo.prod.do.dsp.mp.microsoft.com という行があります。この行を左クリックして選んでから、右クリックしてコンテキスト メニューを表示し、以下の図 28 に示すように [Apply as Column (列として適用)] を選択します。
これが済むと、図 29 に示したように、いましがた作った [Server Name] という題名の列が、[Host (ホスト)] 列の右側に新しい列として作成されます。
いずれかの列名を右クリックしてコンテキスト メニューを表示し、[Column Preferences (列の設定)] をクリックして、[Preferences (設定)] ウィンドウを再度開きます。[Preferences (設定)] ウィンドウには、以下の図 30 に示すように、新しく作成された 2 つのカスタマイズされた列が表示されています。
画面スペースを節約したいので、これら 2 列を 1 列に結合しましょう。そのためには、まず [Server Name] の [Fields (フィールド)] の値をダブルクリックし、テキストの内容 (tls.handshake.extensions_server_name) をコピーします (図 31)。
次に、 [Host] の項目の [Fields (フィールド)] 列の内容を選んだ状態で、最後に 「 or 」というオペランドを入力 (前後にスペースを空ける) し、その後ろに、さきほどコピーした [Server Name] のフィールド値のテキストをペーストします。これで Host と Server Name のフィールド値が結合されました。[Host] の新しい [Field (フィールド)] の値が http.host or tls.handshake.extensions_server_name になっていることを確認してください (図 32)。
[Host] と [Server Name] の [Fields (フィールド)] の値を [Host] 側で結合したので [Server Name] は必要なくなりました。図 33 が示すとおりに削除してください。
ここまで済むと、[Preferences (設定)] ウィンドウのリストは図 34 のようになっています。
[Preferences (設定)] ウィンドウを閉じます。これで、HTTP と HTTPS の両方のアクティビティをフィルタリングできるようになりました。これらの Web トラフィックに関連付けられたドメインは、先ほど更新した [Host] 列に表示されるようになります。
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] 列のチェックボックスをオフにしたことを示しています。
これらの列を非表示にすると、Web アクティビティのレビュー時にトラフィックの内容を把握しやすくなります。たとえばこの例であれば、2023 年 8 月 7 日 18:57 UTC にホストが httpforever[.]com というサイトに対して平文の Web トラフィックを生成していることがわかります。
せっかく列表示をカスタマイズしてきたので、更新した設定プロファイルをエクスポートしておきましょう。
更新した設定プロファイルをエクスポートする
Wireshark の最新バージョンは、個人用の設定プロファイルをエクスポートしたりロードしたりできます。この機能は Wireshark を新しい環境にインストールしたときに便利です。本チュートリアルの手順を一からやり直さずとも、エクスポート済みの設定から保存したプロファイルをロードできます。
新しくカスタマイズした設定プロファイルをエクスポートするには、以下の図 38 に示すように、[Edit (編集)] メニューで [Configuration Profiles (設定プロファイル)] を選択します。
[Configuration Profiles (設定プロファイル)] ウィンドウでは、カスタマイズされたプロファイルが選択されたままになっているはずです。このプロファイルをエクスポートするには、下の図 39 に示すように [Export (エクスポート)] ボタンをクリックします。作成した個人用設定プロファイルが複数ある場合はそれもエクスポートできます。
エクスポートされたプロファイルは ZIP アーカイブとして保存されます。お使いの環境で必要な場合は保存するファイル名に .zip というファイル拡張子をつけて保存します (図 40)。
保存されたプロファイルをインポートするには、以下の図 41 に示すように、[Configuration Profiles (設定プロファイル)] ウィンドウで [Import (インポート)] をクリックします。
結論
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