Slide 1

Slide 1 text

コンテナ × セキュリティ × AWS @kyohmizu 2023/10/16 JAWS-UG コンテナ支部 × JAWS-UG 千葉支部

Slide 2

Slide 2 text

株式会社スリーシェイク Sreake事業部 セキュリティエンジニア - AWS, GCP, kubernetes 環境のセキュリティ強化 - SOC/CSIRT運用と改善 - 脅威情報の収集、サイバー演習 etc… その他 - 3-shake SRE Tech Talk 運営 - 「コンテナセキュリティ」書籍監訳 水元 恭平 @kyohmizu whoami

Slide 3

Slide 3 text

お話しすること ✅ 本イベントのテーマである「コンテナセキュリティ」について、改めて考 えてみたい ➢ コンテナセキュリティは複雑で難しいものか ➢ コンテナセキュリティには特別な観点が必要なのか ➢ また、なぜそのように思うのか

Slide 4

Slide 4 text

注意事項 ✅ 時間とテーマの都合上、Kubernetesに関してはあまり触れません ✅ 「コンテナセキュリティ」本の内容を参考にしていますが、個人の見解 が多分に含まれます(ご意見などありましたらぜひ!) ✅ AWSの話は後半少しだけです...

Slide 5

Slide 5 text

目次 ✅ About 3-shake ✅ 「コンテナセキュリティ」書籍紹介 ✅ コンテナ × セキュリティ ➢ コンテナの要素技術からコンテナセキュリティを考える ➢ セキュリティの観点からコンテナセキュリティを考える ✅ AWS利用時のコンテナセキュリティ

Slide 6

Slide 6 text

「コンテナセキュリティ」書籍紹介 01

Slide 7

Slide 7 text

「コンテナセキュリティ」 ✅ O'Reilly Media 刊行「Container Security」の監訳書 ✅ コンテナを構成するLinuxの要素技術が中心 ✅ Docker/Kubernetesに関するセキュリティの観点を知る ➢ 詳細な設定、ベストプラクティスは取り扱わない ✅ 原書の翻訳 + 監修 ➢ 原書刊行時点(2020年4月)からの情報アップデート ➢ 関連する技術情報のコラム追加 https://book.impress.co.jp/books/1122101051 コンテナ化されたアプリケーションを保護する要素技術

Slide 8

Slide 8 text

目次 1. コンテナセキュリティの脅威 2. Linuxシステムコール、パーミッション、 capability 3. コントロールグループ 4. コンテナの分離 5. 仮想マシン 6. コンテナイメージ 7. イメージに含まれるソフトウェアの脆弱性 8. コンテナ分離の強化 9. コンテナエスケープ 10. コンテナネットワークセキュリティ 11. TLSによるコンポーネントの安全な接続 12. コンテナへのシークレットの受け渡し 13. コンテナのランタイム保護 14. コンテナとOWASPトップ10 付録A:セキュリティチェックリスト

Slide 9

Slide 9 text

目次 1. コンテナセキュリティの脅威 2. Linuxシステムコール、パーミッション、 capability 3. コントロールグループ 4. コンテナの分離 5. 仮想マシン 6. コンテナイメージ 7. イメージに含まれるソフトウェアの脆弱性 8. コンテナ分離の強化 9. コンテナエスケープ 10. コンテナネットワークセキュリティ 11. TLSによるコンポーネントの安全な接続 12. コンテナへのシークレットの受け渡し 13. コンテナのランタイム保護 14. コンテナとOWASPトップ10 付録A:セキュリティチェックリスト Linuxの要素技術 Linuxの要素技術 Docker/Kubernetes Docker/Kubernetes Docker/Kubernetes

Slide 10

Slide 10 text

Linuxの要素技術 ✅ ファイルパーミッション(2章) ✅ capability(2章) ✅ cgroup(3章) ✅ namespace(4章) ✅ seccomp, AppArmor, SELinux(8章) ✅ iptables(10章)

Slide 11

Slide 11 text

Docker/Kubernetes ✅ イメージセキュリティ(6章) ✅ イメージ脆弱性スキャン(7章) ✅ コンテナエスケープ(9章) ✅ ネットワークセキュリティ(10章) ✅ シークレット保護(12章) ✅ ランタイム保護(13章)

Slide 12

Slide 12 text

