追加の Linux capability を持つコンテナー

追加する Linux capability を、アプリケーションに必要な操作に限定してください。

説明

NET_ADMIN や SYS_TIME などの Linux capability は、ネットワーク設定やシステム時刻の変更など、特定の特権操作を許可します。不要な capability を追加すると、アプリケーションを侵害した攻撃者が実行できる操作が増えます。

影響範囲は capability、名前空間、ホストアクセス設定によって異なります。既定の capability もすべてのアプリケーションに必要とは限らないため、併せて確認してください。

想定される影響

侵害されたプロセスが不要なネットワーク・システム操作を行ったり、他の隔離上の弱点を悪用したりするおそれがあります。一方、検証せずに必要な権限を削除すると、機能が停止する場合もあります。

対処方法

  • securityContext.capabilities.add から不要な capability を削除してください。
  • 可能な場合は drop: [ALL] を使い、必要な capability だけを追加してください。例外の目的と範囲を明確にしてください。
  • 非 root 実行と権限昇格の防止も設定し、必要な機能が動作することを検証してください。

例

追加 capability の有無を比較する Pod の例です。実際の対象 Pod に変更を適用し、イメージに必要な権限を確認してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: app
      image: images.my-company.example/app:v4
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          add: ["NET_ADMIN", "SYS_TIME"]

NET_ADMIN と SYS_TIME を追加しています。allowPrivilegeEscalation: false は、すでに付与した capability を削除しません。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
    - name: app
      image: images.my-company.example/app:v4
      securityContext:
        allowPrivilegeEscalation: false

追加 capability を指定していません。ランタイムの既定の capability をすべて削除する設定ではないため、drop も別途確認してください。

参考資料