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)。
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)。
DHCPトラフィックを確認すればこの IP アドレスを使っているホスト名がわかる場合があります。そのためには、まず Wireshark の [表示フィルタ] ツールバーに「dhcp」と入力し、DHCP トラフィックをフィルタリングします (図 3)。
表示された結果から、[Info] 列に「DHCP Request」と表示されている最初のフレーム (行) を選択してください。図 4 を参考に、[パケット詳細部] に移動し、「Dynamic Host Configuration Protocol (Request)」の行をクリックして展開してください。
[パケット詳細部] を下にスクロールして、Option: (50) Requested IP Address と Option: (12) Host Name という行を図 5 に示すように展開してください。これで、MAC アドレス f8:ff:c2:04:a5:7b をもつクライアントのホスト名は jeremiahs-MBP で、DHCP リクエストを出した IP アドレスが 172.16.1[.]38 であることが確認できます。
デフォルトでは 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 が確認できます。
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)。
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 経由で接続しています。
図 9 を参考に、HTTP GET リクエストをどれか 1 つ選び、outdoornebraska[.]gov の TCP ストリームを追跡してください。
この TCP ストリームには、図 10 に示す User-Agent 行を含む HTTP リクエスト ヘッダーが含まれています。この User-Agent 行は、2023 年 3 月 10 日に Windows 11 ホストから Microsoft Edge Web ブラウザーのバージョン 110.0.1587.69 で生成したものです。
図 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 が識別子として使われます。
Google Chrome や Microsoft Edge などの Chromium ベースの Web ブラウザーが生成する User-Agent 行には Safari や AppleWebKit という文字列が含まれます。これはおそらく、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)。
このアクティビティは Google Pixel Android スマートフォンでキャプチャしたもので、www.pcapworkshop[.]net 宛の Web トラフィックは Android スマートフォンやタブレット向けの Google Chrome ブラウザーを使って生成したものです。この Web トラフィックの TCP ストリームを以下の図 13 に示します。ここでは、デバイスとブラウザーを識別する User-Agent 行を強調表示しています。
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 ストリームを追跡してください。
このアクティビティは iOS 16.4.1 を実行している Apple iPhone でキャプチャしたもので、www.pcapworkshop[.]net 宛の Web トラフィックは Apple の Safari モバイル Web ブラウザーを使って 2023 年 4 月 10 日に生成したものです。この Web トラフィックの TCP ストリームを以下の図 15 に示します。ここでは、デバイスと OS バージョンを識別する User-Agent 行を強調表示しています。
いまは 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 (列として適用)] をクリックします。
これにより、「CNameString」という名前の新しい列が作成されます。列を作成した後、パケット一覧部で最後のフレームまで下方向にスクロールします。すると、172.16.1[.]16 で実行されているドメイン コントローラーと 172.16.1[.]141 で実行されている Windows クライアントとのトラフィックから、CNameString の列に、アカウント名「rene.mccollum」が見つかるはずです (図 17)。
Kerberos トラフィックのほか、Lightweight Directory Access Protocol (LDAP) トラフィックでもユーザーの姓名などの識別子が見つかることがあります。これには次のWiresharkフィルターを使用します。
ldap contains "CN=Users"
これにより [Info] 列に「"CN=Rene McCollum」という文字列が表示されるはずです (図 18)。
デフォルトの 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] 列を確認してください。
この検索では大文字と小文字が区別され、この識別子も pcap では小文字の文字列で表示されます。
DESKTOP- という文字列を見つけるさらによい方法は、Wireshark フィルターをクリアし、Wireshark の [Edit (編集)] メニューにある [Find Packet (パケットの検索)] 機能を使う方法です (図 20)。
これにより、[表示フィルタ] ツールバーのすぐ下に Wireshark の検索パネルが表示されます。検索オプションとして「Packet Details (パケット詳細)」と「String (文字列)」を検索オプションとして選択し、「desktop-」を検索文字列として入力します。その例は図 21 を参照してください。
検索パネルの [Find (検索)] ボタンをクリックするつど、図 21 に示したように、パケット詳細部でその文字列がハイライト表示されます。
結論
感染ホストの調査において、ネットワーク トラフィックからホストとユーザーを正しく識別することは不可欠です。本チュートリアルの方法を使えば、Wireshark を活用して影響を受けたホストやユーザーを特定できるようになります。
本シリーズの次回のチュートリアルでは、pcap からオブジェクトをエクスポートする方法を取り上げます。
追加リソース
- Wireshark によるパケット解析講座 1: Wiresharkの表示列をカスタマイズする – パロアルトネットワークス Unit 42
- Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定 – パロアルトネットワークス Unit 42
- Wireshark によるパケット解析講座 4: Pcapからのオブジェクトのエクスポート – パロアルトネットワークス Unit 42
- Wireshark によるパケット解析講座 8:HTTPSトラフィックの復号 – パロアルトネットワークス Unit 42
- Wireshark チュートリアル: Wireshark ワークショップビデオシリーズを公開 – パロアルトネットワークス Unit 42
- Wireshark によるパケット解析講座および WireShark クイズの全リスト – パロアルトネットワークス Unit 42