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

CTFのためのKubernetes入門

 CTFのためのKubernetes入門

イベント登壇資料です。2025/09/23 魔女のお茶会 #8
https://witchskeyparty.connpass.com/event/363928/

Avatar for Kyohei Mizumoto

Kyohei Mizumoto

September 23, 2025
Tweet

More Decks by Kyohei Mizumoto

Other Decks in Technology

Transcript

  1. whoami Security Engineer at 3-shake inc. • Container/Kubernetes Security •

    AWS/Google Cloud Security • Security Operations & Technical Support for Blue Team • Cloud Native Security Assessment Others: • 3-shake SRE Tech Talk イベント運営 • 「コンテナセキュリティ」書籍監訳 Kyohei Mizumoto
  2. Kubernetesの特徴 ① インフラリソースの抽象化 ネットワークやストレージなど、すべてのインフラリソースを Kubernetes 上のリソースとして管理しま す。Kubernetes は複数のVMを束ねて一つのクラスタを構成しますが、それぞれの VMの状態(CPU やメモリ使用率など)を気にする必要はなく、ワークロードに適切なインフラリソースを割り当てることが

    できます。 インフラのコード化 (Infrastructure as Code) Kubernetes はインフラを宣言的なコード(マニフェストファイル)として管理します。これにより、インフラ の構築や変更をコードとしてバージョン管理し、自動化することができます。マニフェストファイルにはリ ソースのあるべき姿( Desired State)を記述します。 https://github.com/kyohmizu/seccamp2024-B6/tree/master/ch01_k8s_intro#kubernetes-%E3%81%AE%E7%89%B9%E5%BE%B4
  3. Kubernetesの構成 コントロールプレーン • kube-apiserver ◦ Kubernetes APIを提供し、すべてのコンポーネントと通信する ◦ Kubernetes のフロントエンドとして機能し、すべての

    REST 操作を処理 • etcd ◦ クラスタのすべてのデータを保存するキー・バリュー・ストア • kube-scheduler ◦ 新しい Pod のスケジューリングを行い、最適なノードに割り当てます • kube-controller-manager ◦ クラスタ全体の状態を管理するコントローラー群 https://kubernetes.io/ja/docs/concepts/overview/components/
  4. Kubernetesの構成 ワーカーノード • kubelet ◦ 各ノード上で実行され、 Podのライフサイクルを管理 ◦ APIサーバーから Pod

    定義を受け取り、コンテナランタイムにコンテナ作成を指示 • kube-proxy ◦ 各ノード上で実行され、ネットワーク通信を管理 ◦ クラスタ内のサービス間通信を実現し、ネットワークルールを適用 • コンテナランタイム ◦ 実際にコンテナを実行するソフトウェア(例: Docker、containerd) ◦ コンテナの実行、停止、ネットワーク設定などを実行 https://kubernetes.io/ja/docs/concepts/overview/components/
  5. マニフェストファイル Kubernetesリソースを記述するYAML形式のファイル リソース例: • Pod ◦ デプロイの最小単位 • ReplicaSet ◦

    指定された数の Pod を常に稼働させる • Deployment ◦ アプリのデプロイと管理を簡素化 https://kubernetes.io/docs/concepts/overview/working-with-objects/ apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
  6. その他の主要なリソース(一部) • Namespace ◦ クラスタ内でリソース群を分離する仕組みを提供 ◦ Namespaceに所属するリソースとしないリソースがある • Service ◦

    アプリケーションをクラスタ内外に公開するネットワーク定義 ◦ サービスディスカバリーや負荷分散の機能を持つ • ConfigMaps/Secrets ◦ アプリケーションの設定ファイルや認証情報などを登録 ◦ Secrets については後述 https://kubernetes.io/ja/docs/concepts/overview/components/
  7. 検証環境の構築 • ローカル検証環境 ◦ https://github.com/kubernetes/minikube ◦ https://github.com/kubernetes-sigs/kind ◦ https://github.com/canonical/microk8s •

    クラウド利用 ◦ 各クラウドサービスのマネージド Kubernetes(GKE, EKS, AKS…) ◦ EC2 上にkindクラスタを構築することも可能 • SaaSのPlaygroundサービス利用 ◦ https://killercoda.com ◦ https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all
  8. KubernetesとCTF • 問題パターンの豊富さ ◦ 様々な箇所にフラグを仕込むことが可能 ▪ リソースのメタデータや Secrets、Persistent Volume、ログなど ◦

    機能が複雑なため、設定ミスを仕込みやすい • 環境構築 ◦ 回復性、再現性、スケール性に優れた環境 ▪ できれば1人1クラスタが望ましい ◦ IaCのソースコードを提供することで、ホワイトボックスでの実施も可能 • エコシステムによる拡張性 ◦ OSSを導入することで発展的な問題を作成
  9. RBAC(Role-Based Access Control) Kubernetes の認可機能 • Role/ClusterRole ◦ Kubernetes 上での実行権限を定義

    ◦ システムコンポーネントやユーザー向けのデフォルトロールが複数存在 ▪ cluster-admin, admin ロールによる特権アクセス • RoleBinding/ClusterRoleBinding ◦ ロールとユーザー/グループ/サービスアカウントを紐付け • Users/Groups ◦ 認証済みユーザーとサービスアカウントは system:authenticated グループ ◦ 匿名ユーザー(system:anonymous)とグループ(system:unauthenticated) https://kubernetes.io/docs/reference/access-authn-authz/rbac/
  10. Service Accounts ワークロード(Pod)が使用するアイデンティティ • Role/ClusterRole による権限付与 ◦ Kubernetes API へのリクエストが必要なワークロードに紐付け

    ◦ Namespace ごとにサービスアカウントの作成が必要 • デフォルトサービスアカウント ◦ 各 Namespace に存在し、サービスアカウントの指定がない Podに利用される ◦ 権限分離の観点から利用は推奨されない • 認証トークン ◦ Secretリソースとして作成され、 Podにマウントされる ◦ automountServiceAccountToken: false で自動マウントを防止 https://kubernetes.io/docs/concepts/security/service-accounts/
  11. Secrets Management • Kubernetes Secrets ◦ Base64エンコードされたデータ ◦ imagePullSecrets、ServiceAccountトークンなどに利用 ◦

    環境変数やボリュームマウントを通して Podに提供 • OSSによるシークレットの暗号化 ◦ Sealed Secrets ▪ 軽量かつ外部に依存しないツール ◦ Vault + Secrets Operator ▪ HashiCorp Vault でシークレットを暗号化して保存 ▪ Kubernetesとの同期のため、 Secrets Operator を利用 • External Secrets Operator • Secrets Store CSI Driver https://kubernetes.io/docs/concepts/configuration/secret/
  12. Network Policies ワークロード(Pod)の通信制御 • L3/L4 のネットワーク制御 ◦ Pod, Namespace およびIPブロックを指定した

    Ingress/Egress 通信制御 ◦ Service 指定は不可 • Cilium CNI による拡張ネットワーク制御( CiliumNetworkPolicy) ◦ L3/L4 に加え、L7のネットワーク制御を実現 ◦ https://docs.cilium.io/en/stable/security/policy/index.html • サービスメッシュによるネットワーク制御( Istio AuthorizationPolicy) ◦ L3/L4/L7のネットワーク制御、 mTLS、JWT検証など ◦ https://istio.io/latest/docs/reference/config/security/authorization-policy/ https://kubernetes.io/docs/concepts/services-networking/network-policies/
  13. Admission Control Kubernetes API リクエストをインターセプト • Validating/Mutating ◦ APIリクエストを検証し、ポリシーに反する場合は警告または拒否する機能 ◦

    リクエスト内容の適用前に、設定変更やリソースの注入を行う機能 • Admission Webhook ◦ 検証/変更処理を外部のWebhookサーバーにリクエスト ◦ OSSによるポリシー検証や、サイドカーの注入などに利用 • 組み込み機能 ◦ Pod Security Admission: 定義されたセキュリティ標準への準拠を検証 ◦ Validating Admission Policy: CELで記述するポリシー制御 https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/
  14. Runtime Security 実行されるワークロードのセキュリティ対策 • Security Context ◦ Pod/コンテナの権限やアクセス制御を設定 ◦ UID/GID,

    LSM, Capabilities, privileged, readOnlyRootFilesystem など • Process Monitoring ◦ コンテナ内の実行プロセスを監視し、アラートやプロセス Killを行う ◦ Falco, Tetragon, Tracee など • Sandboxed Containers ◦ 分離レベルの高いコンテナランタイム( OCI Runtime)を利用 ◦ gVisor, Firecracker, Kata Containers など https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
  15. 過去に開催されたKubernetes CTF • DefCon 33 Kubernetes CTF • KubeCon +

    CloudNativeCon Europe 2025 CTF • KubeCon + CloudNativeCon North America 2024 CTF • KubeCon + CloudNativeCon Europe 2024 CTF • K8s LAN Party (by Wiz) • KubeCon + CloudNativeCon North America 2023 CTF • EKS Cluster Games (by Wiz) • Punk Security DevSecOps Birthday CTF 2023 https://www.skybound.link/
  16. デモ:Kubernetesクラスタの権限昇格 アプリケーションの脆弱性を利用して Podに侵入し、クラスタの管理者権限を取得してみま す。 (セキュリティ・キャンプ2025(2024) 全国大会の講義内容と同じです) • EC2 上に構築された Kind

    クラスタで、Control Plane 1台、Worker Nodes 2台の構成 • Worker Node で動作するアプリケーション Pod(backend)に侵入 • Control Plane のノード上に配置されたクラスタ管理者の認証情報を取得 https://github.com/kyohmizu/seccamp2024-B6/blob/master/ch03_attacking_k8s/attack_scenario.md
  17. CREDITS: This presentation template was created by Slidesgo, and includes

    icons by Flaticon, and infographics & images by Freepik Thanks! Do you have any questions? https://twitter.com/kyohmizu