Intel Microcodeのアップデート

また新たなCPU脆弱性が発見された。今度の奴はMDSと呼ばれるらしい。以前にもSpectreやMeltdownなどのCPU脆弱性が発見されているが、またしても同じような脆弱性の発見である。

このサーバーはユーザーがログインして勝手にプロセスを走らせたりできない純粋に個人使用のサーバーなので、外部から悪意をもったコードを無理やり走らせることはほぼ不可能であるが、さすがにこうもCPU脆弱性の発見が相次ぐと念には念を入れてCPU脆弱性対策をしておいた方がいいような気がしてきた。

さて、このサーバーはIntel Celeron 847で動いているので、もろもろのCPU脆弱性をばっちり抱えているので対策が必要である。この手のCPU脆弱性に対処するには、何らかの方法でCPUの挙動を修正する対策済みMicrocodeで本来のCPUが持っているMicrocodeを上書きしてあげる方法がSpectre/Meltdown騒ぎの時に確立した。IntelのCPUごとの対策状況の資料を見ると、最新のIntelのMicrocodeはCeleron 847で動作検証済みということなので、この方法で対処できることが判明した。Microcodeを読み込ませる方法はいくつかあるが、最も安心なのはBIOSで上書きする方法である。しかし、残念ながらこのサーバーのマザーボードは古いので、何年も前からBIOSの更新が止まっている。となると、OSレベルでMicrocodeを読み込ませるしか方法がない。というわけでDebianの起動時にMicrocodeを読み込ませることにする。

Microcodeのアップデートは二段階である。まずKernelが脆弱性対策済みのバージョンになっていることである。これは、常時Kernelパッケージを最新に更新しているこのサーバーでは問題なくクリアしている。

次に必要なのがintel-microcodeパッケージのインストールである。とりあえずパッケージツリーに含まれているか、探してみる。最近、ようやくapt-getを捨ててaptコマンドに移行したので、以下のコマンドで探してやる。

apt search intel-microcode

パッケージツリーには存在するものの、インストールはされていないことが分かる。もし、ツリーに見つからないときはおそらくcontribとnon-freeのパッケージが/etc/apt/sources.listから欠落しているので足してあげよう。次に、パッケージをインストールする。

sudo apt install intel-microcode

これで依存関係のあるiucode-toolと一緒にintel-microcodeパッケージがインストールされる。intel-microcodeパッケージは起動時に修正済みMicrocodeをCPUに上書きするので、起動時に必要なファイルが収められているinitramfsの内容が自動的に更新される。あとは、再起動させてやると起動プロセス中にMicrocodeの上書きが行われて脆弱性対策は終了である。

一応、正しくMicrocodeの上書きが行われたかを確認しておく。

sudo dmesg | grep “microcode updated early to”

起動プロセス中の動作はdmesgに出力されているので、実際に上書きが行われていればそのログに上書きされたMicrocodeのリビジョンが出力されている。以後は、普通にいつもどおりパッケージのアップデートを怠らずに実行していれば、将来のCPU脆弱性についてもパッケージのアップデート操作で追加対策が自動的に行われるはずである。