Related Links を読みながら、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 |
ユーザプロセスにおいて、同一プロセスにおけるアクセスを制御しているメモリ領域のデータを読み取られてしまう恐れがあります。 これにより、攻撃者にそのメモリ領域で保護しているデータ(e.g. パスワード等)が漏洩してしまいます。 なお、そのユーザプロセスの権限次第では、OS のメモリ領域のデータも読み取られてしまいます。
Intel の Whitepaper によると、 適切な箇所に Speculative execution を止めるバリアを挿入することで対策できます。 その Whitepaper では、特に LFENCE 命令 の採用を推奨しています。
Layer | アップデートの必要性 |
---|---|
Application* | Yes |
OS | Yes |
CPU(microcode) | No |
*: この文脈では、同じプロセス内で Sandbox を実現している Web Brower, Container/Virtualization 関連アプリケーションを意識しています。
ユーザプロセスにおいて、他のプロセスにおけるアクセスを制御しているメモリ領域のデータを読み取られてしまう恐れがあります。 これにより、攻撃者にそのメモリ領域で保護しているデータ(e.g. パスワード等)が漏洩してしまいます。 なお、そのユーザプロセスの権限次第では、OS のメモリ領域のデータも読み取られてしまいます。
Intel の Whitepaper によると、 下記どちらかの方法で対策できます。
- プロセッサとシステムソフトウェアの間に Branch target injection を防ぐ仕組みを実装する
- Indirect Branch Restricted Speculation (IBRS)
- Single Thread Indirect Branch Predictors (STIBP)
- Indirect Branch Predictor Barrier (IBPB)
- Return trampoline (a.k.a retpoline) を導入する
Layer | アップデートの必要性 |
---|---|
Application* | Yes |
OS | Yes |
CPU(microcode) | Yes |
*: この文脈では、同じプロセス内で Sandbox を実現している Web Brower, Container/Virtualization 関連アプリケーションを意識しています。
ユーザプロセスにおいて、そのプロセスにマッピングしている OS メモリ領域のデータを読み取られてしまう恐れがあります。 これにより、攻撃者にその OS メモリ領域で保護しているデータ(e.g. パスワード等)が漏洩してしまいます。
Intel の Whitepaper によると、 ユーザコードが保護された OS のメモリ領域にアクセスするときに、OS がそのメモリ領域がユーザプロセスにマップされていないことを検証すること、 または KASLR:Kernel Address Space Layout Randomization (旧 KAISER) を実装することで対策できます。
Layer | アップデートの必要性 |
---|---|
Application* | No |
OS | Yes |
CPU(microcode) | No |
*: この文脈では、同じプロセス内で Sandbox を実現している Web Brower, Container/Virtualization 関連アプリケーションを意識しています。
僕が Meltdown/Spectre を調べているときに参照したリンクをまとめます。基本的にきちんと読んだリンクのみ掲載しているため、Meltdown/Spectre に関する情報の網羅性は低いです。
- https://meltdownattack.com/
- https://www.kb.cert.org/vuls/id/584653
- http://www.4gamer.net/games/999/G999902/20180105085/
- https://pc.watch.impress.co.jp/docs/news/1099687.html
- https://www.youtube.com/watch?v=8FFSQwrLsfE&feature=youtu.be
- http://msyksphinz.hatenablog.com/entry/2018/01/06/020000
- https://bugs.chromium.org/p/project-zero/issues/detail?id=1272
- http://xlab.tencent.com/special/spectre/spectre_check.html
- Web browser が Spectre に対して脆弱性であるか検証する
- https://newsroom.intel.com/wp-content/uploads/sites/11/2018/01/Intel-Analysis-of-Speculative-Execution-Side-Channels.pdf
- https://developer.arm.com/support/security-update
- https://aws.amazon.com/de/security/security-bulletins/AWS-2018-013/
- https://access.redhat.com/security/vulnerabilities/speculativeexecution
- https://www.mozilla.org/en-US/security/advisories/mfsa2018-01/
- Firefox 57.0.4
- https://support.google.com/faqs/answer/7622138