Wiresharkによるパケット解析講座 7: Qakbot感染の調査

By

Category: Tutorial, Unit 42, Unit 42

Tags: , , , , ,

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

概要

QakbotはQbotという名前でも知られる情報窃取を行うマルウェアです。長年にわたり活発に利用され、非常に特徴的なトラフィックパターンがあります。今回のWiresharkチュートリアルでは、最近のQakbot感染トラフィックのパケットキャプチャ(pcap)を確認していくことにしましょう。セキュリティ専門家がQakbotによる感染を検出・調査するには、同マルウェアによる感染トラフィックパターンを理解することが重要です。

注意: 本チュートリアルは、Wiresharkに関する基本的知識があることを前提としています。また、以前の チュートリアルで設定したカスタマイズ済みの列表示を使います。またこの回で解説したWiresharkディスプレイフィルタもすでに実装されているものとしています。

本チュートリアルで説明する内容は次のとおりです。

  • Qakbotの配布方法
  • マルスパム内のリンクからの最初のzipアーカイブ
  • QakbotのWindows実行可能ファイル
  • 感染後のHTTPS活動
  • その他の感染後トラフィック

本稿のチュートリアルに利用する pcap ファイルは こちらから取得してください。このpcapは、パスワードで保護されたzipアーカイブファイル 2020-01-29-Qbot-infection-traffic.pcap.zip 内にありますのでダウンロード後展開してください。パスワードは「infected」です。図1は、以前のチュートリアルで設定したWireshark環境で開いた上記pcapの見えかたを示しています。

Figure 1. The pcap for this tutorial.

図1 本チュートリアルで使うpcapをWireSharkで開いたところ

Qakbotの配布方法

Qakbotはほとんどの場合、悪意のあるスパム(マルスパム)を介して配布されますが、最近(2019年11月)ではエクスプロイトキットを介しても配布されています。2019年3月のこちらの報告でも指摘されているとおり、QakbotはEmotetをはじめとするさまざまな別種マルウェアのフォローアップ感染に利用されることもあります。

Qakbotの最近のマルスパムベース配布キャンペーンでは、図2のフローチャートに示した経過をたどります。

Figure 2. Flow chart from recent Qakbot distribution campaigns.

図2 最近のQakbot配布キャンペーンのフローチャート

マルスパム内のリンクからの最初のzipアーカイブ

Qakbotを配布する最近のマルスパムは、正当な電子メールアドレスを偽装し、偽のメールスレッドの体裁をとっています。そうした例の1つを図3に示します。

Figure 3. Recent malspam example pushing Qakbot.

図3 Qakbotをプッシュする最近のマルスパムサンプル

こうしたメールに含まれるURLは一連の短い数字の後ろに.zipがついています。URLhausTwitterで最近報告されていたQakbotマルスパムのURLサンプルをいくつか表1にまとめましたので参考にしてください。

最初に報告された日 初期zipアーカイブのURL
2019-12-27 hxxps://prajoon.000webhostapp[.]com/wp-content/uploads/2019/12/last/033/033.zip
2019-12-27 hxxps://psi-uae[.]com/wp-content/uploads/2019/12/last/870853.zip
2019-12-27 hxxps://re365[.]com/wp-content/uploads/2019/12/last/85944289/85944289.zip
2019-12-27 hxxps://liputanforex.web[.]id/wp-content/uploads/2019/12/last/794/794.zip
2020-01-06 hxxp://eps.icothanglong.edu[.]vn/forward/13078.zip
2020-01-22 hxxp://hitechrobo[.]com/wp-content/uploads/2020/01/ahead/84296848/84296848.zip
2020-01-22 hxxp://faithoasis.000webhostapp.com/wp-content/uploads/2020/01/ahead/550889.zip
2020-01-27 hxxps://madisonclubbar[.]com/fast/invoice049740.zip
2020-01-29 hxxp://zhinengbao[.]wang/wp-content/uploads/2020/01/lane/00571.zip
2020-01-29 hxxp://bhatner[.]com/wp-content/uploads/2020/01/ahead/9312.zip
2020-02-03 hxxp://santedeplus[.]info/wp-content/uploads/2020/02/ending/1582820/1582820.zip

表1 Qakbot感染チェーンを開始する最初のzipアーカイブのURLサンプル

さて、今回のpcapの場合、Wiresharkフィルタにhttp.request.uri contains .zipというフィルタを指定すれば、zipアーカイブを含むHTTPリクエストを見つけることができます(図4参照)。

