runc脆弱性でEC2、ECS(EC2/Fargate)の対応をやってみる
こんにちわ、札幌のヨシエです。
先日朝起きてから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
)へのアップデートを実施してください。
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
に変更しましょう。
最後に
改めて今回の脆弱性からコンテナを利用する際のセキュリティに関して考えたいと思いました。 私はなるべく利用するコンテナイメージは信頼出来る提供元(ソフトウェア配布会社等の公式イメージ)を確認する点をご案内してきましたが、こういった脆弱性の懸念からコンテナイメージの脆弱性をチェックする機構についても目を向けることが必要と考えました。