CPUの脆弱性

年明け早々に問題になっている「CPUの脆弱性」について、AWSでの保守についてのメモです。

今回騒ぎになっているのは1月3日にProject Zeroの記事で紹介されたCPU脆弱性。

CPUの脆弱性の影響や対応方法などは、以下の記事がとてもわかりやすかったです。

上記の記事で、問題点や影響について大変わかりやすく解説されているので、この記事で脆弱性の問題は省いて、AWSのEC2、ECSの対応を書いて行きたいと思います。

EC2(Amazon Linux、Windows)の対応

Processor Speculative Execution Research Disclosureを簡単に要約すると、

KPTIのバグに対処と、CVE-2017-5754(不正なデータキャッシュ読み込み)の軽減策を改善するカーネルをリリースしました。最新のAmazon LinuxカーネルかAMIにアップデートすることによって対応されたカーネルが使えるようになります。

アップデートを推奨されているサービスは、
EC2EC2 WindowsECS Optimized AMElastic Beanstalk

また、RDSは現段階でユーザーが対応することは無いようです。

今回EC2について対応の流れを紹介していきます。

Amazon Linux

OSがAmazon Linuxの場合、最新のAMI、又はカーネルをアップデートして再起動。
現在(2018年1月11日)アップデートされるカーネルは以下になります。
Linux version 4.9.75-25.55.amzn1.x86_64
https://alas.aws.amazon.com/ALAS-2018-939.html


#対象のインスタンスにログインする
$ ssh hoge-instance

$ sudo su -

# カーネルを確認
# uname -srv
Linux 4.4.5-15.26.amzn1.x86_64 #1 SMP Wed Mar 16 17:15:34 UTC 2016
# 末尾のタイムスタンプはビルドされた日時を指している。

# カーネルをアップデートする
# yum update kernel -y
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main/latest                                                                                                                                                               | 2.1 kB     00:00
amzn-updates/latest                                                                                                                                                            | 2.5 kB     00:00
mackerel/latest/x86_64                                                                                                                                                         | 2.5 kB     00:00
mysql-connectors-community/x86_64                                                                                                                                              | 2.5 kB     00:00
mysql-tools-community/x86_64                                                                                                                                                   | 2.5 kB     00:00
mysql56-community/x86_64                                                                                                                                                       | 2.5 kB     00:00
8 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:4.9.75-25.55.amzn1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================================================================================================
 Package                                    Arch                                       Version                                                 Repository                                        Size
======================================================================================================================================================================================================
Installing:
 kernel                                     x86_64                                     4.9.75-25.55.amzn1                                      amzn-updates                                      18 M

Transaction Summary
======================================================================================================================================================================================================
Install  1 Package

Total download size: 18 M
Installed size: 72 M
Downloading packages:
kernel-4.9.75-25.55.amzn1.x86_64.rpm                                                                                                                                           |  18 MB     00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : kernel-4.9.75-25.55.amzn1.x86_64                                                                                                                                                   1/1

  Verifying  : kernel-4.9.75-25.55.amzn1.x86_64                                                                                                                                                   1/1

Installed:
  kernel.x86_64 0:4.9.75-25.55.amzn1

Complete!

カーネルをアップデート後、awsのコンソール画面より再起動。
(再起動しないとカーネルが更新されない)

# 再起動後
# uname -srv
Linux 4.9.75-25.55.amzn1.x86_64 #1 SMP Fri Jan 5 23:50:27 UTC 2018

脆弱性対応されたカーネル(Linux version 4.9.75-25.55.amzn1.x86_64)になっていることを確認。
このバージョンがビルドされた日も1月5日と最新ですね。

上記のアップデート方法でカーネルのバージョンが上がらない場合

使用しているAMIのバージョンが古いためパッケージ指定のアップデートでは最新のカーネルにならない場合があります。
その場合は最新のAMIを使ってインスタンスを作り直すか、またはyum updateで全てのパッケージをアップデートすることで最新のカーネルにすることができます。

# 2014年に最終コミットされたAMI
$ cat /proc/version 
Linux version 3.14.20-20.44.amzn1.x86_64 (mockbuild@gobi-build-60001) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Mon Oct 6 22:52:46 UTC 2014

$ sudo su -
# 全てのパッケージをアップデート
# yum update

・・・
(再起動後)

# 最新のカーネルにアップデートされる
$ cat /proc/version 
Linux version 4.9.76-3.78.amzn1.x86_64 (mockbuild@gobi-build-60009) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC) ) #1 SMP Fri Jan 12 19:51:35 UTC 2018

