runc脆弱性でEC2、ECS(EC2/Fargate)の対応をやってみる

82件のシェア(ちょっぴり話題の記事)

こんにちわ、札幌のヨシエです。

先日朝起きてからFacebookを見ると、とあるセキュリティ関連を対応している人のPostでRunCの脆弱性を知りました。
既にAWSでは対応が開始されているため、ユーザーが出来る対応方法を纏めます。

どういった脆弱性なのか?

Docker内部で利用されているruncにて脆弱性が発見されました。
この脆弱性はコンテナ上からホストインスタンスでroot権限コマンドを実行できる危険性があるため、速やかな対処が必要と考えられます。

Docker 等で使用する runc の権限昇格に関する脆弱性 (CVE-2019-5736) について

ECSの対応について

AWSの公式発表では以下のように記載がありました。
AWSの公式発表内容は随時更新されるため、対応検討の際は以下のページをご参照した後に対応頂ければと思います。
Container Security Issue (CVE-2019-5736)

AmazonLinux

ECSを利用せずにAmazonLinuxでDockerを利用している方は最新バージョンのDocker(docker-18.06.1ce-7.25.amzn1.x86_64)へのアップデートを実施してください。

ALAS-2019-1156

Amazon Elastic Container Service(Amazon ECS)

ECSでコンテナホストをEC2で利用されている方が対象です。
最新版のDockerとECSコンテナエージェントを適用する点で既に脆弱性対応を行っているAMIが展開されておりますので、そちらのAMIへの差し替えを実施してください。

AWS Fargate

FargateはコンテナホストがAWS管理となっております。 そのため、プラットフォームバージョンが最新版(Latest/1.3.0)を利用されている環境ではタスクの再起動のみで対応完了となります。
上記のプラットフォームバージョン以外でFargateをご利用されている場合は脆弱性対応パッチが後日適用予定の点をご留意ください。
※1.0.0、1.1.0、1.2.0は2019年3月15までにはパッチ版が利用することが可能と考えられます。

EC2上でDockerを利用している場合の脆弱性対応判断について

確認方法

上記の案内で記載しているようにDocker自体のバージョンアップが必要となります。 以下のコマンドで利用中のDockerバージョンを確認してください。

以下のようにdocker-18.06.1ce-7.25.amzn1.x86_64よりも低いバージョンが使用されている場合は今回の脆弱性対象です。

# rpm -qa | grep docker
docker-18.06.1ce-5.22.amzn1.x86_64

対応方法

Dockerのバージョンアップを実施し、Docker自身を起動し直すことで対応が完了します。

# yum update docker
=====================================================================================================================================
 Package                   アーキテクチャー          バージョン                                リポジトリー                     容量
=====================================================================================================================================
更新します:
 docker                    x86_64                    18.06.1ce-7.25.amzn1                      amzn-updates                     45 M

ECS利用中の脆弱性対応判断について

ECSを利用環境で今回の脆弱性対応が必要なのかを確認する方法を書きます。

ホストインスタンスがEC2の場合

既に脆弱性対応済みのAMIが共有されておりますので、こちらのAMIを使用してコンテナホストの入れ替えが必要となります。
最新AMIバージョンは以下のコマンドにて確認が可能です。

AmazonLinux

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended

AmazonLinux2

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended

WindowsAMI

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/windows_server/2016/english/full/2018.03.26

AutoScalingにてコンテナホストをスケールされている際には各設定の確認や予め起動ホスト数を追加してコンテナを寄せた後に 旧ホストインスタンスを停止する形が良いと存じます。

ホストインスタンスがFargateの場合

Fargateはホスト管理をAWSが管理している観点から、直接Dockerのパッケージアップデートの必要はございませんが、プラットフォームを最新にすることとサービスの再起動を推奨されてます。

[ECS]-[クラスタ(Fargate利用中クラスタ)]-[サービスタブ]の「プラットフォームバージョン」から確認が出来ます。

この時にプラットフォームバージョンが1.3.0以外の場合は1.3.0に上げる必要があります。
サービスの作成から「プラットフォームのバージョン」をLATESTまたは1.3.0に変更しましょう。

最後に

改めて今回の脆弱性からコンテナを利用する際のセキュリティに関して考えたいと思いました。
私はなるべく利用するコンテナイメージは信頼出来る提供元(ソフトウェア配布会社等の公式イメージ)を確認する点をご案内してきましたが、こういった脆弱性の懸念からコンテナイメージの脆弱性をチェックする機構についても目を向けることが必要と考えました。