Chap-16. Spectre Meltdown への対応状況

 表記のセキュリティ問題がどのようなものか、その解説はネット上のあちこちにあります。ネットで検索するといっぱい出てきます。なので、興味がある方は検索などして調べてください。

 ここでは、現時点(2019-10)の対応状況、未対応の場合の可能な範囲の対策について書きます。
対応と言っても mitigation いわゆる「緩和」あるいは「軽減」です。従って完璧な対応というわけではありませんが、チェックをパスできるようにすると、一つ安心出来ます。
ただし、現時点で対応できている CPU と、対応出来ていない CPU があります。
試した CPU は、core i3 4130T、 core i3 3220T、core i3 4160、core i3 3120M、Celeron-J3455 の5種類ですが、Celeron が対応出来ません。Core i3 はすべて対応出来ました。
また、ここでチェックした結果及び対策は、あくまで私のところの環境での話です。環境が変われば、結果は違うと思います。

なお、amd の CPU でも、一部は同じ問題、抱えてるらしいです。



Sec-1.参考にすべきサイト
Sec-2.チェックしたディストリ
Sec-3.MX Linux-18.3
Sec-4.antiX-17.4.1
Sec-5.Devuan-2.0.0
Sec-6.Debian-10 と Ubuntu-18.04LTS
Sec-7.Intel NUC (6CAYH Celeron-J3455)
Sec-8.現状のまとめ



Sec-1.参考にすべきサイト

チェックの仕方
 残念ながらウェブをチェックしても「この問題がどういう話なのか」という解説サイトばかりで、「では、どのようにチェックして、どのように対応すればよいか」具体的な方法を書いたサイトは少ないです。
そんな状況の中で、下記のサイトは「どのように、具体的にチェックすればよいか」を教えてくれるサイトです。是非とも一読して、必要ツールをダウンロードし、自分のマシンをチェックしてみてください。私はチェックしてみて、未対応って結果に驚きました。で、使っているディストリについては、今できる対応をしました。

"Linuxが脆弱性「Spectre」「Meltdown」に対応済みか調べる方法"
https://news.mynavi.jp/article/20180109-linux_vulnerability/

この中で、以下の方法でチェック用スクリプトをダウンロードします。

wget https://raw.githubusercontent.com/speed47/spectre-meltdown-checker/master/spectre-meltdown-checker.sh

後は、# sh spectre-meltdown-checker.sh とするだけです。12項目に渡ってチェックされ、最後に summary とか言ってまとめてチェック結果が表示されます。
緑色で12項目出たらオケ。赤い色が混じったらダメです。分かりやすい。


Intel microcode の使われ方
もう一つ、とても助かる情報が書かれていて、それは上記参考サイトの中の元ネタをクリックし、更に元ネタの中で下記のところを見ます。

"How to apply microcode update supplied by Intel on Linux"

すると、intel-microcode がどのようにしてインストールされ、使われるか、説明があります。説明は 2018年1月 時点なので、現在は多少違うかもしれませんが、すごく参考になります。基本的には、やっていることは以下の具合。

この文書の中でしっかりと「こういう作業はパッケージインストーラに任せておけ」と言っています。けれど、こうやって書いてもらえると、すごく助かります。

要約すると
 以上を要約すると、spectre、meltdown に対応するためには(チェックスクリプトをパスするには)

ということになります。
なお、試してみた感じでは、カーネル 4.9 系列だと 4.9.189 以降、カーネル 4.19 系列だと 4.19.37 以降は大丈夫な感じです。それ以前のバージョンは、よく分かりません

訂正:antiX のパッケージインストーラを見ると、spectre、meltdown へのパッチを当てたカーネルがあり、バージョンは 4.9.186 でした。




Sec-2.チェックしたディストリ (Core i3) 

 まず Core i3 のマシンについて、Devuan-2.0.0、antiX-17.4.1、MXLinux-18.3 の3つのディストリ + Debian-10 と Ubuntu-18.04LTS をチェックしてみました。
要するに、Debain 派生で、systemd-free なディストリの3つ + 本家の2つです。
最初に結果を書いておきますと

 こんな状況です。以下のセクションで個別に詳しく見ていきます。

我が家から Slackware が無くなりました。(汗)
Linux を使っている時に、Slackware インストールしたマシンが無いのは、始めての経験です。上の3つが代わりを努めてくれてます。



Sec-3.MX Linux-18.3 + Core i3

 このディストリはカーネルに 4.19.xシリーズを使っています。デフォルトでは 4.19.37 です。
