中国との関連が指摘される新たな攻撃グループCeranaKeeper:執拗かつ変幻自在な攻撃を展開

ESETは、2023年からタイの政府機関を標的とした攻撃キャンペーンを確認しました。これらの攻撃は、中国とつながりがあるとされるAPTグループ「Mustang Panda」に帰属するとされたコンポーネントの改良版と、PastebinやDropboxなどのサービスを悪用して機密文書を流出させる新しいツールセットを使用していました。

ESETの研究者は、2023年からタイの政府機関を標的とした複数の攻撃キャンペーンを確認しました。これらの攻撃は、以前他の研究者によって、中国とつながりがあると思われる高度持続的脅威(APT)グループ「Mustang Panda」に帰属するとされたコンポーネントの改良版と、Pastebin、Dropbox、OneDrive、GitHubなどのサービスプロバイダーを悪用して、侵害されたコンピューター上でコマンドを実行し、機密文書を流出させる新しいツールセットを活用していました。

ESETの独自調査の結果、ESETはこの一連の活動を別のグループとして追跡することにしました。このグループのツールのコードには、[Bb]ectrlという文字列が多数出現していたことから、私たちはこのグループをCeranaKeeper名付けました。これは、Beekeeper(養蜂家)という単語と、Apis Cerana(東洋ミツバチ)というアジアに生息するミツバチの名称をかけた言葉遊びです。

本ブログの要点:

  • ESETの研究者は、タイの政府機関を標的にした新たな中国政府との関連が指摘されるサイバースパイグループCeranaKeeperを発見しました。そのツールの一部は、以前他の研究者によってMustang Pandaに帰属するとされていました。
  • このグループは、検出を回避するためにバックドアを常に更新し、大規模なデータ流出を支援するためにその手法を多様化しています。
  • CeranaKeeperは、DropboxやOneDriveといった一般的で正規のクラウドサービスやファイル共有サービスを悪用して、カスタムバックドアや流出ツールを実装しています。
  • このグループは、GitHubのプルリクエスト機能とコメント機能を使ってステルス性のリバースシェルを作成し、コードの共有と共同作業のための人気のあるオンラインプラットフォームであるGitHubをC&Cサーバーとして利用しています。

概要

CeranaKeeperは、少なくとも2022年の初めには活動を開始し、中国政府との関連が指摘されるサイバースパイグループであり、その主な標的は東南アジアの政府機関です。このグループは、文書化されているコンポーネントTONEINS、TONESHELL、PUBLOADや、一般公開されているツールの使用、クラウドおよびファイル共有サービスを利用したデータ流出手法で知られています。CeranaKeeperの活動の一部は、Talos [1]、Trend Micro [2]、およびPalo Alto NetworksのUnit 42[3]の分析により、Mustang Panda(別名Earth PretaまたはStately Taurus)に帰属するとされています。後述するように、ESETでは公開されているレポート、ならびにこのグループに対するESETの独自調査を分析した結果、この一連の活動を、ESETが「CeranaKeeper」と命名した別の攻撃者による活動として追跡することにしました。

2023年、ESET Researchはタイの政府機関を標的としたCeranaKeeperによる複数の攻撃キャンペーンを確認しました。これらの攻撃では、前述のコンポーネントの改良版と、Pastebin、Dropbox、OneDrive、GitHubなどのサービスプロバイダーを悪用する新しいツールセットを利用して、侵害したコンピュータ上でコマンドを実行し、機密文書を流出させていました。

いずれの攻撃においても、このグループの創造性と適応能力の高さが際立っていましたが、それよりも重視すべきは、その攻撃性と貪欲さです。ネットワーク内に足場を築いたオペレーターたちは、ラテラルムーブメントを行い、侵害した特定のマシンをプロキシに、あるいはアップデートサーバーに変えようとします。

このようなオペレーターは来る日も来る日も、新しい流出ツールやバックドアを継続的に展開することによって、可能な限り多くの情報の流出を試みます。場合によってはドライブ全体をトラバースするためにワイルドカード表現を多用することからも、目的が大規模なデータ吸い上げであることは明白でした。ESETは、このグループがより高いレベルでの隠蔽を達成する目的で、多種多様なコンポーネントを粘り強く実装、更新しようとする過程を観察、分析することに成功しました。また、彼らは誤ってコード内にメタデータを残していたため、開発プロセスについていくつかの洞察を得ることができました。

本ホワイトペーパーの前半では、このグループが標的にアクセスし、ネットワーク全体を侵害するためにラテラルムーブメントを実行する際に使用するさまざまな方法について説明します。次に、バックドアが仕込まれたシステムに配信され、データをギガバイト単位で流出させるために使用された使い捨てツールについて説明します。最後に、これまで蓄積した知識に基づいて、この一連の攻撃がどこに帰属するのかについてESETの見解を述べます。

侵害したマシンをアップデートサーバーにする

