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の見えかたを示しています。
図1 本チュートリアルで使うpcapをWireSharkで開いたところ
Qakbotの配布方法
Qakbotはほとんどの場合、悪意のあるスパム(マルスパム)を介して配布されますが、最近(2019年11月)ではエクスプロイトキットを介しても配布されています。2019年3月のこちらの報告でも指摘されているとおり、QakbotはEmotetをはじめとするさまざまな別種マルウェアのフォローアップ感染に利用されることもあります。
Qakbotの最近のマルスパムベース配布キャンペーンでは、図2のフローチャートに示した経過をたどります。
図2 最近のQakbot配布キャンペーンのフローチャート
マルスパム内のリンクからの最初のzipアーカイブ
Qakbotを配布する最近のマルスパムは、正当な電子メールアドレスを偽装し、偽のメールスレッドの体裁をとっています。そうした例の1つを図3に示します。
図3 Qakbotをプッシュする最近のマルスパムサンプル
こうしたメールに含まれるURLは一連の短い数字の後ろに.zipがついています。URLhausとTwitterで最近報告されていた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参照)。
図4 初期zipアーカイブのURLを見つける
ではここで、図5と6に示した手順でTCPストリームを追跡し、これがzipアーカイブであることを確認してください。その後、図7に示した手順でpcapからzipアーカイブをエクスポート可能かどうかを確認してみましょう。
図5 フィルタ結果からHTTPリクエストのTCPストリームを追跡する(パケットを右クリックして[追跡]、[TCPストリーム]の順にクリックする)
図6 このURLがzipアーカイブを返したことを示すインジケータ(痕跡)を確認する
(zipの最初の2バイトは、ASCII文字でPK。VBC_60372.vbsがこのzipアーカイブに含まれていることがわかる)
図7 pcapのHTTPトラフィックからオブジェクトをエクスポートできるか確認
([ファイル]メニューで[オブジェクトをエクスポート]、[HTTP]の順にクリック)
ほとんどの場合、[ファイル]、[オブジェクトのエクスポート]、[HTTP]の順でメニューをたどれば、HTTP経由で送信されたzipアーカイブをエクスポートできるはずですが、残念ながらこのケースでは、この方法で単純に9312.zipをエクスポートすることができません。図8に示したとおり、[エクスポート HTTPオブジェクト一覧]ウィンドウ内でファイルが数百個の小さなチャンクに分割されてしまっているためです。
図8 9312.zipが一覧上数百のオブジェクトに分割されているためこの方法でエクスポートすることはできない
幸いこれでもエクスポートする方法はあります。[TCPストリーム]のウィンドウからデータをエクスポートし、バイナリエディタで開いてHTTPのレスポンスヘッダを削除すれば大丈夫です。では[エクスポート HTTPオブジェクト一覧]ウィンドウをいったん閉じて、次の手順でこのpcapからzipアーカイブを抽出してください。
- 最初の「http.request.uri contains .zip」のフィルタをもう一度実行し、図5に示した手順で9312.zipのHTTPリクエストのTCPストリームを追跡します。
- 図9を参考にして、TCPストリームウィンドウ上の[全体の対話]が選択されているドロップダウンボックスから「103.91.92.1:80 → 10.1.29.101:49679 (2177 kB)」を選択し、サーバーからのレスポンストラフィックのみを表示させます。
- 図10を参考にして、[としてデータを表示して保存する]ドロップダウンボックスを[ASCII]から[Raw(無加工)形式]に変更します。
- 図11を参考にして、データをバイナリとして保存します。この例では「9312.zip.bin」というファイル名で保存しています。
- 図12を参考にして、任意のバイナリエディタで保存したバイナリデータ(9312.zip.bin)を開き、zipアーカイブの最初の2バイト(ASCIIでは「PK」と表示)より前にあるHTTPリクエストヘッダを削除します。たいていのバイナリエディタでは、カーソルで先頭から「PK」より前の部分をなぞって選択した上でDeleteキーを押下すれば削除できるでしょう。
- 図13を参考にして、バイナリエディタ上でファイルをzipアーカイブとして保存します(ここでは「9312.zip」として保存しました)。
- 図14を参考にして、ターミナルないしコマンドプロンプトを開き、fileコマンドでファイルをチェックし、これが実際にzipアーカイブであることを確認します。次に、unzip コマンドでzipアーカイブを展開し、.vbsファイルを取得後、fileコマンドでこの.vbsファイルをチェックしてからshasumコマンドでSHA256値を計算します。
この一連の手順を行うさいは、図9〜14を参考にしてください。
図9 TCPストリームウィンドウ上の[全体の対話]が選択されているドロップダウンボックスから「103.91.92.1:80 → 10.1.29.101:49679 (2177 kB)」を選択し、サーバーからのレスポンストラフィックのみを表示させる
図10 [としてデータを表示して保存する]ドロップダウンボックスを[ASCII]から[Raw(無加工)形式]に変更する
図11 データをバイナリとして保存。この例では「9312.zip.bin」というファイル名で保存している
図12 任意のバイナリエディタで保存したバイナリデータ(9312.zip.bin)を開き、zipアーカイブの最初の2バイト(ASCIIでは「PK」と表示)より前にあるHTTPリクエストヘッダを削除。たいていのバイナリエディタでは、カーソルで先頭から「PK」より前の部分をなぞって選択した上でDeleteキーを押下すれば削除できる
図13 バイナリエディタ上でファイルをzipアーカイブとして保存(ここでは「9312.zip」として保存)
図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参照)。
図15 分析中のpcapからQakbot実行可能ファイルのURLを見つける
ではここで図16を参考に、このオブジェクトをpcapから [ファイル]メニュー、[オブジェクトのエクスポート]、[HTTP] の順にクリックしてエクスポートしてください。つづいて図17を参考にエクスポートした結果をチェックしてください。
図16 pcapからQakbotのWindows実行可能ファイルをエクスポートしたところ
([ファイル]メニュー、[オブジェクトのエクスポート]、[HTTP]の順にクリックし、パケット2957のalphaenergyeng[.]comの行を選択して[Save]をクリックする)
図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トラフィックのインジケータが複数表示されるはずです。
図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に示した手順で証明書発行者データが見つかるまでフレームの詳細ウィンドウを展開していきます。
図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から抽出したこの活動を示しています。
図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」と入力してください)
図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が含まれています。
図22 Internet Explorer 11を使用するstore.nvprivateoffice[.]comへのQakbotトラフィック。
User-Agent設定は Windows 10 ホスト上の Internet Explorer 11 のもの
図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)
図25 Qakbot感染トラフィックに含まれるweb以外のトラフィックがどのようなものかをおおまかにつかむ
図25は、さまざまな電子メールプロトコルで一般的に使用されている25、110、143、465、587、993、995などのポートへのTCP接続と、試行されたTCP接続を示しています。結果の最初の2行は65400/tcpへのトラフィックを示していますが、関連するTCPストリームを確認すると、これも電子メール関連のトラフィックであることがわかります。
次のWiresharkフィルタを使用して、感染ホストからの電子メール関連のトラフィックの詳細を確認してください(図26参照)。
smtp or imap or pop
図26 pcap内でQakbotが生成した電子メール関連のトラフィックを見つける
この手の電子メールトラフィックについてもっとよく把握するにはいくつかTCPストリームを追跡してみるとよいでしょう。通常であれば、WindowsクライアントからパブリックなIPアドレスに対してこのように暗号化されていない電子メールのトラフィックを見かけることはまずありません。他のインジケータと合わせれば、このsmtp、imap、popフィルタからQakbotによる活動が明らかになることもあります。
結論
本チュートリアルでは、QakbotマルウェアによるWindows感染を調べるさいのヒントを見ていきました。Qakbotによる最近の活動サンプルについては malware-traffic-analysis.netにも多数掲載しています。
『Wiresharkによるパケット解析講座』シリーズの以前の講座は以下から確認してください。