Wireshark によるパケット解析講座10: Emotet 感染トラフィックの調査

By

Category: Unit 42

Tags: , , , ,

Wireshark Tutorial

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

概要

本シリーズは、疑わしいネットワークアクティビティの調査やネットワークトラフィックのパケットキャプチャ(pcap)の確認を業務で行っておられるセキュリティ専門家を読者として想定しています。このため本稿での手順説明は読者の皆さんがWiresharkの使いかたをご存知であることを前提としています。また、本稿にて利用するWiresharkのバージョンは主に3.xとなります。

Emotetは情報窃取型のマルウェア (インフォスティーラ) で、バンキングマルウェアとして2014年に最初に報告されました。それ以来、ドロッパなどの機能を追加して進化をかさね、GootkitIcedIDQakbotTrickbotなど、ほかのマルウェアファミリを配布するようになってきています。

今回のパケット解析講座では、Emotetのアクティビティを確認し、トラフィック分析から本マルウェアを特定するのに役立つヒントを提供していきます。

注意: 本チュートリアルは、以前の『Wireshark によるパケット解析講座1: Wiresharkの表示列をカスタマイズする』で設定したカスタマイズ済みの列表示を使います。また、本チュートリアルで使うpcapファイルの入ったZIPアーカイブを格納しているGithubリポジトリからサンプルファイルをあらかじめ取得しておいてください。解凍用パスワードは「infected」です。

注意: 本稿のチュートリアルに利用するpcapファイルはWindowsで動作するマルウェアを含んでいます。したがって、Windowsコンピュータを使っている場合感染リスクがあります。できるかぎり BSD系、Linux系、macOSなど、Windows環境以外の環境でpcapファイルを確認することをお勧めします。

Emotetによる感染イベント チェーン

Emotetのネットワークトラフィックを理解するには、感染につながる一連のイベントを理解しておく必要があります。Emotetはたいてい悪意のあるスパム(マルスパム)を介して配布されており、脆弱なWindowsホストに感染するように設計されたマクロを含むMicrosoft Wordドキュメントがその感染チェーンの重要ステップとなっています。

ここに示したWord文書は、2021年1月にEmotet感染を引き起こすのに使用されたものです。スクリーンショットのメッセージに注意してください「This document is protected. (このドキュメントは保護されています。)Previewing is not available for protected documents. (保護されたドキュメントではプレビューを利用できません。)You have to press "ENABLE EDITING" and "ENABLE CONTENT" buttons to preview this document. (このドキュメントをプレビューするには、[ENABLE EDITING (編集を有効にする)]ボタンと[ENABLE CONTENT (コンテンツを有効にする)]ボタンを押す必要があります。)
図1 2021年1月にEmotet感染を引き起こすために使用されたWord文書のスクリーンショット。

Emotetを拡散させるマルスパムはさまざまな手法でこれらWordドキュメントを配布します。

マルスパムには、添付ファイルとしてMicrosoft Word文書が含まれている場合もあれば、Word文書を含む添付ZIPアーカイブが含まれている場合もあります。ここ数ヶ月では、これらZIPアーカイブがパスワードで保護されている例が複数観測されています。Emotetを配布する電子メールのなかには、添付ファイルがないものもあり、その場合かわりにWord文書をダウンロードするリンクが含まれています。

過去数年間、Emotetをプッシュするマルスパムは、これらのEmotet Wordドキュメントを配信する目的で、リンクを埋め込んだPDF添付ファイルも使用していました。

図2にこれら4つの配布手法を示します。

Emotet による Wordドキュメントの配布経路。1)Wordドキュメントが添付されたマルスパム。 2)WordドキュメントのZIPアーカイブが添付されたマルスパム。 3)WordドキュメントをダウンロードするWebトラフィックへのリンクを含むマルスパム。 4)WordドキュメントをダウンロードするWebトラフィックを含めたPDFファイル添付したマルスパム。
図2 Emotet用Wordドキュメントのさまざまな配布経路

