近代的CPUの脆弱性:Meltdown・Spectre

年始から業界を騒がせている Meltdown(メルトダウン)・Spectre(スペクター)ですが、5月に入って新たに関連する脆弱性が見つかったりと話題に事欠かないので、今更ながらまとめてみました。

この問題について、一部では"近代的CPUの脆弱性"と紹介されています。

近代的、と称されるには理由があって、

  • CPUの実行ユニット稼働率を上げるための仕組み「投機的実行(アウト・オブ・オーダー)」の脆弱性であり、古くは存在しなかった機能
  • メーカーに関係なく同様の脆弱性が見つかっている

という2点があるためです。

目次

概要

当記事で取り上げる Meltdown, Spectre は、2018年1月に発覚したCPUの脆弱性です。
これらが悪用されると、通常は他のプログラムからアクセスできないデータへのアクセスが可能になるため、重大なセキュリティ問題として騒がれたわけです。
具体的には、パスワードや暗号鍵などの情報、画像、メール、文書などが盗まれる恐れがあります。

base on CPUの脆弱性「Spectre(スペクター)」と「Meltdown(メルトダウン)」 - Fujitsu Japan
2018年2月
2018年の年明け早々からCPUの脆弱性「Spectre」と「Meltdown」が公開され、話題となりました。
「Spectre」と「Meltdown」の脆弱性は、OSやアプリケーションのように限定的なソフトウェアにおけるバグに起因するものではなく、CPUのアーキテクチャーにかかわるハードウェアレベルの脆弱性であり、現在稼働している幅広いコンピュータ機器に影響があることからメディアなどでも大きく取り上げられ世間を騒がせることとなりました。

これらの脆弱性は、CPUの高速化手法である「投機的実行(speculative execution)」と「アウトオブオーダー実行(out-of-orderexecution)」の機能に存在していました。この機能がどのようにして高速化を実現しているかを説明します。

  • 投機的実行(speculative execution)
    何らかの分岐処理がある場合、分岐条件が確定する前に、一方もしくは複数の分岐後の処理を先読みして実行します。先読みすることでCPUが遊んでいる時間を減らし、高速化を実現している技術です。先読みが外れた場合は、先読みした処理は取り消されます。
  • アウトオブオーダー実行(out-of-orderexecution)
    その名のとおり、処理順序を守らずに、直前の処理が終わっていない状態で次の処理に着手する技術です。例外の発生などによって前の処理が中断されると、先に実行した処理は取り消されます。

Meltdown, Spectre の種類

名称 概要 脆弱性情報データベース(CVE)
Spectre
バリアント1
権限を必要とするメモリーの読み取りが可能(境界チェックのバイパス) CVE-2017-5753
Spectre
バリアント2
権限を必要とするメモリーの読み取りが可能(分岐ターゲットのインジェクション) CVE-2017-5715
Meltdown
バリアント3
不正なデータのキャッシュ読み込み CVE-2017-5754
Meltdown
サブバリアント3a
特権メモリ、特権システムレジスタのデータを取得可 CVE-2018-3640
SpectreNG
バリアント4
制限を迂回して本来はアクセスできないメモリを読むことが可能 CVE-2018-3639

2018/6/19 現在

影響範囲

影響を受けるのは「投機的実行(アウト・オブ・オーダー)を実装」していることが前提となります。

運命の分かれ道

一体どの程度の製品が対象になるのでしょうか。
PC・サーバ・ARM(スマホ・タブレット・IoT・SBC ...)で見ていきます。

x86, amd64 アーキテクチャ

PC市場で圧倒的シェアを誇る x86・amd64 で投機的実行がいつから実装されているのか確認しました。

  • Intel
    Pentium Pro(Socket 8)以降
    Pentium II(Slot 1)以降

  • AMD
    K6(Socket 7)以降

Pentium / AMD K5 まではアウト・オブ・オーダーは実装されていませんが、稼働中の全てのPC・サーバが対象と言っても過言ではないでしょう。

具体的には

Intel 製品では Socket 370 以降、AMD 製品では Slot A・Socket A 以降が対象になります。

メーカー 影響範囲 影響
Intel Core, Core X, Xeon, Atom, Celeron, Pentium ... Meltdown, Spectre
AMD Ryzen, Opteron, Athlon, Turion X2, EPYC ... Spectre

ARMアーキテクチャ

ARMアーキテクチャも対象となっており、スマートフォン・タブレットに留まらず IoT にまで影響が及んでいます。

影響範囲 影響
Cortex-R7/R8/A8/A9/A12/A15/A17/A57/A72/A73/A76 Spectre
Cortex-A75 Meltdown, Spectre