本書の位置付け コンテナ本: セキュリティ本: 入門 初級 中級 上級 入門 初級 中級 上級

Slide 13

Slide 13 text

想定読者 ✅ コンテナの仕組みを理解したい人 ➢ 手を動かしながらLinuxの機能・コマンドに触れる ✅ コンテナ環境のセキュリティ強化に取り組みたい人 ➢ セキュリティの知識は不要 ➢ 最低限のDocker(Kubernetes)の知識は必要 Linuxの要素技術、コンテナセキュリティについて学ぶ1冊目に

Slide 14

Slide 14 text

コンテナ × セキュリティ 02

Slide 15

Slide 15 text

コンテナセキュリティ is… - Dockerfileのセキュリティ - ベストプラクティスに従う(非 rootユーザの 利用、機微情報を含めない等) - コンテナイメージのセキュリティ - 脆弱性スキャン - イメージレジストリのセキュリティ - 実行基盤のセキュリティ - ホストマシン(VM) - コンテナランタイム( Docker) - オーケストレーションツール( k8s) - シークレット管理 - ネットワークセキュリティ - Network Policy - ビルド・デプロイ時のセキュリティ - イメージ署名・検証 - パイプラインの権限制御 - Admission Control - ランタイム(実行時)セキュリティ - seccomp, AppArmor, SELinux - 振る舞い検知 - 監視とロギング - バックアップ

Slide 16

Slide 16 text

コンテナセキュリティは難しい? ✅ 考えるべき項目が多い ✅ 従来のサーバー環境とコンテナ環境の違いが大きい ✅ どこから or どこまで取り組むべきか分からない ✅ そもそもコンテナが難しい 「コンテナ」と「セキュリティ」に分解し、 2つの観点からコンテナセキュリティを考える

Slide 17

Slide 17 text

コンテナの要素技術からコンテナセキュリティを考える 02-1

Slide 18

Slide 18 text

コンテナとは結局何か ✅ Linuxカーネルの機能を使用し、適度に隔離されたプロセス ➢ chroot (pivot_root) による root ディレクトリの分離 ➢ cgroup によるリソース使用量の制限 ➢ namespace によるアクセス範囲の制限 ➢ capability による権限の制限 ✅ コンテナ実行に必要なものを一纏めにしたのがコンテナイメージ ➢ root ファイルシステム ➢ アプリの実行ファイルと依存ファイル群 ➢ 実行ユーザ、環境変数などの設定情報 ✅ 上記を実現、補助するための各種ツールが存在する

Slide 19

Slide 19 text

cgroup (v2)

Slide 20

Slide 20 text

namespace

Slide 21

Slide 21 text

capability

Slide 22

Slide 22 text

従来のサーバー環境との違い ✅ ホスト上で動作するプロセスである ➢ コンテナ - ホスト間の分離は通常それほど強固でない ➢ コンテナがホストに影響を及ぼさないために適切な設定が必要 ➢ コンテナ内で見た場合、制限の強いVM上で動作するのと変わらない ✅ コンテナイメージで配布される ➢ イメージを構成するDockerfile ➢ イメージを保管するレジストリ ➢ イメージのビルド・デプロイの仕組み ✅ 実行基盤としてのコンテナランタイムとKubernetes

Slide 23

Slide 23 text

コンテナ - ホスト間の分離の強化 ✅ コンテナプロセスの実行ユーザ指定 ➢ Dockerfileでのユーザ指定や、rootless コンテナの利用 ✅ 特権コンテナの禁止 ➢ capability, seccomp, SELinux, /proc のマウントなどに影響 ✅ capability の最小化 ✅ seccomp によるシステムコールの制限 ✅ AppArmor, SELinux によるファイル・プロセスへのアクセス制御 ✅ コンテナのサンドボックス化 ➢ gVisor, Kata Containers, Firecracker など

Slide 24

Slide 24 text

コンテナイメージの構成要素 ✅ Dockerfile によるIaC化 ➢ アプリ開発者の管理になるケースが多い ✅ イメージのレイヤ構造 ➢ Dockerfile の各段階での状態をすべて保持 ➢ 変更前、削除前のファイルにもアクセス可能 ✅ イメージタグとダイジェストによる特定 ✅ イメージレジストリへの格納 ✅ ビルド環境と実行環境 ➢ コンテナランタイムとオーケストレーションツール