Word文書の配信後、被害者が文書を開き、脆弱なWindowsホスト上でマクロを有効にした場合、そのコンピュータはEmotetに感染します。

トラフィックの観点でみると、Emotet用WordドキュメントからEmotet感染へいたるステップは次のようなものであることが確認されています。

  • 初期バイナリを取得するWebトラフィック
  • HTTPによるエンコードないし暗号化されたコマンド&コントロール(C2)トラフィック
  • Emotetがフォローアップマルウェアをドロップしてくる場合は追加の感染トラフィック
  • Emotetが感染ホストをスパムボットとして使用する場合はSMTPトラフィック

図3はEmotetへの感染で検出されることのあるネットワークアクティビティをフローチャートにしたものです。

Emotet感染フローチャート: Wordドキュメント → マクロの有効化 → 初期バイナリを要求するWebトラフィック。そこから、HTTPによるエンコードされたC2トラフィック。ここが感染フローチャートでのハブとなって、この後のフォローアップマルウェア、スパムボットアクティビティ、データ漏出、バイナリの更新につながる可能性がある
図3 Emotetの感染フローチャート

2020年12月21日以降、Emotetの初期バイナリはWindowsDLLファイルでした。それ以前のバイナリはWindows 実行可能ファイル (EXE) でした。

EmotetのC2トラフィックは、HTTPを介して送信されるエンコードないし暗号化されたデータで構成されています。このC2アクティビティはHTTPトラフィックに関連付けられた標準・非標準のTCPポートを使うことがあります。このC2アクティビティはこのほか、データ漏出や、初期Emotetバイナリ更新のためのトラフィックで構成されていることもあります。

Emotetはマルウェアドロッパでもあるので、被害者は他のマルウェアにも感染する可能性があります。アナリストは、Emotet感染ホストからのトラフィックを調査するにあたり、他のマルウェアからのトラフィックについても検索すべきです。

最後に、Emotet感染ホストは、25/tcp、465/tcp、587/tcpなどのSMTPに関連付けられたTCPポートを介し、大量のトラフィックを生成するスパムボットになる可能性もあります。

Emotetの感染アクティビティを含むPcapファイル

最近のEmotet感染トラフィックのpcapを含む5つのパスワード付きZIPアーカイブ(パスワードは「infected」)をこちらのGitHubリポジトリから取得してください。Githubページに移動して、ZIPアーカイブのエントリをクリックし、図4と図5に示す手順でダウンロードします。

The screenshot shows how to download ZIP archives used for this Wireshark tutorial from the GitHub repository.
図4 このチュートリアルで使用するZIPアーカイブへのリンクを含むGitHubリポジトリ
The screenshot shows where to click to download one of the ZIP archives used for this Wireshark Tutorial on analyzing Emotet infection traffic.
図5 本講座のZIPアーカイブを1つダウンロードしているところ

本ZIPアーカイブファイルを解凍するパスワードは「infected」です。展開すると次の5つのpcapファイルが作成されます。

  • Example-1-2021-01-06-Emotet-infection.pcap
  • Example-2-2021-01-05-Emotet-with-spambot-traffic-part-1.pcap
  • Example-3-2021-01-05-Emotet-with-spambot-traffic-part-2.pcap
  • Example-4-2021-01-05-Emotet-infection-with-Trickbot.pcap
  • Example-5-2020-08-18-Emotet-infection-with-Qakbot.pcap

例1: Emotet感染トラフィック

Example-1-2021-01-06-Emotet-infection.pcapを開いたら、『Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定』のチュートリアルで解説した「basic」の web 用フィルタを適用します。Wireshark 3.xでのbasicフィルタは次のとおりです。

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

シリーズ初回の『Wireshark によるパケット解析講座 1: Wiresharkの表示列をカスタマイズする』に従ってWiresharkを設定すると、図6のような表示となります。

図6 本チュートリアル1つ目のpcapをWiresharkでフィルタリングしたところ。
図6 本チュートリアル1つ目のpcapをWiresharkでフィルタリングしたところ

