サイバーセキュリティ チュートリアル

Wireshark によるパケット解析講座 3: ホストとユーザーを特定する (2023-10-11 更新)

Clock Icon 6 min read

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

概要

ホストが感染したり侵害されたりしたとき、インシデントレスポンス担当者は、影響を受けるホストやユーザーをすばやく識別しなければなりません。こうした場合、組織によっては、影響を受けたホストが生成したネットワークトラフィックのパケットキャプチャ (pcap) を確認することがあります。

このチュートリアルでは、Wireshark を使って pcap 内のホスト データとユーザー データを識別します。本稿は Wireshark のチュートリアル シリーズの連載第 3 回です。本シリーズでは、セキュリティ専門家が Wireshark をより効果的に使用するうえで役立つヒントを提供しています。本稿は 2019 年 3 月に初版を公開し、その後 2023 年に更新されました。

関連する Unit 42 のトピック pcap, Wireshark, Wireshark Tutorial

要件および補足資料

本稿の内容をじゅうぶん理解できるように、Wireshark のパケット一覧で列表示をカスタマイズする方法表示フィルター式の使いかたについて解説した前回までのチュートリアルの内容を確認しておいてください。また、Wireshark の最新バージョン (最低でもバージョン 3.6.2 かそれ以降) を準備しておいてください。

本チュートリアルでは、Wireshark バージョン 4.0.8 を使い、以前のチュートリアルでカスタマイズした列表示を使います。お使いのオペレーティング システム (OS) 用の Wireshark の最新バージョンを使うことを強くお勧めします。

このチュートリアルを進めるには、ネットワーク トラフィックの基礎を理解している必要があります。

本チュートリアルで使う pcap ファイルは、こちらの GitHub リポジトリーにホストしたパスワード付き ZIP アーカイブに格納してあります。ここから Wireshark-tutorial-identifying-hosts-and-users-5-pcaps.zip という名前の ZIP ファイルをダウンロードしてください。ZIP ファイル展開用のパスワードは「infected」です (図 1)。

画像 1 は、Palo Alto Networks Unit 42 Wireshark チュートリアル GitHub のスクリーンショットです。黒い矢印は、ページ上のダウンロード ボタンを押すことを示しています。2 番目の黒い矢印は、ダウンロードしたフォルダー内の zip ファイルを選択した後「Password required (パスワードが必要)」であることを示しているポップアップです。ここではパスワードが入力されています。最後の黒い矢印は、ZIP ファイルの内容を指しています。
図1. チュートリアル用の pcap ファイルを取得

ZIP を展開すると以下の 5 つの pcap が含まれています。

  • Wireshark-tutorial-identifying-hosts-and-users-1-of-5.pcap
  • Wireshark-tutorial-identifying-hosts-and-users-2-of-5.pcap
  • Wireshark-tutorial-identifying-hosts-and-users-3-of-5.pcap
  • Wireshark-tutorial-identifying-hosts-and-users-4-of-5.pcap
  • Wireshark-tutorial-identifying-hosts-and-users-5-of-5.pcap

DHCP トラフィックからのホスト情報

ネットワーク内でホストが生成したトラフィックには、識別子が 3 つ存在しています。Mac アドレスIP アドレス、そしてホスト名です。

このチュートリアルで最初に使う pcap は Wireshark-tutorial-identifying-hosts-and-users-1-of-5.pcap です。この pcap は Ethernet アドレス f8:ff:c2:04:a5:7b との間でやりとりされたトラフィックから得たものです。

以前のチュートリアルで作成した「basic」Web フィルターを適用してください。これにより、さきの MAC アドレス f8:ff:c2:04:a5:7b は、IP アドレス 172.16.1[.]38 に紐づいていることがわかります (図 2)。

画像 2 は、Src の列が黒い四角形で強調表示されている Wireshark のスクリーンショットです。矢印は、下部ペインの送信元 MAC アドレスを強調表示しています。別の矢印は送信元 IP アドレスを強調表示しています。
図2. Wireshark で IP アドレスと MAC アドレスを紐づける

