プロセッサ脆弱性「Meltdown」と「Spectre」

2018年の年始めは多くのIT関係者にとってあまり喜べた状況ではなかった。もしかしたら今年一番のセキュリティ脆弱性になるかもしれない「Meltdown」と「Spectre」が公になったからだ。このままいくと歴史に名を残す脆弱性の1つになるだろう。Intelから情報を得ていなかったほとんどのユーザーは、最も早いユーザーで2018年1月2日(米国時間)に公開されたThe Registerの記事「Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign|The Register」でこのインシデントを知ったのではないだろうか。それ以外のユーザーは年始に出社した日、またはその前後でメディアで報道されるようになって初めて、脆弱性の存在を知ったんじゃないかと思う。

The Registerの上記記事が発表されると、関連するベンダーや機関から相次いでセキュリティ脆弱性の情報が公開されるようになった。The Registerの当初の記事はMeltdownとSpectreのうち、Meltdownについてのみ指摘したものだったため、その後しばらく情報が食い違う報道が続いた。現在ではこの辺りの情報は「Meltdown and Spectre」に一通りまとまっている。

今回の脆弱性がここまで話題になっている最大の理由は、影響範囲の広大さもさることながら、性能が低下する点にある。Meltdownの修正にはOS側の変更が必要で、それによってパフォーマンスが低下すると言われている。報道の初期段階で5%から30%ほど低下するだろうと発表されていた。これは大きなインパクトをもって多くの関係者に受け止められた。この脆弱性は主にIntelのプロセッサに存在すると言われている。

さらにSpectreだが、こちらは原理的に完全対策が不可能ではないかと考えられている。問題を低減することはできるが、完全に解決することは難しい。一応、問題を低減するための処理がOS側で導入される可能性があるほか、プロセッサベンダーはマイクロコード(ファームウェア)をアップデートすることで問題の低減を図ることにしている。こちらはIntelのみならずAMDおよびARMのプロセッサも影響を受けると言われている。

いずれにせよ、今年の初セキュリティ脆弱性が管理者の仕事を1つ増やしたことは間違いない。ベンダーやプロジェクトからお使いのLinuxディストリビューションやmacOSのアップデートが提供されたら、いつものようにアップデートを適用していただきたい。

マイクロコードのアップデート方法

BIOSやUEFIはファームウェアをアップデートすればそのバージョンが使われることになるが、CPUの場合はそういう作りにはなっていない。最新版を読み込ませて利用することはできるが、再起動するとまた元に戻る。このため、CPUのファームウェア(マイクロコード)はシステムを起動するごとに毎回最新版を読み込ませる必要がある。

常にマイクロコードの最新版を読み込む仕組みになっているディストリビューションもあるが、そうではないディストリビューションもある。Linuxの場合、マイクロコード(ファームウェア)とアップロードツールがパッケージとしてまとめられており、パッケージをインストールするとシステム起動時に自動的に最新のマイクロコードが読み込まれるようになる。

パッケージ名はディストリビューションやプロセッサごとに違っているので、それぞれ別のパッケージをインストールする必要がある。次に代表的な方法を記載しておく。パッケージをインストールしたらシステムを再起動する必要がある。

UbuntuでのIntelプロセッサマイクロコードのアップデート方法

sudo apt install intel-microcode

UbuntuでのAMDプロセッサマイクロコードのアップデート方法

sudo apt install amd64-microcode

Red Hat Enterprise Linuxでのマイクロコードのアップデート方法

sudo yum install microcode_ctl linux-firmware

ここまで広く普及したCPUにこれだけのセキュリティ脆弱性が発見されたのは今回が初めてだ。筆者の記憶でも、セキュリティ脆弱性が原因でCPUのマイクロコードをアップデートしなければならないといった事態はこれまでになかったと思う。「マイクロコードのアップデート」と言われても、よくわからないユーザーも多いのではないだろうか。

なお、マイクロコードをアップデートしたら起動時に問題が発生するようになったという記事もちらほら見受けられる。特に、遠隔からリモートログインして利用しているようなサーバでは注意が必要だ。仮にサーバが起動しなくなった状況も想定してコンソールへアクセスできる機能は有効にしておいたほうがよいと思う。そういった機能が提供されていない環境であれば、「アップデートに成功した」という報告があるまで待ってみるのも手だろう。Spectreのほうはどのみち完全対応が難しく、利用するのも結構な条件が必要になる。作業をする際には、この点に注意しておこう。