※参考:Speculative Processor Vulnerability – Arm Developer

CPU・SoCでの対応

各メーカーの対応を見ていきます。

Intel

臨時対応

全てではありませんが、既に発表されているCPUについてはパッチ(マイクロコード)がリリースされます。

対応予定を確認

なお、上記PDFファイルには対応予定の一覧が記載されていますが、CPU名は列挙されておらずCPUのコードネームで確認する必要があります。
CPUコードネームの確認方法は、製品の仕様情報ページの"基本仕様"欄→"開発コード名"から確認できます。

過去5年に販売されたCPUは概ね対応予定の模様

base on Intel、Core 2など旧CPU向けのSpectre対策パッチを中止 - Computerworldニュース:Computerworld
2018/04/06
旧型プロセッサの一部については、アップデートの開発を取りやめたことが明らかになった。

残念な決定ではあるが、実のところ意外ではない。
Intelのマイクロコードアップデートは、同社自身が配信するのではなく、マザーボードメーカーのBIOSアップデートを通じて提供されるだけになおさらだ。
仮にIntelがアップデートをリリースしたとしても、大昔のプロセッサに向けたBIOSをあえて用意するマザーボードメーカーが一体いくつあるのか、疑問に思わざるを得ない。

これにより、一部のXeonプロセッサ、およびCore 2、Pentium、Celeron、Atomなどのプロセッサは対象から除外されることになります。

参考までに、私が現在所有しており、且つ稼働中のPCの対応状況をまとめてみました。
約1/3が放置される形になりますが、個人的には納得な感じです。

CPU コードネーム アップデート有無 備考
Intel
Celeron M 443 Yonah アップデート無 Native 32bit
Celeron T1600 Merom アップデート無
Core2 Duo T7250 Merom アップデート無
Core2 Duo T7100 Merom アップデート無
Celeron 847 Sandy Bridge アップデートあり
Core i7-2630QM Sandy Bridge アップデートあり
Celeron 1007u Ivy Bridge アップデートあり
Core i5-3340M Ivy Bridge アップデートあり
Atom Z3735F Bay Trail アップデートあり
AMD
Athlon 5370 APU with Radeon R3 Jaguar(Kabini) / AM1 アップデートあり
Opteron 3280 Bulldozer / AM3+ アップデートあり

恒久対応

2018年下半期から出荷予定の第8世代 Coreプロセッサから、脆弱性のない個体となります。

base on Intel、プロセッサの設計変更で「Spectre」「Meltdown」の脆弱性に対応 - ITmedia エンタープライズ
2018年03月16日 09時00分 公開
米Intelは3月15日、「Spectre」「Meltdown」と呼ばれるプロセッサの脆弱性について、ハードウェアベースの対策を年内に導入すると表明した。

この変更は、次世代の「Xeon スケーラブル・プロセッサ(コードネーム:Cascade Lake)」と、第8世代 Coreプロセッサーから開始する予定で、出荷は2018年下半期を見込んでいる。

一方、マイクロコードアップデートについては、過去5年の間に投入したIntel製品のうち、対策が必要な製品の全てにアップデートをリリースしたと報告している。

AMD

臨時対応

各M/Bメーカーから配布されるBIOSアップデート、あるいはOSのパッチを使って対応が可能です。

base on AMD Processor Security - Previous Updates | AMD
1/11/2018
An Update on AMD Processor Security

  • Google Project Zero (GPZ) Variant 1 (Bounds Check Bypass or Spectre) is applicable to AMD processors.
    • We believe this threat can be contained with an operating system (OS) patch and we have been working with OS providers to address this issue.
    • Microsoft is distributing patches for the majority of AMD systems now. We are working closely with them to correct an issue that paused the distribution of patches for some older AMD processors (AMD Opteron, Athlon and AMD Turion X2 Ultra families) earlier this week. We expect this issue to be corrected shortly and Microsoft should resume updates for these older processors by next week. For the latest details, please see Microsoft’s website.
    • Linux vendors are also rolling out patches across AMD products now.
  • GPZ Variant 2 (Branch Target Injection or Spectre) is applicable to AMD processors.
    • While we believe that AMD’s processor architectures make it difficult to exploit Variant 2, we continue to work closely with the industry on this threat. We have defined additional steps through a combination of processor microcode updates and OS patches that we will make available to AMD customers and partners to further mitigate the threat.
    • AMD will make optional microcode updates available to our customers and partners for Ryzen and EPYC processors starting this week. We expect to make updates available for our previous generation products over the coming weeks. These software updates will be provided by system providers and OS vendors; please check with your supplier for the latest information on the available option for your configuration and requirements.
    • Linux vendors have begun to roll out OS patches for AMD systems, and we are working closely with Microsoft on the timing for distributing their patches. We are also engaging closely with the Linux community on development of “return trampoline” (Retpoline) software mitigations.
  • GPZ Variant 3 (Rogue Data Cache Load or Meltdown) is not applicable to AMD processors.
    • We believe AMD processors are not susceptible due to our use of privilege level protections within paging architecture and no mitigation is required.