DHCPトラフィックを確認すればこの IP アドレスを使っているホスト名がわかる場合があります。そのためには、まず Wireshark の [表示フィルタ] ツールバーに「dhcp」と入力し、DHCP トラフィックをフィルタリングします (図 3)。

画像 3 は DHCP でフィルタリングしたトラフィックの Wireshark スクリーンショットです。
図3. Wireshark で DHCP のトラフィックをフィルタリング

表示された結果から、[Info] 列に「DHCP Request」と表示されている最初のフレーム (行) を選択してください。図 4 を参考に、[パケット詳細部] に移動し、「Dynamic Host Configuration Protocol (Request)」の行をクリックして展開してください。

画像 4 は Wireshark のスクリーンショットです。フィルターはdhcpです。上部ペインでは、矢印で示されているように特定の行が選択されています (濃い青)。これにより、下部ペインの情報が展開され、DHCP 行が表示されます。
図4. DHCP Request を選択した後、Dynamic Host Configuration Protocol (Request) の行を展開

[パケット詳細部] を下にスクロールして、Option: (50) Requested IP AddressOption: (12) Host Name という行を図 5 に示すように展開してください。これで、MAC アドレス f8:ff:c2:04:a5:7b をもつクライアントのホスト名は jeremiahs-MBP で、DHCP リクエストを出した IP アドレスが 172.16.1[.]38 であることが確認できます。

画像 5 は、DHCP トラフィックの Wireshark スクリーンショットです。上から下に赤色で強調表示されているのは、クライアントの MAC アドレス、リクエストを出した IP アドレス、ホスト名 (jeremiahs-MBP) です。
図5. MAC アドレス、IP アドレス、ホスト名を DHCP トラフィックを使って紐付ける

デフォルトでは Wireshark は MAC アドレスの最初の 3 バイトをベンダー ID に解決しようとします。図 5 では、MAC アドレスのベンダー ID が Apple_ と表示されています [訳注: お使いの環境でここにベンダー名が表示されていない場合は、Wireshark の Preferences メニューの Name Resolution で Resolve MAC addresses のチェックボックスにチェックを入れることでベンダー名を確認できます。デフォルトではこのオプションが有効になっています]。この情報に加えてホスト名が MBP で終わっていることから、これは Apple MacBook Pro の可能性があることを示しています。この pcap にはさまざまな Apple ドメインへのトラフィックも含まれており、これが Apple 製ホストであることをさらに示唆しています。

ただし、モバイル デバイスでは MAC アドレスが匿名化されることが多く、ユーザーが MAC アドレスを変更して別のベンダーになりすますことも簡単です。こうした匿名化やスプーフィングを考えると、ホストの識別を MAC アドレスのみに基づいて行うべきではありません。

NetBIOS ネームサービス (NBNS) トラフィックからのホスト情報

DHCP リースの更新頻度によっては pcap に DHCP トラフィックが含まれていないこともあります。その場合でも NBNS トラフィックを使って Microsoft Windows を実行しているコンピュータや macOS を実行している Apple ホストのホスト名を識別することはできます。

最初の pcap で「nbns」でフィルタリングし、[Info] 列の詳細を確認してください。これにより、以下の図 6 に示すように、DHCP トラフィックで以前に検出したのと同じホスト名 JEREMIAHS-MBP が確認できます。

画像 6 は Wireshark のスクリーンショットです。フィルターは nbns に設定されています。黒い矢印は、トラフィックからホスト名 Jeremiahs-MBP を見つける方法を示しています。
図6. 最初の pcap で NBNS のトラフィックからホスト名を見つけたところ

Windows ホストからの NBNS トラフィックを調べてみましょう。2 つめの pcap (Wireshark-tutorial-identifying-hosts-and-users-2-of-5.pcap) を開いて、[表示フィルタ] ツールバーに「nbns」と指定してください。

この pcap は、MAC アドレスが 78:c2:3b:b8:93:e8 で、ローカル IP アドレスとして 172.16.1[.]101 を使っている Windows ホストからのものです。また Windows ホスト名は DESKTOP-HVKYP4S です (図 7)。

