Coruna: iOS を狙った強力なエクスプロイト キットの謎に満ちた軌跡
Google Threat Intelligence Group
Google Threat Intelligence
Visibility and context on the threats that matter most.
Contact Us & Get a Demo※この投稿は米国時間 2026 年 3 月 4 日に、Google Cloud blog に投稿されたものの抄訳です。
はじめに
Google Threat Intelligence Group(GTIG)は、iOS バージョン 13.0(2019 年 9 月リリース)からバージョン 17.2.1(2023 年 12 月リリース)を搭載した Apple iPhone モデルを標的とする、強力なエクスプロイト キットを新たに特定しました。そのデベロッパーによって「Coruna」と名付けられたこのエクスプロイト キットには、5 つの完全な iOS エクスプロイト チェーンと合計 23 個の脆弱性利用型不正プログラム(エクスプロイト)が含まれていました。このエクスプロイト キットの技術的な価値は、iOS を狙った脆弱性利用型不正プログラムの包括的なコレクションにあります。特に高度なプログラムでは、一般公開されていない攻撃手法や、緩和策をバイパスする技術が使われています。
Coruna エクスプロイト キットは、高度な攻撃プログラムがどのように拡散していくかを示す新たな事例になっています。2025 年に GTIG は、このエクスプロイト キットがスパイウェア ベンダーの顧客によって高度に狙いを絞った作戦で使用されたことを最初に特定しました。その後、ロシアのエスピオナージ グループと思われる UNC6353 によるウクライナのユーザーを狙った水飲み場攻撃にも使用されたことを観測しました。さらにその後、中国を拠点に活動する金銭目的の脅威アクター UNC6691 によって大規模なキャンペーンで使用された際に、その完全なエクスプロイト キットを入手しました。こうした拡散は、その経路は不明ですが、「すでに流通している」ゼロデイ脆弱性利用型不正プログラムが活発に取引される市場が存在することを示しています。これらの特定された脆弱性利用型不正プログラムのほかに、複数の脅威アクターは脆弱性を利用する高度な攻撃技術も手に入れているため、これらを再利用したり変更を加えたりすることで、新しい脆弱性に対して悪用できます。
Google は、開示ポリシーに従い、業界全体のセキュリティ意識を高め、セキュリティを向上させることを目的として、調査結果を共有しています。また、特定されたすべてのウェブサイトとドメインをセーフ ブラウジングに追加し、さらなる悪用からユーザーを保護しています。Coruna エクスプロイト キットは最新バージョンの iOS に対しては攻撃できないため、iPhone ユーザーの皆様はデバイスを最新バージョンの iOS に更新することを強くおすすめします。アップデートが不可能な場合は、セキュリティを強化するためにロックダウン モードを有効にすることをおすすめします。
検出までのタイムライン


図 1: Coruna iOS エクスプロイト キットのタイムライン
最初の検出: 商用スパイウェア ベンダーの役割
2025 年 2 月、Google はスパイウェア ベンダーの顧客が使用する iOS エクスプロイト チェーンの一部を特定しました。この脆弱性利用型不正プログラムは、これまで確認されたことのない JavaScript フレームワークに統合されていました。このフレームワークでは、シンプルながらも独自の JavaScript 難読化手法が使用されていました。
[16, 22, 0, 69, 22, 17, 23, 12, 6, 17].map(x => {return String.fromCharCode(x ^ 101);}).join("")i.p1=(1111970405 ^ 1111966034);
これらの構成を使用して文字列と整数がエンコードされた JavaScript フレームワーク
このフレームワークは、デバイスが実機かどうか、そしてそのデバイスの iPhone モデルおよび実行されている iOS ソフトウェア バージョンを特定するために、さまざまなデータポイントを収集するフィンガープリント モジュールを開始します。フレームワークは収集したデータに基づいて、WebKit リモートコード実行(RCE)に対する適切な脆弱性利用型不正プログラムを読み込みます。続いて、難読化解除した JavaScript で明らかになったとおり(図 2 を参照)、ポインタ認証コード(PAC)のバイパスを実行します。


図 2: Coruna エクスプロイト キットの難読化解除された JavaScript
このとき Google は、iOS 17.2 を搭載したデバイスに配信された WebKit RCE を復元し、それが CVE-2024-23222 であることを確認しました。この脆弱性は、以前にゼロデイとして特定され、2024 年 1 月 22 日に Apple が iOS 17.3 で対処していましたが、その際、外部の研究者に対する謝辞は記載されていませんでした。図 3 は、実際に配信された RCE を狙った脆弱性利用型不正プログラムの冒頭部分を示しています。Google がアノテーションを付けています。


