Unit 42 Wireshark クイズ 2023年3月: 解答編 − Goziを追え

By

Category: Tutorial

Tags: , , , , ,

A pictorial representation of Wireshark traffic including Gozi.

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

概要

2023年3月のUnit 42 Wiresharkのクイズは2023年3月6日に報告されたGozi(ISFB/Ursnif)のアクティビティにもとづくシナリオを作りました。本クイズに答えることで、パケット解析の経験を積み、Goziの感染後トラフィックの特定を体験できます。

本稿はクイズの解答編です。本クイズは、Active Directory(AD)環境で疑わしいネットワーク アクティビティの調査やネットワーク トラフィックのパケット キャプチャ(pcap)の確認を行っておられるセキュリティ専門家を読者として想定していますが、どなたでもご参加いただけます。Wiresharkにある程度なじみがあり、基本的なネットワーク トラフィックの概念を理解している読者のみなさんにとって、もっとも効果的な内容となっています。

問題を先にご覧になりたいかたはこちらの問題編をご覧ください。

パロアルトネットワークスのお客様は、WildFire高度な脅威防御などのクラウド型セキュリティサービスを有効にした次世代ファイアウォールCortex XDRによりGoziをはじめとするマルウェアからの保護を受けています。

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

目次

シナリオ / 前提条件 / 教材
問題
解答
Pcap解析: 被害者の詳細
Pcapの解析: 初期Zipアーカイブ
Pcapの解析: SMB経由のファイル転送
Pcapの解析: Gozi感染後のトラフィック
結論
IoC
追加リソース

シナリオ / 前提条件 / 教材

この感染は2023年3月6日に報告されたGozi(ISFB/Ursnif)のアクティビティにもとづいています。今月のWiresharkクイズのpcapは、ある企業ネットワークを模したActive Directory環境で取得した実際のトラフィックを含んでいます。このpcapに含まれるローカル エリア ネットワーク (LAN) の詳細は以下の通りです。

  • LANセグメントの範囲: 172.16.1[.]0/24 (172.16.1[.]1から172.16.1[.]255)
  • ドメイン: pcapworkshop[.]net
  • ドメイン コントローラーのIPアドレス: 172.16.1[.]16
  • ドメイン コントローラーのホスト名: PCAPWORKSHOP-DC
  • LANセグメントのゲートウェイ: 172.16.1[.]1
  • LANセグメントのブロードキャスト アドレス: 172.16.1[.]255

今月のクイズの調査にはWiresharkが必要です。本稿では最近のバージョンのWireSharkを使っていますが古くても3.x以降の利用をお勧めします。

本稿はネットワーク トラフィックに関する基礎的な知識をお持ちの方を読者として想定しています。なお、Webトラフィックを分析しやすいよう、Wiresharkの表示設定をあらかじめカスタマイズしておくことをお勧めします。その方法については、こちらのチュートリアルやビデオの一覧でご確認ください。毎度のことですが、Windowsベースの悪意のあるトラフィックの分析には、BSD、Linux、macOSなど、Windows以外の環境の利用をお勧めします。

問題のpcapはこちらのGitHubリポジトリから入手してください。ZIPアーカイブをダウンロードしたらpcapを展開してください。展開用パスワードは「infected」です。

問題

今月のGoziによる感染のWiresharkクイズは、こちらの2023年3月分のWiresharkクイズで説明した以下の質問に答えるというものでした。

  • 感染したWindowsクライアントのIPアドレス、ホスト名、Windowsユーザーアカウント名
  • 感染したWindowsホストからダウンロードされたZipアーカイブのURLとSHA-256ハッシュ
  • 今回のGozi感染による指標とUnit 42が報告した2023年3月6日のGozi感染による指標との間に何か顕著な違いはあるか

解答

今月のWiresharkクイズの解答は以下の通りです。

  • 感染したWindowsクライアントのIPアドレス: 172.16.1[.]137
  • 感染したWindowsクライアントのホスト名: DESKTOP-3GJL3PV
  • 感染したWindowsクライアントのユーザーアカウント名: sherita.kolb
  • ZipアーカイブのURL: hxxp://unapromo[.]com/mise/Cliente.zip
  • ZipアーカイブのSHA-256ハッシュ: 33db5b2a2cc592fd10c65ba38396e4c7574ad78e786d78e8a3acdc93a90c3209
  • 初期Zipアーカイブのダウンロード時のURLとファイルが違う。そのほかにはこのGozi感染と以前報告されたGozi感染との間に目立った指標上の違いはない