CeranaKeeperが使用した侵入経路はまだ発見されていません。その一方で、このグループは、ローカルネットワーク上の他のマシンにアクセスするために、いくつかのラテラルムーブメント手法を使用していました。ESETの調査では、2023年の中頃、侵害されたマシンがタイ政府機関のローカルネットワーク内のドメインコントローラサーバーに対してブルートフォース攻撃を行ったことが判明しています。攻撃は成功し、攻撃者はこのマシンに特権アクセスでログインできたようです。攻撃者はTONESHELLバックドアをインストールし、数時間後、WindowsのMiniDumpWriteDump 関数 を使用してメモリから認証情報をダンプする簡単なツールを展開しました[4] [5]。
その後、攻撃者は正規のAvastドライバであるaswarpotx64.sys [6] [7]をカスタムユーザーランドアプリケーションと併せて使用し、サーバー上で実行されているセキュリティ製品をすべて終了させました。この手法はBYOVD(Bring Your Own Vulnerable Driver :脆弱なドライバの持ち込み)[8]と呼ばれるものです。

オペレーターはこの侵害したサーバーから、リモート管理コンソールを使用して、ネットワーク内の他のコンピュータにバックドアを展開し、実行しました。オペレーターはまず、侵害したマシン上の既存のリモートシェル接続を使用して、アップデートスクリプトをドロップして実行しました。このBATスクリプトは、一時ファイルホスティングWebサイト tmpfiles[.]orgからMSIアーカイブをダウンロードして実行し、バックドアの現行バージョンを終了させ、新しいバージョンを実行するスケジュールタスクを作成し直しました。

アップデートが数回行われた後、オペレーターは、バックドアのアップデートを保存するために、侵害したサーバー上の特権アクセスを活用することにしました。すでに権限を昇格して、そのマシン上のすべてのセキュリティ製品を無効にしていたため、攻撃者のステルス性は一層高まりました。侵害したドメインコントローラのリモート管理コンソールを再度使用することで、新しいBATスクリプトが配信され、ネットワーク内のマシンで実行されました。当該のスクリプト(一部編集済み)を以下のコードスニペットに示します。

このBATスクリプトは、オペレーターが検出を回避しようと苦心していることを表しており、特に興味深いと言えます。オペレーターは、自らが作成したファイルやスケジュールタスクに正規の名前を付け、インストールが完了すると、アップデートスクリプトとアーカイブを削除します。

攻撃者はドメインコントローラを悪用することで、サーバーのドメイン管理者権限を取得し、リモート管理コンソールを介して同じドメイン内の他のマシンにもアクセスできるようになりました。これにより、攻撃者は次の段階へと進み、データ窃取という真の目的を達成することができました。

大規模なデータ流出

攻撃者はTONESHELLバックドアを展開し、いくつかのラテラルムーブメントを実行した後、これまで文書化されていないカスタムツールを展開するために、いくつかの侵害されたコンピュータを発見し、選択したようです。これらの支援ツールは、公共のストレージサービスに文書の流出させるために使用されましたが、代替のバックドアとしても機能していました。

これらのツールが開発され展開されたという事実は、その活動をカモフラージュする目的でツールセットを多様化し、その流出手法を正規のサービスプロバイダーに移行させたいというグループの願望を示しています。非常に奇妙なことに、攻撃グループが多くの時間を費やしてこれらの手法を実装したにもかかわらず、ほとんどの手法は2~3回しか使用されませんでした。

Palo Alto Networks Unit 42の調査 [3]のExfiltration(漏出)セクションで説明されているように、過去のキャンペーンではrar.exeを使用して目的のファイルを収集し、アーカイブしていました。その後、curl.exeプログラムが実行されて、圧縮されたデータがFTPサーバーまたはファイルホスティングサービスのDropboxに流出しました。

ESETが2023年6月に発見した一連の未知のコンポーネントのひとつが、この流出方法のPython実装に若干の修正を加えたものでした。

WavyExfiller:Pythonアップローダー

ESETが分析したサンプルは、PyInstaller [9]を使用してコンパイルされたPythonパッケージでした。このパッケージには、コンパイルされた悪意のあるスクリプトupload2.pycが含まれています。このスクリプトの拡張子.wav には、圧縮して流出させる文書の検索に使用されるファイルマスクが含まれていることから、ESETはこのスクリプトを「WavyExfiller」と命名しました。 Pythonパッケージ自体には、好都合なことにSearchApp.exeという名前が付けられており、SHA-2はE7B6164B6EC7B7552C93713403507B531F625A8C64D36B60D660D66E82646696です。

スクリプトを逆コンパイルすると、以下の3つの主要な関数が見つかりました。

  • auth:暗号化されたDropboxトークンをPastebinページから取得する。
  • backup:全ユーザーの個人ディレクトリの下にあるすべてのドキュメントの、パスワードで保護されたRARアーカイブを作成する。
  • upload:公式のPython向けDropbox SDK [10] を使用して、Dropboxにアーカイブをアップロードする。

図1に示すように、 WavyExfillerはhttps://pastebin[.]com/raw/5yympk1Qから文字列を取得し、シーザー暗号 [11] で復号します。 この例では、サンプルにハードコードされている従来型の左シフト3(または-3)の復号鍵を使用しています。復号の結果として得られるのは、Dropboxトークンです(図1を参照)。

