Wireshark によるパケット解析講座 1: Wiresharkの表示列をカスタマイズする

By

Category: Tutorial, Unit 42

Tags: , ,

This post is also available in: English (英語)

Wireshark は無料で利用できるプロトコル アナライザです。 Wireshark を使うとネットワーク トラフィックをキャプチャしたり、キャプチャしたパケットを表示させることができます。ITの専門職についているかたがたの中には、このツールを使って日々ネットワークのさまざまな問題を解決しておられる方も多いでしょう。パロアルトネットワークスの脅威インテリジェンス調査チーム Unit42 に所属するアナリストのひとりとして、私もよくこの Wireshark を使ってマルウェア検体が生成したトラフィックをレビューしています。

そこで、今回は Wireshark の便利な機能のひとつである表示列のカスタマイズをご紹介したいと思います。Wireshark はデフォルトでは、非常にたくさんの情報を列表示してしまうので、これをカスタマイズすることで皆さん自身の用途に使いやすいようにしたいのです。本稿はとくにセキュリティをご専門にされているかたが、マルウェアが生成するネットワーク トラフィックを解析する場合に役に立つカスタマイズのオプションについてご説明するつもりです。

本稿のチュートリアルに利用する pcap ファイルはこちらから取得してください。なお本稿では、みなさんが Wireshark を活用するうえで必要となる基本的なネットワーク トラフィックの知識を有しているものとして解説をしています。この点はご承知おきください。また本チュートリアルでは、 Wireshark のバージョン 2.6 (訳注: スクリーンショットは Windows 英語版のものですが、UI 文字列については日本語を補足しています) を利用し、次の内容を説明していきます。

  • Web トラフィックとデフォルトの Wireshark 列表示設定
  • 列を非表示にする
  • 列を削除する
  • 列を追加する
  • 列の時刻設定を UTC に変更する
  • カスタム列を設定する

Web トラフィックとデフォルトの Wireshark 列表示設定

マルウェアはよく web トラフィックを通じて配信されます。このほか web トラフィックはデータの漏出や C2 活動に使われることもあります。マルウェアに感染した web トラフィックを解析するにあたり、Wireshark のデフォルトの列表示は理想的とはいえませんが、表示をカスタマイズすれば、こうした活動内容を捕捉しやすくなります。

図 1: Wireshark の デフォルト列表示で pcap を表示したところ
図 1: Wireshark の デフォルト列表示で pcap を表示したところ

Wireshark のデフォルト列は次のようになっています。

  • No. -pcap の最初から数えたフレーム番号。最初のフレームは常に1
  • Time – pcap の最初のフレームからカウントを開始したナノセカンド単位の経過秒数。最初のフレームは常に 0.000000
  • Source – ソース (接続元) アドレス。一般には IPv4、IPv6、またはイーサネット アドレス
  • Destination – デスティネーション (接続先) アドレス。一般には IPv4、IPv6、またはイーサネット アドレス
  • Protocol – イーサネット フレーム、IP パケット、TCP セグメント (ARP、DNS、TCP、HTTP など) で利用されているプロトコル
  • Length – フレーム長 (バイト単位)

私が解析業務で使っているWiresharkの列は次のものです。

  • Date と Time (UTC 表示)
  • Source IP と Source Port
  • Destination IP と Destination Port
  • HTTP host
  • HTTPS server
  • Info

ではさっそくこの列設定にする方法を見ていきましょう。まずは不要な列を非表示ないし削除するところからはじめます。

列を非表示にする

後で必要になるかもしれない列は、簡単な操作で非表示にしておくことができます。まず、Packet List ペインにある列ヘッダ (No.、Time などの見出し行) のどこでもよいので右クリックしてコンテキスト メニューを表示します。列の一覧が表示されますので、左クリックをして、不要な列のチェックを外します。次の図 2 では No.ProtocolLength の列のチェックを外して非表示にしています。

図 2: 列ヘッダのコンテキスト メニューから列を非表示にする前と非表示にした後
図 2: 列ヘッダのコンテキスト メニューから列を非表示にする前と非表示にした後

列を削除する