図6に示すように、最初の5つのHTTP GETリクエストは、初期Emotet DLLの取得に使われる4つのURLを表しています。それらのトラフィックは次のとおりです。

  • hangarlastik[.]com GET /cgi-bin/Ui4n/
  • hangarlastik[.]com GET /cgi-sys/suspendedpage.cgi
  • padreescapes[.]com GET /blog/0I/
  • sarture[.]com GET /wp-includes/JD8/
  • seo.udaipurkart[.]com GET /rx-5700-6hnr7/Sgms/

最初の2つのURLからは、hangarlastik[.]comに以前ホスティングされていたEmotet DLLファイルがすでに存在しないことがわかります。その確認には、これらの各リクエストについてTCPストリームを追跡し、各HTTP GETリクエストへのレスポンスを確認してみてください。

HTTP レスポンスを確認する簡単な方法は、先程適用したWiresharkの「basic」Webフィルタに、HTTPレスポンスのフィルタを追加してやることです (下記の強調部分)。

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

これにより、HTTP レスポンスが[Info]列に表示されます (図7参照)。

図7 Wiresharkの表示フィルタにHTTP レスポンスを追加したところ
図7 Wiresharkの表示フィルタにHTTP レスポンスを追加したところ

これで、WordマクロがEmotet DLLを取得しようとしたときに何が起こったのかがより明確になりました。

  • hangarlastik[.]com GET /cgi-bin/Ui4n/
  • HTTP/1.1 302 Found
  • hangarlastik[.]com GET /cgi-sys/suspendedpage.cgi
  • HTTP/1.1 200 OK
  • padreescapes[.]com GET /blog/0I/
  • HTTP/1.1 401 Unauthorized
  • sarture[.]com GET /wp-includes/JD8/
  • HTTP/1.1 403 Forbidden
  • seo.udaipurkart[.]com GET /rx-5700-6hnr7/Sgms/

唯一、「200 OK」となったレスポンスは、hangarlastik[.]comからの、サスペンドされたページに関する通知へのリプライです。

seo.udaipurkart[.]comへのHTTP GETリクエストにはレスポンスが表示されていないので、このリクエストへのTCPストリームを追跡してみましょう(図8参照)。

図8 seo.udaipurkart[.]comへのHTTPリクエストのTCPストリームを追跡
図8 seo.udaipurkart[.]comへのHTTPリクエストのTCPストリームを追跡
このTCPストリームからは、seo.udaipurkart[.]comがWindows DLLファイルを返ているというインジケータが確認できます(図9参照)。

