Skip to content

Instantly share code, notes, and snippets.

@kaito834
Last active January 14, 2018 10:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kaito834/1bcd80881ad1b37ee2269c0c7b474414 to your computer and use it in GitHub Desktop.
Save kaito834/1bcd80881ad1b37ee2269c0c7b474414 to your computer and use it in GitHub Desktop.
Notes for Meltdown and Spectre

Related Links を読みながら、Meltdown/Spectre に関する理解を整理しました。 もしこの記事における間違いを見つけた場合には、コメントいただけると嬉しいです。

What is Meltdown/Spectre

Meltdown/Spectre は、CPU 実装に起因する Cache side-channel attack です。 これらの攻撃手法では、CPU の実装を悪用して、本来プロセスの実行権限でアクセスできないメモリ上のデータ(user/kernel space)を CPU キャッシュに書き出し、そのキャッシュから対象データを取得します。Meltdown/Spectre ともに CPU 実装を悪用しますが、 それぞれ悪用する CPU 実装が異なります(下表を参照)。

Meltdown/Spectre 攻撃手法 悪用する CPU 実装 CVE番号 CVSSv3 Base Metrics(Red Hat 評価)
Spectre Bounds check bypass Speculative execution CVE-2017-5753 8.2 CVSS:3.0/AV:A/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N
Spectre Branch target injection Speculative execution CVE-2017-5715 6.7 CVSS:3.0/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:L/A:N
Meltdown Rogue data cache load Out-of-order execution CVE-2017-5754 7.9 CVSS:3.0/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N

Impact/Mitigation for Meltdown/Spectre

Spectre: CVE-2017-5753 (Bounds check bypass)

Impact

ユーザプロセスにおいて、同一プロセスにおけるアクセスを制御しているメモリ領域のデータを読み取られてしまう恐れがあります。 これにより、攻撃者にそのメモリ領域で保護しているデータ(e.g. パスワード等)が漏洩してしまいます。 なお、そのユーザプロセスの権限次第では、OS のメモリ領域のデータも読み取られてしまいます。

Mitigation

Intel の Whitepaper によると、 適切な箇所に Speculative execution を止めるバリアを挿入することで対策できます。 その Whitepaper では、特に LFENCE 命令 の採用を推奨しています。

Layer アップデートの必要性
Application* Yes
OS Yes
CPU(microcode) No

*: この文脈では、同じプロセス内で Sandbox を実現している Web Brower, Container/Virtualization 関連アプリケーションを意識しています。

Spectre: CVE-2017-5715 (Branch target injection)

Impact

ユーザプロセスにおいて、他のプロセスにおけるアクセスを制御しているメモリ領域のデータを読み取られてしまう恐れがあります。 これにより、攻撃者にそのメモリ領域で保護しているデータ(e.g. パスワード等)が漏洩してしまいます。 なお、そのユーザプロセスの権限次第では、OS のメモリ領域のデータも読み取られてしまいます。

Mitigation

Intel の Whitepaper によると、 下記どちらかの方法で対策できます。

  1. プロセッサとシステムソフトウェアの間に Branch target injection を防ぐ仕組みを実装する
  • Indirect Branch Restricted Speculation (IBRS)
  • Single Thread Indirect Branch Predictors (STIBP)
  • Indirect Branch Predictor Barrier (IBPB)
  1. Return trampoline (a.k.a retpoline) を導入する
Layer アップデートの必要性
Application* Yes
OS Yes
CPU(microcode) Yes

*: この文脈では、同じプロセス内で Sandbox を実現している Web Brower, Container/Virtualization 関連アプリケーションを意識しています。

Meltdown: CVE-2017-5754 (Rogue data cache load)

Impact

ユーザプロセスにおいて、そのプロセスにマッピングしている OS メモリ領域のデータを読み取られてしまう恐れがあります。 これにより、攻撃者にその OS メモリ領域で保護しているデータ(e.g. パスワード等)が漏洩してしまいます。

Mitigation

Intel の Whitepaper によると、 ユーザコードが保護された OS のメモリ領域にアクセスするときに、OS がそのメモリ領域がユーザプロセスにマップされていないことを検証すること、 または KASLR:Kernel Address Space Layout Randomization (旧 KAISER) を実装することで対策できます。

Layer アップデートの必要性
Application* No
OS Yes
CPU(microcode) No

*: この文脈では、同じプロセス内で Sandbox を実現している Web Brower, Container/Virtualization 関連アプリケーションを意識しています。

Related Links

僕が Meltdown/Spectre を調べているときに参照したリンクをまとめます。基本的にきちんと読んだリンクのみ掲載しているため、Meltdown/Spectre に関する情報の網羅性は低いです。

Meltdown/Spectre themselves

Proof of Concept(PoC)

Mitigation

Vendor Response/Whitepaper

Impact for Performance

Related Topics

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment