Chrome の Spectre の脆弱性を悪用する新しい手法

アメリカ、オーストラリア、イスラエルの大学の研究者グループは、Chromium エンジンをベースとしたブラウザーの Spectre クラスの脆弱性を悪用する新しいサイドチャネル攻撃手法を提案しました。 コードネーム Spook.js と呼ばれるこの攻撃では、JavaScript コードを実行することでサイト分離メカニズムをバイパスし、現在のプロセスのアドレス空間全体の内容を読み取ることができます。 他のタブで実行されているページのデータにアクセスしますが、同じプロセスで処理されます。

Chrome は異なるプロセスで異なるサイトを実行するため、実際の攻撃を実行できる機能は、異なるユーザーがページをホストできるサービスに限定されます。 この方法では、攻撃者が JavaScript コードを埋め込む機会を持つページから、ユーザーが同じサイトから開いた他のページの存在を判断し、そこから秘密情報 (たとえば、認証情報や銀行口座情報の置き換えなど) を抽出することが可能になります。 Web フォームの自動入力フィールドのシステムによって。 デモンストレーションとして、同じサービス上でホストされている攻撃者のブログをその所有者が別のタブで開いた場合に、Tumblr サービス上で他人のブログを攻撃する方法が示されています。

この方法を使用するもう XNUMX つのオプションは、ブラウザーのアドオンに対する攻撃です。これにより、攻撃者が制御するアドオンをインストールするときに、他のアドオンからデータを抽出できます。 例として、悪意のあるアドオンをインストールすることで、LastPass パスワード マネージャーから機密情報を抽出できる方法を示します。

研究者らは、CPUIntel i89-7K および i6700-7U を搭載したシステム上の Chrome 7600 で動作するエクスプロイトのプロトタイプを公開しました。 このエクスプロイトを作成する際、Google が以前に公開した JavaScript コードのプロトタイプが Spectre クラスの攻撃を実行するために使用されました。 研究者らは、Intel および Apple M1 プロセッサをベースとしたシステム向けに実用的なエクスプロイトを準備することができ、これにより 500 秒あたり 96 バイトの速度と XNUMX% の精度でメモリ読み取りを組織化できるようになったことが注目されます。 この方法は AMD プロセッサにも適用できると考えられていますが、完全に機能するエクスプロイトを準備することはできませんでした。

この攻撃は、Google Chrome、Microsoft Edge、Brave など、Chromium エンジンをベースとするあらゆるブラウザに適用されます。 研究者らはまた、この手法を Firefox で動作するように適応できると考えていますが、Firefox エンジンは Chrome とは大きく異なるため、そのようなエクスプロイトを作成する作業は将来に残されています。

命令の投機的実行に関連するブラウザベースの攻撃から保護するために、Chrome はアドレス空間セグメンテーションを実装しています。サンドボックス分離により、JavaScript は 32 ビット ポインターでのみ動作し、独立した 4GB ヒープ内のハンドラーのメモリを共有できます。 プロセスのアドレス空間全体へのアクセスを提供し、32 ビットの制限を回避するために、研究者らは、JavaScript エンジンに不正な型のオブジェクトを強制的に処理させる、型の混乱と呼ばれる手法を使用しました。これにより、64 ビットのアドレス空間を形成できるようになります。 32 つの XNUMX ビット値の組み合わせに基づくポインター。

攻撃の本質は、JavaScript エンジンで特別に設計された悪意のあるオブジェクトを処理するときに、配列にアクセスする命令の投機的実行につながる条件が作成されることです。 オブジェクトは、攻撃者が制御するフィールドが 64 ビット ポインターが使用される領域に配置されるように選択されます。 悪意のあるオブジェクトのタイプが処理される配列のタイプと一致しないため、通常の状況では、配列へのアクセスに使用されるコードを非最適化するメカニズムによって、そのようなアクションは Chrome でブロックされます。 この問題を解決するために、Type Confusion 攻撃のコードは条件付きの「if」ブロックに配置されます。このブロックは通常の状態ではアクティブ化されませんが、プロセッサがさらなる分岐を誤って予測した場合には投機モードで実行されます。

その結果、プロセッサは生成された 64 ビット ポインタに投機的にアクセスし、予測が失敗したと判断した後に状態をロールバックしますが、実行の痕跡は共有キャッシュに残り、変更を分析するサイドチャネル キャッシュ検出メソッドを使用して復元できます。キャッシュされたデータとキャッシュされていないデータへのアクセス時間。 JavaScript で利用できるタイマーの精度が不十分な状況でキャッシュの内容を解析するには、Google が提案した手法を使用します。これは、プロセッサで使用されている Tree-PLRU キャッシュ追い出し戦略を欺き、サイクル数を増やすことで、値がキャッシュに存在する場合と存在しない場合の時間の差が大幅に増加します。

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

コメントを追加します