iLeakage は、WebKit エンジンに基づくブラウザを通じて Apple CPU の脆弱性を悪用する方法です。

ジョージア工科大学、ミシガン大学、ルール大学の研究者らは、ブラウザで特別に設計されたページを開くことで Apple A シリーズおよび M シリーズ ARM プロセッサの脆弱性を悪用できる iLeakage 攻撃手法を開発しました。 研究者が準備したエクスプロイト プロトタイプを使用すると、ブラウザで JavaScript コードを実行すると、他のタブで開かれたサイトのコンテンツを見つけることができます。たとえば、Gmail タブで開いた手紙のテキストを特定したり、YouTube を表示したりする機能を実証しました。履歴を確認し、LastPass パスワード マネージャーによってログイン フォームに挿入されたパスワードを取得します。 この攻撃は、macOS を搭載したシステム上の Safari ブラウザと、iOS プラットフォーム上のすべてのブラウザに適用されます (Apple の規則により、すべての iOS ブラウザは Safari に共通の WebKit システム エンジンのみを使用することが求められています)。

この攻撃は Apple 製品にのみ適用されますが、WebKit エンジンのタイマー解像度制限をバイパスする興味深い方法を提供しており、他のブラウザでの同様の制限をバイパスするのに役立つ可能性があります。 Apple M1 および M2 チップで確認された脆弱性は、古典的な Spectre v1 の脆弱性を彷彿とさせます。また、投機モードで操作を実行する際にメモリ内容のリークを引き起こし、予測が間違っている場合にはプロセッサによって破棄されますが、それらの実行の痕跡はプロセッサのキャッシュに保存されます。

この攻撃手法では、投機的実行により、ブラウザでページのコンテンツをレンダリングするプロセスのアドレス空間で任意の 64 ビット ポインタを読み取るためのプリミティブを作成することが可能になりました。 他人のサイトがレンダリングされるプロセスのアドレス空間にアクセスするために、JavaScript window.open() メソッドを使用してポップアップ ウィンドウで検査中のエイリアン ページを開くというトリックが使用されました。 このケースでは、サイトは別のプロセスではなく、攻撃者のコードと同じプロセスで開かれました。

セキュリティ対策として、WebKit エンジンは JavaScript がパックされた 35 ビット ポインターで動作することのみを許可します。 プロセスのアドレス空間全体へのアクセスを提供し、35 ビットの制限を回避するために、研究者らは型混乱手法を使用して、JavaScript エンジンに不正な型のオブジェクトを強制的に処理させました。 特別に設計された JavaScript オブジェクトをエンジンで処理すると、配列にアクセスする命令の投機的実行につながる条件が作成されます。

オブジェクトの型が処理される配列の型と一致しないため、通常の状態ではそのようなアクションはブロックされるため、型混乱攻撃のコードは、通常の状態ではアクティブ化されない条件付きの「if」ブロックに配置されます。ただし、プロセッサがさらなる分岐を誤って予測した場合は、投機モードで実行されます。 その結果、プロセッサは生成された 64 ビット ポインタに投機的にアクセスしますが、予測が失敗したと判断した後は状態をロールバックします。 この場合、投機的実行の痕跡は共有キャッシュに保存され、サイドチャネルを通じてキャッシュの内容を決定する方法を使用して復元できます。

この攻撃では、投機操作後に残った CPU L1 キャッシュからデータを抽出するために、Google が以前に提案した pLRU (擬似最近使用された) 方式の修正版が使用されます。 この場合、元の pLRU 手法は、データにアクセスする際の遅延を測定することに基づいており、その差により、特定のシーケンスがプロセッサーのキャッシュにあるかどうかを判断できます (データがキャッシュされている場合、演算は高速に実行されます)。そうでない場合は遅くなります)。 最新のブラウザーでのプロセッサー キャッシュのプローブから保護するために、タイマーの精度は差異を検出できないレベルまで大幅に低下します。

iLeakage 攻撃におけるタイマー精度の制限を克服するために、競合状態を使用してキャッシュ内のデータの有無を判断する手法が提案されています。 このメソッドの本質は、メインとリファレンスという 1 つのスレッドを同時に起動することです。 参照スレッドには、特定の参照時間に実行される一連の命令が含まれます。 参照スレッドの実行の最初に、メインスレッドと共有される変数が 1 に設定され、命令の実行後、変数は XNUMX にリセットされます。 したがって、共有変数は一定の短時間だけ値 XNUMX を持ちます。

メインスレッドは、pLRU メソッドを使用してキャッシュ内のデータを決定するサイクルを開始します。 キャッシュ内のチェック済みデータの有無の指標は、タイマーによる時間計測ではなく、チェック後のジョイント変数の状態です。 変数の値が 1 の場合、リファレンス コードが並列スレッドで実行されるよりも早く操作が完了したことになります。 データはキャッシュから提供されました。 変数に値 0 が含まれている場合、キャッシュ内にデータが不足しているため、操作の完了に比較的長い時間がかかり、並列スレッド内の参照コードが完全に処理されるまでに時間がかかりました。

iLeakage - WebKit エンジンに基づくブラウザを通じて Apple CPU の脆弱性を悪用する方法

キャッシュ内容を決定するための提案された方法の精度は 90% ~ 99% の範囲であり、データ決定のパフォーマンスはプロセッサとデバイスに応じて 23 秒あたり 34 ~ 64 バイトです。 攻撃を実行する前に、参照コードの調整が必要です。これには約 30 分かかります。 現在のシステムのキャリブレーションが完了すると、XNUMX 文字の文字列を抽出するのに約 XNUMX 秒かかります。

iLeakage - WebKit エンジンに基づくブラウザを通じて Apple CPU の脆弱性を悪用する方法
iLeakage - WebKit エンジンに基づくブラウザを通じて Apple CPU の脆弱性を悪用する方法

さらに、Zen2 マイクロアーキテクチャに基づく AMD プロセッサの Zenbleed 脆弱性を利用して、Chrome でエクスプロイトのあるページを開いたときに他のプロセスで処理されたデータを抽出するプロトタイプのエクスプロイトが公開されたことにも注目できます。 このエクスプロイトには、Zenbleed 脆弱性 (CVE-2023-20593) に加えて、Chrome 2023 で修正された V3079 エンジンの CVE-8-115 脆弱性も含まれています。

出所: オープンネット.ru

コメントを追加します