このPastebinページは期待されるトークンを提供しなくなっており、代わりにエラーメッセージを返す点に注目してください。backupメソッドは、以下の形式のWinRARコマンドを2つ実行します。

  • C:\ProgramData\Microsoft\Rar.exe a -r -v50m -n@C:\Windows\media\check.wav - ta000000 -hp[REDACTED] c:\windows\help\en-us\<HOSTNAME>c.rar c:\users\*.*
  • C:\ProgramData\Microsoft\Rar.exe a -r -v50m -n@C:\Windows\media\check.wav - ta000000 -hp[REDACTED] c:\windows\help\en-us\<HOSTNAME>d.rar D:\*.*

実行されるアーカイブコマンドは、以下のWinRARスイッチを使用します。

  • r - ディレクトリの再帰処理。
  • v - 「ボリューム 」を必要なだけ(最大50MB)作成する。
  • n@ - ファイルマスクのリストが含まれている特定のファイルを読み取るようにWinRARに指示する。
  • ta - 指定された日付以降に変更されたファイルのみを処理する。
  • hp - パスワード[REDACTED]を使用する。

上記のコマンドからわかるように、CeranaKeeperはかなり貪欲にファイルを窃取しようとします。アーカイブはc:\windows\help\en-us\フォルダに保存され、upload 関数はDropbox APIのfiles_upload [12] メソッドを使用してアーカイブを流出させるだけです。スクリプトは、終了前にアーカイブを削除します。

PixelDrainの亜種

2023年10月、oneDrive.exeという名前の下に隠された亜種が検出されました(SHA-2: 451EE465675E674CEBE3C42ED41356AE2C972703E1DC7800A187426A6B34EFDC) 。この新しい亜種は、ファイル共有サービスPixelDrain を使用してアーカイブされたファイルを流出させます。APIキーは、Pastebinから取得するのではなく、コンパイルされたスクリプト内にハードコードされています。ただし、PixelDrain APIドキュメント [13]によると、アップロードされたファイルを一覧表示するには認証が必要であるため、流出させる操作が成功したかどうかを確認することはできませんでした。

この亜種では貪欲さのレベルがさらに上がっており、マップされている可能性のあるDからNまでの他のドライブからファイルを収集しようとしていました(図2を参照)。

DropboxFlop:Dropboxを悪用するPythonバックドア

ESETは2023年10月、PixelDrainの亜種を発見したのと同時期に、新たなPyInstallerパッケージを発見しました。このサンプルのSHA-2ハッシュは、DAFAD19900FFF383C2790E017C958A1E92E84F7BB159A2A7136923B715A4C94Fです。抽出後、 dropboxflop.pycというコンパイルされたPythonファイルに目が留まりました。CeranaKeeperはdropflop_client [14]という一般に公開されているプロジェクトを使用して、アップロード/ダウンロード機能を持つリバースシェルを入手したようです。

以前から文書化されていたauth メソッドは、今なお(getAuthとして)存在しています。このメソッドは、https://pastebin[.]com/raw/9T1qFbsbへのGETリクエストを介して暗号化されたDropboxトークンを取得します。ただ残念なことに、これは現在利用できません。

DropboxFlopは、リモートのDropboxリポジトリ内のファイルの存在に大きく依存しています。バックドアはまず、<コンピュータ名>-<整数で表したMAC>という名前のフォルダを作成し、ユーザーが管理者である場合はSYSを付けます(図3を参照)。

このインプラントは、ハートビートメカニズムとして機能するagentNotifierクラスオブジェクトをインスタンス化します。これは、lasttimeというファイルを15秒ごとに現在時刻のUnixエポック値で更新します。

taskCheckerクラスオブジェクトもインスタンス化され、tasksという名前のファイルが存在するかどうかをチェックします。存在している場合、インプラントはそのファイルをJSONファイルとしてダウンロードし、解析します。バックドアは、tasksオブジェクトの配列を受け取り、各オブジェクトに対して、COMMAND オブジェクトに関連付けられた文字列を新しいプロセスで実行し、その結果を匿名パイプを介して取得し、outputファイルのコンテンツを更新することによって結果を送信します(図4を参照)。

OneDoor:OneDriveを悪用するC++バックドア

CeranaKeeperは、PythonバックドアであるDropboxFlopを仕掛けた数日後、OneDriveを悪用する、静的にリンクされたC/C++バックドアを携えて戻ってきました(ESETはこのバックドアを「OneDoor」と命名)。検体(SHA-2: 3F81D1E70D9EE39C83B582AC3BCC1CDFE038F5DA31331CDBCD4FF1A2D15BB7C8)には、OneDrive.exeという名前が付けられていました。
このファイルは、Microsoftの正規の実行ファイルになりすましています(図5のプロパティ・ビューを参照)。

このマルウェアには、HTTPSTEST.exeという内部名を示すエクスポートディレクトリが含まれています。この実行ファイルは、静的にリンクされたcJSON [15] ライブラリバージョン1.7.15に属する92個の関数をエクスポートします。さらに、OpenSSL 1.1.0fとcurl 7.55.0も静的にリンクされています。

