📗
owasp-kubernetes-top-ten-ja
  • OWASP Kubernetes Top Ten ja
  • OWASP Kubernetes Top 10 日本語版
    • 概要
    • リーダー
    • OWASP Kubernetes Top 10
      • K00:2022 Kubernetes Security Top Ten へようこそ
      • K01:2022 安全でないワークロード設定
      • K02:2022 サプライチェーンの脆弱性
      • K03:2022 過度に許可を与える RBAC 設定
      • K04:2022 一元化されたポリシー施行の欠如
      • K05:2022 不十分なログ記録と監視
      • K06:2022 認証メカニズムの不備
      • K07:2022 ネットワークセグメンテーションコントロールの欠落
      • K08:2022 機密管理の不備
      • K09:2022 クラスタコンポーネントの設定ミス
      • K10:2022 古くて脆弱な Kubernetes コンポーネント
      • その他考慮すべきリスク
Powered by GitBook
On this page
  • 概要
  • 説明
  • 防止方法
  • 攻撃シナリオの例
  • 参考資料
  1. OWASP Kubernetes Top 10 日本語版
  2. OWASP Kubernetes Top 10

K01:2022 安全でないワークロード設定

PreviousK00:2022 Kubernetes Security Top Ten へようこそNextK02:2022 サプライチェーンの脆弱性

Last updated 4 months ago

概要

Kubernetes におけるワークロードのセキュリティコンテキストは高度に設定できてしまうため、深刻なセキュリティの設定ミスが組織のワークロードやクラスタ全体に広がる可能性があります。 Redhat が実施した によると、回答者の 53% 近くが過去 12 か月間に Kubernetes 環境での設定ミスのインシデントを経験しています。

説明

Kubernetes マニフェストには特定のワークロードの信頼性、セキュリティ、スケーラビリティに影響を与える可能性のあるさまざまな設定が多く含まれています。 これらの設定は継続的に監査し修正する必要があります。影響の大きいマニフェスト設定の例をいくつか以下に示します。

アプリケーションプロセスは root として実行すべきではない: コンテナ内のプロセスを root ユーザーで実行することは多くのクラスタに共通する設定ミスです。 ワークロードによっては root が絶対に必要となることもありますが、可能であれば避けるべきです。コンテナが侵害された場合、攻撃者はルートレベルの権限を持ち、悪意のあるプロセスを開始するなど、システム上の他のユーザーが許可されていないアクションが可能になります。

apiVersion: v1  
kind: Pod  
metadata:  
  name: root-user
spec:  
  containers:
  ...
  securityContext:  
    #root user:
    runAsUser: 0
    #non-root user:
    runAsUser: 5554

読み取り専用ファイルシステムを使用すべきである: Kubernetes ノード上で侵害されたコンテナの影響を制限するために、可能な限り読み取り専用のファイルシステムを利用することをお勧めします。 これにより悪意のあるプロセスやアプリケーションがホストシステムに書き戻すことを防ぎます。読み取り専用のファイルシステムはコンテナのブレイクアウトを防ぐための重要なコンポーネントです。

apiVersion: v1  
kind: Pod  
metadata:  
  name: read-only-fs
spec:  
  containers:  
  ...
  securityContext:  
    #read-only fs explicitly defined
    readOnlyRootFilesystem: true

特権コンテナを禁止すべきである: Kubernetes 内でコンテナを privileged に設定すると、コンテナがホストの他のリソースやカーネル機能にアクセスできます。 root で実行しているワークロードを特権コンテナと組み合わせると、ユーザーがホストへ完全にアクセスできるため壊滅的となる可能性があります。 ただし、非 root ユーザーで実行している場合、これは制限されます。特権コンテナはビルトインのコンテナ分離メカニズムの多くを完全に取り除いてしまうため危険です。

apiVersion: v1  
kind: Pod  
metadata:  
  name: privileged-pod
spec:  
  containers:  
  ...
  securityContext:  
    #priviliged 
    privileged: true
    #non-privileged 
    privileged: false

リソース制約を強制すべきである: デフォルトでは、コンテナは Kubernetes クラスタ上の無制限のコンピュータリソースで実行します。 CPU リクエストと制限は Pod 内の個々のコンテナに帰属できます。 コンテナは CPU 制限を指定しない場合、コンテナが消費できる CPU リソースに上限がないことを意味します。 この柔軟性は好都合なこともありますが、コンテナがホスティングノード上で利用可能なすべての CPU リソースを利用する可能性があるため、クリプトマイニングなどの潜在的なリソース乱用のリスクももたらします。

apiVersion: v1
kind: Pod
metadata:
  name: resource-limit-pod
spec:
  containers:
  ...
    resources:
      limits:
        cpu: "0.5" # 0.5 CPU cores
        memory: "512Mi" # 512 Megabytes of memory
      requests:
        cpu: "0.2" # 0.2 CPU cores
        memory: "256Mi" # 256 Megabytes of memory

防止方法

大規模で分散した Kubernetes 環境全体でセキュアな設定を維持することは、困難な作業となる可能性があります。 多くのセキュリティ設定はマニフェスト自体の securityContext に設定されることが多いのですが、他の場所で検出される設定ミスも多くあります。 設定ミスを防ぐには、まず実行時とコード内の両方で検出しなければなりません。 アプリケーションを以下のように適用できます。

  1. 非 root ユーザーで実行する

  2. 非特権モードで実行する

  3. AllowPrivilegeEscalation: False を設定して、子プロセスが親プロセスより高い権限を取得できないようにする

  4. LimitRange を設定して、ネームスペース内の該当するオブジェクトの種類ごとにリソース割り当てを制限する

Open Policy Agent などのツールは一般的な設定ミスを検出するポリシーエンジンとして使用できます。 また Kubernetes 要の CIS ベンチマークも設定ミスを発見するための出発点として使用できます。

攻撃シナリオの例

TODO

参考資料

Insecure Workload Configuration - Mitigations

CIS Benchmarks for Kubernetes:

Open Policy Agent:

Pod Security Standards:

https://www.cisecurity.org/benchmark/kubernetes
https://github.com/open-policy-agent/opa
https://kubernetes.io/docs/concepts/security/pod-security-standards/
Kubernetes adoption, security, and market trends report 2022
Insecure Workload Configuration - Illustration