Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

「JAWS-UG コンテナ支部 × JAWS-UG 千葉支部 #1 今知りたいコンテナセキュリティ」の資料です。
https://jawsug-container.connpass.com/event/295110/

Kyohei Mizumoto

October 16, 2023
Tweet

More Decks by Kyohei Mizumoto

Other Decks in Technology

Transcript

  1. 株式会社スリーシェイク Sreake事業部 セキュリティエンジニア - AWS, GCP, kubernetes 環境のセキュリティ強化 - SOC/CSIRT運用と改善

    - 脅威情報の収集、サイバー演習 etc… その他 - 3-shake SRE Tech Talk 運営 - 「コンテナセキュリティ」書籍監訳 水元 恭平 @kyohmizu whoami
  2. 目次 ✅ About 3-shake ✅ 「コンテナセキュリティ」書籍紹介 ✅ コンテナ × セキュリティ

    ➢ コンテナの要素技術からコンテナセキュリティを考える ➢ セキュリティの観点からコンテナセキュリティを考える ✅ AWS利用時のコンテナセキュリティ
  3. 「コンテナセキュリティ」 ✅ O'Reilly Media 刊行「Container Security」の監訳書 ✅ コンテナを構成するLinuxの要素技術が中心 ✅ Docker/Kubernetesに関するセキュリティの観点を知る

    ➢ 詳細な設定、ベストプラクティスは取り扱わない ✅ 原書の翻訳 + 監修 ➢ 原書刊行時点(2020年4月)からの情報アップデート ➢ 関連する技術情報のコラム追加 https://book.impress.co.jp/books/1122101051 コンテナ化されたアプリケーションを保護する要素技術
  4. 目次 1. コンテナセキュリティの脅威 2. Linuxシステムコール、パーミッション、 capability 3. コントロールグループ 4. コンテナの分離

    5. 仮想マシン 6. コンテナイメージ 7. イメージに含まれるソフトウェアの脆弱性 8. コンテナ分離の強化 9. コンテナエスケープ 10. コンテナネットワークセキュリティ 11. TLSによるコンポーネントの安全な接続 12. コンテナへのシークレットの受け渡し 13. コンテナのランタイム保護 14. コンテナとOWASPトップ10 付録A:セキュリティチェックリスト
  5. 目次 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
  6. コンテナセキュリティ is… - Dockerfileのセキュリティ - ベストプラクティスに従う(非 rootユーザの 利用、機微情報を含めない等) - コンテナイメージのセキュリティ

    - 脆弱性スキャン - イメージレジストリのセキュリティ - 実行基盤のセキュリティ - ホストマシン(VM) - コンテナランタイム( Docker) - オーケストレーションツール( k8s) - シークレット管理 - ネットワークセキュリティ - Network Policy - ビルド・デプロイ時のセキュリティ - イメージ署名・検証 - パイプラインの権限制御 - Admission Control - ランタイム(実行時)セキュリティ - seccomp, AppArmor, SELinux - 振る舞い検知 - 監視とロギング - バックアップ
  7. コンテナセキュリティは難しい? ✅ 考えるべき項目が多い ✅ 従来のサーバー環境とコンテナ環境の違いが大きい ✅ どこから or どこまで取り組むべきか分からない ✅

    そもそもコンテナが難しい 「コンテナ」と「セキュリティ」に分解し、 2つの観点からコンテナセキュリティを考える
  8. コンテナとは結局何か ✅ Linuxカーネルの機能を使用し、適度に隔離されたプロセス ➢ chroot (pivot_root) による root ディレクトリの分離 ➢

    cgroup によるリソース使用量の制限 ➢ namespace によるアクセス範囲の制限 ➢ capability による権限の制限 ✅ コンテナ実行に必要なものを一纏めにしたのがコンテナイメージ ➢ root ファイルシステム ➢ アプリの実行ファイルと依存ファイル群 ➢ 実行ユーザ、環境変数などの設定情報 ✅ 上記を実現、補助するための各種ツールが存在する
  9. 従来のサーバー環境との違い ✅ ホスト上で動作するプロセスである ➢ コンテナ - ホスト間の分離は通常それほど強固でない ➢ コンテナがホストに影響を及ぼさないために適切な設定が必要 ➢

    コンテナ内で見た場合、制限の強いVM上で動作するのと変わらない ✅ コンテナイメージで配布される ➢ イメージを構成するDockerfile ➢ イメージを保管するレジストリ ➢ イメージのビルド・デプロイの仕組み ✅ 実行基盤としてのコンテナランタイムとKubernetes
  10. コンテナ - ホスト間の分離の強化 ✅ コンテナプロセスの実行ユーザ指定 ➢ Dockerfileでのユーザ指定や、rootless コンテナの利用 ✅ 特権コンテナの禁止

    ➢ capability, seccomp, SELinux, /proc のマウントなどに影響 ✅ capability の最小化 ✅ seccomp によるシステムコールの制限 ✅ AppArmor, SELinux によるファイル・プロセスへのアクセス制御 ✅ コンテナのサンドボックス化 ➢ gVisor, Kata Containers, Firecracker など
  11. コンテナイメージの構成要素 ✅ Dockerfile によるIaC化 ➢ アプリ開発者の管理になるケースが多い ✅ イメージのレイヤ構造 ➢ Dockerfile

    の各段階での状態をすべて保持 ➢ 変更前、削除前のファイルにもアクセス可能 ✅ イメージタグとダイジェストによる特定 ✅ イメージレジストリへの格納 ✅ ビルド環境と実行環境 ➢ コンテナランタイムとオーケストレーションツール
  12. コンテナ固有のセキュリティ - Dockerfileのセキュリティ - ベストプラクティスに従う(非 rootユーザの 利用、機微情報を含めない等) - コンテナイメージのセキュリティ -

    脆弱性スキャン - イメージレジストリのセキュリティ - 実行基盤のセキュリティ - ホストマシン(VM) - コンテナランタイム( Docker) - オーケストレーションツール( k8s) - シークレット管理 - ネットワークセキュリティ - Network Policy - ビルド・デプロイ時のセキュリティ - イメージ署名・検証 - パイプラインの権限制御 - Admission Control - ランタイム(実行時)セキュリティ - seccomp, AppArmor, SELinux - 振る舞い検知 - 監視とロギング - バックアップ コンテナ - ホスト間の分離 コンテナイメージのセキュリティ
  13. リスクと脅威、緩和策 ✅ リスク ➢ 潜在的な問題と、それが発生した場合の影響 ✅ 脅威 ➢ リスクが発生する可能性 ✅

    緩和策 ➢ 脅威に対する対策 ➢ 脅威を防ぐ or 脅威が顕在化する可能性を減らすための行動 「コンテナセキュリティ」 P.21
  14. 脅威モデルにおけるアクター ✅ 外部攻撃者 ➢ 外部から環境にアクセスしようとしてくる攻撃者 ✅ 内部攻撃者 ➢ 環境(の一部)にアクセスすることに成功した攻撃者 ✅

    内部関係者 ➢ 環境にアクセスする権限を持つ開発者や管理者など ✅ 不注意な関係者 ➢ 不注意などで問題を引き起こす可能性のある社内の関係者 ✅ アプリケーションプロセス 「コンテナセキュリティ」 P.22
  15. セキュリティの原則 ✅ 最小権限 ➢ 処理を実行するために必要な最小限のアクセスに制限する ✅ 攻撃対象領域(Attack Surface)の縮小 ➢ システムの複雑さを解消することで攻撃の可能性を減らす

    ✅ 影響範囲の制限 ➢ 攻撃が成功した場合の影響範囲を小さくする ✅ 多層防御 ➢ 複数のレイヤー(層)でシステムを保護する 「コンテナセキュリティ」 P.32 - 33
  16. 例)網羅的なセキュリティ対策の検討 侵入対策(攻撃対象領域の縮小、他) 侵入検知 侵入後対策(最小権限、影響範囲の制 限、他) Dockerfile ベースイメージのスリム化 機微情報を含めない 非 root

    ユーザの使用 コンテナイメージ 脆弱性、マルウェアスキャン レジストリのアクセス制御 操作権限を最小化 実行基盤(VM、コンテナランタイム、 Kubernetes) 脆弱性スキャン パッチ適用 振る舞い検知 監査ログの監視 seccomp, AppArmor, SELinux rootless コンテナ サンドボックス化 シークレット管理 保管場所のアクセス制御 監査ログの監視 操作権限を最小化 ネットワーク Network Policy WAF ネットワーク監視 Network Policy ビルド・デプロイ イメージ署名・検証 Admission Control パイプラインの実行権限を最小化 ランタイム(実行時) 振る舞い検知 操作のブロック、コンテナ自動削除
  17. コンテナセキュリティ is… - Dockerfileのセキュリティ - ベストプラクティスに従う(非 rootユーザの 利用、機微情報を含めない等) - コンテナイメージのセキュリティ

    - 脆弱性スキャン - イメージレジストリのセキュリティ - 実行基盤のセキュリティ - ホストマシン(VM) - コンテナランタイム( Docker) - オーケストレーションツール( k8s) - シークレット管理 - ネットワークセキュリティ - Network Policy - ビルド・デプロイ時のセキュリティ - イメージ署名・検証 - パイプラインの権限制御 - Admission Control - ランタイム(実行時)セキュリティ - seccomp, AppArmor, SELinux - 振る舞い検知 - 監視とロギング - バックアップ
  18. コンテナ × セキュリティ ✅ コンテナの要素技術と、セキュリティの観点を組み合わせたもの ✅ コンテナ固有のセキュリティ ➢ コンテナ -

    ホスト間の分離 ➢ コンテナイメージのセキュリティ ➢ それ以外は従来通り ✅ セキュリティの観点は従来通り ➢ 多層防御、最小権限などのセキュリティの原則に従う ➢ リスクを評価し、優先度をつけて対策を行う ➢ コンテナの仕組みに当てはめるにはコンテナの理解が不可欠
  19. コンテナセキュリティは難しい? ✅ 考えるべき項目が多い ✅ 従来のサーバー環境とコンテナ環境の違いが大きい ➢ コンテナ固有のセキュリティは実はそこまで多くない ➢ それ以外は従来の対策と同じ ✅

    どこから or どこまで取り組むべきか分からない ➢ セキュリティの観点から費用対効果を算出し、優先順位を付けて取り組む ✅ そもそもコンテナが難しい ➢ コンテナ利用者の全員が理解する必要はない ➢ まずはベストプラクティスや基本的なセキュリティ対策を
  20. コンテナセキュリティ × AWS ✅ コンテナ - ホスト間の分離 ➢ サーバーレス環境 ➢

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

    Fargate) ➢ EC2 (Amazon Linux) ➢ EC2 (Bottlerocket OS) ✅ コンテナイメージのセキュリティ ➢ ECR スキャン ✅ その他 ➢ GuardDuty (EKS Protection, Network Event Detection) ➢ Security Hub, Inspector, WAF, Shield
  22. コンテナ - ホスト間の分離(サーバレス) ✅ コンテナ - ホスト間の分離は利用者の責任ではない ➢ 裏側は 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
  23. コンテナ - ホスト間の分離(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/