本ブログは米国で2019年03月29日に公開されたUnit 42ブログ「Using Wireshark: Identifying Hosts and Users」の日本語翻訳です。

 

Tutorial Splash Image

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

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

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


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

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

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

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

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

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

図1:WiresharkでのDHCPトラフィックのフィルタリング

[Info]列に「DHCP Request」と表示されているフレームをどれか1つ選択してください。図2を参考に、フレームの詳細部に移動し、「Bootstrap Protocol (Request)」の行をクリックして展開してください。つづいて、図3を参考に「Client Identifier」、「Host Name」の各行を順にクリックして展開してください。これで「Client Identifier」の詳細から172.16.1[.]207に割り当てられたMACアドレスが、「Host Name」の詳細からホスト名がそれぞれ確認できます。

図2:DHCP Request行の「Bootstrap Protocol」行を展開する

図3:DHCP Request内でMACアドレスとホスト名を見つける

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

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

図4:MACアドレスと任意のフレームのIPアドレスとの関連付け


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アドレスおよびホスト名をすばやく関連付けることができます。

図5:NBNSトラフィックを使用したホスト名とIPおよびMACアドレスの関連付け

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

図6:IPアドレスに割り当てられたホスト名を示すNBNSトラフィックのフレーム詳細


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リクエストです。 その状態で、図7に示すように、右クリックして表示されたコンテキストメニューから [追跡]、[TCPストリーム]の順にクリックしてください(訳注: 読者のなかには、なぜHTTPストリームではなくTCPストリームを選ぶのか疑問に思われるかたがいらっしゃるかもしれません。このチュートリアルではHTTPリクエストのヘッダ行だけを目的としており、HTTPボディは確認しません。このため[追跡]で[TCPストリーム]を選択しても[HTTPストリーム]を選択しても得られる情報に違いがありません。HTTPボディも確認したい場合は、TCPストリームのかわりにHTTPストリームを選択するとよいでしょう)。

図7:3つ目のpcapファイルを開き、HTTPリクエストについてTCPストリームを追跡する

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

図8:Google Chromeを使用している64ビット版 Microsoft Windows 7オペレーティングシステムのUser-Agent行

図8の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」行を選択した後、右クリックし、表示されたコンテキストメニューから[列として適用]をクリックしてください)。次に、図11に示すように右クリックして表示されたコンテキストメニューから [追跡]、[TCPストリーム]の順にクリックしてください。図9に示すように、選択したフレームを右クリックしてコンテキストメニューを開き、[追跡]、[TCPストリーム] の順にクリックしてください。

図9:4つ目のpcapファイルを開き、HTTPリクエストについてTCPストリームを追跡する

図10:Google Chromeを使用しているAndroidホストのUser-Agent行

図10の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」行を選択した後、右クリックし、表示されたコンテキストメニューから[列として適用]をクリックしてください)。次に、図11に示すように右クリックして表示されたコンテキストメニューから [追跡]、[TCPストリーム]の順にクリックしてください。

図11:5つ目のpcapファイルを開き、HTTPリクエストについてTCPストリームを追跡する

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

図12:Safariを使用しているiPhoneのUser-Agent行

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

図13:CNameString値を見つけ、列として適用する

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

図14:Windowsユーザーアカウント名を探す

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

kerberos.CNameString and !(kerberos.CNameString contains $)

まとめ

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

Wiresharkの使用方法については、以前のチュートリアルも参考にしてください。