画像 7 は Wireshark のスクリーンショットです。Src の列は黒い四角で強調表示されています。MAC アドレスは、Ethernet II の行から始まるパケット詳細部に表示されています。IP アドレスは、Src 列とパケット詳細部の両方に表示されています。このホストはパケット詳細部の [Additional records] からも識別できます。
図7. MAC アドレス、IP アドレス、ホスト名を NBNS トラフィックを使って紐付ける

HTTP トラフィックからのデバイス モデルとオペレーティング システム (OS)

Web ブラウザーへの HTTP トラフィックが平文ならそこから OS がわかることがあります。この情報は HTTP リクエスト ヘッダーの User-Agent 行に含まれています。

ただしこの方法は慎重に使ってください。ある種のブラウザー拡張機能や、cURL といったツールを使えば、HTTP トラフィック内の User-Agent 行の変更や偽装は簡単です。ここ何年もさまざまなマルウェア サンプルがコマンド & コントロールのトラフィックで User-Agent 行を偽装しています。

2023 年時点でブラウザー開発者は User-Agent 行に含める情報を減らしています。このため、最新の Web ブラウザーのほとんどはホストが使用している実際の OS のバージョンを報告しなくなりました。こうしたことからこの方法は信頼性が低くなってしまいました。

とはいえ、ブラウザーが生成した平文 HTTP トラフィックからプラットフォームの種類 (Windows、Apple デバイス、Linux、または Android) を識別するのにはまだ役立ちます。

3 つめの pcap、Wireshark-tutorial-filter-expressions-3-of-5.pcap を Wireshark で開いてください。この pcap はある Windows ホストが生成したものですが、この環境では IPv4 と IPv6 の両方が有効になっています。

http.accept_language」でフィルタリングすると、Web ブラウザーへの平文 Web トラフィックが見つかります。このフィルタリングで「Accept-Language」というヘッダー行をもつ HTTP リクエストが確認できますが、このヘッダー行は、Web ブラウザーが一般に生成するヘッダーです。

このフィルターを指定することで、OS やそのほかのアプリケーションが生成した Web トラフィックを除外できます。これにより、Web ブラウザーが生成した平文 HTTP トラフィックだけに集中できます。結果、平文の HTTP GET リクエストをいくつか確認できるようになりました。これらは以下の図 8 に示すように outdoornebraska[.]gov に 80/tcp 経由で接続しています。

画像 8 は Wireshark のスクリーンショットです。トラフィック フィルターは http.accept_language です。これは、Web ブラウザーへの平文のトラフィックを示しています。
図8. 3 つめの pcap をフィルタリングして Web ブラウザーへの平文の HTTP トラフィックを探す

図 9 を参考に、HTTP GET リクエストをどれか 1 つ選び、outdoornebraska[.]gov の TCP ストリームを追跡してください。

画像 9 は Wireshark のスクリーンショットです。トラフィック フィルターは http.accept_language です。1 行 (濃い青) を選んでコンテキスト メニューから [Follow (追跡)] をクリックし、 [TCP Stream (TCP ストリーム)] をクリックします。
図9. outdoornebraska[.]gov 宛の HTTP GET リクエストの TCP ストリームを追跡する
この TCP ストリームには、図 10 に示す User-Agent 行を含む HTTP リクエスト ヘッダーが含まれています。この User-Agent 行は、2023 年 3 月 10 日に Windows 11 ホストから Microsoft Edge Web ブラウザーのバージョン 110.0.1587.69 で生成したものです。

画像 10 は、Wireshark の TCP ストリーム ウィンドウのスクリーンショットです。黒い四角形と矢印で強調表示されているのは、User-Agent 文字列です。
図10. Microsoft Edge が生成した User-Agent 行を含む TCP ストリーム

図 10 内の User-Agent 行にある、以下の文字列に注目してください。

(Windows NT 10.0; Win64; x64)

Windows NT 10.0 は Windows 10 または Windows 11 を表しています。User-Agent 行の Windows NT という文字列は、以下に示すバージョンの Microsoft Windows に対応しています。

Windows NT バージョン Windows OS バージョン
Windows NT 5.1 Windows XP
Windows NT 6.0 Windows Vista
Windows NT 6.1 Windows 7
Windows NT 6.2 Windows 8
Windows NT 6.3 Windows 8.1
Windows NT 10.0 Windows 10 または Windows 11