図9 seo.udaipurkart[.]comからDLLファイルが返されたことを示すインジケータ
図9 seo.udaipurkart[.]comからDLLファイルが返されたことを示すインジケータ。ファイル名が「dll」で、先頭2バイトが「MZ」、その後ろに「This program cannot be run in DOS mode.」というWindows実行可能形式ファイルであることを示すファイルタイプが確認できる
このDLLファイルをpcapからエクスポートします。エクスポートするには、Wireshark のメニューで[File (ファイル)」、「Export Objects (オブジェクトをエクスポート)」、「HTTP」の順にクリックします (図10参照)。繰り返しになりますが、このDLLはWindowsベースのマルウェアなので、Windows環境ではエクスポートしないことをお勧めします。

図10 1つ目のpcapからEmotetDLLをエクスポートする
図10 1つ目のpcapからEmotetDLLをエクスポートする

エクスポートされたDLLのSHA256ハッシュ値は次のとおりです。

8e37a82ff94c03a5be3f9dd76b9dfc335a0f70efc0d8fd3dca9ca34dd287de1b

EmotetのC2トラフィックは、HTTP POSTリクエストを使用して送信されるエンコードされたデータです。これらのリクエストは、次のフィルタを使用するとWiresharkで簡単に見つけることができます。

http.request.method eq POST

このフィルタの適用結果を図11に示します。

図11 1つ目のpcapでHTTP POSTリクエストをフィルタリングしたところ
図11 1つ目のpcapでHTTP POSTリクエストをフィルタリングしたところ

1つ目のpcapでは、EmotetのC2トラフィックは次のHTTP POSTリクエストで構成されています。

  • 5.2.136[.]90 (80/tcp)
  • 167.71.4[.]0 (8080/tcp)

EmotetはC2トラフィックに2種類のHTTP POSTリクエストを生成します。1種類目のPOSTリクエストはHTTP /1.1で終わるもので、2種類目のPOSTリクエストはHTTP/1.1 (application/x-www-form-urlencoded)で終わるものです。

16:42:34 UTCの1つ目の5.2.136[.]90へのHTTPリクエストのTCPストリームを追跡して、1種類目のC2 POSTリクエストの例を確認しましょう (図12参照)。

図12 EmotetC2トラフィックの1種類目のHTTP POSTリクエスト
図12 EmotetC2トラフィックの1種類目のHTTP POSTリクエスト

図12はこのPOSTリクエストが、エンコードないし暗号化されたバイナリのように見える約6KBのフォームデータを送信する様子を示しています。HTTPレスポンスまで下にスクロールし、サーバーから返されたエンコードされたデータを確認しましょう。図13は、このエンコードされたデータのはじまりを示しています。

図13 HTTP POSTリクエストへのレスポンスとしてサーバーから返されるエンコードされたデータ
図13 HTTP POSTリクエストへのレスポンスとしてサーバーから返されるエンコードされたデータ

この種のエンコードないし暗号化されたデータが、Emotetボットネットサーバーと感染Windowsホストとでデータを交換する方法です。これはまた、EmotetがEmotet DLLを更新してフォローアップマルウェアをドロップするために使用するチャネルでもあります。

Emotet C2トラフィックの2種類目のHTTP POSTリクエストは、1種類目とはかなり異なって見えます。Wiresharkで次のフィルタを使用すると、この2種類目のHTTP POSTリクエストを容易に見つけることができます。

urlencoded-form

このフィルタにより、8080/tcp経由の167.71.4[.]0への2つのHTTP POSTリクエストが表示されます (図14参照)。

図14 Emotet C2トラフィックの2種類目のHTTP POSTリクエストをフィルタリング
図14 Emotet C2トラフィックの2種類目のHTTP POSTリクエストをフィルタリング

16:58:43 UTC に発生したこれら2つのHTTP POSTリクエストのうち、1つ目のTCPストリームを追跡してトラフィックを確認します。その結果を図15に示します。

図15 Emotet C2トラフィックの2種類目のHTTP POSTリクエストのTCPストリーム
図15 Emotet C2トラフィックの2種類目のHTTP POSTリクエストのTCPストリーム

図15に示したように、POSTリクエストで送信されるデータの一部は、URLエンコードによりbase64文字列としてエンコードされています。例えば、%2Bが「+」記号を、%2Fが「/」を、%3Dが「=」を表すのに使用される、といったぐあいです。

サーバーからのレスポンスとして送信されるデータは、エンコードまたは暗号化されています。

1つ目のpcapには、フォローアップマルウェアなどの重要アクティビティは含まれていません。

ほかの唯一のアクティビティは、443/tcp経由で46.101.230[.]194への接続試行を繰り返していることです。このアクティビティは、Retransmission (再送信) のTCP SYNセグメントをフィルタリングすることで簡単に見つかります。そのためには、次のWiresharkフィルタを使用します。

tcp.analysis.retransmission and tcp.flags eq 0x0002

結果を図16に示します。

図16 Retransmission (再送信) のTCP SYNセグメントをWiresharkでフィルタリング
図16 Retransmission (再送信) のTCP SYNセグメントをWiresharkでフィルタリング

インターネットで46.101.230[.]194を検索すれば、このIPアドレスがEmotetのC2アクティビティに使用されてきたものであることが明らかになるでしょう。

このpcap内の残りのトラフィックはMicrosoft Windows10ホストが生成したシステム トラフィックです。

次の2つ目のpcapではスパムボット アクティビティを行うEmotet感染について調べていきます。

例2: スパムボットトラフィックを含む Emotet パート1

Example-2-2021-01-05-Emotet-with-spambot-traffic-part-1.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図17参照)。