OneDoorは、DropboxFlopバックドアとよく似た動作をしますが、コマンドの受信とファイルの外部への送信にはMicrosoft Graph API [16] のOneDrive REST APIを使用します。

まず、BCLog.txtというログファイルを作成し、同じディレクトリにあるconfig.iniというファイルへのアクセスを試みます。このファイルが存在しない場合、マルウェアはハードコードされたバッファを使用しますが、このサンプルでは空になっています。このファイル(またはバッファ)は16バイト長のキーで始まり、その後に16バイト長の初期化ベクトル(IV)が続きます。残りのデータは、base64アルゴリズムを使用してデコードされます。デコードされた後は、CBCモードのAES-128を使用して復号されます。平文には通常、URLが含まれています。

このコンポーネントは静的にリンクされたlibcurlライブラリを使用して、以下の汎用User-Agentヘッダーとともに、復号されたURLに対してHTTP GETリクエストを送信します。

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36

レスポンスには通常、文字列Authorization: Bearerを先頭に付けたグローバル変数に格納されたOneDriveトークンが含まれています。Microsoft OneDriveへのすべてのリクエストは、同じUser-Agentを使用し、取得したトークンを使用します。

OneDoorは、https://graph.microsoft.com/v1.0/me/drive/special/approotにHTTP GETリクエストを発行することで、特別なフォルダapproot [17] のIDを取得します(図6を参照)。

approotフォルダはアプリケーションの個人用フォルダを表します。クエリの結果は、id 要素が抽出されグローバル変数に格納されたJSON形式のバッファです。 このフォルダから、フォルダEFDid が取得されます。これらのフォルダはそれぞれ、以下のセクションで詳しく説明する特定の目的に使用されます。

config.iniファイルのデコードおよび復号と同様に、マルウェアはファイルerrors.logの平文を取得するか、それが存在しない場合にはハードコードされたバッファの内容を取得します。復号されたデータには通常、PGPで暗号化された公開鍵が含まれます。また、このケースでは1024ビットのRSA鍵が含まれます。図7に、ESETが開発したヘルパースクリプトの出力結果を示します。

16バイト長のキーとIVがランダムに生成され、PKCS #1パディングと復号された公開鍵を使用してRSAで暗号化されます。暗号文は、graph.microsoft.com/v1.0/me/drive/items/<approot_id>:/cowork.txt/contentへのHTTP PUT リクエストを使用して、OneDriveのapprootフォルダのcowork.txtファイルにアップロードされます。
<approot_id>は、実際の値に置き換わります。

EフォルダとFフォルダのファイルのリストは、 https://graph.microsoft.com/v1.0/me/drive/items//childrenへのGETリクエストにより取得されます。<folder_name>は、2つの文字のうちの1つです。リストはJSONオブジェクトとしてフォーマットされ、子要素ごとに name、id、@microsoft.graph.downloadUrl属性が2つの特別なリストに入れられます(図8を参照)。

各リストに対して、専用のハンドラースレッドが開始されます。両スレッドが、name属性を使用してファイルをダウンロードします。ファイルの内容は、以前に生成されたキーとIVのペアを使用して、CBCモードでbase64によってデコードされ、AES-128によって復号されます。

Eフォルダのスレッド:コマンドの実行

インプラントは、復号されたデータにcmd /cという文字列を連結し、その文字列をCreateProcessACommandLineパラメータとして処理します。https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa結果(標準出力およびエラー)は匿名パイプへのリダイレクトを介して取得されます。

マルウェアは、デコード/復号ルーチンの逆処理を使用してデータを暗号化、エンコードし、Dフォルダに保存します。現在のファイルエントリの属性@microsoft.graph.downloadUrlが、保存先のファイル名として使用されます。アップロードは、cowork.txtファイルのアップロードと同様のPUTリクエストによって行われます。最後に、ファイルエントリがリストから削除され、リモートファイルは graph.microsoft.com/v1.0/me/drive/items/<id&gt;へのDELETEリクエストによってOneDriveから削除されます。 <id>は、現在のファイルエントリのid属性に置き換えられます。

Fフォルダのスレッド:ファイルのアップロード

復号されたデータは一時フォルダに保存されます。この操作が成功したか否かに応じて、マルウェアは前述の暗号化/エンコードルーチンを使用し、以下のいずれかのメッセージを暗号化します。

  • Upload succeed\r\n
  • Upload faild\r\n

これらの変換の結果はDフォルダに保存され、現在のファイルエントリの属性@microsoft.graph.downloadUrlが、保存先のファイル名として使用されます。Eフォルダのスレッドの場合と同様に、現在のファイルエントリはリストから削除され、リモートファイルは OneDrive から削除されます。

BingoShell:GitHubを悪用するPythonバックドア

2024年2月、ESETは、ステルス型のデータ抜き取りとバックドアを目的として既知のサービスプロバイダーを利用する、このグループの一連の最新ツールを確認しました。

分析されたサンプル(SHA-2: 24E12B8B1255DF4E6619ED1A6AE1C75B17341EEF7418450E661B74B144570017)は、 Update.exeという名前の6MBのファイルです。アイコンにMicrosoft Officeのロゴを使用しており、PEコンパイルのタイムスタンプによると、2024年1月下旬に作成されたようです。