Pcap解析: 被害者の詳細

ここではこちらのチュートリアルやワークショップのビデオに従ってWiresharkをカスタマイズしていることを前提に解析します。

まずは被害者の詳細を特定しましょう。

今回のpcapに登場するクライアントの内部非ルーティングIPアドレスは172.16.1[.]137です。これを確認するには、Wiresharkチュートリアル ブログ(『Wireshark によるパケット解析講座2: 脅威インテリジェンス調査に役立つフィルタリング設定』)で解説した「basic」のフィルターを使用するか、Wiresharkの[Filter (フィルタ)]ツールバーに以下を入力してください。

(http.request or tls.handshake.type eq 1) and !(ssdp)

[Packet List (パケット一覧)]ペインに表示される結果から接続元IP (Source IP)アドレスが172.16.1[.]137であることがわかります(図1)。

図1はWiresharkのスクリーンショットです。ここではWebトラフィックをフィルタリングした後の接続元IPアドレスの列(Src)と接続元MACアドレスをハイライト表示しています。
図1. Webトラフィックをフィルタリングして被害者のIPアドレスを特定したところ

通常はNetwork Basic Input/Output System (NetBIOS)、Name Service (NBNS)のトラフィックから被害者のホスト名を特定するのが手っ取り早いでしょう。そのためには、次のWiresharkフィルターを使用します。

nbns

Windows 10ないしWindows 11コンピューターではデフォルトのホスト名が15文字の文字列です。このデフォルト名はDESKTOP-で始まり、その後ろに7文字のASCII文字で構成される英数字の文字列が続きます。nbnsフィルターを使うと、[Packet List (パケット一覧)]ペインと[Packet Details (パケット詳細)]ペインでDESKTOP-3GJL3PVを見つけられます(図2)。

画像2はWiresharkのスクリーンショットで、NBNSトラフィック内のWindowsホスト名の特定のしかた(緑色でハイライト表示)を説明しています。
図2. NBNSトラフィック内でWindowsホスト名を見つけているところ

ユーザー ログイン時に生成されるKerberos認証トラフィックがpcapに含まれていれば、そこからWindowsユーザーアカウント名がわかることがあります。kerberos.CNameStringでフィルタリングして、[Packet List (パケット一覧)]ペインで結果を一番下までスクロールし、[Packet List (パケット一覧)]ペインの最終行あたりのいずれか1行を選択します。[Packet Details (パケット詳細)]ペイン内でKerberosの行を展開していきます。図3にしたがってsherita.kolbという値を持つCNameStringが見つかるまで値を展開してください。

画像3は、Wiresharkのスクリーンショットで、Kerberosトラフィックの中から被害者のWindowユーザー アカウント名を見つける方法を示しています。CNameString、検索バー、その他の詳細をハイライト表示しています。
図3. Kerberosトラフィックの中から被害者のWindowsユーザー アカウント名を見つけているところ

Wireshark によるパケット解析講座 3: ホストとユーザーを特定する』で説明したとおり、CNameStringの値を選んで右クリックし、コンテキスト メニューの[Apply as Column (列として適用)]を実行すると、Wiresharkの表示にCNameString列を表示させることができます。CNameStringを列として適用した結果を上の図3に示します。

Pcapの解析: 初期Zipアーカイブ

今回のGozi感染の攻撃チェーンは悪意のあるZIPアーカイブから始まります。そのURLは次のWiresharkフィルターを適用すると見つかります。

http.request.uri contains ".zip"

このフィルターでunapromo[.]com宛の/mise/Cliente.zipを要求するHTTP GETリクエストが見つかるはずです(下の図4参照)。

画像4は、TCPストリーム追跡オプションを選択後、URLを探すメニュー パスを示したWiresharkのスクリーンショットです。
図4. pcapのHTTPトラフィックから.zipで終わるURLを探しているところ

Wiresharkの[File (ファイル)]メニューから[Export Objects (オブジェクトをエクスポート)]、[HTTP]の順にクリックして、pcapからCliente.zipをエクスポートします(図5参照)。

画像5は、Wiresharkのスクリーンショットで、[File (ファイル)]メニューから[Export Objects (オブジェクトをエクスポート)]の順にクリックしてZipファイルをエクスポートする方法を示したものです。
図5. Wiresharkのオブジェクトのエクスポート機能を使ってunapromo[.]comが返したZipファイルをエクスポートしているところ
LinuxかmacOS環境であれば、エクスポートしたファイルのファイルの種別をターミナル ウィンドウとfileコマンドで簡単に確認できます。fileコマンドで確認するとCliente.zipはZipアーカイブであることがわかります(図6)。SHA256ハッシュをshasum -a 256コマンドで確認してください(図6)。