Slide 25

Slide 25 text

コンテナ固有のセキュリティ - Dockerfileのセキュリティ - ベストプラクティスに従う(非 rootユーザの 利用、機微情報を含めない等) - コンテナイメージのセキュリティ - 脆弱性スキャン - イメージレジストリのセキュリティ - 実行基盤のセキュリティ - ホストマシン(VM) - コンテナランタイム( Docker) - オーケストレーションツール( k8s) - シークレット管理 - ネットワークセキュリティ - Network Policy - ビルド・デプロイ時のセキュリティ - イメージ署名・検証 - パイプラインの権限制御 - Admission Control - ランタイム(実行時)セキュリティ - seccomp, AppArmor, SELinux - 振る舞い検知 - 監視とロギング - バックアップ コンテナ - ホスト間の分離 コンテナイメージのセキュリティ

Slide 26

Slide 26 text

セキュリティの観点からコンテナセキュリティを考える 02-2

Slide 27

Slide 27 text

リスクと脅威、緩和策 ✅ リスク ➢ 潜在的な問題と、それが発生した場合の影響 ✅ 脅威 ➢ リスクが発生する可能性 ✅ 緩和策 ➢ 脅威に対する対策 ➢ 脅威を防ぐ or 脅威が顕在化する可能性を減らすための行動 「コンテナセキュリティ」 P.21

Slide 28

Slide 28 text

脅威モデルにおけるアクター ✅ 外部攻撃者 ➢ 外部から環境にアクセスしようとしてくる攻撃者 ✅ 内部攻撃者 ➢ 環境(の一部)にアクセスすることに成功した攻撃者 ✅ 内部関係者 ➢ 環境にアクセスする権限を持つ開発者や管理者など ✅ 不注意な関係者 ➢ 不注意などで問題を引き起こす可能性のある社内の関係者 ✅ アプリケーションプロセス 「コンテナセキュリティ」 P.22

Slide 29

Slide 29 text

セキュリティの原則 ✅ 最小権限 ➢ 処理を実行するために必要な最小限のアクセスに制限する ✅ 攻撃対象領域(Attack Surface)の縮小 ➢ システムの複雑さを解消することで攻撃の可能性を減らす ✅ 影響範囲の制限 ➢ 攻撃が成功した場合の影響範囲を小さくする ✅ 多層防御 ➢ 複数のレイヤー(層)でシステムを保護する 「コンテナセキュリティ」 P.32 - 33

Slide 30

Slide 30 text

セキュリティの観点から見えること ✅ 網羅的なセキュリティ対策の検討 ➢ セキュリティの原則やフレームワークをもとに、コンテナ環境に必要なセキュリ ティを洗い出す ✅ セキュリティ対策の費用対効果と優先順位づけ ➢ リスクの大きさと対策コストから費用対効果を算出 ➢ 防御の薄い層は優先的に対策(リスク評価に影響) ✅ ただしコンテナの理解は不可欠 ➢ コンテナの仕組み・設定方法を知らなければ具体的な対策は取れない

Slide 31

Slide 31 text

例)網羅的なセキュリティ対策の検討 侵入対策(攻撃対象領域の縮小、他) 侵入検知 侵入後対策(最小権限、影響範囲の制 限、他) Dockerfile ベースイメージのスリム化 機微情報を含めない 非 root ユーザの使用 コンテナイメージ 脆弱性、マルウェアスキャン レジストリのアクセス制御 操作権限を最小化 実行基盤(VM、コンテナランタイム、 Kubernetes) 脆弱性スキャン パッチ適用 振る舞い検知 監査ログの監視 seccomp, AppArmor, SELinux rootless コンテナ サンドボックス化 シークレット管理 保管場所のアクセス制御 監査ログの監視 操作権限を最小化 ネットワーク Network Policy WAF ネットワーク監視 Network Policy ビルド・デプロイ イメージ署名・検証 Admission Control パイプラインの実行権限を最小化 ランタイム(実行時) 振る舞い検知 操作のブロック、コンテナ自動削除

Slide 32

Slide 32 text

まとめ 02-3

Slide 33

Slide 33 text

