Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

Red Hat Enterprise Linux パラメーターで、CVE-2017-5754、CVE-2017-5715、および CVE-2017-5753 で提供されているマイクロコードおよびセキュリティーのパッチによるパフォーマンスへの影響を制御する

Updated -

先日公開された投機的実行に関する CVE は、様々なプロセッサーのアーキテクチャーおよびハードウェアプラットフォームに影響を与える、潜在的な 3 つの攻撃に対応しています (フィックスは環境によって多少異なります)。このフィックスを適用するには、多くの場合、ハードウェアベンダーから提供されるマイクロコードのアップデートが必要になります。

Red Hat は、セキュリティーの脆弱性に対応する、アップデート版カーネルを公開しました。弊社では、セキュリティーについては追加設定を必要としないことが優先させるため、上述のパッチはデフォルトで有効になっています。投機的実行は、パフォーマンスを最適化する技術です。したがって、このアップデート (カーネルおよびマイクロコードの両方) では、ワークロードに関するパフォーマンスが低下する可能性があります。したがって、その他の方法 (物理的に分離するなど) でシステムが十分に保護されていると確信している場合に、上記のカーネルパッチを一部またはすべて無効にすることを希望されることが予想されます。逆に、セキュリティー保護のためにパッチを有効にする場合は、このページで、フィックスを有効または無効にしたときのパフォーマンスを評価するメカニズムについて説明します。

概要

先日公開された投機的実行に関する CVE は、様々なプロセッサーのアーキテクチャーおよびハードウェアプラットフォームに影響を与える、潜在的な 3 つの攻撃に対応しています (フィックスは環境によって多少異なります)。このフィックスを適用するには、多くの場合、ハードウェアベンダーから提供されるマイクロコードのアップデートが必要になります。

Red Hat は、セキュリティーの脆弱性に対応する、アップデート版カーネルを公開しました。弊社では、セキュリティーについては追加設定を必要としないことが優先させるため、上述のパッチはデフォルトで有効になっています。投機的実行は、パフォーマンスを最適化する技術です。したがって、このアップデート (カーネルおよびマイクロコードの両方) では、ワークロードに関するパフォーマンスが低下する可能性があります。したがって、その他の方法 (物理的な分離や、強力なアクセス制御およびモニタリングなど) でシステムが十分に保護されていると確信している場合に、上記のカーネルパッチを一部またはすべて無効にすることを希望されることが予想されます。逆に、セキュリティー保護のためにパッチを有効にする場合は、このページで、フィックスを有効または無効にしたときのパフォーマンスを評価するメカニズムについて説明します。

この 3 つの CVE で説明されているセキュリティーの脆弱性は、x86 (Intel チップセットおよび AMD チップセット)、System Z、Power、ARM を含む主要なハードウェアプラットフォームの、最新のマイクロプロセッサーおよびオペレーティングシステムで発生しています。 Red Hat Enterprise Linux カーネルでは、3 つの debugfs パラメーターを使用して、アップデートしたカーネルでさまざまなパッチの動作を制御でき、マイクロコードが提供されている場合は連携します。

この 3 つの debugfs パラメーターは、システムの起動時にカーネルコマンドラインで、またはランタイム時に debugfs コントロールから有効または無効にできます。 このパラメーターは、pti (Page Table Isolation)、ibrs (Indirect Branch Restricted Speculation)、および ibpb (Indirect Branch Prediction Barriers) を制御します。 Red Hat は、システムの起動時に検出したアーキテクチャーを保護するのに必要となるため、この機能はデフォルトで有効にします。

このような CVE に対するフィックスを無効して、パフォーマンスロスを回復したい場合は、以下の 2 つの方法を選択できます。

永続的に無効にする (再起動後も有効)

1 つ目の方法は、以下のフラグを追加してカーネルのコマンドラインからパラメーターを無効にし、カーネルを再起動してこの設定を有効にすることです。

     noibrs noibpb nopti

注意: 各パラメーターを個別に無効にできます。パフォーマンスの性質上、同時に 3 つのパラメーターをすべて無効にする必要はありません。

