目次

投機的実行に関する脆弱性への対処

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 を指定します。