AMDプロセッサセキュリティに関する最新情報

  • Google Project Zero(GPZ)バリアント1(Bounds Check Bypass or Spectre)は、AMDプロセッサに適用されます。
    • この脅威はオペレーティングシステム(OS)パッチに含まれる可能性があると考えており、この問題に対処するためにOSプロバイダと協力しています。
    • マイクロソフトでは現在、大部分のAMDシステム向けにパッチを配布しています。今週初めに、一部の古いAMDプロセッサ(AMD Opteron、Athlon、AMD Turion X2 Ultraファミリ)のパッチ配布を中断する問題を修正するために、これらの製品と緊密に協力しています。Microsoftはこの問題がまもなく修正されると予想しており、Microsoftは来週までにこれらの古いプロセッサの更新プログラムを再開する予定です。最新の詳細については、MicrosoftのWebサイトを参照してください 。
    • Linuxベンダーは現在、AMD製品のパッチをリリースしています。
  • GPZバリアント2(ブランチターゲット注入またはスペクトラム)は、AMDプロセッサに適用されます。
    • 我々は、AMDのプロセッサアーキテクチャにより、バリアント2を利用することが困難になると考えていますが、我々はこの脅威に対して業界と緊密に協力し続けています。脅威をさらに軽減するために、AMDの顧客およびパートナーが利用できるプロセッサマイクロコードのアップデートとOSパッチの組み合わせにより、追加のステップを定義しました。
    • AMDは今週からRyzenとEPYCプロセッサー向けのマイクロコードのアップデートをお客様とパートナーに提供します。我々は、今後数週間にわたって、前世代製品のアップデートを提供する予定です。これらのソフトウェアアップデートは、システムプロバイダおよびOSベンダーによって提供されます。ご使用の構成と要件で使用可能なオプションの最新情報については、サプライヤーにお問い合わせください。
    • LinuxベンダーはAMDシステム用のOSパッチを展開し始めており、パッチを配布するタイミングについてはMicrosoftと緊密に協力しています。我々はまた、Linuxコミュニティと緊密に協力して、 "return trampoline"(Retpoline)ソフトウェアの緩和策の開発に取り組んでいます。
  • GPZバリアント3(Rogue Data Cache LoadまたはMeltdown)は、AMDプロセッサには適用されません。
    • 私たちは、ページングアーキテクチャ内で特権レベルの保護を使用しているため、AMDプロセッサは影響を受けないと考えています。

base on AMD Processor Security | AMD
4/10/18
AMD Microcode Updates for GPZ Variant 2/Spectre

In addition, microcode updates with our recommended mitigations addressing Variant 2 (Spectre) have been released to our customers and ecosystem partners for AMD processors dating back to the first “Bulldozer” core products introduced in 2011.

AMD customers will be able to install the microcode by downloading BIOS updates provided by PC and server manufacturers and motherboard providers. Please check with your provider for the latest updates.

We will provide further updates as appropriate on this site as AMD and the industry continue our collaborative work to develop solutions to protect users from security threats.

GPZ Variant 2 / SpectreのAMDマイクロコードアップデート

加えて、2011年に導入された最初の「ブルドーザー」コア製品に遡るAMDプロセッサー向けのお客様およびエコシステムパートナーに、Variant 2(Spectre)に対処するために推奨される緩和策によるマイクロコードの更新がリリースされました。

AMDのお客様は、PCやサーバーメーカー、マザーボードの提供するBIOSアップデートをダウンロードすることで、マイクロコードをインストールすることができます。最新のアップデートについては、プロバイダに確認してください。

当社はAMDと業界がセキュリティ上の脅威からユーザーを保護するソリューションを開発するための共同作業を継続しているため、このサイトでさらに適切なアップデートを提供します。

恒久対応

今のところ、アナウンスはありませんが、AMD の場合、古いチップセットの名残を悪用されているようなので、そのうち対応するでしょう。

ARM

以下の公式ページに詳しく記載されています

臨時対応

大まかには以下のとおりです。

  • カーネルパッチや Arm Trusted Firmwareパッチを適用する
  • KPTI(Kernel Page Table Isolation)を実装したカーネルにアップデートする
  • ハードウェア機能(メモリ曖昧さ回避)を無効にする
  • BPIALL命令を使用して分岐予測子を無効にする
  • 関連する制御レジスタのビットをセットする
    など。

