Lazy FPU Save/Restore (CVE-2018-3665)

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7

Issue

Red Hat では、現代の一般的な (x86) マイクロプロセッサーで稼働しているオペレーティングシステムと仮想マシンが、アプリケーションプロセスのコンテキスト切り替え時に浮動小数点の状態を「eagerly (熱心)」に保存して復元するのではなく、この状態に「lazy restore」の使用を選択する可能性がある問題を認識しています。浮動小数点の「lazy restore」を悪用すると、攻撃者は暗号化操作を含む他のアプリケーションの動作に関する情報を取得することが可能になります。この脆弱性は、他の最近のサイドチャネルの脆弱性と同様に、CPU の投機的実行に影響します。今回の脆弱性では、あるプロセスが、「lazy restore」されている他のプロセスの浮動小数点レジスタを読み取ることができます。この問題には CVE-2018-3665 が割り当てられています。Red Hat セキュリティーレスポンスチームでは、本件によるセキュリティー上の影響度を中程度の影響と評価しています。

Resolution

RHEL-7 の軽減策

  • RHEL-7 は Sandy Bridge およびそれ以降の Intel プロセッサーでは、デフォルトで (安全な) 「eager」の浮動小数点数レジスタの復元を使用しているため、影響はありません。AMD プロセッサーも影響はありません。
  • 古いプロセッサーの場合は、カーネルを eagerfpu=on パラメーターで起動して eager FPU restore モードを有効にすることでこの問題を軽減できます。このモードにすると、現行プロセスが FPU 命令を呼び出すかどうかに関わらず、タスクまたはコンテキストの切り替え時に毎回、FPU の状態が保存、復元されます。このパラメーターはパフォーマンスにマイナスの影響を与えることがなく、また脆弱性の影響を受けないプロセッサーにも悪影響を及ぼしません。

RHEL 6 およびそれ以前のバージョンはこの CVE の影響を受け、eagerfpu パラメーターが提供されていません。Red Hat は、この動作を変更する更新をリリースする予定です。

Root Cause

FPU/SSE/AVX 状態の Lazy save/restore:

現代のプロセッサーは、システムパフォーマンスを改善するために多くの技術を採用しています。そのうちの 1 つが、タスク切り替え時に特定の CPU コンテキスト状態の保存と復元を延期することです。現在、プロセッサーには、科学やエンジニアリング、グラフィックスのアプリケーションで使用される高精度の浮動小数点演算を実行する専用の浮動小数点装置 (FPU) が搭載されています。この FPU は、データレジスタ、ステータスレジスタ、および制御レジスタとオペコードレジスタで独自のコンテキスト状態を維持します。

タスクやコンテキストの切り替えは、ユーザーアプリケーションがカーネル関数を呼び出す際や、プロセスがキュー内の次のプロセスを先にスケジュールしようとする際に発生します。タスク切り替え時には、プロセッサーは現在の実行コンテキスト (各種レジスタ、命令およびスタックポインターなど) を保存し、新しいプロセスのコンテキストを読み込みます。その際には、すべてのアプリケーションが FPU (浮動小数点装置) を使用するわけではないので、FPU / SSEコンテキスト状態の復元を遅らせることができます。新しくスケジュールされたプロセスが FP (浮動小数点) 命令を使用しない場合、FPU コンテキストの状態を保存/復元する必要はありません。これにより、貴重な実行サイクルを節約し、パフォーマンスを向上させることができます。

「Lazy restore」スキームでは、タスクの切り替え中に、プロセスによって実行される最初の FP 命令は、「Device not Available (DNA)」例外を生成します。すると、DNA 例外ハンドラーは、現在の FPU コンテキストを古いタスクの状態の保存領域に保存し、現行プロセス用の新しい FPU コンテキストを読み込みます。つまり、FPU 状態の読み込みは、FP 命令が現行タスクよって呼び出されるまで延期されるという、「Lazy FPU restore」になります。

最近のプロセッサーにはプロセッサー拡張機能 (“XSAVEOPT”) が含まれており、これはハードウェアにおける FPU 復元をより効率的に実装し、DNA 例外に依存することなく Lazy FPU のパフォーマンスアップをもたらすものです。これらのプロセッサーでは、Red Hat Enterprise Linux 7 はすでに eager FPU 復元を使用しているので、今回の脆弱性による影響はありません。現実には、FPU レジスタは通常ブロックメモリーコピーと文字列演算で呼び出されるので、古いプロセッサーでも Lazy FPU restore が目に見えるパフォーマンス改善をもたらすことはありません。

影響
新たにスケジュールされたタスクは、このエクスプロイトを使用して、別のタスクの浮動小数点数レジスタの状態を推測することが可能で、これを使用すると機密性のある情報が流出するおそれがあります。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.