ランタイム時に無効にする (システムを再起動すると設定が元に戻る)

2 つ目の方法は、以下の 3 つのコマンドを実行して、ランタイム時に無効にすることです。変更はすぐにアクティブになり、再起動時は必要ありません。

    # echo 0 > /sys/kernel/debug/x86/pti_enabled
    # echo 0 > /sys/kernel/debug/x86/ibpb_enabled
    # echo 0 > /sys/kernel/debug/x86/ibrs_enabled

注意: debugfs ファイルシステムがマウントされていることが必要になります。RHEL 7 では、debugfs はデフォルトでマウントされています。RHEL 6 では、以下のコマンドを実行してマウントできます。

  mount -t debugfs nodev /sys/kernel/debug

変更の確認

この CVE に関するフィックスが適切に無効になっていることを確認するには、以下の 3 つのファイルを cat して、値がすべて 0 に設定されていることを確認します。

    # cat /sys/kernel/debug/x86/pti_enabled
    # cat /sys/kernel/debug/x86/ibpb_enabled
    # cat /sys/kernel/debug/x86/ibrs_enabled

上述の CVE フラグを 0 に設定した場合でも、一部のアプリケーションでは最大 2% のパフォーマンスロスが発生する可能性があります。

詳細:

ここからは、各 CVE バリアントの詳細を説明します。

  • CVE-2017-5753 (バリアント #1/Spectre) は、分岐中の境界検査に関する脆弱性となります。この問題は、カーネルパッチで修正されます。バリアント #1 の保護は常に有効になっています。パッチを無効にすることはできません。 バリアント #1 に対する Red Hat のパフォーマンステストでは、測定可能な影響は見られませんでした。

  • CVE-2017-5715 (バリアント #2/Spectre) は、データリークが発生する可能性がある間接分岐ポイズニング攻撃となります。この攻撃により、仮想システムのゲストが、ホストシステムからメモリーを読み込むことができるようになります。この問題はマイクロコードで修正されます。同時に、ゲストおよびホストの仮想ソフトウェアに、カーネルおよび仮想システムのアップデートを適用してください。 この脆弱性には、マイクロコードとカーネルのアップデートパッチが必要になります。 バリアント #2 の挙動は、ibrs パラメーターと ibpb のパラメーター (noibrs/ibrs_enabled および noibpb/ibpb_enabled) で制御できます。これは、マイクロコードと連携します。

  • CVE-2017-5754 (バリアント #3/Meltdown) の脆弱性は、投機的なキャッシュロードを使用して、ローカルの攻撃者がメモリーの内容を読み取ることを可能にします。この問題は、カーネルパッチで修正されます。 バリアント #3 の挙動は、pti パラメーター (nopti/pti_enabled) で制御されます。

前述したように、ハードウェアベンダーからマイクロコードのアップデートを提供された場合は、バリアント 2 に対して保護するために、そのアップデートをハードウェアにインストールする必要があります。マイクロコードのアップデートについては、ハードウェアベンダーにお問合せください。

pti (Page Table Isolation)

"nopti"/pti_enabled は、ユーザーランドで実行中に、カーネルのページテーブルを分離させる KPTI (Kernel Page Table Isolation) 機能を制御します。この機能は CVE-2017-5754 に対応しており、バリアント #3 (Meltdown) と呼ばれています。

システムの起動時に nopti をカーネルコマンドラインに渡すか、ランタイム時に以下の debugfs コントロールを使用して動的に、PTI 機能を無効にできます。

    # echo 0 > /sys/kernel/debug/x86/pti_enabled

ibrs (Indirect Branch Restricted Speculation)

"noibrs"/ibrs_enabled は、(マイクロコードのアップデート後に) SPEC_CTRL が cpuid に存在する場合に、SPEC_CTRL の MSR (model-specific register) で IBRS 機能を制御します。ibrs_enabled を 1 に設定すると、カーネルは ibrs で実行します。これにより、カーネル領域を攻撃から保護します (ハイパースレッドおよび同時マルチスレッド攻撃からも保護されます)。IBRS を 2 に設定すると、ユーザーランドおよびカーネルの両方を、ibrs で実行します。これにより、ハイパースレッドおよび同時マルチスレッド攻撃からもユーザー領域を保護します。これは、AMD プロセッサーでもデフォルトになります (ファミリー 10h、12h、および 16h)。 この機能は、CVE-2017-5715 バリアント #2 に対応します。

システムの起動時に、noibrs をカーネルのコマンドラインに渡すか、以下の debugfs コントロールを使用して動的に、マイクロコードの ibrs 実装を無効にできます。

    # echo 0 > /sys/kernel/debug/x86/ibrs_enabled

ibpb (Indirect Branch Prediction Barriers)

"noibpb"/ibpb_enabled は、(マイクロコードのアップデート後に) IBPB_SUPPORT または SPEC_CTRL のいずれかが cpuid に存在する場合に、PRED_CMD の MSR (model-specific register) で IBPB 機能を制御します。ibpb_enabled を 1 に設定すると、ユーザーモードおよびゲストモードのコンテキストで実行された間接分岐予測のコンテンツを削除する IBPB バリアが、同じホストで別のアプリケーションまたは仮想マシンを攻撃しないようにします。仮想マシンを、別の仮想マシンから保護するには、ibpb_enabled=1 を設定する必要があります。これは、ibrs_enabled を 2 に設定していても必要になります。ibpb_enabled を 2 に設定すると、カーネルとハイパーバイザーの全エントリーポイントで、IBRS の代わりに ibpb が使用されます (つまり、この設定により強制的に ibrs_enabled が 0 に設定されます)。ibpb_enabled=2 は、SPEC_CTRL 機能がなく IBPB_SUPPORT だけがある CPU でデフォルトとなります。ibpb_enabled=2 は、同時マルチスレッディングに基づいた攻撃 (SMT、またはハイパースレッディング) からはカーネルを保護しません。したがって、SMT を無効にしないで ibpb_enabled=2 に設定すると、保護のレベルが低くなります。 この機能は、CVE-2017-5715 バリアント #2 に対応します。

システムの起動時に noibpb をカーネルのコマンドラインに渡す、または以下の debugfs コントロール使用して動的に、マイクロコードの ibrs 実装を無効にできます。

    # echo 0 > /sys/kernel/debug/x86/ibpb_enabled

アーキテクチャーのデフォルト

デフォルトでは、アーキテクチャーに適用する 3 つのパラメーターは、検出されたアーキテクチャーに従って、システムの起動時に自動的に有効になります。

Intel デフォルト:

pti 1 ibrs 1 ibpb 1 -> フィックスのバリアント #1 #2 #3
pti 1 ibrs 0 ibpb 0 -> フィックスのバリアント #1 #3 (マイクロコードのアップデートが利用できる以前の Intel システムの場合)

AMD デフォルト:
基本的なハードウェア実装が異なるため、AMD X86 システムはバリアント #3 の攻撃を受けません。正しいデフォルト値は、起動シーケンス時の動的チェックに基づいて、AMD ハードウェアに設定されます。

pti 0 ibrs 0 ibpb 2 -> フィックスバリアント #1 #2 (マイクロコードのアップデートが適用された場合)
pti 0 ibrs 2 ibpb 1 -> フィックスバリアント #1 #2 (マイクロコードをアップデートせず、間接分岐予測を無効にできる、以前のプロセッサーの場合)

自動化のチューニング

次の方法で、カスタマイズした tuned-adm プロファイルに上述のチューニングコマンドを追加すると、この設定を制御できます。

How to create a customized tuned profile

注意: バリアント #1 #2 #3 のセキュリティーフィックスは、デフォルトで有効になります。したがって、カスタムのプロファイルを作成することは、セキュリティーフィックスを無効にする場合に限り必要になります。

Was this helpful?

We appreciate your feedback. Leave a comment if you would like to provide more detail.
It looks like we have some work to do. Leave a comment to let us know how we could improve.
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.