図 3: CVE-2024-23222 を悪用した RCE エクスプロイトの実際の送信方法
国家支援型の攻撃者による悪用
2025 年の夏、Google は同じ JavaScript フレームワークが cdn.uacounter[.]com でホストされているのを確認しました。このウェブサイトは隠し iFrame として、産業機器や小売ツール、そして地域サービスや e コマース ウェブサイトといった、多くの侵害を受けたウクライナのウェブサイトで読み込まれていました。このフレームワークは、特定の地理位置情報に基づいて選ばれた iPhone ユーザーにのみ配信されていました。
そのフレームワークは同一のものであり、配信された脆弱性利用型不正プログラムも同じでした。Google は、サーバーがシャットダウンされる前に、CVE-2024-23222、CVE-2022-48503、CVE-2023-43000 を含む WebKit RCE を捕捉しました。その後 CERT-UA に警告し、侵害を受けたすべてのウェブサイトを、連携してクリーンアップしました。
中国の詐欺ウェブサイトから完全なエクスプロイト チェーンを捕捉
Google は年末に、その JavaScript フレームワークが、主に金融関連の膨大な数の偽の中国語サイト上で使用されていることを特定しました。この場合も、まったく同じ iOS エクスプロイト キットが送り込まれていました。これらのウェブサイトは、iOS デバイスでサイトにアクセスするようユーザーを誘導しようとしていました。図 4 では、WEEX 仮想通貨取引所の偽のウェブサイトが、ユーザーを誘導している様子が示されています。


図 4: ユーザーを脆弱性利用型不正プログラムに誘導しようとする、偽の暗号通貨取引ウェブサイトのポップアップ
iOS デバイスからこうしたウェブサイトにアクセスすると、地理的位置情報に関係なく、隠し iFrame が挿入され、エクスプロイト キットが配信されます。図 5 は、3v5w1km5gv[.]xyz で見つかった CVE-2024-23222 の脆弱性利用型不正プログラムを示しています。


図 5: 詐欺サイトから復元された CVE-2024-23222 脆弱性利用型不正プログラムのスクリーンショット
Google は、最終的なペイロードを含む、難読化されたすべての脆弱性利用型不正プログラムを捕捉しました。さらに分析を進めたところ、攻撃アクターがエクスプロイト キットのデバッグ バージョンをデプロイしていたため、内部コードネームを含む脆弱性利用型不正プログラムの詳細がすべて判読可能な状態で残っているケースがあることも確認しました。そのとき、このエクスプロイト キットの組織内での名称が Coruna である可能性が高いことがわかりました。合計で、5 つの完全な iOS エクスプロイト チェーンを網羅する数百個のサンプルを収集できました。このエクスプロイト キットは、iOS バージョン 13.0(2019 年 9 月リリース)からバージョン 17.2.1(2023 年 12 月リリース)まで、さまざまな iPhone モデルを標的にすることができます。
以降のセクションでは、フレームワークの概要、エクスプロイト チェーンの構成、捕捉した関連インプラントについて簡単に説明します。収集したデータの分析は現在も進行中であり、新しいブログ投稿や根本原因分析(RCA)を通じて、追加の技術仕様を公開する予定です。
Coruna エクスプロイト キット
エクスプロイト キットを支えるフレームワークは非常に巧妙に設計されています。脆弱性利用型不正プログラムはすべて自然な形で連結されており、共通ユーティリティとエクスプロイト フレームワークを使用して統合されています。このキットは、次のような独自の動作を実行します。
-
デバイスがロックダウン モード設定になっている場合、またはユーザーがプライベート ブラウズを使用している場合は、処理を中止する。
-
リソース URL を生成する過程で、一意のハードコードされた Cookie を使用する。
-
リソースをハッシュを使用して参照する。リソースの URL を取得するには、一意のCookieを使用し、
sha256(COOKIE + ID)[:40]という計算式を用いてハッシュを計算する必要がある。 -
RCE と PAC バイパスのコードは暗号化されていない状態で配信される。
このキットには、WebKit 内で RCE が成功した後に適切なエクスプロイト チェーンを読み込むバイナリ ローダが含まれています。この場合、バイナリ ペイロードには次の特徴があります。
-
バイナリ ペイロードの詳細と対応しているチップや iOS のバージョンなどを記載している、固有のメタデータを含んでいる。
-
末尾が .min.js で終わる URL から配信される。
-
ChaCha20 によって暗号化されており、BLOB ごとに一意のキーが使用されている。
-
カスタム ファイル形式でパッケージ化されており、ヘッダーは 0xf00dbeef で始まっている。
-
Lempel–Ziv–Welch(LZW)アルゴリズムで圧縮されている。
図 6 は、iOS 15.8.5 を実行する iPhone XR が感染したときのネットワーク通信の様子を示したものです。偽の金融ウェブサイトを閲覧した際に発生する各通信について、Google が随所にアノテーションを付けました。


