Meltdown, Spectre脆弱性に関するメモ

1月2日に[Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign(The Register)](https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/)で報道された脆弱性について、各種文献を読んだ結果をまとめます。
専門外かつ個人的なメモなので間違っている箇所が多くあると思います。すみません。

# 脆弱性の概要

- GoogleのProject Zeroによって発見され、2017年6月1日に各ベンダに報告されていた。
- 本来1月9日に公表される予定であったが、メディアに「憶測による報道」をされたため、現時点でProject ZeroやIntel等からまとまった情報が出てきている
- [CVE-2017-5753](https://access.redhat.com/security/cve/CVE-2017-5753), [CVE-2017-5715](https://access.redhat.com/security/cve/CVE-2017-5715), [CVE-2017-5754](https://access.redhat.com/security/cve/CVE-2017-5754)が関係
- プロセッサの投機的実行に由来する脆弱性で、主にIntelのPentiumより後のCPUにある問題であるが、一定条件化でAMDやARMも影響を受けるとされる
- 対策のためカーネルページテーブルアイソレーションという技術が導入されたが、これによりシステムコールの実行パフォーマンスが低下する[^7]
- この脆弱性により、ユーザープロセスやKVMゲスト上のプロセスからカーネルメモリを読み取られてしまう
- PoCが存在するが現時点(2018/1/5)では公開されていない。将来公開される。
- **追記** すでにこれらの脆弱性を実証できるコードが各所で公開されています。例: [Meltdown](https://github.com/raphaelsc/Am-I-affected-by-Meltdown) , [Spectre](https://github.com/Eugnis/spectre-attack)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="es" dir="ltr">Bingo! <a href="https://twitter.com/hashtag/kpti?src=hash&amp;ref_src=twsrc%5Etfw">#kpti</a> <a href="https://twitter.com/hashtag/intelbug?src=hash&amp;ref_src=twsrc%5Etfw">#intelbug</a> <a href="https://t.co/Dml9g8oywk">pic.twitter.com/Dml9g8oywk</a></p>&mdash; brainsmoke (@brainsmoke) <a href="https://twitter.com/brainsmoke/status/948561799875502080?ref_src=twsrc%5Etfw">2018年1月3日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

[^7]: https://www.phoronix.com/scan.php?page=article&item=linux-415-x86pti

# 文献など

## 英語の情報

- [The Registerの記事](https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/) ... おそらく脆弱性の存在に関する情報としては一番最初に出たもの。
- [Google Project Zeroのブログポスト](https://googleprojectzero.blogspot.jp/2018/01/reading-privileged-memory-with-side.html) ... 脆弱性の詳細がレポートされている。
- [intelの声明](https://newsroom.intel.com/news/intel-responds-to-security-research-findings/) ... Intel製品のみが影響を受ける、とした報道記事に反論している
- [Google Security Blog](https://security.googleblog.com/2018/01/todays-cpu-vulnerability-what-you-need.html) ... Google製品ユーザーの脆弱性への対応方法などがアナウンスされている
- [AMDの発表](https://www.amd.com/en/corporate/speculative-execution) ... 脆弱性のAMD製品への影響はほぼないと言っている
- [Linux Kernel Mailing Listに送られたパッチ](https://lkml.org/lkml/2017/12/27/2) ... AMD製CPUではKPTIを有効にする必要はないという内容[^6]
- [Phoronixの記事](https://www.phoronix.com/scan.php?page=article&item=linux-415-x86pti) ... 脆弱性緩和策のパフォーマンスに対する影響をベンチマークしている
- [Project Zeroのissue](https://bugs.chromium.org/p/project-zero/issues/detail?id=1272)
- [https://meltdownattack.com/](https://meltdownattack.com/) ... 論文が公開されている

[^6]: 無事に[マージされている](https://github.com/torvalds/linux/commit/694d99d40972f12e59a3696effee8a376b79d7c8)

## Qiita上の情報

- [話題のintelセキュリティ脆弱性をちょっと調べた](https://qiita.com/dasoran/items/d96ca87e1d541cb3e5b5)
- [プロセッサの脆弱性。MeltdownとSpectre](https://qiita.com/urakarin/items/c4f59c5bebd9a6080b6d)
- [Meltdownへの対策の影響をLINPACKベンチマークで比較してみる (途中まで)](https://qiita.com/papillon/items/770293dba43bca1d61bc)

# 各OSでの対策

## Linux

- `Linux-4.15-rc6`[^1], `Linux-4.14.11`[^2](2018/1/2)にてページテーブルアイソレーションの機能がマージされた
- Kconfigで`PAGE_TABLE_ISOLATION`を有効にする必要がある[^3]

### 確認方法

- `uname -a`等で、Linuxカーネルのバージョンが上記の脆弱性緩和策が適用されたもの(`Linux-4.14.11`以降, など)になっているか確認する
- `cat /proc/cpuinfo`を実行し、表示される文字列に`cpu_insecure`が含まれていることを確認する(AMD製CPUの場合は必要ない)

<!--
### 各ディストリビューションの対応について

- Arch Linux ... [対応している(`linux-4.14.11` + `0007-x86-cpu-x86-pti-Do-not-enable-PTI-on-AMD-processors.patch`)](https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/linux)
- Ubuntu ... https://people.canonical.com/~ubuntu-security/cve/pkg/linux.html
-->

## Windows

- セキュリティ アドバイザリ [ADV180002 | Guidance to mitigate speculative execution side-channel vulnerabilities](https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV180002)
- デスクトップ用Windowsでの対応 [Windows Client Guidance for IT Pros to protect against speculative execution side-channel vulnerabilities](https://support.microsoft.com/en-us/help/4073119/windows-client-guidance-for-it-pros-to-protect-against-speculative-exe)
- サーバー用Windowsでの対応 [Windows Server Guidance to protect against the speculative execution side-channel vulnerabilities](https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution)

最新のWindows 10の場合、2018/1/3の[KB4056892](https://support.microsoft.com/en-ca/help/4056892/windows-10-update-kb4056892)に対策が含まれているのでないかと考えられる[^9]

### 確認方法

KB4056892がインストールされていることを確認するには、設定 > システム > バージョン情報 より、OSビルドが16299.192となっていることを確認する

## FreeBSD

現在対応中であり、対応日程は未定である[^10]

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">There is team of 3 individuals already working on it, none of whom I can name.</p>&mdash; Devin Teske (@freebsdfrau) <a href="https://twitter.com/freebsdfrau/status/948576536323502081?ref_src=twsrc%5Etfw">2018年1月3日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## ｍacOS

すでに一部については(2017/12/6)の時点で対策が完了（macOS 10.13.2）しており、現在追加の緩和策をテストしている
[Intel responds to CPU security flaw as macOS 10.13.2 said to include fix for Macs](https://9to5mac.com/2018/01/03/mac-fix-for-intel-kernel-bug/)

[^1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/?id=v4.15-rc6&id2=v4.15-rc5&dt=2
[^2]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/diff/?id=v4.14.11&id2=v4.14.10&dt=2
[^3]: 最新のコードツリーでは[有効化されている](https://github.com/torvalds/linux/commit/87faa0d9b43b4755ff6963a22d1fd1bee1aa3b39)
[^9]: https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution
[^10]: https://www.freebsd.org/ja/news/newsflash.html#event20180104:01

# ユーザーができる対策

- OSを常に最新にアップデートする
- Google Chromeを使用している場合は、[Full Site Isolation](https://support.google.com/chrome/a/answer/7581529)を有効にする[^4]

[^4]: https://support.google.com/faqs/answer/7622138#chrome