コンテナセキュリティ is… - Dockerfileのセキュリティ - ベストプラクティスに従う(非 rootユーザの 利用、機微情報を含めない等) - コンテナイメージのセキュリティ - 脆弱性スキャン - イメージレジストリのセキュリティ - 実行基盤のセキュリティ - ホストマシン(VM) - コンテナランタイム( Docker) - オーケストレーションツール( k8s) - シークレット管理 - ネットワークセキュリティ - Network Policy - ビルド・デプロイ時のセキュリティ - イメージ署名・検証 - パイプラインの権限制御 - Admission Control - ランタイム(実行時)セキュリティ - seccomp, AppArmor, SELinux - 振る舞い検知 - 監視とロギング - バックアップ

Slide 34

Slide 34 text

コンテナ × セキュリティ ✅ コンテナの要素技術と、セキュリティの観点を組み合わせたもの ✅ コンテナ固有のセキュリティ ➢ コンテナ - ホスト間の分離 ➢ コンテナイメージのセキュリティ ➢ それ以外は従来通り ✅ セキュリティの観点は従来通り ➢ 多層防御、最小権限などのセキュリティの原則に従う ➢ リスクを評価し、優先度をつけて対策を行う ➢ コンテナの仕組みに当てはめるにはコンテナの理解が不可欠

Slide 35

Slide 35 text

コンテナセキュリティは難しい? ✅ 考えるべき項目が多い ✅ 従来のサーバー環境とコンテナ環境の違いが大きい ➢ コンテナ固有のセキュリティは実はそこまで多くない ➢ それ以外は従来の対策と同じ ✅ どこから or どこまで取り組むべきか分からない ➢ セキュリティの観点から費用対効果を算出し、優先順位を付けて取り組む ✅ そもそもコンテナが難しい ➢ コンテナ利用者の全員が理解する必要はない ➢ まずはベストプラクティスや基本的なセキュリティ対策を

Slide 36

Slide 36 text

AWS利用時のコンテナセキュリティ 03

Slide 37

Slide 37 text

コンテナセキュリティ × AWS ✅ コンテナ - ホスト間の分離 ➢ サーバーレス環境 ➢ EC2 (Amazon Linux) ➢ EC2 (Bottlerocket OS) ✅ コンテナイメージのセキュリティ ➢ ECR スキャン (Inspector) ✅ その他 ➢ GuardDuty (EKS Protection, Network Event Detection) ➢ Security Hub, Inspector, WAF, Shield

Slide 38

Slide 38 text

コンテナセキュリティ × AWS ✅ コンテナ - ホスト間の分離 ➢ サーバーレス環境 (Lambda, Fargate) ➢ EC2 (Amazon Linux) ➢ EC2 (Bottlerocket OS) ✅ コンテナイメージのセキュリティ ➢ ECR スキャン ✅ その他 ➢ GuardDuty (EKS Protection, Network Event Detection) ➢ Security Hub, Inspector, WAF, Shield

Slide 39

Slide 39 text

コンテナ - ホスト間の分離(サーバレス) ✅ コンテナ - ホスト間の分離は利用者の責任ではない ➢ 裏側は Firecracker など (https://firecracker-microvm.github.io/) https://pages.awscloud.com/rs/112-TZM-766/images/202106_AWS_Black_Belt_Containers130-Security.pdf https://d1.awsstatic.com/serverless-jp/Security%20Overview%20of%20AWS%20Lambda_JP.pdf

Slide 40

Slide 40 text

コンテナ - ホスト間の分離(Bottlerocket) ✅ コンテナ - ホスト間の分離レベルは高い ➢ 読み取り専用の root ファイルシステムとdm-verityによる整合性チェック ➢ /etc, /run などシステムディレクトリの tmpfs 利用 ➢ Shellやインタプリタが存在しない ➢ SELinuxの強制適用、Kernel Lockdown (LSM) の利用 ✅ 使い方によっては分離レベルが下がることに ➢ 特権コンテナの利用 ➢ SELinux の特権ラベルを付与、Kernel Lockdown の無効化 ➢ システムマウントへのアクセス許可、namespace 共有など https://github.com/bottlerocket-os/bottlerocket/blob/develop/SECURITY_FEATURES.md https://aws.amazon.com/jp/blogs/news/security-features-of-bottlerocket-an-open-source-linux-based-operating-system/

Slide 41

Slide 41 text

ありがとうございました!