私自身は No.ProtocolLength の列は一切利用しないので、これらは完全に削除しています。列を削除するには、削除したい列ヘッダ(見出し行)の上で右クリックし、コンテキスト メニューから [Remove this Column…(この列を削除)] を選択します。

図 3: 列ヘッダのコンテキスト メニューから列を削除する前と削除した後
図 3: 列ヘッダのコンテキスト メニューから列を削除する前と削除した後

この時点で、非表示ないし削除した列は表示されなくなり、Time、Source、Destination、Info の列だけが表示された状態になります。

列を追加する

Wireshark で列を追加するのは [Column Preferences] メニューから行います。ここでも列ヘッダ (見出し行) のどこでもよいので右クリックし、[Column Preferences…] を選択します。

図 4: 列ヘッダを右クリックして [Column Preferences] メニューを表示したところ
図 4: 列ヘッダを右クリックして [Column Preferences] メニューを表示したところ

[Column Preferences] メニューにはその表示・非表示の状態にかかわらず、すべての列が一覧表示されます。 [Column Preferences] メニューの一番下の左の方にボタンが 2 つありますが、うち [+] というボタンが列を追加するボタン、[-] は列を削除するボタンです。ここでは、[+] をクリックして追加してください。[+]をクリックすると「New Column」という題名 (Title) の項目が一覧の一番下に表示されます。

図 5: [Column Preferences] メニューで新しい列を追加したところ
図 5: [Column Preferences] メニューで新しい列を追加したところ
[New Column] をダブルクリックして、「Source Port」という題名 (Title) に変更します。なお、新規に追加された列の種別 (Type) は常に「Number」と表示されます。 [Number] をダブルクリックしてメニューを表示し、「Src port (unresolved)」という項目が表示されるまでスクロールし、これを種別として設定します。

図 6: 列名を変更するところ
図 6: 列名を変更するところ
図 7: 列の種別を「Src port (unresolved)」に変更するところ
図 7: 列の種別を「Src port (unresolved)」に変更するところ

新しい列の題名(Title)が「Source Port」に、列の種別(Type)が「Src port (unresolved)」になったことを確認したら、今追加した項目を左クリックしてドラッグして [Source address] の直下に移動します。

図 8: 列位置を変更する
図 8: 列位置を変更する

「Source port」を追加し終わったら、もうひとつ別の列を追加します。次に追加する列は、題名 (Title) を「Destination Port」に、列の種別 (Type) は「Dest port (unresolved)」とします。

図 9: 別の列「Destination Port」を追加する
図 9: 別の列「Destination Port」を追加する

「Source Port」の列のときと同様に、今回追加した「Destination Port 」もドラッグして「Destination address」の直下に移動します。  移動し終えた後、列表示は、図 10 と似た状態になっているはずです。

図 10: 設定変更が終わった状態の [Column Preferences] ウィンドウ
図 10: 設定変更が終わった状態の [Column Preferences] ウィンドウ
「Source Port」と「Destination Port」の列を追加が修了したら、[OK] をクリックして変更内容を反映します。なお、新しく追加した列の文字列は自動的に右寄せで表示されるので、各列ヘッダ (見出し行) の項目を右クリックしてほかの列と同じ左寄せに設定しなおすとよいでしょう。

図 11: Wireshark の列表示を左寄せに設定しなおす
図 11: Wireshark の列表示を左寄せに設定しなおす
図 12: 「Source Port」と「Destination Port」の列を追加し、文字揃えを修正した後の列表示
図 12: 「Source Port」と「Destination Port」の列を追加し、文字揃えを修正した後の列表示

なお私個人は、日常業務で「Source address」と「Source Port」の列は後で必要になるまで非表示にすることが多いです。

列の時刻設定を UTC に変更する

時刻表示形式を変更するには、[View (表示)] メニューを開いて[Time Display Format (時刻表示形式)] を選択して [Seconds Since Beginning of Capture (キャプチャ開始からの秒数)] を [UTC Date and Time of Day (UTC 日時)] に変更します。つづけて同じメニューで時間の分割単位を [Automatic (自動)] から [Seconds (秒)] に変更します。図 13 はこのメニューでこれらのオプションを表示したところです。

図 13: 時刻設定を UTC に変更する
図 13: 時刻設定を UTC に変更する
図 14: Wireshark の列表示が UTC 表示に変わったところ
図 14: Wireshark の列表示が UTC 表示に変わったところ