図17 Wiresharkで2つめのpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容
図17 Wiresharkで2つめのpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

1つ目のサンプル同様、Emotet C2トラフィック発生前に複数のHTTP GETリクエストを受信しています。これらのGETリクエストは、Webトラフィック経由で最初のEmotet DLLをダウンロードしようとしています。列表示した最初のフレームには、obob[.]tvへのHTTPSトラフィックが表示されていますが、これがおそらく最初のEmotet DLLへのWebリクエストだと考えられます。というのも、このドメインは、2021年1月5日にEmotetバイナリをホスティングしていたことが報告されており、その日付はこのpcapの日付と同一だからです。

miprimercamino[.]comへのHTTP GETリクエストのTCPストリームを追跡し、これがEmotet DLLを返したことを確認してください。1つ目のpcapの図9で示したものと似たインジケータが表示されるはずです。miprimercamino[.]comから返されたEmotet DLLは、図18に示した手順でエクスポートできます。

図18 pcapからEmotet DLLをエクスポートする
図18 pcapからEmotet DLLをエクスポートする

2つ目のpcapからエクスポートしたDLLのSHA256ハッシュ値は次のとおりです。

963b00584d8d63ea84585f7457e6ddcac9eda54428a432f388a1ffee21137316

ここでもEmotetはC2トラフィックに2種類のHTTP POSTリクエストを生成します。Emotet C2トラフィックのそれぞれの種類のHTTP POSTリクエストをフィルタリングするには、次のWiresharkフィルタを使います。

  • 1種類目: http.request method eq POST and !(urlencoded-form)
  • 2種類目: urlencoded-form

これらのフィルタで返されるHTTP POSTリクエストのTCPストリームを追跡し、2つ目のpcapでも1つ目のpcapで見たのと同じトラフィック パターンが見られることを確認してください。

pcap内でEmotetのC2トラフィック例をいくつか確認したら、次はスパムボットのアクティビティの確認に移りましょう。

この例では、感染ホストがスパムボットに変えられたため、SMTPトラフィックが含まれています。スパムボットのSMTPトラフィックは暗号化されていますが、「basic」のWebフィルタを使って列表示を下にスクロールすることで簡単に見つけることができます。

このpcapでは、20:06:20 UTC から、25/tcp、465/tcp、587/tcpなどのSMTP電子メールプロトコルに関連付けられたTCPポートへのSSL/TLSトラフィックが表示され始めます (図19参照)。

図19 「basic」のWebフィルタを使用し、列表示をスクロールしてスパムボットのトラフィックを探します。
図19 「basic」のWebフィルタを使用し列表示をスクロールしてスパムボットのトラフィックを探す

SMTPでフィルタリングすれば、暗号化されたSMTPトンネルの確立前にSMTPコマンドがいくつかあることがわかります。図20に結果を示します。

図20 2番目のpcapでSMTPトラフィックをフィルタリングする
図20 2番目のpcapでSMTPトラフィックをフィルタリングする

Emotetに感染したWindowsホストの生成するスパムボットトラフィックのなかには、暗号化されていないSMTPトラフィックも見つかることがあります。平文のSMTPからはメッセージの内容が確認できますが、スパムボット ホストから送信される暗号化SMTPトラフィックのボリュームは平文のそれとくらべてきわだって大きいことから、Emotet感染ホストのスパムボットメッセージはそのほとんどが暗号化トラフィックに潜んでいるということになります。

この例では暗号化されたSMTPトラフィックのみを確認できます。

なお、次にあげる例はこれと同じ感染の後半のもので、ここでようやく暗号化されていないSMTPが見つかります。

例2: スパムボットトラフィックを含む Emotet パート2

Example-3-2021-01-05-Emotet-with-spambot-traffic-part-2.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図21参照)。

