商用スパイウェアであるPredatorは、これまで予想されていた以上に高度な手法を用いていることが判明しました。iPhoneのオペレーティングシステムに単に浸透するのではなく、このプログラムはプロセッサの内部アーキテクチャを悪用してカーネルメモリへの制限のないアクセスを確保し、ユーザーに対する隠密的な監視を可能にしています。Jamf Threat Labsの研究者たちは、Predatorの最近のバージョンを逆設計し、その主要な「エクスプロイテーションエンジン」のメカニズムを解き明かしました。これはiOSのセキュリティを回避し、システムの最深部に永続的な足がかりを確立するために設計された洗練された攻撃チェーンです。
このスキームの中核となるのは、FDGuardNeonRWという名称のメカニズムで、カーネルメモリ内での直接的な読み取りと書き込み操作を可能にします。これを実現するため、Predatorは本来は並列データ処理を目的としたプロセッサコンポーネントであるNEONベクトルレジスタを流用し、それを秘密のデータ伝送チャネルに変換します。この方法により、単一のリクエストでカーネルメモリから500バイト以上を流出させることが可能になり、検証プロトコルによってデータの完全性が確認されます。
永続性を維持するため、PredatorはポインタAuthenticationCode(PAC)をバイパスする必要があります。PACはiPhone XS以降のAppleシリコンに統合されているセキュリティ機能で、関数アドレスの整合性を保証するものです。Predatorはこれを回避するため、独自の署名メカニズムを放棄し、JavaScriptCoreシステムコンポーネント内で特定の命令シーケンスを探索することを選びます。発見されたこれらのガジェットを使用することで、スパイウェアはポインタ署名を偽造し、任意にコード実行を転向させることができます。パフォーマンスを最適化するため、Predatorは256個の署名されたポインタのテーブルを事前に計算し、このキャッシュを利用して、暗号処理による遅延なしに関数を瞬時にハイジャックします。
別の重要な要素は、リモート関数実行メカニズムです。これによりスパイウェアはシステムメッセージング経由でスレッド状態を操作することで、外部プロセス内のコードを実行することができます。関数の実行が終了すると、制御は自動的にスパイウェアに戻され、このサイクルの無限反復が可能になります。
ネットワークセキュリティ
Predatorのアーキテクチャは複数の個別プロセスに分岐しており、1つはオーケストレーション専用で、他は能動的な監視を担当しています。これら別々のコンポーネントがカーネルメモリにアクセスできるようにするため、特殊な権限共有メカニズムが採用されています。ファイルディスクリプタとシステムポートを介してプロセスをリンクすることで、スパイウェアは侵害されたデバイス全体に効果的にカーネルアクセスを「配分」しています。さらに、Predatorはユーザーアプリケーション内に存在するターゲット関数を処理する際の高度な能力を示しています。アドレス空間レイアウトランダム化(ASLR)のためにアドレスが変動する場合でも、スパイウェアはターゲットプロセス内で正確なアドレスを動的に決定します。
このスパイウェアはiPhone XSからiPhone 14 Pro Maxまでの21のiPhoneモデルとの互換性を保持しています。各デバイスグループには、カーネル構造内の正確なオフセットを含むカスタムパラメータが設定されています。デバイスが必要な要件を満たさない場合、プログラムは致命的なシステムクラッシュを回避するため、実行を停止します。
この攻撃はiOS 17以前のバージョンを実行しているデバイスをターゲットにしています。以降のバージョンでは、Appleはメモリ管理アーキテクチャを改訂し、そのような技術を大幅に複雑にしました。にもかかわらず、この分析は商用スパイウェア開発における著しい進歩を強調しています。焦点は単なる脆弱性発見から、システムの最も神聖な領域内での堅牢で目に見えない運用フレームワークの構築へと移行しているのです。