QtとMQTTを利用するAPTグループ「Mustang Panda」の最新バックドア「MQsTTang」を解説
ESETの研究者が、Mustang Pandaが使用しているMQTTプロトコルで通信する新しいバックドア、MQsTTangの詳細を解説します。
ESETの研究者が、Mustang Pandaが使用しているMQTTプロトコルで通信する新しいバックドア、MQsTTangの詳細を解説します。
ESETの研究者は、APTグループ「Mustang Panda」が使用していると考えられる新しい独自のバックドア「MQsTTang」を分析しました。このバックドアは、2023年1月初旬から現在も続いているキャンペーンで利用されています。このグループが使用している多くのマルウェアとは異なり、MQsTTangは既存のマルウェア系統や公開されているプロジェクトをベースにしていないと考えられます。
Mustang Pandaは、カスタマイズされたKorplugの亜種(別名:PlugX)やペイロードをロードする精巧な仕組みを確立していることが知られています。MQsTTangは、従来の戦術とは異なり、攻撃のステージが1回のみであり、難読化の手法が一切使用されていません。
ESETは、テレメトリデータ(監視データ)からブルガリアとオーストラリアの組織が標的となっていることを確認しました。また、このキャンペーンが台湾の政府機関を標的にしていることを示す情報もあります。しかし、使用されているおとりファイルの名前から、欧州やアジアの政治団体や政府機関も標的となっている可能性があります。これは、Mustang Pandaが最近実行した他のキャンペーンの標的とも一致しています。Proofpointのセキュリティリサーチャーがレポートを公開しているように、Mustang Pandaは少なくとも2020年からヨーロッパの政府機関を標的にしており、ロシアのウクライナ侵攻以来、欧州での活動をさらに活発化させています。図1は、このキャンペーンの標的となっている可能性がある国を示しています。
ESETは、この攻撃の痕跡(以下のセクションを参照)を特定しており、この新たなバックドアとキャンペーンがMustang Pandaによって実施されている可能性が極めて高いと考えています。
ESETは、ユーザーYanNaingOo0072022の2つのGitHubリポジトリに、MQsTTangの検体が含まれるアーカイブを発見しました。同じユーザーの別のGitHubリポジトリは、Avastが2022年12月のブログで説明している過去のMustang Pandaキャンペーンで使用されています。
今回のキャンペーンで使用されたサーバーの1つは、一般にアクセス可能な匿名のFTPサーバーを実行していました。これはツールやペイロードをステージングするために使用されていると考えられます。このサーバーの/pub/godディレクトリには、過去のMustang Pandaキャンペーンで使用されていた複数のKorplugローダー、アーカイブ、およびツールがあります。これは、前述のAvastのブログでも説明されているステージングサーバーが使用していたディレクトリと同じです。このサーバーには/pub/gdディレクトリも存在しています。これも過去のキャンペーンで使用されていたパスです。
このキャンペーンで使用されたインフラの一部は、過去のMustang Pandaサーバーのネットワークフィンガープリントとも一致します。
MQsTTangは、被害者のマシンで任意のコマンドを実行し、その出力を取得するための最低限の機能を実装するバックドアです。しかし、C&Cとの通信にMQTTプロトコルを使用していることが大きな特徴であり、注意が必要です。MQTTプロトコルは通常、IoTデバイスとコントローラとの通信に使用されますが、過去に検出されているマルウェア系統ではほぼ使用されたことがありません。過去にMQTTが使用された例の1つが、Chrysaorです。これは、Androidユーザーを標的としており、Pegasusとも呼ばれています。攻撃者から見たMQTTの利点の1つは、攻撃インフラをブローカーの背後に隠ぺいできることであり、感染したマシンがC&Cサーバーと直接通信することはありません。図2に示すように、この機能はオープンソースのQMQTTライブラリを使用しています。このライブラリはQtフレームワークを利用しており、このフレームワークの大部分がマルウェアで静的にリンクされています。マルウェアの開発にQtフレームワークが使用されるのは非常に珍しいことです。QTフレームワークを使用する過去の例には、APTグループのLazarusが使用しているMagicRATがあります。
MQsTTangは、単一の実行ファイルのみが含まれるRARアーカイブとして配信されます。これらの実行ファイルには通常、外交やパスポートに関連する以下のような名前が付けられています。
これらのアーカイブは、関連性のないドメイン名のWebサーバーでホストされています。この事実とファイル名から、このマルウェアはスピアフィッシングによって拡散されていると考えられます。
現在までESETは、いくつかの検体しか確認できていません。これらの検体の内容は酷似しており、一部の定数やハードコードされた文字列が異なっているだけです。最新のバージョンにおける唯一の大きな変更は、分析を妨害するためのいくつかの技術が追加されたことです。これらの手法の1つは、Windows API関数のCreateToolhelp32Snapshotを使用して、実行中のプロセスを繰り返し処理し、以下の既知のデバッガや監視ツールを探します。
なお、このマルウェアは32ビットの実行ファイルですが、x64dbgの存在のみを確認し、もう一方の32ビットのx32dbgの存在は確認しません。
2つ目の手法は、Windows APIであるFindWindowWを使用して、既知の分析ツールが使用する以下のWindowクラスとタイトルを検索します。
マルウェアを直接実行すると、コマンドラインの引数として1を使用して、自身のコピーを起動します。これを新しいプロセスで繰り返し、実行のたびに引数を1ずつ増やしていきます。この引数がある値になったとき、特定のタスクが実行される仕組みになっています。なお、特定のタスクが実行される正確な値は検体によって異なります。以下に示す値は、SHA-1 02D95E0C369B08248BFFAAC8607BBA119D83B95Bの検体に対応しています。しかし、実行されるタスクとその実行順序は同じです。
図3に、マルウェアの初回実行時に実行されるタスクとその動作の概要を示します。
表1に、タスクのリストと、それぞれのタスクが実行される値を示します。これらのタスクと値について以下で詳しく説明します。
タスク番号 | 引数値 | タスクの説明 |
---|---|---|
1 | 5 | C&Cとの通信を開始します。 |
2 | 9 | コピーを作成して実行します。 |
3 | 32 | 常駐化のためのコピーを作成します。 |
4 | 119 | 常駐します。 |
5 | 148 | 再帰的な実行を停止します。 |
表1:このバックドアで実行されるタスク
上記で説明した手法で分析ツールやデバッガが検出された場合、タスク1の動作を変更し、タスク2、3、4が完全にスキップされます。
MQsTTangはMQTTプロトコルを介してC&Cサーバーと通信します。観測されたすべての検体は、ブローカーとして3.228.54.173を使用しています。このサーバーは、QMQTTライブラリを保守しているEMQXが運営するパブリックブローカーです。これは、ネットワークトラフィックを正規のように見せかけ、Mustang Pandaのインフラを隠ぺいする方法かもしれません。また、このパブリックブローカーを使用することで、レジリエンスが強化される側面があります。多くの正規ユーザーがいるため、サービスが停止する可能性は低く、現在利用されているC&Cサーバーが禁止またはテイクダウンされても、Mustang Pandaは新しいサーバーを立ち上げ、MQsTTangの運用を中断することなく同じMQTTトピックを使用できます。
しかし、今回のキャンペーンは、Mustang Pandaが独自のブローカーを確立するために時間とリソースを投資すべきか決定するためのテストである可能性もあります。この仮説は、ESETが確認している検体数が少ないことと、MQsTTangが非常に簡易であることに基づきます。
図4に示すように、マルウェアとC&Cサーバーは、2つのMQTTトピックを使用して通信を行います。最初のトピックであるiot/server2は、クライアントからサーバーへの通信に使用されます。2つ目のトピックは、サーバーからクライアントへの通信に使用されます。このトピックは、iot/v2/<Unique ID>の形式になっており、<Unique ID>は、UUIDの最後の8バイトを16進数の形式で取得して生成されます。解析ツールが検出される場合、server2とv2はそれぞれserver0とv0に置換されます。これは、マルウェアの実行を早期に完全に中止して、防御側に検出されないようにすることを目的としているためでしょう。
サーバーとクライアントとの通信はすべて同じ符号化方式を使用します。MQTTメッセージのペイロードは、msgという単一の属性を持つJSONオブジェクトです。この属性値を生成するために、実際のコンテンツは、最初にbase64でエンコードされ、次にハードコードされた文字列nasaとXORされて、再びbase64でエンコードされます。これらのペイロードの詳細な形式については、以下のセクションで説明します。
ブローカーに初めて接続すると、このマルウェアは固有のトピックをサブスクライブします。その後、30秒ごとにクライアントはサーバーのトピックにKeepAliveメッセージをパブリッシュします。このメッセージのコンテンツは、以下の形式のJSONオブジェクトです。
サーバーはコマンドを実行するときに、クライアントの固有トピックにメッセージをパブリッシュします。このメッセージの平文の内容は、単に実行されるコマンドになっています。図5に示すように、クライアントは受信したコマンドをQtフレームワークのQProcess::startCommandを使って実行します。
QProcess::readAllStandardOutputを使用して取得した出力は、以下の形式のJSONオブジェクトで送信されます。
標準出力のコンテンツのみが送信されるため、サーバーはエラーや警告を受け取ることはありません。サーバー側から見れば、何らかのリダイレクトが行われない限り、コマンドが失敗した場合でも、何も出力しないコマンドと区別することができません。
2つ目と3つ目のタスクは、非常に似ています。これらは、マルウェアの実行ファイルをハードコードされたパス(c:\users\public\vdump.exeとc:\users\public\vcall.exe)にコピーします。使用されるファイル名は検体によって異なりますが、必ずC:\users\publicに保存されます。
2番目のタスクでは、次に、コマンドライン引数97を指定して、新しく作成したコピーを実行します。
4番目のタスクによってバックドアが標的のマシンに常駐します。HKCU\Software\Microsoft\Windows\CurrentVersion\Runレジストリキーにあるc:\users\public\vcall.exeに、新しい値qvlcが設定されます。これにより、マシンを起動するときにマルウェアが実行されるようになります。
マシンの起動時に、MQsTTangがc:\users\public\vcall.exeとして実行されるときには、C&Cとの通信タスクのみが実行されます。
この記事で紹介したMustang Pandaのキャンペーンは、この記事を執筆している時点でも継続しています。この攻撃の標的となっている組織などの全容は明らかになっていませんが、おとりファイルの名前は、これまでにMustang Pandaが他のキャンペーンで標的としてきた欧州の政治団体と一致しています。
この新しいMQsTTangバックドアは、このグループが使用している他のマルウェア系統で見られるオプション機能は一切使用しておらず、リモートシェルだけを利用します。これはMustang Pandaが、MQsTTangに新しいテクノロジーを取り入れることを模索していることを示しています。このバックドアがMustang Pandaの攻撃ツールとして今後繰り返し使用されるようになるかどうかはまだ分かりませんが、同グループがマルウェアを開発および展開するサイクルの速さを示す一例と言えるでしょう。
SHA-1 | ファイル名 | 検出 | 説明 |
---|---|---|---|
A1C660D31518C8AFAA6973714DE30F3D576B68FC | CVs Amb.rar | Win32/Agent.AFBI | MQsTTangバックドアを配信するために使用されるRARアーカイブ。 |
430C2EF474C7710345B410F49DF853BDEAFBDD78 | CVs Amb Officer PASSPORT Ministry Of Foreign Affairs.exe | Win32/Agent.AFBI | MQsTTangバックドア。 |
F1A8BF83A410B99EF0E7FDF7BA02B543B9F0E66C | Documents.rar | Win32/Agent.AFBI | MQsTTangバックドアを配信するために使用されるRARアーカイブ。 |
02D95E0C369B08248BFFAAC8607BBA119D83B95B | PDF_Passport and CVs of diplomatic members from Tokyo of JAPAN.eXE | Win32/Agent.AFBI | MQsTTangバックドア。 |
0EA5D10399524C189A197A847B8108AA8070F1B1 | Documents members of delegation diplomatic from Germany.Exe | Win32/Agent.AFBI | MQsTTangバックドア。 |
982CCAF1CB84F6E44E9296C7A1DDE2CE6A09D7BB | Documents.rar | Win32/Agent.AFBI | MQsTTangバックドアを配信するために使用されるRARアーカイブ。 |
740C8492DDA786E2231A46BFC422A2720DB0279A | 23 from Embassy of Japan.exe | Win32/Agent.AFBI | MQsTTangバックドア。 |
AB01E099872A094DC779890171A11764DE8B4360 | BoomerangLib.dll | Win32/Korplug.TH | Mustang Pandaの既知のKorplugローダー。 |
61A2D34625706F17221C1110D36A435438BC0665 | breakpad.dll | Win32/Korplug.UB | Mustang Pandaの既知のKorplugローダー。 |
30277F3284BCEEF0ADC5E9D45B66897FA8828BFD | coreclr.dll | Win32/Agent.ADMW | Mustang Pandaの既知のKorplugローダー。 |
BEE0B741142A9C392E05E0443AAE1FA41EF512D6 | HPCustPartUI.dll | Win32/Korplug.UB | Mustang Pandaの既知のKorplugローダー。 |
F6F3343F64536BF98DE7E287A7419352BF94EB93 | HPCustPartUI.dll | Win32/Korplug.UB | Mustang Pandaの既知のKorplugローダー。 |
F848C4F3B9D7F3FE1DB3847370F8EEFAA9BF60F1 | libcef.dll | Win32/Korplug.TX | Mustang Pandaの既知のKorplugローダー。 |
IP | ドメイン | ホスティングプロバイダー | 最初に確認された日付 | 詳細 |
---|---|---|---|---|
3.228.54.173 | broker.emqx.io | Amazon.com, Inc. | 2020-03-26 | 正規のパブリックMQTTブローカー。 |
80.85.156[.]151 | N/A | Chelyabinsk-Signal LLC | 2023-01-05 | MQsTTangを配信するサーバー。 |
80.85.157[.]3 | N/A | Chelyabinsk-Signal LLC | 2023-01-16 | MQsTTangを配信するサーバー。 |
185.144.31[.]86 | N/A | Abuse-C Role | 2023-01-22 | MQsTTangを配信するサーバー。 |
この表は、MITRE ATT&CKフレームワークのバージョン12を使用して作成されています。
手法 | ID | 名前 | 説明 |
---|---|---|---|
リソース開発 | T1583.003 | インフラストラクチャの取得:仮想プライベートサーバー | このキャンペーンで使用されているサーバーは、共有ホスティングを利用しています。 |
T1583.004 | インフラストラクチャの取得:サーバー | キャンペーンで使用されているサーバーには、Mustang Pandaが専用で使用しているサーバーも存在する可能性があります。 | |
T1587.001 | 能力の開発:マルウェア | MQsTTangは独自のバックドアであり、Mustang Pandaによって開発された可能性が高いです。 | |
T1588.002 | 機能の取得:ツール | ステージングサーバーでは、psexec、ps、curl、plinkなどの複数の正規のオープンソースツールが見つかっています。 | |
T1608.001 | ステージングサーバーの能力:マルウェアのアップロード | MQsTTangはWebサーバーにアップロードされて配信されています。 | |
T1608.002 | ステージングサーバーの能力:アップロードツール | 複数のツールがFTPサーバーにアップロードされています。 | |
初期アクセス | T1566.002 | フィッシング:スピアフィッシングリンク | MQsTTangは、スピアフィッシングによって配信されます。これは、攻撃者が管理するWebサーバーにある悪意のあるファイルにリンクしています。 |
実行 | T1106 | ネイティブAPI | MQsTTangは、QtフレームワークのQProcessクラスを使用して、コマンドを実行します。 |
T1204.002 | ユーザーによる実行:悪意のあるファイル | MQsTTangは、悪意のあるファイルのダウンロードと実行をユーザーに依存します。 | |
常駐化 | T1547.001 | ブートまたはログオン自動起動:Runレジストリキーやスタートアップフォルダの悪用 | MQsTTangはレジストリのRunキーを作成して常駐化します。 |
防衛機能の回避 | T1036.004 | なりすまし:タスクまたはサービスのなりすまし | 多くのサンプルで、レジストリキーはqvlcという名前で作成されています。これは、VLCが使用する正規の実行ファイル名と一致します。 |
T1036.005 | なりすまし:正規のモジュールの名前や場所を模倣する | コピーを作成するときに、MQsTTangは正規のプログラムのファイル名を使用します。 | |
T1480 | 実行ガードレール | MQsTTangは、実行元のパスをチェックして、実行するタスクを決定します。 | |
T1622 | デバッガの回避 | MQsTTangは実行中のデバッガを検出し、デバッガが存在することが判明すると、動作を変更します。 | |
C&C(コマンド&コントロール) | T1071 | アプリケーションレイヤープロトコル | MQsTTangは、MQTTプロトコルを使用してC&Cサーバーと通信します。 |
T1102.002 | Webサービス:双方向通信 | MQsTTangは正規のパブリックMQTTブローカーを使用します。 | |
T1132.001 | データのエンコーディング:標準エンコーディング | マルウェアとサーバー間のメッセージの内容はbase64でエンコードされます。 | |
T1573.001 | 暗号化されたチャンネル:対称暗号方式 | マルウェアとサーバー間のメッセージのコンテンツは、XORキーが繰り返し使用されて暗号化されます。 | |
情報の外部への送信 | T1041 | C&Cチャネルからの送信 | 実行されたコマンドの出力は、同じプロトコルを使用してサーバーに送信されます。 |