図21 Wiresharkで3つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容
図21 Wiresharkで3つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

このpcapでも、Emotet C2トラフィックに対するHTTP POSTリクエストが少なくとも1分に2回表示されています。以前のpcapと同様の暗号化されたスパムボット アクティビティも見つかります。

スパムボット アクティビティでは頻繁に大量のトラフィックが生じます。このpcapには、感染Windowsホスト上での4分42秒にわたるスパムボット アクティビティが記録されていますが、この中には 21MB 超のトラフィックが含まれています。

暗号化されていないSMTPトラフィックをすばやく識別するには次のWiresharkフィルタを使用します。

smtp.data.fragment

図22は、3つ目のpcapに対するこのフィルタの結果を示しています。このフィルタにより、感染Windowsホストが生成した5つのEmotetマルスパムのサンプルが明らかになります。

図22 スパムボット トラフィックから暗号化されていないSMTPインジケータをフィルタリングしたところ。
図22 スパムボット トラフィックから暗号化されていないSMTPインジケータをフィルタリングしたところ

20:19:54 UTCのfrom: “Gladisbel Mirandaという最後の電子メールのTCPストリームを追跡します。これらのメッセージがどのような形式かを確認しましょう (図23参照)。

図23 3つ目のpcapからのEmotetマルスパムサンプルのTCPストリーム
図23 3つ目のpcapからのEmotetマルスパムサンプルのTCPストリーム

Emotetマルスパムのこれら5つのオブジェクトは、Wiresharkのメニューからエクスポートすることができます。図24にしたがって、[File (ファイル)]、[Export Objects (オブジェクトのエクスポート)]、[IMF]の順にクリックします。

図24 3つ目のpcapからEmotetマルスパムをエクスポートする
図24 3つ目のpcapからEmotetマルスパムをエクスポートする

これらの電子メールをエクスポートして調べましょう。これも、できればWindows環境以外でやるのをお勧めします。潜在的な被害者からこうした電子メールがどのように見えるかを確認するさいは、Thunderbirdなどの無料電子メールクライアントを使うとよいでしょう。

さて、先に述べたとおり、Emotetはマルウェアダウンローダでもあります。Emotet経由で配布される最も一般的なマルウェアはおそらくTrickbotでしょう。

例4: Trickbotを配布するEmotet感染

Example-4-2021-01-05-Emotet-infection-with-Trickbot.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図25参照)。

図25 Wiresharkで4つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容
図25 Wiresharkで4つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

このpcapには、初期Emotet DLLに対するHTTP GETリクエストは含まれていません。ただしbasicフィルタを適用して表示させた最初のフレームには、fathekarim[.]comへのHTTPSトラフィックが表示されています。これがおそらくEmotet DLLへのWebリクエストだと考えられます。というのも、このドメインは、2021年1月5日にEmotetバイナリをホスティングしていたことが報告されており、その日付はこのpcapの日付と同一だからです。

この pcap でも、先の2つのpcapで説明したように、Emotet C2に関連付けらているものと同じ2種類のHTTP POSTリクエストが見つかります。

このpcapには、Trickbot感染のインジケータも含まれています。ここでも「basic」Webフィルタを適用し、下にスクロールしていってTrickbotトラフィックを確認してください (図26参照)。

図26 4番目のpcapに「basic」Webフィルタを適用後、列表示を下にスクロールしていってTrickbotインジケータを確認しているところ
図26 4番目のpcapに「basic」Webフィルタを適用後、列表示を下にスクロールしていってTrickbotインジケータを確認しているところ

すでにTrickbot感染トラフィックについては『Wiresharkによるパケット解析講座 5: Trickbot感染の調査』でレビュー済みですが、ここで簡単におさらいしておきましょう。Trickbotの一般的なインジケータには次のものがあげられます。

  • 関連するドメインやホスト名のない447/tcpないし449/tcp経由のHTTPSトラフィック
  • /81、/83、または/90で終わる、標準/非標準TCPポートを経由したHTTPトラフィックのHTTP POSTリクエスト(データ漏出に関連)
  • Emotet感染によるTrickbotの場合、上記のHTTP POSTリクエストは/morで始まり、この後ろに数字 (これまで確認されているのは1桁か2桁のみ) が続く
  • 追加のTrickbotバイナリを返す.pngで終わるURLに対するHTTP GETリクエスト

