Wireshark によるパケット解析講座 3: ホストとユーザーを特定する / Wireshark Tutorial: Identifying Hosts and Users

Wireshark Tutorial: Identifying Hosts and Users

ホストが感染した、または侵害されたとき、セキュリティ専門家は、疑わしいネットワークトラフィックのパケットキャプチャ(pcaps)を手早く確認して影響を受けるホストやユーザーを特定しなければなりません。

本チュートリアルでは、広く使用されているネットワークプロトコル分析ツールWiresharkを使用し、そのpcapデータを収集する方法のヒントを提供します。なお、本稿ではネットワークトラフィックの基本を理解していることが前提となります。またこちらのpcaps データを使いますのでダウンロードして圧縮ファイルを解凍しておいてください。解凍用のパスワードは「infected」です。このデータには、IPv4で次の4種類のデータを取得するトラフィックが含まれています。

  • DHCPトラフィックからのホスト情報
  • NetBIOSネームサービス(NBNS)トラフィックからのホスト情報
  • HTTPトラフィックからのデバイスモデルとオペレーティングシステム
  • KerberosトラフィックからのWindowsユーザーアカウント


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

ネットワーク内でトラフィックを生成するホストには3つの識別子が必要です。 それはMacアドレス、 IPアドレス、そしてホスト名です。

ほとんどの場合、疑わしい活動に対する警告はIPアドレスに基づいています。ネットワークトラフィックの完全なパケットキャプチャにアクセスできる環境であれば、内部ネットワークのIPアドレスをもつホスト上でpcapを取得することで、関連付けられたMACアドレスとホスト名を確認できます。

では、こうしたホスト情報をWiresharkでどのように見つければよいのでしょうか。それには2種類のアクティビティをフィルタリングします。つまりDHCPかNBNSです。DHCPトラフィックは、ネットワークに接続されているほとんどすべての種類のコンピュータのホストを識別するのに役立ちます。NBNSトラフィックは、主にMicrosoft Windowsを実行しているコンピュータまたはMacOSを実行しているAppleホストによって生成されます。

まだダウンロード・解凍していないかたは、このチュートリアルの最初のpcapファイルhost-and-user-ID-pcap-01.pcapここバックアップ)からダウンロードして開いてください。パスワードは「infected」です。このpcapでは、172.16.1[.]207という内部IPアドレスをもつホストについて調べていきます。まず、このファイルをWiresharkでを開き、下図のように表示フィルタに「bootp」(※1)を指定してフィルタリングしてください。これは、DHCPトラフィックを表示するフィルタ設定です。

※1:Wireshark 3.0以降のバージョンではこのフィルタに「DHCP」を指定してください。「bootp」は将来的に廃止予定です。


[Info]列に「DHCP Request」と表示されているフレームをどれか1つ選択してください。下図を参考に、フレームの詳細部に移動し、「Bootstrap Protocol (Request)」の行をクリックして展開してください。


つづいて、下図を参考に「Client Identifier」、「Host Name」の各行を順にクリックして展開してください。これで「Client Identifier」の詳細から172.16.1[.]207に割り当てられたMACアドレスが、「Host Name」の詳細からホスト名がそれぞれ確認できます。


このケースでは172.16.1[.]207のホスト名はRogers-iPadでMACアドレスは7c:6d:62:d2:e3:4fです。このMACアドレスはApple社に割り当てられたものです(訳注: WireSharkのPreferencesでMacアドレスの名前解決を有効に設定している場合、上図のようにMACアドレス先頭にベンダ名が表示されます。ここにベンダ名が表示されていない場合は、Wireshark の Preferences メニューの Name Resolution で Resolve MAC addresses のチェックボックスにチェックを入れて有効にします)。ホスト名からこのデバイスはおそらくiPadであるものと類推できますが、ホスト名だけでは確実とはいえません。

ただしホスト名とMACアドレスを使うことで、下図に示すように、EthernetフレームのMACアドレスとIPアドレスを172.16.1[.]207とを簡単に関連付けることができます。


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

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