全てのパッケージをアップデートすると現在動作中のプログラムに影響を与え、予期しないエラーが発生することがあります。
そのため、必ずアップデート前にマシーンイメージのバックアップを取ってから、検証しましょう。

そしてアップデートしたくないパッケージがある場合は、以下のように除外してからアップデートしましょう。

# yum update --exclude=php*

問題の脆弱性に対応できているか確認する

Linuxが脆弱性「Spectre」「Meltdown」に対応済みか調べる方法の記事を参考に、アップデートされたカーネル(Linux version 4.9.75-25.55.amzn1.x86_64)で検査しまします。

Spectre and Meltdown mitigation detection tool v0.24

Checking for vulnerabilities against live running kernel Linux 4.9.75-25.55.amzn1.x86_64 #1 SMP Fri Jan 5 23:50:27 UTC 2018 x86_64

CVE-2017-5753 [bounds check bypass] aka 'Spectre Variant 1'
* Checking count of LFENCE opcodes in kernel:  NO  (only 35 opcodes found, should be >= 70)
> STATUS:  VULNERABLE  (heuristic to be improved when official patches become available)

CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'
* Mitigation 1
*   Hardware (CPU microcode) support for mitigation:  YES 
*   Kernel support for IBRS:  NO 
*   IBRS enabled for Kernel space:  NO 
*   IBRS enabled for User space:  NO 
* Mitigation 2
*   Kernel compiled with retpoline option:  NO 
*   Kernel compiled with a retpoline-aware compiler:  NO 
> STATUS:  VULNERABLE  (IBRS hardware + kernel support OR kernel with retpoline are needed to mitigate the vulnerability)

CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Kernel supports Page Table Isolation (PTI):  YES 
* PTI enabled and active:  YES 
> STATUS:  NOT VULNERABLE  (PTI mitigates the vulnerability)

A false sense of security is worse than no security at all, see --disclaimer

AWSのProcessor Speculative Execution Research Disclosureに書いてあるように
確かにKPTIのバグ(Variant 3)は対処されていますが、CVE-2017-5754(不正なデータキャッシュ読み込み)の軽減策を改善するだけで、根本的に解決はできていないようです。

Windows 8.1 又は Windows Server 2012 R2

OSがWindows 8.1 又は Windows Server 2012 R2の場合
KB4056898のセキュリティプログラムをインストールします。

手順は対象のwindowsインスタンスからMicrosoft®Update カタログにアクセスし、対象のセキュリティプルグラムをインストール、再起動すれば完了です。

確認は、「コントロールパネル」 > 「システムとセキュリティ」 > 「Windows Update」 >「更新の履歴」
のタブを開き

Windows 用セキュリティ更新プログラム (KB4056898) インストール状態: 成功しました

となっていれば、対応完了です。

補足:更新プログラムしばらく更新していないマシンは、インストールに失敗する場合があるので、「コントロールパネル」 > 「システムとセキュリティ」 > 「Windows Update」 > 「更新プログラムを確認」 を開いて、プログラムを最新のものに更新して再起動してから、上記のセキュリティプログラムをインストールしましょう。

ECSの対応

ECS(Amazon Elastic Container Service)では、Amazon Linuxと同様に、ECS用の最新のAMI、又はカーネルをアップデートして、再起動を行えばOKです。(サービスでAuto Scalingの設定をしている場合は、対象のマシンを停止すれば勝手に新しいAMIで立ち上がります。)

https://aws.amazon.com/jp/security/security-bulletins/AWS-2018-013/

ECS Optimized AMI
We have released Amazon ECS Optimized AMI version 2017.09.f which incorporates all Amazon Linux protections for this issue

Amazon ECSに最適化された最新のAMIこちらのページに記載されおりに、
リージョンに沿ったAMIを使いましょう。

また、カーネルのアップデートはdockerHOSTであるEC2のみでOKです。
dockerでもイメージを使っているかと思いますが、dockerで使うカーネルはHOSTのカーネルを使うようなので、HOSTのカーネルだけアップデートすればOKです。

参考:How to mitigate Meltdown in Docker images?

終わりに

今回の対応をとして完全に脆弱性が解決しているわけではないので、継続的にAmazon Linux AMI Security Centerをチェックして、(RSS feed有り)最新のカーネルにアップデートし続けた方が良さそうです。

今回のCPUの脆弱性で多くのマシンを保守していると脆弱性の対応がとても大変だなと痛感しました。エンジニアとして、できるだけ自分達で保守するものが少なくなるように努めて行きたいなと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.