Slide 1

Slide 1 text

CVE-2024-21626 から学ぶ システム運⽤者に求められる CVE 対応 Container Runtime Meetup #5 Amazon Web Services Japan G.K. Tech Training Specialist Ryota Yamada

Slide 2

Slide 2 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 好きなAWSのサービス: 趣味: 謎解き、サッカー観戦、フットサル Ryota Yamada / riita10069

Slide 3

Slide 3 text

アジェンダ • CVE-2024-21626 の概要(ざっくり) • システム運⽤者がすべき脆弱性問題への対応 • コンテナランタイム脆弱性の緩和策と発⾒的統制

Slide 4

Slide 4 text

CVE とは何︖ • CVE(Common Vulnerabilities and Exposures)は、 共通脆弱性識別⼦の略称。 • ⾮営利組織である MITRE Corporation が主導していおり、脆 弱性が特定されたときに⼀意に識別できるよう採番している。 • 脆弱性に関する情報共有を円滑ににするための国際的な標準と して確⽴されたもの。

Slide 5

Slide 5 text

CVE-2024-21626 の概要 CVSS v3 Base Score 8.6 runc Host OS ホスト上に runc がインストールされています。

Slide 6

Slide 6 text

CVE-2024-21626 の概要 CVSS v3 Base Score 8.6 runc Host OS Container ホスト上に runc がインストールされています。 runc がコンテナプロセスを起動する際に

Slide 7

Slide 7 text

CVE-2024-21626 の概要 CVSS v3 Base Score 8.6 runc Host OS Container ホスト上に runc がインストールされています。 runc がコンテナプロセスを起動する際に WORKDIR にコンテナプロセスの ファイルディスクリプタを指定する WORKDIR /proc/self/fd/8/

Slide 8

Slide 8 text

CVE-2024-21626 の概要 CVSS v3 Base Score 8.6 runc Host OS Container ホスト上に runc がインストールされています。 runc がコンテナプロセスを起動する際に WORKDIR にコンテナプロセスの ファイルディスクリプタを指定する WORKDIR /proc/self/fd/8/ /sys/fs/cgroup ホストOSへのハンドルとなる

Slide 9

Slide 9 text

CVE-2024-21626 の概要 CVSS v3 Base Score 8.6 runc Host OS Container ホスト上に runc がインストールされています。 runc がコンテナプロセスを起動する際に WORKDIR にコンテナプロセスの ファイルディスクリプタを指定する WORKDIR /proc/self/fd/8/ /sys/fs/cgroup ホストOSへのハンドルとなる 起動したコンテナがホストディレクトリにエスケープできる

Slide 10

Slide 10 text

CVE-2024-21626 の概要 CVSS v3 Base Score 8.6 シナリオ1 WORKDIR に細工をした 新規のコンテナを起動 production Dockerfile シナリオ3 Build Pipeline WORKDIR に細工をした Dockerfileを差し込み CIサーバーなどを攻撃 シナリオ2 production すでに本番稼働している コンテナ内にプロセスを作成 docker exec –w /proc/self/fd/9

Slide 11

Slide 11 text

システム運⽤者がすべき脆弱性問題への対応 1. 影響を受けるシステムとアプリケーションを特定する 2. 提供されるパッチや修正を迅速に適⽤する 3. 脆弱性に関連するログやイベントを収集し、被害を確認する 4. 未知の脆弱性に対する緩和策を実施する

Slide 12

Slide 12 text

影響を受けるシステムとアプリケーションを特定する • AWS をご利⽤の場合 • https://aws.amazon.com/jp/security/security-bulletins/AWS-2024-001 • 重要度の⾼いCVEでは、公式から対応に関するアナウンスがされる。 • 今回の CVE-2024-21626 では、上記のサイトが公開された。 • 依存しているOSやミドルウェア等の利⽤がないかを確認する • 上記の Bulletin にも記載があるが AWS では、ECS/EKS などだけでなく、 Amazon Linux でも runc を利⽤している。 • https://alas.aws.amazon.com/cve/html/CVE-2024-21626.html • Amazon Linux Security Center に詳細が記載されているので確認 • 公式 (今回であれば runc) の告知も確認 • https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv

Slide 13

Slide 13 text

ECS(EC2) での対応 • ECS Optimized AMI をご利⽤の場合 • UpdateContainerAgent API を利⽤して指定したコンテナインスタン スの ecs-agent を最新に更新する。 • aws ecs update-container-agent • Windows コンテナインスタンスや arm64 インスタンスでは⾮対応 • ⾮対応の場合は、新しいコンテナインスタンスへ⼊れ替える • Auto Scaling Group の AMI を最新のものに設定 • UpdateContainerInstancesState API を使⽤して、古い AMI のコンテ ナインスタンスのステータスを DRAINING に変更する • インスタンスで実⾏されているすべてのタスクが STOPPED 状態に移 ⾏したら、EC2 インスタンスを ASG から解除し Terminate する • 新しいインスタンスが ECS クラスタに登録されるのを待つ • または、⼿動で ecs-agent を更新する • https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/manually_update_agent.html https://docs.aws.amazon.com/cli/latest/reference/ecs/update- container-agent.html

Slide 14

Slide 14 text

ECS(Fargate) での対応 • 本件では security bulletin に記載がないため、お客様のアクションは不要

Slide 15

Slide 15 text

EKS(EC2) での対応 • Managed Node Group をご利⽤の場合 • UpdateNodeGroupVersion API より、順次ノードの更新が可能 • aws eks update-nodegroup-version • Karpenter をご利⽤の場合 • NodeClass で AMI のバージョンを指定している場合、最新のバージョンに 更新をする必要がある。指定していない場合は、アクション不要 • Karpenter の Drift の機能により⼿作業で Drain せずとも⾃動で更新される • Pod Disruption Budget を利⽤することでサービスの可⽤性を担保 • 重要なすべてのアプリケーションに設定されていることを確認しておく https://docs.aws.amazon.com/ja_jp/eks/latest/APIReference/ API_UpdateNodegroupVersion.html

Slide 16

Slide 16 text

EKS(Fargate) での対応 • kubectl get nodes コマンドによりノードのバージョンを確認 • 最新のバージョンを利⽤していなければ、Pod の再起動が必要 • kubectl rollout restart コマンドで更新する

Slide 17

Slide 17 text

コンテナランタイム脆弱性の緩和策と発⾒的統制 脆弱性が発見される前から、多層防御のセキュリティを構築しておくことが重要 サプライチェーンの保護 コンテナイメージの署名と検証 信用できるコンテナレジストリのみに制限 Latest タグを使わない 最小限のコンテナイメージ Dockerfile Dockle, Hadolint で不備の検出 マルチステージビルド 最小限のベースイメージ 不要なパッケージをインストールしない 非特権ユーザーを使う ホストを保護する仕組みを利用 Bottlerocket AMI を利用 Security Context を利用し UID 0 をコンテナに付与しない Read Only ファイルシステムを利用 発見的統制により検知する PrivilegeEscalation:Runtime/RuncContainerEscape PrivilegeEscalation:Runtime/RuncContainerEscape Execution:Runtime/ReverseShell DefenseEvasion:Runtime/ProcessInjection.Proc

Slide 18

Slide 18 text

• 脆弱性を利⽤した攻撃の被害を受けたかどうかを確認する • Falco では、CVE-2024-21626 を検出するルールについて議論 • https://github.com/NitroCao/CVE-2024-21626?tab=readme-ov- file#how-to-detect • 監査の観点から、後からログの検索ができるようにしておく。 コンテナランタイム脆弱性の緩和策と発⾒的統制