web-dev-qa-db-ja.com

LinuxでKPTIが有効になっているかどうかを確認するにはどうすればよいですか?

メルトダウン攻撃に関するFAQ は、KPTIがLinuxの修正版であると述べています。 KPTIが実行/有効化されているかどうかを確認するにはどうすればよいですか?

25
Shelvacu

KPTIの状態を示すもの:

  • 標準カーネルでは、dmesg出力の文字列Kernel/User page tables isolation: enabledまたはKernel/User page tables isolation: force enabled on command lineは、カーネルがカーネルページテーブルの分離を実行していることを意味します。後者のメッセージはさらに、カーネルがページテーブルの分離がこのCPUに必要ではないと考えていることを意味します。

  • 一部のベンダーパッチカーネル(主にRedHatとその派生物):/sys/kernel/debug/x86/pti_enabledのゼロ以外の値。ただし、このファイルの不在は何も意味しません。標準のカーネルでは提供されていません。

  • カーネル4.14.18以降および対応するバージョンのLTSカーネルでは、/sys/devices/system/cpu/vulnerabilities/meltdownの内容:Mitigation:で始まる行は、緩和策(KPTI、マイクロコードなど)が適用されていることを示します、Not affectedで始まる行は、CPUが問題の影響を受けていないと考えられていることを示し、Vulnerableで始まる行は、CPUが脆弱であると考えられますが、緩和策がないか不十分であることを示します設置されています。

KPTIの状態を示さないもの:

  • カーネルのバージョン。カーネル4.14.11以降、および4.1、4、4、4.9のLTSカーネルの対応するバージョンは、KPTIのcapableですが、無効にしてコンパイルできます。起動時間。さらに、これらより古いバージョンは自動的に危険にさらされません:一部のディストリビューションはKPTIパッチを古いカーネルにバックポートしました。

  • bugs : cpu_insecure/proc/cpuinfo。これが存在することは、ifカーネルがページテーブル分離のためにコンパイルされており、ifページテーブル分離が起動時または実行時に無効にされていない場合、ページテーブル分離が使用されます。さらに、notはCPUがメルトダウン攻撃に対して脆弱であることを示します:4.14.11カーネルはすべてのx86 CPUに設定し、4.14.12カーネルはすべての非AMD CPUに設定します。 Pentium MMXや "Bonnell"のようなものでも、Atom脆弱性のないCPUです。

  • カーネル構成のCONFIG_PAGE_TABLE_ISOLATION=y。これは、カーネルがページテーブルのカーネル分離を実行できることを示しているだけです。 KPTIは、ブート時にカーネルコマンドラインからnoptiまたはpti=offオプションを介して無効にできます。一部のシステムでは、0/sys/kernel/debug/x86/pti_enabledに書き込むことにより、実行時に無効にできます。

10
Mark

LinuxカーネルはKPTIステータスを記録します ブート時に、次のコマンドを実行すると、パッチが適用されたカーネルのステータスが出力されます。何も表示されない場合、KPTIは無効になっています。

dmesg -wH | grep 'Kernel/User page tables isolation'

Linuxカーネル4.15rc6はKPTI(カーネルページテーブル分離)を有効にし、 Linuxカーネル4.14.11にバックポーティング 、4.9.74、4.4.109、3.16.52、および3.2.97に移植されました。

したがって、これらのバージョンのいずれかを実行している場合は、KPTIが用意されています。ほとんどのディストリビューション(任意のLinuxカーネルバージョンを実行)は、1〜2日以内にLinuxカーネルに更新をプッシュして、メルトダウンとスペクトルを修正します。

注:KPTIを無効にするには、パラメータpti=offをGRUBに追加します。詳細: https://askubuntu.com/questions/19486/how- do-i-add-a-kernel-boot-parameter

17
Aadhil RF

サポートされているカーネル:

dmesg | grep「カーネル/ユーザーページテーブルの分離」

有効または無効になります。

結果がない場合、カーネルはKPTIをサポートしていません。

8
foxer

dmesg | grep isolationなどのdmesg出力をチェックして、実行中のマシンでオンになっているかどうかを確認します。

いくつかの詳細はここで言及されています: https://lwn.net/Articles/741878/

  • ブート時にこのメカニズムを無効にするnoptiコマンドラインオプションがあります。
  • KPTIパッチを有効にするカーネルオプションPAGE_TABLE_ISOLATIONがあり、CONFIG_IKCONFIGが有効な場合、zcat /proc/config.gz | grep CONFIG_PAGE_TABLE_ISOLATION=yで実行中のカーネルを確認できます
  • 機能フラグX86_BUG_CPU_INSECUREがあり、CPUが影響を受けていないことがわかっている場合、ページテーブルの分離はオフになります。
3
S. Huber

dmesg出力でKernel/User page tables isolationを含む行を確認します。ただし、カーネルリングバッファーの先頭がなくなっている可能性があるため、/var/log/kern.log(またはそのローテーションバージョンの1つ、またはその他のログファイル)で同じ文字列を検索することもできます。

Xenゲストにはそのような行がない場合があることにも注意してください。たとえば、これはDebian/stretchカーネル(4.9.65-3 + deb9u2)のsilent_disableArch/x86/mm/kaiser.cケースです。

void __init kaiser_check_boottime_disable(void)
{
[...]
        if (boot_cpu_has(X86_FEATURE_XENPV))
                goto silent_disable;
[...]
disable:
        pr_info("disabled\n");

silent_disable:
        kaiser_enabled = 0;
        setup_clear_cpu_cap(X86_FEATURE_KAISER);
}
3
vinc17

メルトダウンパッチのパフォーマンスへの影響も心配です。ほとんどのワークロードは、Amazon Linux on EC2で実行されます。

最新のカーネル更新(ビルド03 Jan 2018)-4.9.70-25.242にはすべての上流のメルトダウンパッチが含まれます(rpm -q --changelog kernel)。

デフォルトでは、Amazon Linuxカーネル4.9.70-25.242以降では、ページテーブルの分離(CONFIG_PAGE_TABLE_ISOLATION=y)このフラグがyである限り、残念ながらKPTIが有効になっていると思います。ただし、パフォーマンスの比較は行っていません(目立つはずです)。

2
Terry Wang