目次
投機的実行に関する脆弱性への対処
Spectre/Meltdown に代表されるCPUの脆弱性に関する対処方法です。
Spectre Variant 1
対策
2019年12月現在 FreeBSD での対処方法はありません。
Spectre Variant 2
対策
CPU feature のIBRS を有効にします。 またはカーネルを含む実行ファイルを retpoline を有効にしてコンパイルしなおします。 どちらもデフォルトでは無効です。
準備
事前にマイクロコードアップデートが必要です。
対処方法
sysctl で hw.ibrs_disable=0 を設定します。
または、clang に -mretpoline を渡してコンパイルしなおします。
無効化方法
sysctl で hw.ibrs_disable=1 を設定します。
または、clang に -mno-retpoline を渡してコンパイルしなおします。
Meltdown (Spectre Variant 3)
対策
カーネルに実装されている PTI (Page Table Isolation) を有効にします。 PTIはデフォルトで有効になっています。
準備
11.2 以降の対応済のカーネルを用意します。
対処方法
sysctl で vm.pmap.pti=1 を設定します。
無効化方法
sysctl で vm.pmap.pti=0 を設定します。
Spectre Variant 4
対策
CPU Feature の SSBD を有効にします。 デフォルトでは無効です。
準備
マイクロコードアップデートが必要です。
対処方法
/boot/loader.conf に以下を指定します。
hw.spec_store_bypass_disable=2
値の意味は 0:off 1:on 2:auto です。
無効化方法
/boot/loader.conf に以下を指定します。
hw.spec_store_bypass_disable=0
Lazy FPU
対策
2019年12月現在リリースされているカーネルは全て対策済です。
L1 Terminal Fault
対策
CPU Feature のL1DFLを使うか、ソフトウェアでL1Dキャッシュをクリアします。 デフォルトでは無効です。
準備
マイクロコードアップデートを行います。 アップデートしなくてもソフトウェアの実装が使用されます。
対処方法
/boot/loader.conf に以下を指定します。
machdep.syscall_ret_flush_l1d: 1
値の意味は次の通りです。
0:off 1:0n 2:hw 3:sw
無効化方法
/boot/loader.conf に以下を指定します。
machdep.syscall_ret_flush_l1d: 0
Microarchitectural Data Sampling (ZombieLoad)
対策
CPU feature の MD_LOAD を有効にします。 デフォルトは無効です。
準備
マイクロコードアップデートが必要です。
対処方法
/boot/loader.conf に以下を設定します。
machdep.hyperthreading_allowed=0
その上で sysctl で hw.mds_disable=3 を指定します。
数字の意味は次の通りです。
0 - mitigation disabled 1 - VERW instruction (microcode) mitigation enabled 2 - Software sequence mitigation enabled (not recommended) 3 - Automatic VERW or Software selection
無効化方法
sysctl で hw.mds_disable=0 を指定します。