Figure 4. Finding the URL for the initial zip archive.

図4 初期zipアーカイブのURLを見つける

ではここで、図5と6に示した手順でTCPストリームを追跡し、これがzipアーカイブであることを確認してください。その後、図7に示した手順でpcapからzipアーカイブをエクスポート可能かどうかを確認してみましょう。

Figure 5. Following the TCP stream for the HTTP request from our filter results.

図5 フィルタ結果からHTTPリクエストのTCPストリームを追跡する(パケットを右クリックして[追跡]、[TCPストリーム]の順にクリックする)

Figure 6. Indicators this URL returned a zip archive.

図6 このURLがzipアーカイブを返したことを示すインジケータ(痕跡)を確認する
(zipの最初の2バイトは、ASCII文字でPK。VBC_60372.vbsがこのzipアーカイブに含まれていることがわかる)

Figure 7. Exporting objects from HTTP traffic in the pcap.

図7 pcapのHTTPトラフィックからオブジェクトをエクスポートできるか確認
([ファイル]メニューで[オブジェクトをエクスポート]、[HTTP]の順にクリック)

ほとんどの場合、[ファイル]、[オブジェクトのエクスポート]、[HTTP]の順でメニューをたどれば、HTTP経由で送信されたzipアーカイブをエクスポートできるはずですが、残念ながらこのケースでは、この方法で単純に9312.zipをエクスポートすることができません。図8に示したとおり、[エクスポート HTTPオブジェクト一覧]ウィンドウ内でファイルが数百個の小さなチャンクに分割されてしまっているためです。

Figure 8. 9312.zip is broken up into hundreds of objects within the list, so we cannot export it this way.

図8 9312.zipが一覧上数百のオブジェクトに分割されているためこの方法でエクスポートすることはできない

幸いこれでもエクスポートする方法はあります。[TCPストリーム]のウィンドウからデータをエクスポートし、バイナリエディタで開いてHTTPのレスポンスヘッダを削除すれば大丈夫です。では[エクスポート HTTPオブジェクト一覧]ウィンドウをいったん閉じて、次の手順でこのpcapからzipアーカイブを抽出してください。

  1. 最初の「http.request.uri contains .zip」のフィルタをもう一度実行し、図5に示した手順で9312.zipのHTTPリクエストのTCPストリームを追跡します。
  2. 図9を参考にして、TCPストリームウィンドウ上の[全体の対話]が選択されているドロップダウンボックスから「103.91.92.1:80 → 10.1.29.101:49679 (2177 kB)」を選択し、サーバーからのレスポンストラフィックのみを表示させます。
  3. 図10を参考にして、[としてデータを表示して保存する]ドロップダウンボックスを[ASCII]から[Raw(無加工)形式]に変更します。
  4. 図11を参考にして、データをバイナリとして保存します。この例では「9312.zip.bin」というファイル名で保存しています。
  5. 図12を参考にして、任意のバイナリエディタで保存したバイナリデータ(9312.zip.bin)を開き、zipアーカイブの最初の2バイト(ASCIIでは「PK」と表示)より前にあるHTTPリクエストヘッダを削除します。たいていのバイナリエディタでは、カーソルで先頭から「PK」より前の部分をなぞって選択した上でDeleteキーを押下すれば削除できるでしょう。
  6. 図13を参考にして、バイナリエディタ上でファイルをzipアーカイブとして保存します(ここでは「9312.zip」として保存しました)。
  7. 図14を参考にして、ターミナルないしコマンドプロンプトを開き、fileコマンドでファイルをチェックし、これが実際にzipアーカイブであることを確認します。次に、unzip コマンドでzipアーカイブを展開し、.vbsファイルを取得後、fileコマンドでこの.vbsファイルをチェックしてからshasumコマンドでSHA256値を計算します。

この一連の手順を行うさいは、図9〜14を参考にしてください。

Figure 9. Step 2 – When viewing the TCP stream, switch from viewing the entire conversation to viewing only data returned from the server.

図9 TCPストリームウィンドウ上の[全体の対話]が選択されているドロップダウンボックスから「103.91.92.1:80 → 10.1.29.101:49679 (2177 kB)」を選択し、サーバーからのレスポンストラフィックのみを表示させる

Figure 10. Step 3 – Show and save data as Raw instead of ASCII.

図10 [としてデータを表示して保存する]ドロップダウンボックスを[ASCII]から[Raw(無加工)形式]に変更する