表1. 「Windows NT」の行と対応する Microsoft Windows バージョン

なぜ表 1 では「Windows NT 10.0」が「Windows 10 または Windows 11」を表すとされているのでしょうか。User-Agent 行の情報を減らす取り組みの一環で、Chrome や Edge、Firefox などの Web ブラウザーの開発者は Windows NT 10.0 の User-Agent 行に含める Windows バージョン番号を固定にしているのです。2023 年以降、Google Chrome ブラウザーの最新バージョンは、User-Agent 行の Windows のあらゆるバージョンを Windows NT 10.0 として報告するようになっています。

この措置は Apple macOS に関してもとられており、現行バージョンの macOS で Web ブラウザーが生成する HTTP リクエスト ヘッダー内の User-Agent 行は、macOS を Catalina (バージョン 10.15.7) と報告するように固定されています。

前述のように、3 つめの pcap の平文 HTTP トラフィックは、Microsoft Edge Web ブラウザー バージョン 110.0.1587.69 を使って生成したものです。上の図 9 で確認した TCP ストリームでは、User-Agent 行の最後の文字が 「Edg/110.0.1587.69」になっています (図 11)。Chromium ベースの Microsoft Edge の場合、短縮された文字列 Edg が識別子として使われます。

画像 11 は、Wireshark の TCP ストリーム ウィンドウのスクリーンショットです。黒い四角形と矢印で強調表示されているのは、User-Agent 文字列です。最後の文字は Web ブラウザー を Edg/110.0.1587.69 として識別しています。この場合は Microsoft Edge です。
図11. User-Agent 行とその最後の文字列を含む TCP ストリームから Web ブラウザーを識別する

Google Chrome や Microsoft Edge などの Chromium ベースの Web ブラウザーが生成する User-Agent 行には SafariAppleWebKit という文字列が含まれます。これはおそらく、Apple の Safari Web ブラウザーに最適化されたページを表示するさいの互換性を確保するためと思われます。

Android デバイスが生成した平文の HTTP Web トラフィックからも、そのデバイスのブランド名やモデルを確認できることがあります。

4 つめの pcap、Wireshark-tutorial-identifying-hosts-and-users-4-of-5.pcap を Wireshark で開いてください。以前のチュートリアルで作成した「basic」Web フィルターを適用し、www.pcapworkshop[.]net 宛の最初の HTTP GET リクエストを選択してから、TCP ストリームを追跡します (図 12)。

