メルトダウン攻撃に関するFAQ は、KPTIがLinuxの修正版であると述べています。 KPTIが実行/有効化されているかどうかを確認するにはどうすればよいですか?
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
に書き込むことにより、実行時に無効にできます。
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
サポートされているカーネル:
dmesg | grep「カーネル/ユーザーページテーブルの分離」
有効または無効になります。
結果がない場合、カーネルはKPTIをサポートしていません。
dmesg | grep isolation
などのdmesg出力をチェックして、実行中のマシンでオンになっているかどうかを確認します。
いくつかの詳細はここで言及されています: https://lwn.net/Articles/741878/
zcat /proc/config.gz | grep CONFIG_PAGE_TABLE_ISOLATION=y
で実行中のカーネルを確認できますdmesg
出力でKernel/User page tables isolation
を含む行を確認します。ただし、カーネルリングバッファーの先頭がなくなっている可能性があるため、/var/log/kern.log
(またはそのローテーションバージョンの1つ、またはその他のログファイル)で同じ文字列を検索することもできます。
Xenゲストにはそのような行がない場合があることにも注意してください。たとえば、これはDebian/stretchカーネル(4.9.65-3 + deb9u2)のsilent_disable
のArch/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);
}
メルトダウンパッチのパフォーマンスへの影響も心配です。ほとんどのワークロードは、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が有効になっていると思います。ただし、パフォーマンスの比較は行っていません(目立つはずです)。