BSD界隈四方山話

第136回FreeBSDのMeltdown/Spectre対策

FreeBSDのMeltdown/Spectre対策

CPUのセキュリティ脆弱性であるMeltdownおよびSpectreに対するFreeBSDプロジェクトの方針はResponse to Meltdown and Spectreに示されています。大まかな方針は次のようなものです。

  • Meltdownに対してはKPTI (Kernel Page Table Isolation)を実装することで対処とする。最初はamd64に対して開発を行い、11.1-RELEASEへの取り込みを目指して作業。次いで10.3-RELEASEおよび10.4-RELEASEへのマージを実施
  • Spectreに関しては脆弱性の利用ケースを調査する分析期間が必要なのでまだ時間がかかる。また、retpoline実装が取り込まれたLLVMを使う方向で作業中

KPTIの実装は有効無効を切り替えできる形で実装するとされています。Meltdownに対するセキュリティ脆弱性が存在するプロセッサに対してはデフォルトで有効化し、セキュリティ脆弱性が存在しないAMDなどのプロセッサに対しては機能を無効にするようです。これはKPTI実装を有効にすることでパフォーマンスが低下するためで、必要がなければ無効にして従来のパフォーマンスを維持することが可能になるようにするようです。

開発中のコードはD13797 PTI for amd64にまとまっています。ざっとコードを見るとわかりますが、どうもvm.pmap.ptiというsysctl(8)値で機能の切り替えができるようになるものとみられます。

vm.pmap.ptiでKPTI機能の切り替えを検討
vm.pmap.ptiでKPTI機能の切り替えを検討
11.1-RELEASEにはvm.pmap.ptiというsysctl(8)値は導入されていない
11.1-RELEASEにはvm.pmap.ptiというsysctl(8)値は導入されていない

コードを見ていくとif (pti)といった感じでKPTIが有効になっているか無効になっているかで機能を切り替えていることがわかります。

KPTIを利用するかどうか切り替えるように実装されているコード
KPTIを利用するかどうか切り替えるように実装されているコード
KPTI向けに追加されたコードなど
KPTI向けに追加されたコードなど

Meltdown対策を有効にする必要がない場合にはvm.pmap.ptiを0に設定することで機能を無効化することができそうです。パフォーマンスを優先する場合にはこの値を設定して/etc/sysctl.confに書いておくといった設定をすることになるんじゃないかと思います。

Spectreに対する対処がいつごろ導入されるかはまだわかりませんが、想定される利用ケースに対してチェックを入れるコードが導入されるほか、LLVMのコンパイルオプションでの低減策の実施と、あとは先日紹介したようにマイクロコードのアップデートと併用する形での対処といったあたりが落としどころになるように見えます。状況が進展したら随時取り上げていこうと思います。

FreeBSD勉強会

4月26日(木)19:00~ 第70回:ヴァル研 セミナールーム

【sysctl(8)からカーネルの中身を追う】

*BSDに限らず、UNIX系OSではユーザランド側からsysctlコマンドを実行することで、カーネルが提供する機能のON/OFFやカーネルパラメータを設定することができます。今回のFreeBSD勉強会では、sysctlによるカーネルパラメータの設定を題材にしてカーネルソースコードの読み方を解説しようと思います。

また、ソースコードを読み解く際の当たりの付け方といった、カーネルに限らないコードリーディングのノウハウについても紹介できればと思いますので、カーネルソースコードをこれから読み始めてみようと思っている方はぜひご参加ください。

【AsiaBSDCon 2018復習】

AsiaBSDCon 2018で発表された内容を振り返ります。どんな発表内容だったかちょっと理解が追いつかなかった、といった場合の手助けとして利用できるように概要をお伝えできればと思います。

本勉強会への参加者には抽選か勝ち抜きかでデーモンTシャツなどのグッズをお渡しします :)

参加登録はこちらから。

FreeBSD勉強会 発表者募集

FreeBSD勉強会では発表者を募集しています。FreeBSDに関して発表を行いたい場合、@daichigotoまでメッセージをお願いします。30分~1時間ほどの発表資料を作成していただき発表をお願いできればと思います。

おすすめ記事

記事・ニュース一覧