画像 12 は Wireshark のスクリーンショットです。フィルターには 「(http.request or tls.handshael.type eq 1) and !(ssdp)」を指定します。「basic」フィルターを選びます。トラフィック内の行の 1 つが選択されています。メニューから[Follow (追跡)]、[TCP Stream (TCP ストリーム] の順に選びます。
図12. Wireshark で 4 つめの pcap フィルタリングして TCP ストリームを追跡
このアクティビティは Google Pixel Android スマートフォンでキャプチャしたもので、www.pcapworkshop[.]net 宛の Web トラフィックは Android スマートフォンやタブレット向けの Google Chrome ブラウザーを使って生成したものです。この Web トラフィックの TCP ストリームを以下の図 13 に示します。ここでは、デバイスとブラウザーを識別する User-Agent 行を強調表示しています。

画像 13 は、Wireshark TCP ストリーム ウィンドウのスクリーンショットです。黒い四角形と矢印で強調表示されているのは、User-Agent 文字列です。文字列から識別されたのは Linux; Android 13; Pixel 4a (5G) です。
図13. User-Agent 行を含む TCP ストリーム。Google Pixel スマートフォンで実行中の Chrome が生成したもの

2023 年 5 月 14 日に収集されたこのトラフィックでは、User-Agent 行に (Linux; Android 13; Pixel 4a (5G)) と表示されます。なお Chrome の現行バージョンは同一のデバイスを (Linux; Android 10; K) と報告します。これは Google によるUser-Agent 行の情報削減努力によるものです。

なおこの User-Agent 行の削減は Chrome または Chromium ベースのブラウザを実行している Android デバイスには当てはまっていまたが、Apple 製のモバイル デバイスで Safari ブラウザを使用している場合には確認されませんでした。

5 つめの pcap、Wireshark-tutorial-identifying-hosts-and-users-5-of-5.pcap を Wireshark で開いてください。「basic」の Web フィルターを適用してから www.pcapworkshop[.]net 宛の最初の HTTP GET リクエストを選択してください。その後、図 14 に示したように TCP ストリームを追跡してください。

画像 14 は Wireshark のスクリーンショットです。フィルターには 「(hhtp.request or tls.handshael.type eq 1) and !(ssdp)」を指定します。「basic」フィルターを選びます。トラフィック内の pcapworkshop[.]net の行のが選択されています。メニューから[Follow (追跡)]、[TCP Stream (TCP ストリーム] の順に選びます。
図14. Wireshark で 5 つめの pcap フィルタリングして TCP ストリームを追跡
このアクティビティは iOS 16.4.1 を実行している Apple iPhone でキャプチャしたもので、www.pcapworkshop[.]net 宛の Web トラフィックは Apple の Safari モバイル Web ブラウザーを使って 2023 年 4 月 10 日に生成したものです。この Web トラフィックの TCP ストリームを以下の図 15 に示します。ここでは、デバイスと OS バージョンを識別する User-Agent 行を強調表示しています。

画像 15 は、Wireshark TCP ストリーム ウィンドウのスクリーンショットです。黒い四角形と矢印で強調表示されているのは、User-Agent 文字列です。文字列内で「iPhone; CPU iPhone OS 16_4_1 like Mac OS X」と識別されています。
図15. User-Agent 行を含む TCP ストリーム。iPhone 上で実行されている Safari が生成したもの

いまは HTTPS を使う Web サイトが増えていますが、HTTPS トラフィックは暗号化されていて HTTP ヘッダーやコンテンツが見えないことから、この方法でホストを識別するのは難しくなってきています。ですが、調査中に平文 HTTP の Web トラフィックが見つかった場合は、この方法でホスト識別のための詳細情報を得られます。

Active Directory (AD) 環境でのユーザーの識別

インシデントの解決で最も重要な情報はおそらく感染ホストに紐づくユーザーの特定でしょう。Active Directory (AD) 環境の Windows クライアントの場合、Kerberos トラフィックからユーザー アカウント名を見つけられます。

3 つめの pcap、Wireshark-tutorial-filter-expressions-3-of-5.pcap に戻って Wireshark で開いてください。

この pcap は、次の Active Directory 環境にある Windows ホストからのものです。

  • ドメイン: www.pcapworkshop[.]net
  • ネットワーク セグメント: 172.16.1[.]0/24 (172.16.1[.]0 - 172.16.1[.]255)
  • メイン コントローラーの IP アドレス: 172.16.1[.]16
  • メイン コントローラーのホスト名: PCAPWORKSHOP-DC
  • セグメント ゲートウェイ: 172.16.1[.]1
  • ブロードキャスト アドレス: 172.16.1[.]255
  • Windows クライアント: 172.16.1[.]141

これは IPv4 と IPv6 の両方が有効になっている環境ですが、Kerberos トラフィックは IPv4 のみです。

Wireshark でこの pcap を開いたら、[表示フィルタ] ツールバーに「kerberos.CNameString」と入力してフィルタリングします。最初のフレームを選択します。図 16 に示すように、パケット詳細部に移動して各行を展開してください。CNameString: desktop-hsjd5r8$ の文字を含む行を選択した状態で [Apply it as Column (列として適用)] をクリックします。

画像 16 は Wireshark のスクリーンショットです。フィルターは kerberos.CNameString に設定されています。パケット詳細部では、Kerberos が他の情報とともに黒い矢印で示されています。CNameString を選択し、[Apply it as Column (列として適用)] をクリックしています。
図16. CNameString の値を見つけてそれを列として適用したところ
これにより、「CNameString」という名前の新しい列が作成されます。列を作成した後、パケット一覧部で最後のフレームまで下方向にスクロールします。すると、172.16.1[.]16 で実行されているドメイン コントローラーと 172.16.1[.]141 で実行されている Windows クライアントとのトラフィックから、CNameString の列に、アカウント名「rene.mccollum」が見つかるはずです (図 17)。

画像 17 は Wireshark のスクリーンショットです。フィルターは kerberos.CNameString に設定されています。新しい列 CNameString が黒い四角形で強調表示されています。
図17. 新しく作成した CNameString 列で Windows ユーザー アカウント名を見つけたところ

Kerberos トラフィックのほか、Lightweight Directory Access Protocol (LDAP) トラフィックでもユーザーの姓名などの識別子が見つかることがあります。これには次のWiresharkフィルターを使用します。

ldap contains "CN=Users"

これにより [Info] 列に「"CN=Rene McCollum」という文字列が表示されるはずです (図 18)。

画像 18 は Wireshark のスクリーンショットです。フィルターは「ldap contains "CN=Users"」に設定されています。これらのフィルターされたユーザーは黒い四角形内で強調表示されています。
図18. LDAP トラフィック内で姓名を検索したところ

デフォルトの Windows ホスト名

Windows 10 と Windows 11 のコンピューターのデフォルト ホスト名は、DESKTOP-で始まってランダムな 7 文字の英数字で終わる 15 文字の文字列です。

3 つめの pcap で Wireshark フィルター「ip contains "DESKTOP-"」を使ってこの識別子を検索してください。このフィルターは、平文の ASCII 文字列「DESKTOP-」を IP レイヤーまたはそれ以上のレイヤーのトラフィックから検索します。たとえばこの検索は、この文字列が SMB や Kerberos のアクティビティなどの TCP を使うトラフィックに含まれている場合や、DNS や DHCP などの UDP を使うトラフィックに含まれている場合に見つけることができます。

このフィルターを適用したら、図 19 に示すように [Info] 列を確認してください。

画像 19 は、フィルターを「ip contains "DESKTOP-"」に設定した Wireshark のスクリーンショットです。黒い矢印は、トラフィックの中でデスクトップが見つかる行を強調表示しています。
図19. Windows 10 または Windows 11 のデフォルト ホスト名を検索する

この検索では大文字と小文字が区別され、この識別子も pcap では小文字の文字列で表示されます。

DESKTOP- という文字列を見つけるさらによい方法は、Wireshark フィルターをクリアし、Wireshark の [Edit (編集)] メニューにある [Find Packet (パケットの検索)] 機能を使う方法です (図 20)。

画像 20 は、Wireshark の [Edit (編集)] メニューのスクリーンショットです。[Find Packet (パケットの検索)] が選択されています。
図 20. Wireshark の [Find Packet (パケットの検索)] 機能を使う
これにより、[表示フィルタ] ツールバーのすぐ下に Wireshark の検索パネルが表示されます。検索オプションとして「Packet Details (パケット詳細)」と「String (文字列)」を検索オプションとして選択し、「desktop-」を検索文字列として入力します。その例は図 21 を参照してください。

画像 21 は、パケットの詳細を示す Wireshark のスクリーンショットです。赤い矢印が 2 つ、それぞれ [Packet details (パケット詳細)] ドロップダウン メニューと [String (文字列)] ドロップダウン メニューを示しています。黒い矢印は [Find (検索)] ボタンを指しています。検索パネルで指定されている文字列は「desktop-」です。パケット詳細部では、赤い矢印が [Queries (クエリ)] 以下の行を指していて、この行に「DESKTOP」を含む行が示されています。
図21. 「desktop-」という文字列をパケット詳細部から見つける
検索パネルの [Find (検索)] ボタンをクリックするつど、図 21 に示したように、パケット詳細部でその文字列がハイライト表示されます。

結論

感染ホストの調査において、ネットワーク トラフィックからホストとユーザーを正しく識別することは不可欠です。本チュートリアルの方法を使えば、Wireshark を活用して影響を受けたホストやユーザーを特定できるようになります。

本シリーズの次回のチュートリアルでは、pcap からオブジェクトをエクスポートする方法を取り上げます。

追加リソース

Enlarged Image