図 6: iOS 15.8.5 に配信された Coruna エクスプロイト チェーン
脆弱性利用型不正プログラム(エクスプロイト)とコードネーム
このエクスプロイト キットの技術的な価値があるのは、iOS を狙った脆弱性利用型不正プログラムの包括的なコレクションです。これらの脆弱性利用型プログラムには、英語を母国語とする人が作成したと思われる docstring やコメントなど、詳細なドキュメントが含まれています。最も高度な脆弱性利用型不正プログラムでは、一般公開されていない悪用手法や緩和策のバイパスが使用されています。以下の表は、さまざまなエクスプロイト チェーンに関して進行中の分析の概要を示しています。ただし、完全な調査はまだ完了していないため、特定の CVE との関連付けは修正される可能性があります。iOS 13 から iOS 17.2.1 までのバージョンを狙った脆弱性利用型不正プログラムは合計 23 個あります。
表 1: CVE とコードネームの対応表
Photon と Gallium は、Kaspersky が 2023 年に発見した Operation Triangulation の一環として狙われたゼロデイ脆弱性も悪用しています。Coruna エクスプロイト キットには、前述の脆弱性を簡単に悪用できるよう、再利用可能なモジュールも埋め込まれています。たとえば、rwx_allocator というモジュールは、ユーザーランドでの RWX メモリページの割り当てを防止するさまざまな緩和策をバイパスするために、複数の手法を使用します。カーネルを狙った脆弱性利用型プログラムには、カーネルモード PAC などのカーネルベースの緩和策をバイパスできるように、さまざまな内部モジュールが埋め込まれています。
最終的なペイロード
エクスプロイト チェーンの最後には、PlasmaLoader(GTIG が PLASMAGRID として追跡)と呼ばれるステージャー バイナリが、com.apple.assistd を識別子として使用し、脆弱性利用型不正プログラムによって確立されたカーネル コンポーネントとの通信を仲介します。ローダは、iOS 上で root 権限で実行されているデーモンである「powerd」に自身を挿入しています。
挿入されたペイロードは、スパイウェア ベンダーによる攻撃によく見られる一般的な機能は備えておらず、代わりに財務情報を盗みます。ペイロードは、ディスク上の画像から QR コードをデコードできます。また、テキストデータの塊を分析して BIP39 の単語シーケンス、または「バックアップ フレーズ」や「銀行口座」などの非常に具体的なキーワードを探すモジュールも含まれます。このようなテキストが Apple メモで見つかった場合、コマンド&コントロール(C2)サーバーに送り返されます。
さらに重要な点として、このペイロードは追加のモジュールをリモートで収集および実行する機能を備えています。その際の設定情報は、http://<C2 URL>/details/show.html から取得されます。この構成と追加のモジュールは、それぞれ固有のハードコードされたパスワードで保護された 7-ZIP アーカイブとして圧縮されています。構成は JSON でエンコードされており、各モジュールの名称と、それに対応する URL、ハッシュ、ファイル サイズがリストとして格納されています。
{
"entries": [
{
"bundleId": "com.bitkeep.os",
"url": "http://<C2URL>/details/f6lib.js",
"sha256": "6eafd742f58db21fbaf5fd7636e6653446df04b4a5c9bca9104e5dfad34f547c",
"size": 256832,
"flags": {
"do_not_close_after_run": true
}
}
...
]
}予想どおり、特定されたモジュールのほとんどは、統一された設計になっており、以下のアプリケーションから暗号通貨ウォレットまたは機密情報を抽出することを目的として、これらすべてに関数フックが配置されています。
com.bitkeep.oscom.bitpie.walletcoin98.crypto.finance.insightsorg.toshi.distributionexodus-movement.exodusim.token.appcom.kyrd.krystal.iosio.metamask.MetaMaskorg.mytonwallet.appapp.phantomcom.skymavis.Genesiscom.solflare.mobilecom.global.wallet.ioscom.tonhub.appcom.jbig.tonkeepercom.tronlink.hdwalletcom.sixdays.trustcom.uniswap.mobile
これらのモジュールにはすべて、中国語で書かれた文を含む適切なロギングが含まれています。
<PlasmaLogger> %s[%d]: CorePayload 管理器初始化成功,尝试启动...
このログ文字列は、CorePayload Manager が正常に初期化されたことを示しています。
次のコメントのように、絵文字が含まれていたり、LLM によって生成された可能性を示唆するような書き方をしているものもあります。
<PlasmaLogger> %s[%d]: [PLCoreHeartbeatMonitor] ✅ 心跳监控已启动 (端口=0x%x),等待 CorePayload 发送第一个心跳...ネットワーク通信は HTTPS 経由で行われ、収集されたデータは、静的文字列の SHA256 ハッシュを鍵として使用する AES で暗号化され、POST を介して送信されます。一部の HTTP リクエストには、sdkv や x-ts などの追加の HTTP ヘッダーが含まれており、その後にタイムスタンプが続いています。インプラントには、ハードコードされた C2 のリストが含まれていますが、サーバーが応答しない場合に備えてフォールバック メカニズムが用意されています。インプラントには、文字列「lazarus」をシードとして使用し、予測可能なドメインのリストを生成するカスタム ドメイン生成アルゴリズム(DGA)が埋め込まれています。これらのドメインは 15 文字で構成され、TLD には .xyz が使用されます。攻撃者は、Google の公開 DNS リゾルバを使用して、ドメインがアクティブかどうかを確認します。
まとめ
Google が積極的に参加してきた Pall Mall Process は、スパイウェア業界による被害を抑えるためのコンセンサスを形成し、進展させることを目的としています。私たちは、協力してこれらの強力なテクノロジーの悪用を制限し、世界中の人々の人権を保護するための国際的な規範と枠組みを構築することに注力しています。これらの取り組みは、米国政府が政府によるスパイウェアの利用を制限するために講じた措置や、同様の取り組みに対する初の国際的コミットメントなど、政府がこれまで行ってきた活動に基づいています。
謝辞
本調査にあたって、連携した Google Project-Zero チームおよびご協力いただいた Apple Security Engineering and Architecture チームに感謝いたします。
セキュリティ侵害インジケーター(IoC)
このブログ投稿で概要を説明した活動を捕捉および特定するために、セキュリティ コミュニティを支援する目的で、登録ユーザー向けに IOC を無料の GTI コレクションに加えました。
ファイル インジケーター
暗号関連のウェブサイトから送信されたインプラントとそのモジュールのハッシュは以下のとおりです。
インプラント
モジュール
ネットワーク インジケーター
UNC6353 のインジケーター
UNC6691 のインジケーター
YARA ルール
rule G_Hunting_Exploit_MapJoinEncoder_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$s1 = /\[[^\]]+\]\.map\(\w\s*=>.{0,15}String\.fromCharCode\(\w\s*\^\s*(\d+)\).{0,15}\.join\(""\)/
$fp1 = "bot|googlebot|crawler|spider|robot|crawling"
condition:
1 of ($s*) and not any of ($fp*)
}rule G_Backdoor_PLASMAGRID_Strings_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$ = "com.plasma.appruntime.appdiscovery"
$ = "com.plasma.appruntime.downloadmanager"
$ = "com.plasma.appruntime.hotupdatemanager"
$ = "com.plasma.appruntime.modulestore"
$ = "com.plasma.appruntime.netconfig"
$ = "com.plasma.bundlemapper"
$ = "com.plasma.event.upload.serial"
$ = "com.plasma.notes.monitor"
$ = "com.plasma.photomonitor"
$ = "com.plasma.PLProcessStateDetector"
$ = "plasma_heartbeat_monitor"
$ = "plasma_injection_dispatcher"
$ = "plasma_ipc_processor"
$ = "plasma_%@.jpg"
$ = "/var/mobile/Library/Preferences/com.plasma.photomonitor.plist"
$ = "helion_ipc_handler"
$ = "PLInjectionStateInfo"
$ = "PLExploitationInterface"
condition:
1 of them
}- Google Threat Intelligence Group