カスタム列を設定する

残念ながら、[Column Preferences] メニューからは直接追加できない種類の列もあります。その場合に使えるのが Wireshark のカスタム列追加機能です。

カスタム列には、Wireshark画面の各フレームに含まれるほぼどんな値でも利用できます。ここでは HTTP および HTTPS のトラフィックに含まれるドメイン名を元にして Wireshark の列ヘッダに表示するカスタム列を追加してみることにします。

HTTP トラフィックに含まれているドメイン名をすばやく探すため、まずは Wireshark の [Filter] ツールバーに「http.request」という文字列を指定し、続いて [Packet List] ペインの下部に表示されている [Packet Details] ペインを確認していきます。

まず、[Packet Details] ペインに表示されている [Hypertext Transfer Protocol] 行の左端にある「大なり記号(>)」を左クリックしてこの行を展開します (訳注: Wireshark のバージョンや実行環境によっては「大なり記号」ではなく「右向きの三角形」の場合があります)。

これにより複数の行が追加表示されます。[Host:] で始まる行までスクロールして HTTP ホスト名を確認します。この行を左クリックして選択します。続いてこの行を右クリックしてコンテキスト メニューを表示します。メニューの上の方に [Apply as Column (列として適用)] という項目があるので、 これを選択します。これにより HTTP ホスト名の新しい列が作成されます。

図 15: HTTP ホスト名を列に適用しているところ
図 15: HTTP ホスト名を列に適用しているところ
図 16: HTTP ホスト名が列に表示されているところ。フィルタには「http.request」を指定している
図 16: HTTP ホスト名が列に表示されているところ。フィルタには「http.request」を指定している

同様にして暗号化されている HTTPS トラフィックからドメイン名を見つけるには、Wireshark の [Filter] ツールバーに「ssl.handshake.type == 1」を指定します。
さらに [Packet Details] ペインで「Secure Sockets Layer」行、「TLS(バージョン) Record Layer」行、「Handshake Protocol: Client Hello」行をこの順にクリックして展開します。

図 17: 「Handshake Protocol」まで展開したところ
図 17: 「Handshake Protocol」まで展開したところ

続いて「Handshake Protocol: Client Hello」行、「Extension: server_name」行、 「Server Name Indication extension」行をこの順に展開します。ここで「Server Name」で始まる複数種類の値をふくむ行が確認できるので、この中から「Server Name:」で始まる行を選択し、右クリックします。表示されるコンテキスト メニューから [Apply it as a column (列として適用)] をクリックします。図 18 がこの例です。

図 18: HTTPS サーバー名を列として適用しているところ
図 18: HTTPS サーバー名を列として適用しているところ
図 19: HTTP サーバー名を列に表示したところ。「ssl.handshake.type == 1」を指定してフィルタリングしている
図 19: HTTP サーバー名を列に表示したところ。「ssl.handshake.type == 1」を指定してフィルタリングしている

カスタマイズが終わったら、「http.request or ssl.handshake.type == 1」を [Filter] ツールバーに指定します。この結果を図 20 に示します。こうしてカスタマイズしておけば、デフォルトの列表示設定のままの Wireshark を眺めるよりずっとどのような web トラフィックが流れているのかを把握しやすくなります。

図 20: チュートリアルのサンプルのパケットを開き [Filter] ツールバーに「http.request or ssl.handshake.type == 1」を指定したところ
図 20: チュートリアルのサンプルのパケットを開き [Filter] ツールバーに「http.request or ssl.handshake.type == 1」を指定したところ

まとめ

本チュートリアルでは、次の内容を説明しました。

  • Web トラフィックとデフォルトの Wireshark 列表示設定
  • 列を非表示にする
  • 列を削除する
  • 列を追加する
  • 列の時刻設定を UTC に変更する
  • カスタム列を設定する

Wiresharkのカスタマイズ機能は、日々調査業務で怪しいネットワーク トラフィックを解析されている方々にはとても便利な機能です。今回紹介した内容は、あるweb トラフィックが感染活動の一部かどうかをレビューしたいときはとくに便利ですので、ぜひ活用して、みなさんの調査業務にも役立ててください。