実行ファイルからさまざまなPYCファイルを抽出した後、コンパイルされたスクリプトupdate.pyc に目が留まりました。なぜなら、大局的に見ると、このスクリプトはGitHubのプライベートリポジトリをC&Cサーバーとして利用しているからです。 このスクリプトはハードコードされたトークンを認証に使用し、プルリクエスト機能とコメント機能により、実行するコマンドを受け取り、結果を返信します。

図9に、C&Cとの通信を行うスクリプトのコア機能を示します。

BingoShellはまず、現在のユーザーの個人用ディレクトリ内に、.config.config\uploadsという2つの隠しフォルダを作成します。1から10,000までのID番号がランダムに生成され、.config\IDファイルに保存されます。

update.pycpygithubライブラリとハードコードされた個人用アクセストークン(PAT)[18]を使用して、GitHubのプライベートリポジトリに認証アクセスします。メインブランチの最初のコミットによると、このリポジトリは2024年1月24日に作成されたものと思われます。このスクリプトは続いて、share-とそれに続くランダムな6つの小文字で始まる名前の新しいブランチをメインブランチから作成します。この新しいブランチから、文字列「This is a readme file」を含むローカルファイル_file.txtが作成されます。この新しいブランチに対して、プルリクエスト(PR)[19]が作成されます。そのタイトルはbingo# で、その後に以前に生成されたIDが続き、コミットメッセージが図10のように構成されます。

パブリックIPアドレスは、https://ipv4.myip.wtf/textへのリクエストにより取得されます。

最後に、スクリプトは無限ループに入り、新たに作成されたプルリクエストに対する新しい問題コメントの有無をチェックします。取得したコメントがshで始まる場合、Pythonのsubprocessモジュールを介して実行されるコマンドとして処理されます。結果はパイプを介して取得され、プルリクエストに対する新しい問題コメントを追加することで、C&Cに返送されます。

ESETが発見した時点では、GitHubトークンは有効なままでした。ESETは、ブランチを列挙し、すべてのプルリクエストを処理するスクリプトの再現に成功しました。新しいブランチはそれぞれ、侵害したマシンへのアクセスを表していると思われます。残念ながら、ESETが確認した時点では、すべてのプルリクエストはすでにクローズされており、問題コメントも削除されていました。図11に示すように、25件のPRがクローズされていました。以前のバージョンのリバースシェルスクリプトでは、PR名としてAgent#が使用されていたようです。また、ブランチ名はshare-ではなく、feature-で始まっていました。

この最後のコンポーネントからは、GitHubをひそかにC&Cサーバーとして利用する新しい手法と、後片付けを徹底する攻撃者の周到さが分かります。

これまで説明してきたバックドアとデータ流出ツールは、標的のマシンだけに展開されていました。どこに展開するかは、同じ(TONESHELL)バックドアによって開かれたリモートシェルセッション経由で実行された偵察の結果、選択されました。これにより、このツールセットと一般的な攻撃者との間に強固なつながりが生まれました。

攻撃者をCeranaKeeperと特定

ESETはこの知識に基づいて、TTP、コード、メタデータの類似点、およびネットワークインフラストラクチャの相違点を比較することで、この大規模なデータ流出キャンペーンの背後にいる攻撃者を調査しました。

このセクションではまず、侵害されたマシンで発見されたTONESHELLとTONEINSの亜種との関連性を明らかにします。これらのコンポーネントは、Mustang Pandaに帰属するものと一般的に考えられているため、最近の大規模な活動を別の攻撃者によるものとESETが判断した理由について詳しく説明します。

TONESHELLとの明確な関連性の確認

2023年4月、Trend Micro [2]が報告したものと類似するTONESHELLバックドアの亜種(SHA-2: E6AB24B826C034A6D9E152673B91159201577A3A9D626776F95222F01B7C21DB)を分析しました。 このサンプル、特にネットワークパケットヘッダーには、フォーマットとマジックナンバーが共通しているなど、類似点がいくつかあります(図12と図13を参照)。

このサンプルは、ハードコードされたC&Cドメインdljmp2p[.]comにアクセスし、その時点では103.245.165[.]237に解決されました。別の亜種では、inly5sf[.]comが同じIPアドレスに解決されることが確認されています。Stately Taurus [3] に関するUnit 42の記事では、www.uvfr4ep[.]comというドメインが言及されていますが、これは103.27.202[.]185に解決されます。以前のTONEINSコンポーネントの亜種では、www.dl6yfsl[.]comというドメインが同じIPアドレスに解決されることが確認されています。この攻撃者は、C&Cドメインに何らかのドメイン生成アルゴリズム(DGA)[20] を使用しているようです。

分析したサンプルには、変数名やエラーメッセージなどの有用なデバッグ情報が含まれています。注目すべきは、bectrlという単語とQdealQcmdTwoといった特定のC++クラス名への参照がいくつかあることです。最後に、ランダムに生成された被害者識別子を格納するために使用されるレジストリキーHKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\DemeterIDで、Demeterという単語が初めて記述されていることがわかりました。