このデフォルトカーネルでチェックしても、上記ツールのチェック項目(12ある)が全部無事にパスします。
更に、カーネルをアップして 4.19.71 としても、当然これも全部パス、オケです。

 別のチャプタで説明しますが、カーネルコンパイルする際に結構パッケージをたくさん入れました。
# apt install libncurses-dev bison flex autoconf autoconf2.64 libssl-dev
確か、こんな感じだったと思います。
また、コンパイルする際に .config を予め少し修正しておく必要があるようです。
やり方の詳細は「MX Linux 試用記」みたいにして、別のチャプタに書いておきます。(そのうち・・)
 厳密に言いますと、デフォルトではチェックしてません。
このディストリはインストール後に、すぐに「更新があるけど、やるかい?」って聞かれます。
もちろん、yes です。すると数十個の更新を景気良くやります。そこからが実際の「使い始め」です。なので、ここで言うデフォルトは、インストール直後の派手な更新の後ってことです。



Sec-4.antiX-17.4.1 + Core i3

 このディストリはカーネルに 4.9.x 系列を使っています。Devuan-2.0.0 と同じです。
デフォルトでチェックすると、12項目中4項目でダメ、パスしません。
多分、Sec-1. に示した2つの条件とも、満たしていない。なので、作業にかかります。
まず、大事なことですが、デフォルトで apt が見ているサイトが壊れています。apt update すると変なエラーメッセージが出るので、サイトを訂正します。
antiX のウェブサイトの antiX Packages を見ると一杯サイトがあるので、どれか選びます。私はカナダの上から2番めを選びました。それで apt update してもエラーが出なくなりました。以下、作業です。

# apt update
# apt upgrade
(再起動)

これで様子を見ると、どうやらマイクロコードは修正版が入りました。ログには revision 0x27 と出ますので修正版マイクロコードです。(当初は0x23)
しかし、これだけでは対応版のカーネルが入りません。デフォルトの 4.9.160 のままです。どうやら、2019-09 中旬時点では 4.9.189 以降のカーネルを upgrade でインストールできるようにはなっていない。なので、後は自分でカーネルソースをダウンロードし、コンパイル・インストールします。
私は 4.9.191 を入れました。
それでリブートすると、無事にチェックスクリプトが通り、12項目全部パスしました。オケです。

 カーネルコンパイルでの注意点。MX Linux ほどじゃないと思いますが、libncurses-dev などのパッケージを入れる必要があります。
後、ディストリのコンフィグファイルを使わずに make menuconfig やって出来たコンフィグファイルを使いました。
詳しくは、「antiX 試用記」みたいな感じで、別チャプタに書きます。

訂正:antiX のパッケージインストーラを見ると、spectre、meltdown へのパッチを当てたカーネルがありました。バージョンは 4.9.186 となっています。ひょっとすると、何もせずに、ただあれをインストールするだけで microcode の導入等、すべてやってくれて対応できるかもしれません。私は既に上記のやり方で対応しちゃった(4.9.191)ので入れませんが、興味のある人はやってみてください。

補足:
修正版マイクロコードのリビジョンは、core i3-41XX だと 0x27 ですが、core i3-3220T だと 0x21 です。
プロセッサーごとにリビジョンが違うかもしれません。




Sec-5.Devuan-2.0.0 + Core i3

 デフォルトでは12項目中、4項目でアウトでした。
普通にカーネルを 4.9.191 にあげても結果は同じでした。
しかし、マイクロコードをインストールしたら解決しました。

まず、apt のリストを修正です。
見ているサイト全部の行末に contrib non-free を加えます。多分、見ているサイトを表示しているのは
/etc/apt/sources.list
というファイルだと思います。6行あるので、全部の行の行末に contrib non-free を追記します。
もしも、他のサイトも見る設定になっているなら要修正です。
後は、以下のようにやるだけです。

注:すでにカーネルは 4.9.191 にあげてある前提

# apt update
# apt upgrade
# apt install intel-microcode

で、無事にマイクロコードがインストールされました。
Devuan は apt upgrade ではマイクロコードが入らず、明示的に apt install intel-microcode とする設定のようです。
インストール中にいかにも、initramfs をアップデートしている感じだったので、もうリブートすれば大丈夫です。
カーネルは既に 4.9.191 にしてあります。カーネルはそのままで良いです。
リブートしてチェックスクリプトを走らせたら、無事に12項目全部パスしました。ホッ
dmesg を見ると、さっきまで 0x23 だったマイクロコードが今度は 0x27 になっていました。MX Linux、antiX でうまくいったリビジョンです。

もしも、自分でカーネルコンパイルせずに(ディストリのカーネルを使うだけで)この作業をするなら、apt のリストを修正した後、以下のとおり