ただ、ARMの場合は各メーカーへのライセンス供給なので、実機のSoCは純粋なARMとは異なります。
そのため、実際には各メーカーからの対応を待つ形となります。

恒久対応

ソフトウェア or ハードウェアのどちらかで対応するとのことです。

base on Speculative Processor Vulnerability – Arm Developer
Updated on 31/May/2018
What about future Arm Cortex processors?
All future Arm Cortex processors provided to our licensees will be resilient to this style of attack or will be mitigated by enhancements made to the Kernel and firmware.

将来のArm Cortexプロセッサはどうですか?
ライセンシーに提供される今後のArm Cortexプロセッサはすべて、このような攻撃スタイルに耐えられるか、またはカーネルとファームウェアの強化によって緩和されます。

OS側の対応

OS側の対応はウィキペディアにまとめられています。

base on Meltdown - Wikipedia
base on Spectre - Wikipedia

Linux

Linuxカーネルの開発者は、KPTI(kernel page-table isolation)と名付けたパッチ群を2018年初頭にカーネル4.15でリリースし、 これはカーネル4.9.75/4.14.11ではバックポートとしてリリースされた。
SpectreはKPTIによっては回避されないので、2018年1月5日時点でOSレベルのパッチは出ていない。

Red Hat

Red Hat Enterprise Linux のディストリビューション Ver.6 および Ver.7 でカーネルアップデートが実施された。

CentOS

CentOS-6 / CentOS-7でカーネルアップデートがリリースされている。

Windows

Microsoftは、2018年1月3日(現地時間)に、本脆弱性に対処する緊急アップデートをWindows 10/8.1/7 SP1向けおよびServer製品やPosReady製品向けにリリースした。

macOS

macOSは10.13.2以降、Meltdown対策が適用されている。なお、1月8日にリリースされた"macOS High Sierra 10.13.2 Supplemental Update" にてSpectre対策が適用されている(同時にSafariもアップデートされる)。
macOSは1月8日にリリースされた"macOS High Sierra 10.13.2 Supplemental Update" で、Meltdown対策に加え、Spectre対策が適用されている(同時にSafariもアップデートされる)。

Android

GoogleはAndroid OSのセキュリティパッチを配信しているが、現実の端末へのパッチの互換性は、端末のメーカーあるいは携帯電話事業者の対応に依存する。

iOS

iOS11.2以降、tvOS11.2以降でMeltdown対策パッチが当てられている。なお、1月8日にリリースされた"iOS 11.2.2 にてSpectre対策が適用されている。

Google Chrome

Meltdownへの直接の回避策ではないが、Strict site isolation(厳格なサイト分離)機能を有効にする事をGoogleは提案している。ブラウザの互換性については多少の問題がある。
1月23日リリース予定のChrome 64においてJavascriptエンジンにSpectre対策を施す予定である。

Linux 補足

Meltdown・Spectre対策が組み込まれた Linuxカーネル 4.15 が公開

Linuxカーネル 4.15, 4.9.75, 4.14.11で対応されています(4.9.75, 4.14.11 はバックポートとして取り込まれています)。

base on Linuxカーネル4.15リリース、Meltdown/Spectreへの対処が組み込まれる | OSDN Magazine
2018年1月30日16:45
4.15ではMeltdown/Spectre対応として、x86向けにPage Table Isolation、PowerPC向けにRFI flush of L1-D cacheが導入された。また、CPUに影響のある脆弱性を表示するためのディレクトリ/sys/devices/system/cpu/vulnerabilities/も加わった。

一方で、Meltdown/Spectreへの対応は「完了」ではないとし、armやspectre-v1などのアーキテクチャで作業が残っているとしている。なお、間接的なブランチの対策にはカーネルのアップデートだけではなく、Retpoline(Googleがリリースした緩和策)をサポートするコンパイラが必要と忠告している。

IntelのUser Mode Instruction Preventionもサポートした。有効にすると一部の命令セット(SGDT、SLDT、SIDT、SMSW、STRなど)がユーザーモードで実行されるのを無効にするという。

Spectre対策済みの GCC がリリース

コンパイラも対応済みです。

base on 「GCC 7.3」リリース、CPUの脆弱性「Spectre」への対応も含む | OSDN Magazine
2018年1月26日16:45
「Spectre」に関連するx86およびPowerターゲット向けのセキュリティ修正(CVE 2017-5715)も含まれている。

また、Spactre脆弱性を緩和するGoogleのRetpolineパッチのバックポートもサポートする。