CVE-2019-1125: Spectre SWAPGS ガジェットの脆弱性

更新 -

概要

Red Hat は、Linux カーネルの更新が必要となる、spectre-V1 と同様の攻撃ベクトルを認識しています。この追加の攻撃ベクトルは、これまでのカーネル更新に含まれる既存のソフトウェア修正を基盤とします。この脆弱性は、Intel または AMD プロセッサーを使用する x86-64 システムのみが対象となります。

この問題には CVE-2019-1125 が割り当てられ、中程度の影響 があると評価されています。

権限のないローカルの攻撃者は、この脆弱性を使用して従来のメモリーセキュリティー制限を回避し、本来はアクセスできない、権限を必要とするメモリーへの読み取りアクセスを可能にします。

背景

この脆弱性は「Spectre」と呼ばれ、CPU によって実行される複雑な命令パスを評価するときに、システムのパフォーマンスを向上するために分岐予測を行うマイクロプロセッサーに影響を与えます。これらのプロセッサーは、一連の選択肢から最も可能性の高いものを推測します。これらの選択肢はプライベートデータに影響を与えたり、このデータをキャッシュに取り込む可能性があります。攻撃者は、アクセス時間とタイミングを注意して観察し、アクションのタイミングを利用して投機的にアクセスされたメモリーの内容を推測することができます (通常、タイミング攻撃と呼ばれます)。

x86 ファミリーのマイクロプロセッサーは、メモリー「セグメンテーション」と呼ばれる機能を実装します。この機能では、すべてのメモリーアドレスはセグメントベースのアドレスで構成され、そのセグメント内のオフセットが追加されます。アーキテクチャーは、完全なメモリーアドレスの構築に使用されるセグメントレジスター (CS、DS、SS、ES、FS、GS) を定義します。一部のレジスターは特定の命令によって暗黙的に使用されます。

「FS」および「GS」レジスターは、64 ビットモードで使用でき、特定のデータ用に予約されたメモリー範囲にオフセットを提供します。たとえば、Linux は「GS」を使用して TLS (Thread Local Storage) ポインターをユーザー空間 (ユーザー) アプリケーションに格納し、インカーネルの場合に指定のプロセッサーの per_cpu データへのオフセットとして機能します。SWAPGS 命令は、カーネルコードへの 64 ビットエントリーで使用され、現在のユーザー空間値である 「GS」をカーネル操作中に使用される予定の値にスワップします。

新たにスワップした「GS」値は、カーネル内に含まれる PER_CPU マクロを使用して、カーネルデータへアクセスするために使用されます。「SWAPGS」命令は、ユーザー空間からカーネル空間に移動するメカニズムの一部として追加されました。これは、カーネルスタックデータなどのカーネルデータを検索する方法を決定します。

SWAPGS 命令はプリミティブ命令で、使用する値が適切であるか検証しません。システムがカーネルコードを入力する場合でもスワップを必要としなかったり、カーネルモードですでに実行している場合は、カーネルモードを再入力する場合があります。

このような場合、カーネルエントリーコード内にチェックがあり、条件分岐のテストでスワップの必要性を判断します。 そのため、Linux カーネルエントリーコードのこのような条件分岐が、SWAPGS を実行しないコードに誤って推測され、投機的実行で依存するメモリー操作に誤った GS が使用される可能性があります。適切な知識を持つ攻撃者は、典型的な Spectre 同様のサイドチャネル分析をタイミングの結果に実行することができます。

脆弱性の判断

対象となる特定の命令 (SWAPGS) は x86-64 アーキテクチャーでのみ使用できます。そのため、x86-64 プラットフォームのベンダー (Intel および AMD) のみが影響を受けることが判明しています。

軽減策

カーネルを更新し、システムを再起動する以外に、既知の完全な軽減策はありません。カーネルパッチは、これまでの更新の既存の Spectre 軽減策を基盤とします。

リスクベースでこの問題を軽減することが推奨されます。高レベルのセキュリティーと信頼が求められるシステムから優先に対処し、悪用のリスクを軽減する処置をこれらのシステムに適用するまで、信頼できないシステムから隔離します。

業界のフィードバックによると、Linux カーネルベースのシステムでこの脆弱性を悪用する既知の方法は確認されていないことに注意してください。

影響を受ける製品

以下の Red Hat 製品のバージョンが影響を受けます。

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise Linux 8
  • Red Hat Atomic Host
  • Red Hat Enterprise MRG 2
  • Red Hat OpenShift Online v3
  • Red Hat Virtualization (RHV/RHV-H)
  • Red Hat OpenStack Platform
  • Red Hat OpenShift Container Platform 4 (RHEL CoreOS)

Red Hat Linux コンテナーは、サードパーティーハードウェアの脆弱性の影響を直接受けませんが、そのセキュリティーはホストカーネル環境の整合性に依存しています。Red Hat では最新バージョンのコンテナーイメージを使用することを推奨します。Red Hat Container Catalog の一部である Container Health Index を使用すると、常に Red Hat コンテナーのセキュリティー状態を確認できます。使用中のコンテナーのプライバシーを保護するには、これらの攻撃に対してコンテナーホスト (Red Hat Enterprise Linux、RHEL CoreOS、Atomic Host など)を更新する必要があります。

解決策

影響を受けるバージョンの Red Hat 製品をご使用のお客様は、エラータが利用可能になり次第、更新を行うことが強く推奨されます。この不具合を適切に軽減するため、適切な更新をすぐに適用し、再起動してください。

謝辞

Red Hat は、この問題を報告し、軽減策で協力していただいた Intel および業界のパートナーに感謝いたします。

よくある質問

更新はゲストとホストの両方に適用する必要がありますか?
Spectre v1 と同様に、ゲストとホストの両方に適用する必要があります。Spectre v1 は、VM 全体を攻撃するために使用されます。
カーネルの更新後に再起動する必要はありますか?
はい、再起動が必要です。
前回の Spectre-v1 の修正は適用済みですが、この更新も適用する必要がありますか?
はい、更新を適用する必要があります。
この更新でパフォーマンスにどのような影響がありますか?
この CVE の修正によるパフォーマンスへの影響は最小限になります。この影響は、ユーザー空間とカーネル空間の往来が高頻度で行われるアプリケーションでより顕著になります。たとえば、システム呼び出し、NMI、カーネル割り込みなどが挙げられます。
 
特定のワークロードでの影響を明確にすることはできませんが、現在のベンチマークではパフォーマンスの変化を測定できないことがテストで判明しています。
カーネルコマンドラインパラメーターでこの変更を無効にすることはできますか?
これは Spectre-v1 と同様の不具合です。「nospectre_v1」パラメーターを使用してカーネルを起動すると、一連の軽減策を無効にすることができます。

追加情報

Spectre Attacks: Exploiting Speculative Execution
2018 年 5 月に発表された 投機的ストアバイパス の詳細を参照してください。
What are Meltdown and Spectre?Here’s what you need to know.
Reading privileged memory with a side-channel