# apt update
# apt upgrade
# reboot
# apt install intel-microcode
# reboot

これで、チェックスクリプトを無事にパスできます。オケです。マイクロコードだけでなく、カーネル 4.9.189 もインストールされます。

補足:
修正版マイクロコードのリビジョンは、core i3-41XX だと 0x27 ですが、core i3-3220T だと 0x21 です。
プロセッサーごとにリビジョンが違うかもしれません。




Sec-6.Debian-10 と Ubuntu-18.04LTS + Core i3

 この2つはまとめて書いておきます。

Debian-10
 カーネルは 4.19.x 系列で、デフォルトは 4.19.37 です。
デフォルトの段階で12項目中、6項目がアウト。ダメです。
devuan と同じようにやれば、多分うまく行くと見当がつきます。ただし、apt のリストが contrib と non-free を排除しています。なので、まず apt のリストの修正からです。

/etc/apt/souces.list をエディターで開いて、見ているサイト全部に contrib non-free を行末に加える。
その後は、devuan と全く同じように

# apt update
# apt upgrade
(場合によっては、この段階で一旦 # reboot したほうが良いかもしれない)
# apt install intel-microcode

とすればオケです。リブートしてチェックすると、全部無事にパスします。


Ubuntu-18.04LTS
 カーネルは 4.15.x 系列です。
デフォルトがどうなのか、分かりません。どんどんアップデートが進んでいきますから。
2019-09 中旬時点で、12項目すべてクリアー。オケです。




Sec-7.Intel NUC (6CAYH Celeron J3455)

 ここまでは、ディストリ別に書いてきました。このセクションはマシンで括ります。
というのは、このマシン、対応ができそうに無いからです。それはディストリの問題ではなく、修正版の microcode が未完のまま(と思われる)だからです。

Debian-10.1 をインストールして、上記 Sec-6.と同じようにやってみたところ、12項目あるうちの4番めが対応出来ません。
ディストリに問題はなさそうですが、念の為 CentOS-8.0.1905 ってのもインストールして試してみました。結果は全く同じでした。
いずれのディストリでもチェッカーを走らせると、以下のようなメッセージが出ます。

CVE-2018-3640 aka 'Variant 3a, rogue system register read'
* CPU microcode mitigates the vulnerability:  NO 
> STATUS:  VULNERABLE  (an up-to-date CPU microcode is needed to mitigate this vulnerability)

「この問題を緩和させるためには、もっと新しい microcode が必要だ」と出てますが、もちろんそんなものは持っていません(汗)。
NUC にインストールした修正版の microcode はリビジョンは 0x38 ってやつです。
確か、intel の発表は「古い CPU には対応しない」という話だったと思いますが、新しい CPU でもダメとは思いませんでした。
Celeron J3455 って、Apollo lake で、第六か第七世代の、割合と新しい CPU です。

 問題が発覚してから既に二年近く経過して、未だにこの状況です。チェッカースクリプトを信用する限りは、どうやら問題に対応出来ないまま終わりになりそうです。
私は、事情があって NUC の2台が余った状態。ごく限定的な使い方しかしていないので、実害はありません。
でも、この NUC をメインで使っている人にとっては(きっと、そういう人もいるでしょうね)、困った状況です。





Sec-8.現状のまとめ

2022-11

 2022-夏時点で様子を見ていると新しい知見が出てきて今まで良かったものがダメに判定されているように見えます。
概して LTS カーネル(5.10 5.15 あたり)を使っているディストリでダメという判定が 2022-夏時点で増えました。今まで良かったはずなのですが・・・
しかも、wiki によると Intel 第10世代の CPU にも新たにこの問題が発覚しているらしいです。
多分 spectre meltdown に対応している現場は大きく混乱しているだろうと思います。
Intel、Kernel.org、そして各ティストリ。みんな現場はものすごく大変そう。
こんな状況だと、相当強く「さっさと最新版 CPU に買い替えたほうが吉」と思います。
Linux ユーザの一部には「古い CPU で動かせるのが Linux のメリット」という主張があります。2018以前だと理解出来ますが、今はその考えには賛成出来ないです。セキュリティバグを抱えた古い CPU 利用はおすすめ出来ません。相当に古いものだと修正版 microcode が出てこない恐れもあります。
Intel CPU は基本的に1995年頃から第10世代までセキュリティバグを抱えているようです。


2022-12

 5.10 5.15 の LTS カーネルが Spectre, meltdown に対応出来ていなかった件は年末頃の時点ではなおっているようです。問題なくなりました。
しかし依然として、古い Intel CPU 利用は避けたほうが吉だろうと考えています。またそのうち問題が発覚するかもしれないし・・・・