[論文レビュー] LazyFP: Leaking FPU Register State using Microarchitectural Side-Channels
この論文は、怠慢な FPU コンテキストスイッチングとマイクロアーキテクチャのサイドチャネルを悪用して、 fault-based、 TSX-based、または retpoline-based の例外抑制を用いて、プロセス/VM 境界を横断して FPU/SIMD レジスタの状態を漏らす実用的な攻撃を示します。
Modern processors utilize an increasingly large register set to facilitate efficient floating point and SIMD computation. This large register set is a burden for operating systems, as its content needs to be saved and restored when the operating system context switches between tasks. As an optimization, the operating system can defer the context switch of the FPU and SIMD register set until the first instruction is executed that needs access to these registers. Meanwhile, the old content is left in place with the hope that the current task might not use these registers at all. This optimization is commonly called lazy FPU context switching. To make it possible, a processor offers the ability to toggle the availability of instructions utilizing floating point and SIMD registers. If the instructions are turned off, any attempt of executing them will generate a fault. In this paper, we present an attack that exploits lazy FPU context switching and allows an adversary to recover the FPU and SIMD register set of arbitrary processes or VMs. The attack works on processors that transiently execute FPU or SIMD instructions that follow an instruction generating the fault indicating the first use of FPU or SIMD instructions. On operating systems using lazy FPU context switching, the FPU and SIMD register content of other processes or virtual machines can then be reconstructed via cache side effects. With SIMD registers not only being used for cryptographic computation, but also increasingly for simple operations, such as copying memory, we argue that lazy FPU context switching is a dangerous optimization that needs to be turned off in all operating systems, if there is a chance that they run on affected processors.
研究の動機と目的
- 怠慢な FPU コンテキストスイッチングがどのようにしてクロス境界の FPU 状態の漏洩を可能にするかを説明する。
- 推測実行を再利用して FPU/SIMD レジスタを読み取る複数の攻撃バリアントを特徴づける。
- さまざまな例外抑制手法の実用性と性能を評価する。
- AES-NI などの暗号 primitives に対する影響を評価し、対策を議論する。
- 怠惰な FPU コンテキストスイッチングを避けることでセキュリティを向上させるための OS への指針を提供する。
提案手法
- 怠惰な FPU コンテキストスイッチング機構と #NM 例外が FPU の使用をどのように信号するかを説明する。
- 推測実行とキャッシュサイド効果を悪用して1ビットおよび全レジスタ leakageを開発する。
- ページフォールトベースの抑制、Intel TSXベースの抑制、および retpolineベースの抑制という3つの攻撃バリアントを提案する。
- スケジューリング時間スライス内でAVXレジスタセット全体の実用的な漏えいを示す。
- AES-NIの鍵材料への影響を分析し、対策提案を提供する。
実験結果
リサーチクエスチョン
- RQ1怠慢な FPU コンテキストスイッチングを利用して、推測実行を介して被害者の FPU/SIMD レジスタ状態を回復できるか?
- RQ2OS の例外処理を抑制または回避して FPU レジスタを漏らす実用的な攻撃バリアントとは何か?
- RQ3ページフォールト、TSX、retpoline など、異なる例外抑制機構によって攻撃の性能はどのように異なるか?
- RQ4漏えいした FPU 状態が AES-NI のような暗号プリミティブに与える影響は何か?
主な発見
| 手法 | サイクル数 | 実効スループット |
|---|---|---|
| Page fault | 359.9K | 0.22 MiB/s |
| Intel TSX | 25.4K | 3.12 MiB/s |
| Retpoline | 24.0K | 3.30 MiB/s |
- 簡単な1ビット漏えいは、キャッシュ効果によって被害者の FPU レジスタのビットを推測する推測実行を用いる。
- ページフォールト、TSX、または retpoline による NM fault の抑制は、スケジューリング時間スライス内で FPU 状態の完全なスナップショットを可能にする。
- 表形式の結果は、256-bit AVX レジスタを漏らす際に、ページフォールト法よりも TSX または retpoline を用いると大幅な高速化を示す。
- 漏えいバリアントは AES-NI に関連するレジスタを露出させる可能性があり、SSE レジスタに保持される暗号鍵を危険にさらす可能性がある。
- 怠惰な FPU コンテキストスイッチングから積極的なスイッチングに切り替えることで漏えいリスクを低減する。いくつかのカーネルでは Linux パラメータ eagerfpu=on が回避策を提供する。
- 脆弱性 CVE-2018-3665 (INTEL-SA-00145) は著者によって公表された。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。