はじめに

Linuxの安定カーネルのとりまとめ役、グレッグ・クラーハートマンによるメルトダウンとスペクター問題に関する1/6時点での現況の説明です。

原文は当人のブログでcc-by-nc-3.0で公開されています。

訳:Meltdown and Spectre Linux Kernel Status

今となっては、誰だってコンピューターセキュリティ上の大事件がアナウンスされたのを知ってる。何せデーリー・メールがリポートしたくらいだし、なにか悪いことが起きた事は分かるよね・・・。

とにかく、ここでは報道されている問題についての詳細については語らない。それより、この問題についてはProjectZeroの素晴らしい執筆論文を示したい。2018年のPwnie賞を今すぐ受賞すべきだ。そのくらい素晴らしい。

カーネルにおける問題解決の技術的詳細を知りたければ、lwn.netの秀逸な記事にいつでも目を通すべきだ。

加えて、他のたくさんの投稿の良い要約もここにある。複数ベンダからのアナウンスも含まれている。

関係企業による扱われ方はというと、「Linuxカーネルコミュニティとどのように応酬しあうべきではないか」という点についての格好の教科書的実例であると言える。関係者と企業は何が起こっているのを知っているし、結局全ては明らかになると確信している。が、今は問題解決に注意を向ける必要があり、責任を指摘すべき時ではない。どんなにそうしたいと思ってもだ。

今何をすべきか

普通のLinuxディストリビューションをシステムで使っているのであれば、カーネルを今すぐアップデートしよう。もうすでにアップデートが用意されているはずだ。数週間はアップデートを続けよう。影響を及ぼすシステムの多様性と作業量が膨大であるためにテストは複雑であり、それによる大量の例外的なバグへの対応はいまだ作業中だからだ。もし使用中のディストリビューションがカーネルアップデートを提供しないなら、ディストリビューションの変更を今すぐ行う事を勧告する。

様々な理由により、「普通」のLinuxディストリビューションが動いていないシステムが大量に存在する。(噂によると、「伝統的な」企業のディストリビューションよりたくさんあるとか)。そのようなシステムはLTSカーネルのアップデートか、通常の安定したカーネルのアップデートか、フランケンシュタインのような(パッチだらけの?)自家製のカーネルに依存しているだろう。そういった人々に対し、これから使用可能なカーネルにおいて、この騒ぎで何が起きているのか状況を説明しよう。

メルトダウン x86の場合

今現在、Linusのカーネルツリーにはx86アーキテクチャに存在するメルトダウン脆弱性を扱うため、現在知っている事柄に基づく修正がすべて含まれている。CONFIG_PAGE_TABLE_ISOLATIONカーネルビルドオプションを有効にし、リビルドして再起動すれば良い。

しかしながら、Linusのツリーは4.15-rc6にいくつかの大きなパッチをあてたものだ。いくつかの問題解決のための大きなパッチを含む4.15-rc7は明日出るが、大多数の人の「通常」の環境ではrcカーネルは運用しないだろう。

x86の開発者たちはページテーブル隔離コードの開発を大変素晴らしく完了し、それゆえに最新安定カーネル4.14に移植するのはほとんど些細なことのように思われる。

これは4.14リリース(現時点では4.14.12)を運用すべきという事だ。4.14.13は数日後にリリースされるが、これは4.14.12でいくつかのシステムに起こった起動時の問題を追加修正したものである。(これは明らかに問題であり、もし起動しないなら、上がっているいくつかのパッチを適用してみよう)

僕は個人的に Andy Lutomirski, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, Peter Zijlstra, Josh Poimboeuf, Juergen Gross, そしてLinus Torvalds各氏にこれらの修正と上流カーネルへのマージをまとめてくれた事に感謝を述べたい。おかげで安定版のリリースの動作確認に専念するのがとても容易になった。彼らの努力なしには、何が起こるか考えるのさえ放棄していただろう。

それより古いLTSカーネルについて、Hugh Dickins, Dave Hansen, Jiri Kosina そして Borislav Petkov各氏が4.4と4.9の安定カーネルに同様の機能をもたらしてくれた素晴らしい仕事に激しく感謝している。

同様にGuenter Roeck, Kees Cook, Jamie Iles, そしてほかの大勢の人たちにもタチの悪いバグや失われたパッチを追跡してくれたことに大変感謝している。またDavid Woodhouse, Eduardo Valentin, Laura Abbott, そして Rik van Riel各氏の移植と統合の際のヘルプも忘れられない。彼らのヘルプは、あまたのトリッキーな場面での肝になってくれた。

これらのLTSカーネルには完全なメモリ保護を有効にするCONFIG_PAGE_TABLE_ISOLATIONビルドオプションがある。

この移植は4.14と4.15のメインラインバージョンとは大きく相違するので、異なるバグが起きている。現時点ではいくつかのVDSOの問題解決に向けて作業中であることだ。いくつかの奇妙な仮想マシンのセットアップで変なエラーが出ると報告されている。しかしながら現時点では報告されているのは少数であり、今カーネルをアップグレードすることをやめるべきではない。これらのリリースの運用で不具合が出たなら、どうか安定版カーネルのメーリングリストに知らせてほしい

もし4.4, 4.9 または 4.14以外のカーネルツリーに依存しており、ディストリビューションのサポートもない場合は残念だが不運な状況にある。 メルトダウンは、君のカーネルバージョンに現在含まれている他の何百もの既知の悪用やバグと比較して軽微だ。その時点ではメルトダウン以上に心配するべき事柄があり、まずシステムを最新にする必要があるだろう。

そして、廃止された危険なカーネルを運用するよう君に強制した人たちを怒鳴ってやれ。全く無謀なことをしていると気づく必要があると。

