ページサイズ変更によるマシンチェックエラー: CVE-2018-12207
更新
概要
Red Hat は、特権のないローカル攻撃者が従来のシステムセキュリティー制御を回避し、システム全体をサービス拒否状態にする可能性があるマイクロアーキテクチャー (ハードウェア) の問題を認識しています。
現時点では、この不具合は Intel ベースのプロセッサーにのみ影響することが判明しています。これは、ハードウェアベースの不具合で、修正にはカーネルの更新が必要になります。この問題は、Red Hat Enterprise Linux 8 とそれ以前のすべてのリリースに影響します。
技術的な詳細と背景
ページサイズ変更によるマシンチェックエラー の問題には、CVE-2018-12207 が割り当てられ、影響度は「重要な影響」と評価されました。
変換をゲスト (およびホスト) 仮想アドレスから実行可能な命令専用の物理アドレス (アドレス変換キャッシュとも呼ばれる) へキャッシュする ITLB (Instruction Translation Lookaside Buffer) に関連する Intel マイクロプロセッサーのコンピューターハードウェアで不具合が発見されました。これにより、システムメモリーの簡単なビューがあるアプリケーションの抽象化が提供されます。ITLB 機能はソフトウェアに対して透過的で、パフォーマンスを大幅に向上します。
命令が実行されると、その線形 (または仮想) アドレスは対応する物理アドレスに変換されます。この実行可能な命令の仮想アドレスから物理アドレスへのマッピングは、ITLB にキャッシュされます。
権限を持つソフトウェア (オペレーティングシステムや仮想マシンモニター (VMM))は、ページング構造のページサイズ (4KB、2MB、1GB など) や他の属性を変更する可能性があります。一般的に、ページング構造のこのような変更後には、変更されたページに対応するキャッシュされた ITLB エントリーを無効化する必要があります。しかし、ITLB の無効化が遅延する可能性があります。この遅延により、攻撃者は命令フェッチを呼び出すことができます。これによりプロセッサーは ITLB のキャッシュされた無効なアドレス変換を使用し、無効な物理アドレスにアクセスします。これが原因で、マシンチェックエラー例外が発生し、CPU がハング状態になります。
ゲスト VM 内部の特権を持つ攻撃者は、ゲストページテーブルエントリーを制御し、キャッシュされた ITLB エントリーを適切にフラッシュせずに一貫性のない ITLB エントリーを作成するために特定の命令を実行できる悪意のあるカーネルモジュールを作成することができます。これにより、後続の命令フェッチは複数の互換性のない ITLB エントリーを発見します。このような状況では、CPU がリカバリー不可能なハング状態になる修正不可能なマシンチェックエラーが引き起こされ、システム全体がサービス拒否状態になります。
これらのキャッシュを更新するには、プロセッサーの内部データ構造と同期する必要があり、特定のプロセッサー命令 (マイクロコードの INVLPG および CR3 の変更) を使用する必要があります。攻撃者は、内部 CPU のキャッシュ状態を無効化するのに必要な正しい無効化シーケンスを発行せずに、悪意のあるゲストを指示して特定の場所のマッピングを要求し、ページサイズを切り替え、新しいページサイズでリクエストを再発行することができます。
謝辞
この問題は Intel 社によって発見されました。Intel 社は Deepak Gupta 氏に感謝の意を表明しています。
参考情報
命令ユニット (Instruction Unit) に関する情報 (英語)
メモリーのページに関する情報 (英語)
Red Hat エラータ更新ポリシー
NOVEMBER 2019 INTEL PLATFORM UPDATE (英語)
マイクロコードに関する情報が必要な場合マイクロコードに関する記事 を参照してください。
TSX に関する情報が必要な場合TSX に関する記事 を参照してください。
影響を受ける製品
以下の 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
OpenShift Container Platform
Red Hat OpenShift Online
Red Hat Virtualization (RHV-H)
Red Hat OpenStack Platform (イメージ同梱カーネル)
Red Hat Enterprise Linux ベースのコンテナーは、カーネルの問題の影響を直接受けませんが、そのセキュリティーはホストカーネル環境の整合性に依存しています。Red Hat は、最新バージョンのコンテナーイメージを使用することを推奨します。Red Hat Container Catalog の一部である Container Health Index を使用すると、常に Red Hat コンテナーのセキュリティー状態を確認できます。使用中のコンテナーのプライバシーを保護するには、これらの攻撃に対して (Red Hat Enterprise Linux や Atomic Host といった) コンテナーホストを更新する必要があります。Red Hat は、このユースケース向けに更新された Red Hat Enterprise Linux Atomic Host をリリースしています。
脆弱性の診断
以下の診断スクリプトを使用して、現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断します。正規のスクリプトであることを確認する場合は、GPG 分離署名 もダウンロードします。
対処方法
影響のあるバージョンの Red Hat 製品をご使用のお客様は、エラータが入手可能になり次第、該当製品を更新することが強く推奨されます。適切な更新を早急に適用することが求められます。
影響を受ける製品の更新
製品名 | パッケージ | アドバイザリー/更新 |
---|---|---|
Red Hat Enterprise Linux 8 (z-stream) | kernel | RHSA-2019-3832 |
Red Hat Enterprise Linux 8 | kernel-rt | RHSA-2019-3833 |
Red Hat Enterprise Linux 8 | kpatch | |
Red Hat Enterprise Linux 7 (z-stream) | kernel | RHSA-2019-3834 |
Red Hat Enterprise Linux 7 | kernel-rt | RHSA-2019-3835 |
Red Hat Enterprise Linux 7 | kpatch | |
Red Hat Enterprise Linux 6 (z-stream) | kernel | RHSA-2019-3836 |
Red Hat Enterprise MRG 2 | kernel-rt | RHSA-2019-3844 |
Red Hat Enterprise Linux 5 (z-stream) | kernel | 影響あり (wontfix、サポート範囲外) |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 7 | redhat-virtualization-host | RHSA-2019-3860 |
Red Hat Virtualization 4.2 Red Hat Enterprise Linux 7.6 AUS | redhat-virtualization-host | RHSA-2019-3860 |
Red Hat Enterprise MRG 2 | kernel-rt | RHSA-2019:3844 |
Red Hat OpenShift Container Platform 4.1 | machine-os-content-container | |
Red Hat OpenShift Container Platform 4.2 | machine-os-content-container |
影響
パフォーマンスへの影響
RHEL 7 および RHEL 8 では、ほとんどの場合で影響は 0-4% の範囲でした。 テキストのフットプリントが小さい遅延に敏感なアプリケーション (ネットワークベンチマークなど) や、テキストのフットプリントが大きいアプリケーション (データベースワークロード) への影響はこの範囲内になる傾向にあります。
RHEL および RHEL 8 では、軽減策が有効な状態であれば KVM は実行可能な 4KB のページをバックグラウンドで実行不可能な Large page に戻し、コードが含まれないページのパフォーマンスを回復します。このリカバリープロセスでは、ゲストでまれに短い一時停止期間 (マイクロ秒の10 - 100 分の 1 程度) が発生します。ゲストが遅延に敏感なワークロードやリアルタイムワークロードを実行している場合、新たに導入されたモジュールパラメーター kvm.nx_huge_page_recovery_ratio=0 を使用して Large page のリカバリーを無効にすることが推奨されます。
RHEL 6 では、テキストとデータ両方の Huge Page が 4K のページに分割されるため、パフォーマンスへの影響がより大きくなる可能性があります。
ホスト/ベアメタルシステム:
ベアメタルシステムで実行される権限を持たないアプリケーションは、ページング構造エントリーを変更 (または制御) できない可能性があります。たとえば、権限を持たないシステムソフトウェアはペーイング構造のページサイズ属性を更新できない可能性があるため、前述のサービス拒否状態を引き起こす原因となるマシンチェックエラー例外が発生しない可能性があります。
ハイパーバイザー/仮想ゲスト環境:
最も重要な攻撃ベクトルは、稼働する多数のゲスト VM がサービス拒否状態となるホスト (またはハイパーバイザー) システム上でマシンチェックエラー (MCE) を引き起こす仮想ゲストです。クラウド環境では、影響が最も深刻であるため、ゲスト内で実行されるゲストやコードは信頼できません。
2 つの軽減策
1. Intel 社のハードウェアマイクロコードの更新を適用すると、IA32_ARCH_CAPABILITIES MSR の新しい MSR (Machine Specific Register) ビット (6) が有効になります。
IA32_ARCH_CAPABILITIES[PSCHANGE_MC_NO=6]
このビット (6) の存在および状態 (0/1) は、CPU がこの DoS 問題に対して脆弱であるかどうか、およびカーネル/ハイパーバイザーでソフトウェアアルゴリズムによる軽減策が必要であるかどうかを示します。
2. ソフトウェアの更新をカーネル/KVM モジュールに適用すると、この問題を防ぐために以下の軽減策が提供されます。
- 4 KB よりも大きい Large page (または Huge page) を実行不可能にします。よって、ホストカーネル/ハイパーバーザーへのトラップは発生せず、プロセッサーは Large page (2MB、1GB など) にある命令を実行できなくなります。
- 実行不可能な Large page で命令が実行された場合、KVM は Large page を 4KB のページに分割し、4KB のページに実行権限を付与します。
- この軽減策を有効または無効にする、新しい kvm モジュールとコマンドライン起動パラメーター kvm.nx_huge_pages=force/off/auto が RHEL 7 および RHEL 8 に導入されました。
- kvm.nx_huge_pages=off は軽減策を無効にし、Huge page を実行可能にします。
- 既存の "mitigations=off" カーネルコマンドラインフラグも、カーネルの起動時にこの CVE を無効にすることができます。
- kvm.nx_huge_pages=auto は CPU が影響を受ける場合にのみ軽減策を有効にします。
- kvm.nx_huge_pages=force は軽減策を有効にします。
- 以下の例のように、/sys/module/kvm/parameters/nx_huge_pages を使用すると、起動時にこの CVE を有効または無効にすることができます。
- echo off > /sys/module/kvm/parameters/nx_huge_pages
- echo auto > /sys/module/kvm/parameters/nx_huge_pages
- echo force > /sys/module/kvm/parameters/nx_huge_pages
- kvm.nx_huge_pages=off は軽減策を無効にし、Huge page を実行可能にします。
- この軽減策を有効または無効にする、新しい kvm モジュールとコマンドライン起動パラメーター kvm.no_huge_pages=0/1 が RHEL 6 に導入されました。
- kvm.no_huge_pages=0 は軽減策を無効にします。
- kvm.no_huge_pages=1 は軽減策を有効にします。
- 軽減策はデフォルトで無効になっており、実行時に変更することはできません。
3. カーネル/KVM の更新には、ユーザーがシステムの脆弱性を検索し、軽減策が有効であるかを確認できる以下の sysfs インターフェースが導入されました。
$ cat /sys/devices/system/cpu/vulnerabilities/itlb_multihit
-Not affected
-KVM Mitigation: Split huge pages
-KVM Vulnerable: no mitigation enabled
軽減策
この不具合の影響を受ける Red Hat 製品にカーネルパッケージの更新または kpatch を適用することが、唯一の既知の軽減策になります。
Red Hat は、ゲストオペレーティングシステムがこの不具合を悪用しないようにする修正を KVM 仮想技術に追加しました。他の仮想化ベンダーも特定の修正を実装している可能性があります。仮想化ベンダーに連絡し、更新または軽減策の情報について相談してください。
Comments