画像6は、Linuxのターミナルで、ファイルの種類とSHA-256ハッシュを確認する方法を示したスクリーンショットです。
図6. Linuxのターミナル ウィンドウでファイルの種類とSHA-256ハッシュを特定しているところ

Cliente.zipのSHA-256ハッシュは33db5b2a2cc592fd10c65ba38396e4c7574ad78e786d78e8a3acdc93a90c3209です。このZipアーカイブには、インターネット ショートカットが含まれています。インターネット ショートカットは.urlというファイル拡張子を持つテキストベース ファイルです。ターミナル ウィンドウでunzipコマンドを使ってCliente.zipからインターネット ショートカットを抽出し、lessで中身を見られます(図7、図8)。

画像7は、lessコマンドでzipファイルの中身を展開するようすを示したLinuxターミナルの画面です。
図7 Cliente.zipからインターネット ショートカットを抽出しlessコマンドで表示したところ
画像8は、インターネット ショートカット ファイルの中身を抽出するようすを示したLinuxターミナルのスクリーンショットです。
図8. インターネット ショート カットファイルの内容

URLはhttphttpsで始まることが多いですが、抽出したインターネット ショートカットはhttphttpsではなくfileで始まるURLが含まれています(図8)。このfileで始まるURLは、445/tcp経由のSMB (Server Message Block)プロトコルのトラフィックを生成します。Windowsホストの場合、このURLコンテンツにはWindows ファイル エクスプローラーでアクセスできます(図9)。

画像9は、ファイル エクスプローラーのスクリーンショットで、インターネット ショートカットの内容がserver.exeであることを示しています。
図9. Windowsのファイル エクスプローラーに表示されたインターネット ショートカット ファイルの内容

今月のpcapには、抽出したインターネット ショートカットが生成したserver.exeに対するSMBトラフィックが含まれています。次は、pcapからserver.exeを抽出できるかどうかやってみましょう。

Pcapの解析: SMB経由のファイル転送

私たちは2019年7月にpcapからオブジェクトをエクスポートするWiresharkチュートリアルを公開しました。このチュートリアルで、[File (ファイル)]メニューから[Export Objects (オブジェクトをエクスポート)]、[SMB]の順にクリックして、SMB トラフィックからオブジェクトをエクスポートしています。今回のpcapの46.8.19[.]32\mise\server.exeに対してこれを試してみてください(図10)。

画像10は、Wiresharkのスクリーンショットで、[File (ファイル)]メニューから[Export Objects (オブジェクトをエクスポート)]、[SMB]の順にクリックしてオブジェクトをエクスポートする方法を示したものです。
図10. pcapからSMBオブジェクトをエクスポート
[Export SMB object list (エクスポート SMB オブジェクト一覧)]ウィンドウには\\46.8.19[.]32\miseからのserver.exeに対する6つの項目が表示されます(図11)。[Content Type (コンテントタイプ)] 列を確認し、これら6つの項目のいずれかが「100%」になっているかどうかを確認ください。

画像11は、エクスポート対象のオブジェクトを示したWiresharkのスクリーンショットです。[Content Type (コンテントタイプ)]列の6つの項目をが赤い四角で強調表示しています。
図11 エクスポート対象オブジェクトの種類
残念ながら「100%」の項目がないのでこのデータは使えません。このpcapからserver.exeというSMBオブジェクトのいずれかをエクスポートしても、感染時に実際に転送されたファイルと同じ内容にはならないでしょう。転送されたファイルは、おそらくは以前Unit 42アカウントからツイートしたGoziのファイルと同じものと思われます。

Pcapの解析: Gozi感染後のトラフィック

Goziの感染後トラフィックはエンコードされたデータで構成されていて、その通信にはたいてい80/tcpと平文のHTTP GETリクエストとHTTP POSTリクエストが使われます。この特定の事例でGoziのC2(コマンド&コントロール)サーバーはドメインではなくIPアドレスを使っていました。

Wiresharkでhttp.requestをフィルタリングすれば、Goziの感染後トラフィックについてさらに詳しく知ることができます(図12)。

画像12はWiresharkのスクリーンショットです。HTTPトラフィックをフィルタリングしてGoziのC2アクティビティを確認しやすくする方法を示しています。http.requestというフィルターを緑色でハイライト表示しています。
図12. HTTPトラフィックをフィルタリングしてGoziのC2アクティビティを確認しやすくする