メルトダウン ARM64の場合

現在ARM64用のメルトダウンのパッチのセットはLinusのカーネルツリーにはマージされていない。数週のうちに4.16-rc1と4.15にマージするためステージングされ、準備中だ。これらのパッチはLinusからリリースされたカーネルではないため、自分は安定版カーネルリリースには移植できない。(なあ、理由があってこういうルールなんだ・・・)

正式にリリースされたカーネルへの修正はまだないので、もし(アンドロイド等)ARM64のシステムに依存しているなら、現時点ではAndroid Common Kernelツリー3.18, 4.4, and 4.9のブランチにARM64用の修正がマージされているのでそれを見てくれ。

安定版とLTSリリースにいつ取り込まれるか現時点では不明なので、テストと上流カーネルに取り込まれたものをキャッチアップするために、それらのブランチに加えられた修正を継続的に確認することを強くお勧めする。

4.4および4.9 LTSカーネルでは、必要な多数の前提条件パッチが必要であるため、これらのパッチがそれらにマージされることはない。これらの前提条件のパッチはすべて、長期間統合されアンドロイド共通カーネルでテストされているので、現時点ではARMシステム用のLTSリリースではなく、それらのカーネルブランチに依存した方がよいと思う。

もう一つ注釈、自分はLTSカーネルアップデートをブランチにマージするのに通常1日ぐらいかけてからリリースするので、ARMシステムを最新に、安全にするために何があってもそれらのブランチを追いかけるべきだ。

スペクターは・・・

こいつは「面白いこと」になってきたぜ・・・

繰り返すが、ディストリビューションのカーネルで運用しているなら、この問題を緩和するために複数のパッチがディストリビューションの方ですでにマージ済みであるかもしれない。このベクトル攻撃を心配しているなら、アップデートして自身でテストすることを提案する。

今の状況では、このタイプの問題の修正は上流カーネルのツリーにまだマージされていない。たくさんのパッチが異なるメーリングリスト上を漂っており、問題解決を提案している。

しかしながらこれらはしんどい作業であり、いくつかのパッチシリーズはビルドもされておらず、既知のいかなるツリーに適用もされていない。互いに衝突しており、一般的に混乱している。

これはスペクター問題が一番最後にカーネル開発者たちにもたらされたためである。我々はみなメルトダウン問題にかかりきりであり、スペクター問題が何だったのかについて正確な情報を一切持っていない。漂っているパッチの良し悪しについて公に投稿することはできない。

これらの事のため、これらの問題を解決し上流カーネルにマージするまでには数週間はかかるだろう。修正がカーネル全体にわたる複数のサブシステムに対して来ており、マージしてカーネルの安定バージョンとして集められてリリースされるだろう。それで繰り返しになるが、ディストリビューションのカーネルリリースかLTS、安定カーネルバージョンにとどまるのが最善だ。

良い知らせではないことはわかっているが、でもこれが現実だ。慰めがあるとすれば、これらの問題に対してほかのどんなOSも完全な解決策を持っていないという事だ。コンピュータ業界全体は同じ船に今乗っていて、今しばらく待って開発者たちが問題をできる限り早く修正できるようにしているんだ。

提案されている解決策はつまらないものではなく、いくつかは驚くほど良いものだ。Paul TurnerによるRepotolineについての投稿はこれらの問題を解決する助けとなる作成中のコンセプトだ。ハードウェアの実行前予測によって引き起こされるこの問題を緩和する方法で、今後何年にもわたって調査が行われる領域となりつつある。

その他のアーキテクチャ

現時点では、x86とarm64以外のパッチは見ていない。他のプロセッサタイプのエンタープライズディストリビューション用にパッチがあるという噂だが、適切な上流カーネルにマージするために数週間のうちに現れることを望んでいる。自分にはそれがいつになるかわからない。もし特定のアーキテクチャに依存しているなら、特定のマシンのメーリングリストに質問して率直な回答を得ることを提案する。

終わりに

もう一度言うが、カーネルをアップデートしよう。遅れずに、そして継続して行おう。これらの問題を修正するアップデートには長い期間を通じて継続的に行われる。また、これらの問題とは全く関係のないタイプのバグやセキュリティの問題の修正も安定版とLTSカーネルリリースを通して提供される。それで、カーネルをアップデートし続けるのはいつでも良いことだ。

今、過労・イライラ・不眠・怒りを抱えながら、カーネル開発者たちは自分たちに非がないこれらの問題を解決するために、出来る限りを尽くしている。彼らの置かれている状況をどうか考えてみてほしい。出来るだけ早く修正されたシステムを提供するという目標を達成するためにも、彼らはみんなの愛と、支援と、好みの飲み物の無料提供を必要としているし、僕たちはそれができる。

所感

  • あなたとLinuxカーネル、今すぐアップデート(継続してアップデート)
    • サポートが打ち切られたカーネルはメルトダウン以前の問題、論外
    • ディストリビューションのカーネルが提供されているならそれを使用
    • 自分でカーネルをビルドする場合は4.14、4.4、4.9を使用
    • ビルド時CONFIG_PAGE_TABLE_ISOLATIONを有効に
    • ARM64は当面公式には無いので、Androidのものを使用する
    • Spectre問題に関しては公式では手付かずの状況
  • 対応が一番進んでいるとされるLinuxでもこの状況
    • その他OS、例えばBSDのMLで問題として挙がったのは年明けから
      • FreeBSDのMLでは怨嗟の声が聞かれる
    • 各OS開発陣のリソースは少なくとも数カ月この問題に奪われるだろう、、、つらい
  • 開発者たちに愛と支援と飲み物(代)を!

補足

Linux用脆弱性チェックツール。makeして実行するだけでチェックできる。
実行は自己責任で。