このサンプルには、Trend Microが報告した亜種よりも多くの機能が備わっていますが、そのほとんどは別のライブラリ(SHA-2:6655C5686B9B0292CF5121FC6346341BB888704B421A85A15011456A9A2C192A)に実装されています。このサンプルに含まれる文字列から、 さらに手がかりとなる情報や、軸となるパターンが明らかになりました。まず、文字列TOnePipeShellTrend Microによって文書化済み [2])の複数のインスタンスと、文字列bectrlが数か所で発見されました(図14を参照)。

2024年初め、ESETはこのTONESHELLの亜種用のローダー(SHA-2: B15BA83681C4D2C2716602615288B7E64A1D4A9F4805779CEBDF5E6C2399AFB5) と、PDBパスG:\Project\Demeter_02\src\Demeter_02_v6.1.0\BypassEset\Release\TurboActivate.pdbを発見しました。Demeter_というキーワードが含まれるファイルを検索している際、ESETはPDBパスがG:\Project\Demeter_02\src\Demeter_NNX_v3.0.0\NetWork\NetWorkFin\Qvarys\sln\yk0022\Releas e\test.pdbであるサンプルのダンプを発見しました。さらに重要なのは、図15に示されているC++ファイルを参照する例外処理用の文字列が含まれていたことですが、それ以外にも、前述のQdealクラスとQcmdTwoクラスを参照する文字列も含まれていました。

注目したもう1つのキーワードが、YKとそれに続く4桁の数字でした。この文字列は、亜種(SHA-2:B25C79BA507A256C9CA12A9BD34DEF6A33F9C087578C03D083D7863C708ECA21のPDBパスC:\Users\admin\source\repos\YK0130\Release\YK0130.pdbに含まれていました。このサンプルは、 www.toptipvideo[.]comに接続する基本的なリバースシェルです。ランタイムタイプ情報(RTTI)[21]からは、Bectrlという名前のC++クラス(マングル形式では.?AVBectrl@@)が明らかになりました。

ここまでの情報を総合すると、すべて同じ攻撃者を指し示していることがわかります。前述した新しいツールセットが、TONESHELLバックドア経由で展開されていることが判明したことから、この攻撃者は新しいコンポーネントセットを開発したか、あるいはアクセス権を有していたと推測できます。また、このグループはTONESHELLコンポーネントのソースコードにアクセスし、新しいバージョンをコンパイルした可能性も高いと考えられます。

しかし、次のセクションで説明するように、ESETはこの攻撃者をMustangPandaとは別のグループとして追跡することにしました。

この攻撃者の名称については、文字列[Bb]ectrlが多数見受けられることに着想を得ました。「CeranaKeeper」は、beekeeper(養蜂家)とミツバチの一種であるトウヨウミツバチ(学名:Apis Cerana [22])をかけ合わせた言葉遊びです。

ミツバチとパンダを見分ける

このセクションの目的は、今後「Mustang Panda」として追跡する攻撃者と、「CeranaKeeper」として追跡する攻撃者を明確に区別することにあります。まず、CeranaKeeperに帰属するものであるとESETが新たに判断した活動に関する公開レポートの概要を説明します。次に、Mustang Pandaに帰属するものと判断した既存の証拠の概要を示します。最後に、最近の大規模な活動を別の攻撃者に帰属するものと判断した理由を説明します。

2022年5月5日に公開された記事 [1] の中で、Talos 研究チームはまず、彼らが「特注のステージングサーバー」と呼ぶ新しいツールセットがMustang Pandaのものであると特定しました。 2022年11月18日には、Trend Microの研究チームが、このツールセットの詳細を公開し 2]、そのコンポーネントをTONEINS、TONESHELL、PUBLOADと命名しました。2023年4月23日、同チームがレポート[23] 公開しました。このレポートは、この攻撃グループがオープンソースやWindowsシステムのツールをどのように利用しているか、また複数の攻撃者間で共有されているマルウェアファミリについて分析したものです。 また、NUPAKAGEとZPAKAGEという2つのカスタムのデータ流出ツールについても説明しています。2023年6月14日には、このツールファミリのドロップツールであるTONEDROPも、Trend Micro [24] よって報告されています。 2023年9月22日には、Palo AltoのUnit 42の研究チームが、ESET Remote Administrator Agentを悪用してTONESHELLの新しい亜種を展開するキャンペーン [3] ついて報告しています。

これらの記事には、攻撃がMustang Pandaに帰属するとした著者の主張を裏付ける注目すべきリンクが複数記載されています。Trend Microの最初の記事で解説されている、PUBLOADの展開に使用される「タイプB」のアーカイブは、Hodur Korplug亜種 [25] の展開に使用されるZIPアーカイブやRARアーカイブと類似した形式を使用しています。いずれのアーカイブにも、DLLサイドローディングに使用可能な正規の実行ファイルと悪意のあるDLLに加えて、LNKファイルが含まれています。実行ファイルと悪意のあるDLLの2ファイルは通常、特殊文字1文字(例:_\_\_\_\_\_\)で構成される複数の隠しディレクトリ内に存在します。ただし、ペイロードは異なる方法で(PUBLOADの場合はDLLそのものの中に、Korplugの場合は別のファイルに)保存されています。この特定のアーカイブ形式は、Mustang Pandaの活動の大きな特徴です。しかし、簡単に再現できるため、帰属を示す指標としての強度は低くなります。