Figure 11. Step 4 – Save this raw data from the TCP stream as a binary.

図11 データをバイナリとして保存。この例では「9312.zip.bin」というファイル名で保存している

Figure 12. Step 5 – Open your saved binary in a hex editor and remove any HTTP response data before the first two bytes of the zip archive (that show as PK in ASCII).

図12 任意のバイナリエディタで保存したバイナリデータ(9312.zip.bin)を開き、zipアーカイブの最初の2バイト(ASCIIでは「PK」と表示)より前にあるHTTPリクエストヘッダを削除。たいていのバイナリエディタでは、カーソルで先頭から「PK」より前の部分をなぞって選択した上でDeleteキーを押下すれば削除できる

Figure 13. Step 6 – Save your edited binary as a zip archive.

図13 バイナリエディタ上でファイルをzipアーカイブとして保存(ここでは「9312.zip」として保存)

Figure 14. Step 7 – Confirm the edited file is a zip archive, then extract the VBS file and check the file hashes.

図14 ターミナルないしコマンドプロンプトを開き、fileコマンドでファイルをチェックし、これが実際にzipアーカイブであることを確認後、unzip コマンドでzipアーカイブを展開。.vbsファイルを取得後、fileコマンドでこの.vbsファイルをチェックしてからshasumコマンドでSHA256値を計算

図14は、DebianベースのLinuxディストリビューション ターミナル ウィンドウでファイルをチェックした例です。このpcapから抽出したzipアーカイブは、VirusTotalに提供されているこのファイルと同じものになるはずです。また、zipアーカイブから抽出したVBSファイルもVirusTotalに送信済みのこちらのファイルと同じもののはずです。

抽出されたVBSファイルをこちらのパブリックなサンドボックス分析にかけた結果からは、これが感染チェーンにおける次のQakbot関連URL、すなわちQakbotのWindows実行可能ファイルを返すURLを生成していることがわかります。

QakbotのWindows実行可能ファイル

抽出されたVBSファイルは、QakbotのWindows実行可能ファイルを返すURLを生成します。2019年12月以降のQakbot実行可能ファイル用URLは44444.pngまたは444444.pngで終わっています。弊社AutoFocus脅威インテリジェンスサービスで見つかったこれらQakbot URLの最近のサンプルを表2にまとめましたので参考にしてください。

初出 Qakbot実行可能ファイルのURL
2019-12-27 hxxp://centre-de-conduite-roannais[.]com/wp-content/uploads/2019/12/last/444444.png
2020-01-06 hxxp://newsinside[.]info/wp-content/uploads/2020/01/forward/44444.png
2020-01-15 hxxp://iike.xolva[.]com/wp-content/themes/keenshot/fast/444444.png
2020-01-17 hxxp://deccolab[.]com/fast/444444.png
2020-01-21 hxxp://myrestaurant.coupoly[.]com/wp-content/uploads/2020/01/along/444444.png
2020-01-22 hxxp://alphaenergyeng[.]com/wp-content/uploads/2020/01/ahead/444444.png
2020-01-23 hxxp://claramohammedschoolstl[.]org/wp-content/uploads/2020/01/upwards/444444.png
2020-01-23 hxxp://creationzerodechet[.]com/choice/444444.png
2020-01-26 hxxp://productsphotostudio[.]com/wp-content/uploads/2020/01/lane/444444.png
2020-01-27 hxxp://sophistproduction[.]com/wp-content/uploads/2020/01/choice/444444.png
2020-01-30 hxxp://uofnpress[.]ch/wp-content/uploads/2020/01/side/444444.png
2020-02-03 hxxp://csrkanjiza[.]rs/wp-content/uploads/2020/02/ending/444444.png

表2 Qakbot実行可能ファイルのURL

それでは、WireSharkに戻り、現在のpcapで「hxxp.request.uri contains .png」とフィルタに指定して(実際には図15に示したように文字列hxxpはhttpに変更してください)、Qakbot実行可能ファイルのHTTP GETリクエストを見つけましょう(図15参照)。

Figure 15. Finding the URL for our Qakbot executable.

図15 分析中のpcapからQakbot実行可能ファイルのURLを見つける

ではここで図16を参考に、このオブジェクトをpcapから [ファイル]メニュー、[オブジェクトのエクスポート]、[HTTP] の順にクリックしてエクスポートしてください。つづいて図17を参考にエクスポートした結果をチェックしてください。

Figure 16. Exporting our Qakbot executable from the pcap.

