# 投機的実行とマイクロアーキテクチャサイドチャネル(Meltdown・Spectre)
## 定義
Meltdown・Spectreは、超スカラCPUの投機的実行(speculative execution)・分岐予測・キャッシュ状態を悪用し、アクセス制御チェックを回避して保護されたメモリの内容をキャッシュタイミングというサイドチャネル経由で読み出す攻撃群である。*Security Engineering* 第3版第19章は、その系譜を2005年のColin Percivalによるハイパースレッド間のAESキャッシュミス観測から辿る。2007年にAcıiçmez・Koç・Seifertが分岐予測解析(branch prediction analysis, BPA)を考案し、2015年にはprime and probe法によるL3キャッシュ攻撃でGPG秘密鍵の復元が示され、2017年のCachezoom攻撃はSGXエンクレーブから鍵を抽出した。2018年初頭に公表されたMeltdownはメモリアクセスと権限チェックの間の競合状態を突いてキャッシュサイドチャネル経由で禁止領域を読み出し、Spectreは分岐予測ロジックを誤誘導し、投機的に実行されたが本来は実行されないはずの命令の痕跡をキャッシュ状態として観測する。両者ともIntelとArmにCPUの再設計を約束させ、ソフトウェア緩和策は一部のワークロードで15%の性能低下を招いた。Foreshadow・Zombieload・Fallout・Smotherspectre・RAMBleed・Load Value Injection・CrossTalkなど、後継の亜種が2019〜2020年にかけて続々と発見されている。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 19 Side Channels]] ch.19 §19.4.5)
## 横断的知見
- **本概念は、第6章のTCB・TEE(エンクレーブ)概念が「未解決の問い」として第19章に委ねていた、エンクレーブ側チャネルの技術的中身を具体的に埋める**: [[信頼計算基盤(TCB)]] は、Michael Schwarz・Samuel Weiser・Daniel Grussが実証したSGXエンクレーブからホストアプリへのROP攻撃を「TCBを縮小しても脅威モデルの誤りは残る」教訓として記録しつつ、この教訓がTCB構築4段階のどこに位置づけられるかは未確定だとしていた。本章が示す2017年のCachezoom攻撃(SGXエンクレーブからのキャッシュサイドチャネルによる鍵抽出)は、Schwarz et al.のROP攻撃とは異なる経路——制御フローの乗っ取りではなく、エンクレーブ内部の処理がキャッシュ状態という観測可能な痕跡を残すこと自体——でエンクレーブの隔離を破る。両者を合わせると、TCB構築の第1段階(「TCBに求めるセキュリティ要件と防御対象の攻撃を明示的に列挙する」)の不備は、制御フロー乗っ取り(ROP)とサイドチャネル(Cachezoom)という異なる攻撃面の双方に及んでいたことになり、「エンクレーブは何から隔離されているか」という問いへの答えが2017年時点でも不完全だったことが分かる。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 6 Access Control]] ch.6 §6.3.1, [[@2020__Wiley__Security Engineering 3e - Chapter 19 Side Channels]] ch.19 §19.4.5)
- **[[トラステッド実行環境(TEE)]] が「エンクレーブアーキテクチャが側チャネル攻撃に本質的にどこまで耐性を持ちうるかは、本章では『側チャネル』の章に譲られており未解明のまま残る」としていた問いに対し、本章は明確に否定的な答えを与える**: 第6章はMeltdown・Spectreがエンクレーブの保護の限界を露呈させたと指摘するにとどまっていたが、本章はForeshadowが「SGXとシステム管理モードを含む、Spectreが破れなかったIntelプロセッサの機能の多くを破った」ことを明記する。これは、SGXのようなTEEがOSカーネルやroot権限プロセスからの隔離を謳っていても、投機的実行というCPUマイクロアーキテクチャ全体に共通する性質そのものが漏洩経路になるため、ソフトウェア・アーキテクチャレベルの隔離(TEE)だけでは投機的実行の物理的な副作用を防げないことを示す。すなわちTEEの脅威モデルは「OS・他プロセスからの論理的な分離」を前提にしていたが、投機的実行サイドチャネルは論理的な分離が保たれたままでも成立するため、TEEの防御層の外側に位置する攻撃面だと整理できる。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 6 Access Control]] ch.6 §6.3.1, §6.3.2, [[@2020__Wiley__Security Engineering 3e - Chapter 19 Side Channels]] ch.19 §19.4.5)
- **[[多層セキュリティ(MLS)]] が「covert channelの根絶が不可能だという主張(§9.6.3)と、Meltdown/Spectreのようなマイクロアーキテクチャ由来の隠れチャネルとの関係は、本章では側面的に触れられるのみ」としていた未解決の問いに、本章は関係の質を明確化する形で答える**: 第9章はLampson(1973)の隠れチャネル(covert channel、highプロセスがlowプロセスへ**意図的に**信号を送る経路)を、MLSの分離保証を脅かす脅威として扱っていた。しかし本章が詳述するMeltdown・Spectreは、攻撃者が被害者プロセスに協力を求める必要がない——被害者は投機的実行という通常の最適化を行っているだけで、攻撃者が一方的にその副作用を観測する——という点で、Lampsonの意味での「双方が信号を送り合う」隠れチャネルとは性質が異なる。したがって、MLSの脅威モデル(highからlowへの意図的な信号伝達)は、本章のサイドチャネル(被害者の意図に関わらず一方的に観測される漏洩)より狭く、「隠れチャネルの根絶不可能性」という第9章の結論は、意図の有無を問わない広義のサイドチャネルにはさらに強く当てはまることになる。(Source: [[@2020__Wiley__Security Engineering 3e - Chapter 9 Multilevel Security]] ch.9 §9.6.3, [[@2020__Wiley__Security Engineering 3e - Chapter 19 Side Channels]] ch.19 §19.4.5)
- **2019年のアーキテクチャ教科書はSGXエンクレーブを「安全な解決策」として提示するが、その同じ年にはCachezoom(2017年)がすでにエンクレーブからのキャッシュサイドチャネル抽出を実証していた——教科書の記述と攻撃文献の間には周知のギャップが存在する**: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 2 Memory Hierarchy Design]] §2.4は、Intel SGXを「エンクレーブは常に暗号化され、ユーザコードが与える鍵でのみ復号される」ため標準的な仮想メモリ操作やI/Oがエンクレーブ内容を読み出せない安全な仕組みとして紹介し、投機実行(§2.5)についても「投機的にキャッシュへのアクセスが生成されミス率を変化させうる」という性能上の論点としてのみ扱い、これが情報漏洩の攻撃面になりうるとは述べない。しかし本概念ページが記録する2017年のCachezoom攻撃は、まさにそのSGXエンクレーブからキャッシュタイミングというサイドチャネル経由で秘密鍵を抽出しており、教科書の出版時点(2019年)で既に「エンクレーブの暗号化=安全」という前提が破られていたことになる。同じ2019年に出版された一般的なコンピュータアーキテクチャ教科書とセキュリティ専門書の間に、投機的実行が生むマイクロアーキテクチャサイドチャネルへの認識のギャップが存在したことを示す一次資料同士の比較である。(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 2 Memory Hierarchy Design]] §2.4, §2.5、[[@2020__Wiley__Security Engineering 3e - Chapter 19 Side Channels]] ch.19 §19.4.5)
## 未解決の問い
- 本章はCPU検証ツールが「論理的な正しさ」しか確認しておらず「処理にかかる時間」を検証していなかったと総括するが、この検証ギャップを埋める形式手法(タイミングを含めた検証)が2020年時点でどこまで実用段階にあったかは、本章の記述からは分からない。
- Arm・Intelが導入したCSDB・SSBB・PSSBBといったバリア命令、CVS2フィールドは、本章執筆時点(2020年)でシリコンへの実装が始まったばかりとされる。これらのハードウェア緩和策が実際にForeshadow以降の亜種をどこまで防いだかは、後続ソースでの検証が必要。
- 本章はMeltdown/Spectre以降「信頼できないプロセスと同居するCPU上の暗号処理はすべてリスクを抱える」と述べ、専用の暗号プロセッサ(cryptoprocessor)への移行を示唆するが、この移行が実際にどこまで進んだか、また専用プロセッサ自体が新たなサイドチャネル(本章がほのめかす「新たな課題」)をどう抱えたかは、本章・第6章のいずれにも記述がない。
- TCBの縮小(エンクレーブ)・TEEの隔離・投機的実行サイドチャネルという3層の議論を統合すると、「信頼範囲を縮小する」という設計原則そのものが、マイクロアーキテクチャという物理的に共有されたハードウェア資源の上では原理的な限界を持つように見えるが、この限界が量子コンピュータのような将来のハードウェア世代でも同様に生じるのかは、いずれのソースにも記述がない。
## 関連
- ソース: [[@2020__Wiley__Security Engineering 3e - Chapter 19 Side Channels]](§19.4.5) / [[@2020__Wiley__Security Engineering 3e - Chapter 6 Access Control]](§6.3.1, §6.3.2) / [[@2020__Wiley__Security Engineering 3e - Chapter 9 Multilevel Security]](§9.6.3) / [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 2 Memory Hierarchy Design]](§2.4, §2.5)
- 概念: [[サイドチャネル攻撃]](上位概念) / [[信頼計算基盤(TCB)]](エンクレーブROP攻撃との対比) / [[トラステッド実行環境(TEE)]](TEEの隔離を破る攻撃面) / [[多層セキュリティ(MLS)]](隠れチャネルとの対比)
## 出典
- Ross Anderson, *Security Engineering: A Guide to Building Dependable Distributed Systems*, 3rd Edition, John Wiley & Sons, 2020, Chapter 19, §19.4.5.
- Ross Anderson, *Security Engineering: A Guide to Building Dependable Distributed Systems*, 3rd Edition, John Wiley & Sons, 2020, Chapter 6, §6.3.1, §6.3.2.
- Ross Anderson, *Security Engineering: A Guide to Building Dependable Distributed Systems*, 3rd Edition, John Wiley & Sons, 2020, Chapter 9, §9.6.3.
- [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 2 Memory Hierarchy Design]] §2.4, §2.5(Intel SGXエンクレーブの設計意図、投機実行とメモリアクセスの性能上の論点)