ここで、チュートリアルの2つ目のpcapファイル host-and-user-ID-pcap-02.pcapを開いてください。まだダウンロード、解凍をしていない場合はここ(バックアップ)にあります。解凍パスワードは「infected」です。このpcapは、10.2.4[.]101の内部IPアドレスを使用しているWindowsホストからのものです。Wiresharkでpcapを開き、表示フィルタに「nbns」を指定してください。これにより、NBNSトラフィックが確認できるようになります。最初のフレームを選択すると、図5に示すように、IPアドレスとMACアドレスおよびホスト名をすばやく関連付けることができます。


フレームの詳細部には、下図に示すように、IPアドレスに割り当てられたホスト名も表示されます。


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

HTTPトラフィックのヘッダにあるUser-agent文字列からオペレーティングシステムを確認できることがあります。HTTPトラフィックがAndroidデバイスからのものであれば、デバイスの製造元とモデルも判断できます。

ここで、チュートリアルの3つ目のpcaphost-and-user-ID-pcap-03.pcapを開いてください。まだダウンロード・解凍していないかたは、ここバックアップ)からダウンロードして開いてください。パスワードは「infected」です。このpcapは、192.168.1[.]97の内部IPアドレスを使用しているWindowsホストからのものです。Wiresharkでpcapを開き、表示フィルタに「http.request and !(ssdp)」を指定してください。表示されたフレームのうち、2つ目のフレームをクリックして選択してください。これはwww.ucla[.]eduへの最初のHTTPリクエストです。 その状態で、下図に示すように、右クリックして表示されたコンテキストメニューから [追跡]、[TCPストリーム]の順にクリックしてください(訳注: なぜHTTPストリームではなくTCPストリームを選ぶのか疑問に思われるかたがいらっしゃるかもしれません。このチュートリアルではHTTPリクエストのヘッダ行だけを目的としており、HTTPボディは確認しません。このため[追跡]で[TCPストリーム]を選択しても[HTTPストリーム]を選択しても得られる情報に違いがありません。HTTPボディも確認したい場合は、TCPストリームのかわりにHTTPストリームを選択するとよいでしょう)。


このTCPストリームには、下図に示すようにHTTPリクエストヘッダがあります。このUser-Agent行は、64ビット版 Microsoft Windows 7オペレーティングシステム上で動作するGoogle Chrome webブラウザのバージョン72.0.3626.81を表しています。


上図のUser-Agent行には「(Windows NT 6.1; Win64; x 64)」という文字列があることに着目してください。

ここで「Windows NT 6.1」は、Windows 7を表しています。User-Agent行におけるWindows NTの文字列は、次に示すバージョンのMicrosoft Windowsと対応しています。

  • 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ホストからのHTTPベースのWeb閲覧トラフィックが含まれていればオペレーティングシステムとブラウザを特定できます。Androidデバイスでも同様のトラフィックがあればデバイスのブランド名やモデルを確認することができます。

では次に、チュートリアルの4つ目のpcap host-and-user-ID-pcap-04.pcapを開いてください。 まだダウンロード・解凍していないかたは、ここバックアップ)からダウンロードして開いてください。パスワードは「infected」です。このpcapは、172.16.4.119の内部IPアドレスを使用しているAndroidホストからのものです。Wiresharkでpcapを開き、表示フィルタにhttp.requestを指定してください。2つ目のフレームを選択します。これは、 www.google[.]com/blank.htmlを要求するHTTPリクエストです(訳注: WireSharkのパケット一覧部にこのHost列が表示されていない場合は、2つ目のフレームを選択後、パケット詳細部で「Hyper Transfer Protocol」行を展開し、「Host: www.google[.]com\r\n」行を選択した後、右クリックし、表示されたコンテキストメニューから[列として適用]をクリックしてください)。

次に、下図に示すように右クリックして表示されたコンテキストメニューから [追跡]、[TCPストリーム]の順にクリックしてください。



上図のUser-Agent行から、Android 7.1.2という2017年4月にリリースされた古いAndroidオペレーティングシステムであることが分かります。LM-X210APM はこのAndroidデバイスに割り当てられたモデルナンバーです。Google検索をしてみると、このモデルが LG Phoenix 4 Android スマートフォンであることが分かります。