CeranaKeeperに帰属するこの新しいツールセットは、Mustang Pandaマルウェアが使用するものと同じDLLハイジャックのターゲットを数多く使用しています。これらのターゲットはMustang Panda専用ではありませんが、このように重複しているという事実は、共有されているツールがあることを示している可能性があります。

Trend Microの最初の記事 [2]で述べたように、TONESHELLのサンプルのC&CサーバーのIPアドレスである98.142.251[.]29は、Mustang Pandaのものと見られるKorplugサンプルの展開に使用される2つの悪意のあるLNKファイルのメタデータ内のパスにも含まれています。これは、LNKファイルが作成されたマシン上にこのようなディレクトリが存在していたことを意味します。このことから、2つのグループの間に何らかの関連性があることがわかりますが、どのように関連しているかを判断することはできません。

上記のように類似点はありますが、組織的および技術的な相違点から、この活動を2つの異なる攻撃グループによるものと見なすのが最善であるとESETでは考えています。この2つの攻撃キャンペーンは完全に別個に実行されているようです。Mustang Pandaの従来のツールセットとTONESHELLのツールセットが同じキャンペーンで使用されているという証拠は見つかっていません。また、共有インフラストラクチャも特定されていません。

さらに、2つのグループがよく似たタスクを実行する際の手法にも違いが見られます。たとえば、Mustang Pandaのネイティブ実行ファイルは難読化技術に大きく依存していることで知られていますが、CeranaKeeperのネイティブ実行ファイルはほとんど、あるいはまったく難読化を使用していません。どちらのグループもマルウェアの展開にMSIパッケージを使用していますが、図16に示したように、そのフォーマットとメタデータを見れば、異なるツールを使用して作成されたことがわかります。また、作成アプリケーションの名称も異なります。左側のMustang Pandaのパッケージでは、Create Time/Date(作成日時)とLast Save Time/Date(最終保存日時)を示すタイムスタンプは、パッケージに含まれるファイルのタイムスタンプとほぼ一致しています。

一方、CeranaKeeperのパッケージのタイムスタンプは、パッケージに含まれるファイルのタイムスタンプよりも数年遅れています。

結論として、Mustang PandaとCeranaKeeperは独立して活動しているように見えます。また、それぞれ独自のツールセットを持っています。どちらの攻撃グループも、中国と連携しているグループの間では珍しくないデジタルオペレーターのような同じサードパーティを利用している可能性や、一定レベルの情報共有を行っている可能性があります。その場合、これまで確認されてきた両者の関連性を裏付けることになります。これは単独の攻撃者が、完全に別個の2つのツールセット、インフラストラクチャ、オペレーション、およびキャンペーンを有しているという説明よりも、より可能性が高いとESETは考えます。

結論

タイ政府に対する攻撃の背後にいるCeranaKeeperは、特に執拗であるように見えます。なぜなら、このグループが使用する膨大な数のツールと手法は急速に進化を続けているからです。オペレーターは、必要に応じてツールセットを作成・修正し、検出を回避するために迅速に対応しています。

CeranaKeeperがクラウドサービスやファイル共有サービスをデータ流出に使用していることも特筆すべき点です。大規模なデータ流出のセクションで説明したように、このグループの目的は可能な限り多くのファイルを収集することであり、その目的のために特定のコンポーネントを開発しています。このグループはおそらく、人気の高いクラウドサービスへのトラフィックはほとんどが正規のトラフィックのように見えるため、特定されてもブロックするのが難しいという事実を利用しています。

ESETの調査を通して、すでに文書化されていたツールセットと新しいツールセット、そして共通の攻撃者との間に強い関連性があることが確認できました。TTP、コード、インフラストラクチャの相違点を検証した結果、CeranaKeeperとMustangPandaを別個の存在として追跡する必要があることがわかりました。しかし、中国と関連がある両グループは、共通の利益のために、あるいは同じサードパーティを通じて、情報やツールの一部を共有している可能性があります。

今回、この標的型キャンペーンを調査したことで、CeranaKeeperの特性とオペレーション能力に関する貴重な知見が得られました。機密文書を収集しようとするこの攻撃グループの活動は終わりそうにないことから、今後のキャンペーンを調査研究することで、さらなる特徴が明らかになるはずです。

IOC(セキュリティ侵害の痕跡)

ファイル