図16 pcapからQakbotのWindows実行可能ファイルをエクスポートしたところ
([ファイル]メニュー、[オブジェクトのエクスポート]、[HTTP]の順にクリックし、パケット2957のalphaenergyeng[.]comの行を選択して[Save]をクリックする)

Figure 17. Checking the exported file in a Debian-based Linux terminal window.

図17 DebianベースのLinuxターミナル ウィンドウでエクスポートしたファイルを確認しているところ
(fileコマンドおよびshasumコマンド)

このpcapから抽出したQakbotのWindows実行ファイルはVirusTotalに提供されているこのファイルと同じものになるはずです。 こちらのパブリックなサンドボックス分析にかけた結果([THREATS]タブの[Message]列参照) からはQakbot関連のインジケータが生成され、これがQbotとして識別されたことがわかります。

感染後のHTTPS活動

まずは、以前のWIresharkチュートリアルで作成した「basic」フィルタを使い、pcapのWebトラフィックをざっと眺めてみましょう。Qakbot実行可能ファイルを返しているalphaenergyeng[.]comへのHTTP GETリクエスト後の活動までスクロールダウンしてください。図18に示すように、関連付けられたドメインのない68.1.115[.]106へのHTTPSトラフィックやSSL/TLSトラフィックのインジケータが複数表示されるはずです。

Figure 18. HTTPS or SSL/TLS traffic caused by Qakbot.

図18 QakbotによるHTTPSトラフィックとSSL/TLSトラフィック

このトラフィックには、Qakbot感染時によく見られる異常な証明書発行者データが含まれています。以前、Ursnif感染の解析をしたWIresharkチュートリアルで、こうした異常な証明書発行者を確認する方法を学習しましたね。やりかたを忘れてしまったかたは、こちらのチュートリアルでおさらいしておいてください。

では、以下のWiresharkフィルタを指定してQakbot証明書発行者データを確認しましょう。

Ip.addr eq 68.1.115.186 and ssl.handshake.type eq 11 (WireShark 2.xの場合)

Wireshark 3.0以降をお使いの場合は、ssl.handshake.typeの代わりにtls.handshake.typeを指定してください。次に、図18に示したQakbot生成トラフィックの最初のフレーム(フレーム3173)を選択して右クリックし、[追跡]、[TCPストリーム]の順にクリックします (これによりtcp.stream eq 24が表示されます)。この結果「Server Hello, Certificate, Server Hello Done」と Info 列に表示される行(フレーム3174)が見つかりますので、この行を選択して図19に示した手順で証明書発行者データが見つかるまでフレームの詳細ウィンドウを展開していきます。

Figure 19. Reviewing certificate issuer data from Qakbot traffic.

図19 Qakbotトラフィックから証明書発行者データを確認したところ(フレーム3174)。
Wireshark3.x系では、Secure Socket Layer の部分が Transport Layer Security になる

市区町村名(Locality Name)、組織名(Organization Name)、コモンネーム(Common Name)のパターンは通常のものからの乖離が見られ、正当なHTTPS、SSL、TLSトラフィックで見られる証明書のパターンを踏襲していません。このケースでの発行者データは次のようになっています。

  • id-at-countryName=ES
  • id-at-stateOrProvinceName=IA
  • id-at-localityName=Uorh Ofwa
  • id-at-organizationName=Coejdut Mavmtko Qxyemk Dxsjie LLC.
  • id-at-commonName=gaevietovp.mobi

その他の感染後トラフィック

さて、このpcapには、Qakbot感染に関連した他の活動も含まれています。これらの活動はそれ自体に悪意のあるものではありませんが、これまでの調査結果に照らせば、ここでのQakbotによる感染はすでに完了しているものと想定できます。

また、Qakbot感染のもう1つのインジケータとなるのが、cdn.speedof[.]meへのHTTPSトラフィックです。ドメインspeedof[.]meは、正規のインターネット速度テストサービスに使用されるものでこれ自体は悪意のあるトラフィックではありません。ただし、Qakbotに感染するとcdn.speedof[.]meへのトラフィックが頻繁に見られるようになります。図20は、pcapから抽出したこの活動を示しています。

Figure 20. The domain cdn.speedof[.]me within the Qakbot traffic.

図20 Qakbotトラフィック内で見つかる cdn.speedof[.]me ドメインへの接続