これがiPhoneそのほかのApple社製モバイル機器からのHTTPトラフィックのUser-Agent行である場合、オペレーティングシステムやデバイスの種類が分かります。ただしモデルは分かりません。そのApple社製デバイスがiPhone、iPad、iPodのいずれであるかだけが判別できます。では次にiPhoneからのトラフィックを判別してみましょう。

このチュートリアルの5つ目のpcap host-and-user-ID-pcap-05.pcapを開いてください。まだダウンロード・解凍していないかたは、ここバックアップ)からダウンロードして開いてください。パスワードは「infected」です。このpcapは、10.0.0[.]114の内部IPアドレスを使用しているiPhoneホストからのものです。Wiresharkでpcapを開き、表示フィルタにhttp.requestを指定してください。次に、フレーム番号443のHTTPリクエストのフレームを選択してください。これはweb.mta[.]infoへのHTTPリクエストです(訳注: WireSharkのパケット一覧部にHost列が表示されていない場合は、フレーム番号443を選択した後、パケット詳細部で「Hyper Transfer Protocol」行を展開し、「Host: web.mta[.]info\r\n」行を選択した後、右クリックし、表示されたコンテキストメニューから[列として適用]をクリックしてください)。次に、下図に示すように右クリックして表示されたコンテキストメニューから [追跡]、[TCPストリーム]の順にクリックしてください。


下図でUser-Agent行は(iPhone; CPU iPhone OS 12_1_3 like Mac OS X)になっています。これで、このApple社製デバイスがiPhoneであり、iOS 12.1.3を実行していることが分かりました。


HTTPトラフィックとUser-Agent文字列について最後に付け加えるなら「すべてのHTTPアクティビティがWeb閲覧トラフィックであるとは限らない」ということです。HTTPリクエストのなかには、ブラウザやオペレーティングシステムを明らかにしないものもあります。トラフィックを検索してホストを識別するためには、複数のHTTPリクエストを確認してから、目的のWebブラウザのトラフィックを見つける必要があるかもしれません。

なお、今日では多くのWebサイトがHTTPSを使用していることからHTTPによるホスト識別が困難な場合があります。HTTPヘッダやHTTPコンテンツはHTTPSトラフィックの場合暗号化されているため表示できません。ですが、運よく調査中にHTTPでWebを閲覧したトラフィックを見つけることができれば、この方法でホストに関する詳細情報を得ることができます。

KerberosトラフィックからのWindowsユーザーアカウント

Active Directory(AD)環境のWindowsホストの場合、Kerberosトラフィックからユーザーアカウント名を見つけることができます。

このチュートリアルの6つ目のpcap host-and-user-ID-pcap-06.pcapを開いてください。まだダウンロード・解凍していないかたは、ここバックアップ)からダウンロードして開いてください。パスワードは「infected」です。このpcapは、次のActive Directory環境にあるWindowsホストからのものです。

  • ドメイン: happycraft[.]org
  • ネットワークセグメント: 172.16.8.0/24 (172.16.8[.]0 – 172.16.8[.]255)
  • ドメインコントローラのIPアドレス: 172.16.8[.]8
  • ドメインコントローラのホスト名: Happycraft-DC
  • 同セグメントのゲートウェイ: 172.16.8[.]1
  • ブロードキャストアドレス: 172.16.8[.]255
  • Windowsクライアント: 172.16.8[.]201

Wiresharkでpcapを開き、表示フィルタに「kerberos.CNameString」を指定してください。次に、最初のフレームを選択します。フレームの詳細部に移動して、下図に示すとおりに行を展開します。「CNameString: johnson-pc$」という行を選択して右クリックし、表示されるコンテキストメニューで[列として適用]をクリックします。


これにより、パケット一覧部に「CNameString」という新しい列が作成されます。列を作成した後、列表示の最後のフレームまでスクロールダウンします。すると、アカウント名「theresa.johnson」が、172.16.8[.]8で実行されているドメインコントローラと172.16.8[.]201で実行されているWindowsクライアントのトラフィック内に見つかるはずです(下図参照)。


ホスト名のCNameString値は常に末尾が$(ドル記号)になっていますが、ユーザーアカウント名にはこのドル記号はついていません。ユーザーアカウント名をフィルタリングするには、次のWireshark式を使用して、ドル記号付きのCNameStringの結果を除外します。