GoziのトラフィックはHTTP GETリクエストとHTTP POSTリクエストから構成されます。これらのリクエストには長いURLが指定されていて、URLにはBase64でエンコードされたテキストのほかにスラッシュ(/)やアンダースコア(_)が含まれています。C2サーバーとやりとりされるデータはエンコードないし暗号化されています。図13はGoziのC2トラフィックの初期HTTP GETリクエストの例です。

画像13はWiresharkのスクリーンショットで、初期トラフィックを表しています。赤の矢印でハイライトされている部分は、Base64でエンコードされた長いURLのテキストです。矢印でハイライトされているのは"Host"ヘッダーに示された、あるIPにホストされているサーバーです。ウィンドウの下の方にべつの矢印でハイライトされているのはエンコードされたデータです。
図13. pcapからのGoziの初期トラフィック

Goziはモジュールやプラグインを使ってさまざまな機能を実行します。たとえばWebブラウザーのキャッシュから被害者のパスワードを盗んだりします。これらのモジュールはエンコードないし暗号化されたバイナリとして送信されますが、これには比較的短いURLが使われ、その末尾は.rarで終わります。下に例をいくつかあげます。

  • GET /stilak32.rar
  • GET /stilak64.rar
  • GET /cook32.rar
  • GET /cook64.rar

これらの.rarで終わるURLとC2サーバーからのHTTPレスポンス ヘッダーから、返されたファイルが「Content-Type:application/x-rar-compressed」となっていることがわかります。ただしこれらのファイルは.rarアーカイブではなく、エンコードないし暗号化されたバイナリです。

GoziのC2 URLの全IPアドレスは以下のIoCセクションに記載します。

これらのURLは以前にUnit 42アカウントからツイートされたGozi亜種のものと同じパターンを踏襲しています。また、今月のWiresharkクイズに出てくるGoziのC2のIPアドレスはいずれも当該ツイートの技術情報で提供されたものです。初期感染ベクトルであるZipアーカイブのURLとファイル ハッシュだけが唯一目立った違いといえます。

結論

本稿は「Unit 42 Wiresharkクイズ 2023年3月」の解答編です。pcapからのトラフィックを確認し、Goziの感染にもとづいて問題編で出されたクイズに回答しました。

自社IT環境では完全なパケットキャプチャが手に入らないことも多いでしょう。このためセキュリティ専門家がネットワークトラフィックのレビュー経験を積めないこともあります。そうした場合は本稿のようなWiresharkクイズのトレーニング教材が役に立つでしょう。Pcapの解析は悪意のあるアクティビティへの理解を深めるのに役立つスキルです。

答えを掲載していない問題編のブログもあわせてご確認ください。

パロアルトネットワークスのお客様は、WildFire高度な脅威防御などのクラウド型セキュリティサービスを有効にした次世代ファイアウォールCortex XDRによりGoziやそれに類するマルウェアからの保護を受けています。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.comまで電子メールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • 欧州: +31.20.299.3130
  • アジア太平洋: +65.6983.8730
  • 日本: +81.50.1790.0200

IoC

pcapに含まれるマルウェアのSHA-256ハッシュ:

  • 33db5b2a2cc592fd10c65ba38396e4c7574ad78e786d78e8a3acdc93a90c3209 Cliente.zip
  • 340a759b1c1cdc22f6fac84044d072475e1630fbb7f47d96c4e18413de34d570 Cliente.url

pcapに含まれるGoziのC2トラフィック:

  • hxxp://unapromo[.]com/mise/Cliente.zip
  • hxxp://62.173.140[.]103/drew/[long base64 string with backslashes and underscores].jlk
  • hxxp://62.173.138[.]138/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://62.173.138[.]138/drew/[long base64 string with backslashes and underscores].bmp
  • hxxp://62.173.149[.]243/stilak32.rar
  • hxxp://62.173.149[.]243/stilak64.rar
  • hxxp://62.173.149[.]243/cook32.rar
  • hxxp://62.173.149[.]243/cook64.rar
  • hxxp://62.173.140[.]94/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://31.41.44[.]60/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://46.8.19[.]233/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://5.44.45[.]201/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://89.116[.]236.41/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://62.173.140[.]76/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://31.41.44[.]49/drew/[long base64 string with backslashes and underscores].gif
  • hxxp://46.8.19[.]86/drew/[long base64 string with backslashes and underscores].gif

追加リソース