これらのインジケータは次のWiresharkフィルタを適用すると簡単に見つかります。

  • tls.handshake.type eq 1 and (tcp.port eq 447 or tcp.port eq 449)
  • (http.request.uri contains /81 or http.request.uri contains /83 or http.request.uri contains /90) and http.request.uri contains mor
  • http.request.uri contains .png

図27から図29は、上記の各フィルタを適用した結果を示しています。

図27: 447/tcpまたは449/tcp経由のTrickbotのHTTPSトラフィックをフィルタリングしたところ
図27: 447/tcpまたは449/tcp経由のTrickbotのHTTPSトラフィックをフィルタリングしたところ
図28 Trickbotのデータの漏出に関連するHTTP POSTリクエストをフィルタリングしたところ
図28 Trickbotのデータの漏出に関連するHTTP POSTリクエストをフィルタリングしたところ

図28に示した各HTTP POSTリクエストのTCPストリームを追跡し、パスワードデータが窃取されているかどうかを確認しましょう。/90で終わる最後のHTTP POSTリクエストには、感染Windowsホストとその環境に関するデータが含まれています。

図29 追加のTrickbotバイナリを返す.pngで終わるURLに対するHTTP GETリクエストをフィルタリングしたところ
図29 追加のTrickbotバイナリを返す.pngで終わるURLに対するHTTP GETリクエストをフィルタリングしたところ

図29に示した各HTTP POSTリクエストのTCPストリームを追跡し、Windowsバイナリが返されていないかどうかを確認しましょう。そうすれば、Windows実行可能ファイルが2つ返されていることがわかるはずです。確認後は、これらのバイナリをpcapからエクスポートしましょう。そのためにはこれまでのサンプルと同様に[File (ファイル)]メニューで[Export Objects (オブジェクトのエクスポート)]、[HTTP]の順にクリックします。

これら2つのWindowsバイナリ(いずれも実行可能ファイル)のSHA256ハッシュ値は次のとおりです。

  • 59e1711d6e4323da2dc22cdee30ba8876def991f6e476f29a0d3f983368ab461 (mingup.png)
  • ed8dea5381a7f6c78108a04344dc73d5669690b7ecfe6e44b2c61687a2306785 (saved.png)

TrickbotはEmotetの配布する最も一般的なマルウェアですが、これ以外のマルウェアが配布されることもあります。Qakbotがそうしたマルウェアの1つで、これもEmotetに感染したWindowsホストによってよくドロップされています。

例5: Qakbotを配布するEmotet感染

Example-5-2020-08-18-Emotet-infection-with-Qakbot.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図30参照)。

図30 Wiresharkで5つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容
図30 Wiresharkで5つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

5つ目のpcapでは、Emotet Wordドキュメントが21:23:50 UTCにsawtpranamam.mysquare[.]inから取得されていますが、これは同じ日にEmotet Wordドキュメントをホスティングしていたことが報告されているURLと合致しています。このWordドキュメントをpcapからエクスポートしましょう。そのためには、これまでのサンプルと同様に[File (ファイル)]メニューで[Export Objects (オブジェクトのエクスポート)]、[HTTP]の順にクリックします。

エクスポートしたWordドキュメントのSHA256ハッシュ値は次のとおりです。

  • c7f429dde8986a1b2fc51a9b3f4a78a92311677a01790682120ab603fd3c2fcb

samaritantec[.]comへのHTTPSトラフィックが21:24:40 UTCに発生していることも確認できます。このドメインは、同じ日にEmotetバイナリをホスティングしていたことが報告されています