Qakbotはまた、感染Windowsホスト上のすべてのブラウザのウィンドウを開きます。こちらでのサンドボックス分析からのビデオの再生では約13分5秒後、QakbotがWindows 7ホスト上でChromeを開き、次にFirefoxを開き、Internet Explorerを開いている様子がわかります。またこの分析からはQakbotが次のURLへのトラフィックを生成した様子もわかります。

  • hxxp://store.nvprivateoffice[.]com/redir_chrome.html
  • hxxp://store.nvprivateoffice[.]com/redir_ff.html
  • hxxp://store.nvprivateoffice[.]com/redir_ie.html

ドメインnvprivateoffice[.]comは2012年からGoDaddy経由で登録されているドメインで、store.nvprivateoffice[.]comはFedoraサーバー上のnginxのデフォルトwebページを表示します。

このチュートリアルのpcapは、ChromeもFirefoxもインストールされていないWindows 10ホストでのQakbot感染によるものです。このためこのpcapでは、Internet Explorerと新しいChromiumベースのMicrosoft Edgeのwebトラフィックのみが表示されています。どちらのブラウザでもQakbotが生成したURLはhxxp://store.nvprivateoffice[.]com/redir_ie.htmlです。

このトラフィックを見つけるには次のWiresharkフィルタを使用します(図21参照)。

hxxp.request.full_uri contains store.nvprivateoffice
(ここでも安全のため「hxxp」と記載していますが、実際にフィルタに指定するさいは「http」と入力してください)

Figure 21. Finding Qakbot traffic that opens web browsers on an infected Windows host.

図21 感染Windowsホストでwebブラウザを開くQakbotのトラフィックを見つける

redir_ie.htmlで終わる2つのHTTP GETリクエストそれぞれについて、TCPストリームを追跡しましょう。図22に示すように、最初のリクエストのInternet ExplorerのHTTPヘッダにはUser-Agentが含まれています。また図23に示すように、同じURLに対する2番目のリクエストでは、新しいChromiumベースのMicrosoft EdgeのHTTPヘッダにUser-Agentが含まれています。

Figure 22. Qakbot traffic to store.nvprivateoffice[.]com using Internet Explorer 11.

図22 Internet Explorer 11を使用するstore.nvprivateoffice[.]comへのQakbotトラフィック。
User-Agent設定は Windows 10 ホスト上の Internet Explorer 11 のもの

Figure 23. Qakbot traffic to store.nvprivateoffice[.]com using the new Chromium-based Microsoft Edge.

図23 ChromiumベースのMicrosoft Edgeを使用するstore.nvprivateoffice[.]comへのQakbotトラフィック。
User-Agent設定は Windows 10 ホスト上の新しいChromiumベースのMicrosoft Edge ブラウザのもの

最後に、今回のQakbotに感染したホストのpcapには、SMTP、IMAP、POP3など、さまざまな電子メールプロトコル用ポートに対する電子メール関連TCPトラフィックが含まれています。このweb以外のトラフィックがどんなものであるかを把握するには、次のWiresharkフィルタを使用します(図25参照)。

tcp.flags eq 0x0002 and !(tcp.port eq 80) and !(tcp.port eq 443)

Figure 25. Getting an idea of the non-web-related traffic from this Qakbot infection.

図25 Qakbot感染トラフィックに含まれるweb以外のトラフィックがどのようなものかをおおまかにつかむ

図25は、さまざまな電子メールプロトコルで一般的に使用されている25、110、143、465、587、993、995などのポートへのTCP接続と、試行されたTCP接続を示しています。結果の最初の2行は65400/tcpへのトラフィックを示していますが、関連するTCPストリームを確認すると、これも電子メール関連のトラフィックであることがわかります。

次のWiresharkフィルタを使用して、感染ホストからの電子メール関連のトラフィックの詳細を確認してください(図26参照)。

smtp or imap or pop

Figure 26. Finding email-related traffic caused by Qakbot in this pcap.

図26 pcap内でQakbotが生成した電子メール関連のトラフィックを見つける

この手の電子メールトラフィックについてもっとよく把握するにはいくつかTCPストリームを追跡してみるとよいでしょう。通常であれば、WindowsクライアントからパブリックなIPアドレスに対してこのように暗号化されていない電子メールのトラフィックを見かけることはまずありません。他のインジケータと合わせれば、このsmtp、imap、popフィルタからQakbotによる活動が明らかになることもあります。

結論

本チュートリアルでは、QakbotマルウェアによるWindows感染を調べるさいのヒントを見ていきました。Qakbotによる最近の活動サンプルについては malware-traffic-analysis.netにも多数掲載しています。

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