SHA-1ファイル名検出説明
B25C79BA507A256C9CA12A9BD34DEF
6A33F9C087578C03D083D7863C708E CA21
EACore.dll Win32/Agent.VJO YK0130リバースシェル
E7B6164B6EC7B7552C93713403507B
531F625A8C64D36B60D660D66E8264
6696
SearchApp.exe Python/Agent.AGT WavyExfiller
3F81D1E70D9EE39C83B582AC3BCC1C
DFE038F5DA31331CDBCD4FF1A2D15B B7C8
OneDrive.exeWin32/Agent.VKVOneDoor
DAFAD19900FFF383C2790E017C958A
1E92E84F7BB159A2A7136923B715A4 C94F
dropbox.exe Python/Agent.AQNPyInstaller DropFlop
24E12B8B1255DF4E6619ED1A6AE1C7
5B17341EEF7418450E661B74B14457
0017
Update.exePython/Agent.AJJ BingoShell
451EE465675E674CEBE3C42ED41356
AE2C972703E1DC7800A187426A6B34 EFDC
oneDrive.exe Python/Agent.AGP WavyExfiller PixelDrainの亜種
E6AB24B826C034A6D9E152673B9115
9201577A3A9D626776F95222F01B7C
21DB
MsOcrRes.orpWin32/Agent.AFWW TONESHELL type B
6655C5686B9B0292CF5121FC634634
1BB888704B421A85A15011456A9A2C
192A
avk.dll Win32/Agent.VJQ TONESHELLの亜種
B15BA83681C4D2C2716602615288B7
E64A1D4A9F4805779CEBDF5E6C2399 AFB5
TurboActivate.d ll Win32/Agent.AFWX TONESHELLのローダー

ネットワーク

IPドメインホスティングプロバイダー最初に確認された日付詳細
104.21.81[.]233
172.67.165[.]197
www.toptipvideo[.]com CLOUDFLARENET(AS13335)2023-08-14YK0130リバースシェル用のC&Cサーバー
103.245.165[.]23
7
dljmp2p[.]com
inly5sf[.]com
Bangmod Enterpriseの管理者 (AS58955)2023-04-21 TONESHELLの複数の亜種用のC&Cサーバー
103.27.202[.]185 www.dl6yfsl[.]comBangmod Enterpriseの管理者 (AS58955) 2023-08-10 TONEINSの亜種用のC&Cサーバー
103.27.202[.]185 www.uvfr4ep[.]comBangmod Enterpriseの管理者 (AS58955) 2023-09-22 TONEINSの亜種用のC&Cサーバー

MITRE ATT&CKの技術

この表は、MITRE ATT&CKフレームワークのバージョン15を使用して作成されています。

戦術ID名前説明
リソース
開発
T1583.001インフラストラクチャの取得:ドメイン CeranaKeeperは、C&Cサーバーの一部のドメインを取得しました。
T1583.003インフラストラクチャの取得:仮想プライベートサーバー CeranaKeeperは、C&Cサーバーとして機能するVPSへのアクセス権を取得しました。
T1587.001能力の開発マルウェア CeranaKeeperは独自のコンポーネントを開発しています。
T1585.003アカウントの確立:クラウドアカウント CeranaKeeperは、データ流出を目的としてクラウドアカウントを取得しました。
実行T1072 ソフトウェアデプロイメントツール CeranaKeeperは、リモート管理コンソールを悪用して、ラテラルムーブメントを実行します。
常駐化T1547.001ブートまたはログオン自動起動:Runレジストリキーやスタートアップフォルダの悪用

YK0130リバースシェルは、Runレジストリキーを介して常駐化します。

T1574.002 ハイジャックの実行フロー:DLLサイドローディング 多くのコンポーネントは、正規のプログラムとともにサイドロードされたライブラリとして提供されます。
防衛機能の回避T1140ファイルや情報の難読化解除と復号 OneDoorバックドアで使用される構成ファイルは暗号化されています。
T1036.005なりすまし:正規のモジュールの名前や場所を模倣する CeranaKeeperは、正規のライブラリ名を使用して紛れ込もうとします。
収集 T1560.001収集したデータのアーカイブ:ユーティリティを利用したアーカイブ WavyExfillerは収集したデータをWinRARを使用して圧縮します。
T1005ローカルシステムのデータ WavyExfillerはローカルドライブ(C:)からデータを収集します。
T1039ネットワーク共有ドライブのデータ WavyExfillerはネットワーク共有からデータを収集します。
T1074.001データの保存:ローカルデータの一時的保存 収集されたデータは、アップロードされる前に特別なフォルダに保存されます。
C&C(コマンド&コントロール)T1071.001アプリケーションレイヤープロトコル:Webプロトコル さまざまなバックドアが、HTTP/Sを使用して通信します。
T1132.002 データのエンコーディング:非標準のエンコーディングYK0130リバースシェルで使用されるネットワークプロトコルは、XORベースの独自のエンコードを採用しています。
T1573.001暗号化されたチャンネル:対称暗号方式 CBCモードのAES-128は、OneDoorバックドアがネットワーク通信を暗号化するために使用されます。
T1573.002暗号化されたチャンネル:非対称暗号方式 OneDoor バックドア用に生成されたキーとIVは、RSAで暗号化されています。
T1090.001 プロキシ:内部プロキシ YK0130リバースシェルの亜種の1つは、リバースプロキシを実装しています。
T1102.002Webサービス:双方向通信 OneDriveとDropboxはC&Cサーバーとして使用されます。
外部へのデータ流出 T1567.002Webサービスを介したデータの外部への流出:クラウドストレージへのデータの流出 収集されたデータはクラウドサービス経由で外部に持ち出されます。