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.現状のまとめ

 世間にこの問題が発表されてから、二年近く経過しています。未だに万全な対応は出来ていない模様です。


 確か、ネットでは例によって Linus Torvalds 氏がインテルの対応について、かなり辛辣な批判をしていたはずです。
「対応が遅い」とか「ろくな対応じゃない」とか。以前出してきたマイクロコード修正版に対しても「あんなのはクソだ」とか。その他に、そもそも問題の発生そのものに対しても、痛烈批判してた気がします。
 一方、この問題に対してインテルが詳しく、具体的に問題への対応状況を説明(ネットにアップ)したことはなさそうです。ネットでインテルのウェブサイトを見ても、役に立つ情報はありません。
この問題に対するインテルの対応や姿勢は、いささか残念なものです。

 も一つ雑談です。このセキュリティ問題。ブラウザでどっかのサイトを見に行くだけでも、危険なことが起こりうるそうです。
つまり、何かに感染する可能性があるってことです。
なので、この対応に限っては DMZ のサーバだけでなく、 LAN 内部で使っているものも対応しておいたほうが無難です。
2018年初頭ころのネット記事の中に(どこか失念しましたが)「既に攻撃のためのサンプルコードがネットに上がっている」というのが、ありました。オイオイって感じです。
そのうち、攻撃するためのスクリプトがネットにアップされ始めると、スクリプトキッズ達がばっこしはじめます。
なので、対応出来ている CPU を使っているのなら、早く対応しておくのが望ましいです。そうでない CPU の場合は・・・・・対応出来ていない CPU を使っている場合は、なんとも言いようがありません。