これまでの例と同様に、Emotet C2トラフィックに関連付けられたものと同じ2種類のHTTP POSTリクエストが見つかります。

このpcapにはこのほかにQakbot感染のインジケータも含まれています。ここでも「basic」Webフィルタを適用し、下にスクロールしていってQakbotトラフィックを確認してください (図31参照)。

図31 4つ目のpcapに「basic」Webフィルタを適用後、列表示を下にスクロールしていってQakbotインジケータを確認しているところ
図31 4つ目のpcapに「basic」Webフィルタを適用後、列表示を下にスクロールしていってQakbotインジケータを確認しているところ

すでにQakbot感染トラフィックについては『Wiresharkによるパケット解析講座 7: Qakbot感染の調査』でレビュー済みですが、ここで簡単におさらいしておきましょう。Qakbotの一般的なインジケータには次のものがあげられます。

  • HTTPSの標準/非標準TCPポートを介したHTTPSトラフィック
  • Qakbot HTTPSトラフィックの証明書データのIssuerフィールドの値が正常な内容とは異なっており、証明書も米国に拠点を置く認証局が発行したものではない
  • 65400/tcp経由のTCPトラフィック
  • 2020年11月下旬以前はQakbotはよくcdn.speedof[.]meへのHTTPSトラフィックを生成していた
  • 2020年11月下旬以前はQakbotはよくa.strandsglobal[.]comへのHTTP GETリクエストを生成していた

これらのインジケータは次のWiresharkフィルタを適用すると簡単に見つかります。

  • tls.handshake.type eq 11 and !(x509sat.CountryName == US)
  • tcp.port eq 65400
  • tls.handshake.extensions_server_name contains speedof
  • http.host contains strandsglobal

図32から図35は、上記の各フィルタを適用した結果を示しています。

図32 Qakbotが生成したHTTPSトラフィック内の正常でない証明書のIssuerデータをフィルタリングして検索したところ
図32 Qakbotが生成したHTTPSトラフィック内の正常でない証明書のIssuerデータをフィルタリングして検索したところ

1つ目のフィルタを適用した結果が図32ですが、ここでは71.80.66[.]107からのトラフィックが列表示されていて、フレームが複数あることが確認できます。各フレームでパケットの詳細ペイン (Packet Details ペイン) を探索し、証明書のIssuerデータに異常があることを確認してください。

図33 65400/tcp経由のQakbotトラフィックをフィルタリングしたところ
図33 65400/tcp経由のQakbotトラフィックをフィルタリングしたところ

図33は、65400/tcp経由のQakbotトラフィックのTCPストリームを1つ表示させたところですが、このストリームには、Qakbot感染WindowsホストのパブリックIPアドレスとボットネット識別文字列が含まれています。

図35 a.stransglobal[.]comへのトラフィックをフィルタリングしたところ。2020年11月下旬以前のQakbotによく生成されていたもの。
図35 a.stransglobal[.]comへのトラフィックをフィルタリングしたところ。2020年11月下旬以前のQakbotによく生成されていたもの。
EmotetはTrickbotやQakbotをドロップすることが多いですが、GootkitやIcedIDなど、別の種類のマルウェアをドロップすることもあるので注意が必要です。

結論

今回はEmotet感染トラフィックを含むpcapを使って同マルウェアのアクティビティを識別する方法を確認しました。最近の5つのpcapを確認し、Emotet感染後のC2トラフィックによって引き起こされるHTTP POSTリクエストに類似点があることを確認できました。これらのパターンは同マルウェアについてかなり特徴的なものなので、これらを使えばネットワーク内のEmotet感染を識別することができます。ここではまた、スパムボット トラフィックや、感染ホストにドロップされた複数のマルウェアファミリなどの、Emotet関連の感染後アクティビティについても確認しました。

疑わしいネットワークアクティビティをセキュリティ専門家が確認するさいにこうした知識があれば、Emotet感染をよりうまく検出・捕捉できるようになります。

『Wiresharkによるパケット解析講座』シリーズの以前の講座は以下から確認してください。