mcpField
D
detecting-container-drift-at-runtime

detecting-container-drift-at-runtime

github.com/mukul975セキュリティ35.2k87 回インストール8 週間前に更新
リポジトリ

detecting-container-drift-at-runtime について

コンテナイメージからの実行時の逸脱を検出し、調査と対応を進めるためのセキュリティスキルです。Falcoのルール例、Kubernetesでの制御、イメージダイジェストの確認を扱います。

主な機能

  1. 01バイナリ、ファイル、設定、パッケージ、ネットワークの逸脱分類
  2. 02実行中のファイルシステムと元イメージの比較
  3. 03動作とイメージダイジェストの監視
  4. 04Falco検出ルールの例
  5. 05隔離と排除の対応手順

活用シーン

  1. 01コンテナ侵害の疑いの調査
  2. 02実行時逸脱の検出ルール作成
  3. 03コンテナ変更の監視範囲の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill detecting-container-drift-at-runtime

インストール後、Claude Code で/detecting-container-drift-at-runtimeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

実行時のコンテナドリフトの検出

概要

コンテナドリフトとは、許可されていないファイル変更、予期しないバイナリの実行、設定の変更、パッケージのインストールによって、実行中のコンテナが元のイメージの状態から逸脱することです。コンテナは不変のインフラストラクチャーとして扱う必要があるため、ドリフトはすべて侵害の可能性を示す兆候です。検出手法では、DIE(検出、隔離、排除)モデルを活用します。不変であるべきワークロードは実行時に変更されないため、観測された変更は悪意のある活動を示す証拠となる可能性があります。

使用するタイミング

  • 実行時のコンテナドリフト検出が必要なセキュリティインシデントを調査するとき
  • この分野の検出ルールや脅威ハンティングクエリを作成するとき
  • SOC アナリストが、この種の分析のための体系化された手順を必要とするとき
  • 関連する攻撃手法に対するセキュリティ監視のカバレッジを検証するとき

前提条件

  • ランタイムセキュリティツールを備えた Kubernetes クラスター v1.24+
  • 実行時のドリフト検出に使用する Falco または Sysdig
  • イメージマニフェストを利用できるコンテナイメージレジストリ
  • Linux のファイルシステムレイヤーと OverlayFS に関する知識

主な概念

コンテナドリフトの種類
  1. バイナリドリフト:元のイメージに存在しないバイナリの実行(ダウンロードされたマルウェア、コンパイルされたツールなど)
  2. ファイルドリフト:コンテナのファイルシステム内でのファイルの作成、変更、削除
  3. 設定ドリフト:環境変数、マウントされたシークレット、ランタイムパラメーターの変更
  4. パッケージドリフト:実行時に apt、yum、pip、npm を介して新しいパッケージをインストールすること
  5. ネットワークドリフト:ワークロードで想定されていない新しい待ち受けポートやアウトバウンド接続
検出方法

イメージベースの比較:実行中のコンテナのファイルシステムをソースイメージと比較し、追加、変更、削除されたファイルを特定します。

振る舞いの監視:eBPF またはカーネルレベルの監視を使用して、想定される振る舞いから逸脱するプロセス実行、ファイルアクセス、ネットワークアクティビティを検出します。

ダイジェストの検証:実行中のコンテナイメージのダイジェストが、承認済みのデプロイマニフェストと一致することを継続的に検証します。

Falco による実装

新しいバイナリの実行を検出する
- rule: Drift Detected (Container Image Modified Binary)
  desc: Detect execution of a binary not present in the original container image
  condition: >
    spawned_process and
    container and
    not proc.pname in (container_entrypoint) and
    proc.is_exe_upper_layer = true
  output: >
    Drift detected: new binary executed in container
    (user=%user.name command=%proc.cmdline container=%container.name
     image=%container.image.repository:%container.image.tag
     exe_path=%proc.exepath)
  priority: WARNING
  tags: [container, drift]

- rule: Container Shell Spawned
  desc: Detect interactive shell in a container that should be immutable
  condition: >
    spawned_process and
    container and
    proc.name in (bash, sh, dash, zsh, csh, ksh) and
    not proc.pname in (container_entrypoint)
  output: >
    Shell spawned in container (user=%user.name shell=%proc.name
     container=%container.name image=%container.image.repository)
  priority: WARNING
  tags: [container, drift, shell]
パッケージマネージャーの使用を検出する
- rule: Package Manager Execution in Container
  desc: Detect use of package managers indicating drift
  condition: >
    spawned_process and
    container and
    proc.name in (apt, apt-get, yum, dnf, apk, pip, pip3, npm, gem, cargo)
  output: >
    Package manager executed in container (user=%user.name
     command=%proc.cmdline container=%container.name
     image=%container.image.repository)
  priority: ERROR
  tags: [container, drift, package-manager]
ファイルシステムの変更を検出する
- rule: Container File System Write
  desc: Detect writes to container upper layer filesystem
  condition: >
    open_write and
    container and
    fd.typechar = 'f' and
    not fd.name startswith /tmp and
    not fd.name startswith /var/log and
    not fd.name startswith /proc
  output: >
    File write in container (user=%user.name file=%fd.name
     container=%container.name)
  priority: NOTICE
  tags: [container, drift, filesystem]

Kubernetes による適用

ルートファイルシステムを読み取り専用にする

コンテナのファイルシステムを不変にして、ドリフトを防止します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: immutable-app
spec:
  template:
    spec:
      containers:
        - name: app
          image: app:v1.0@sha256:abc123...
          securityContext:
            readOnlyRootFilesystem: true
            allowPrivilegeEscalation: false
            runAsNonRoot: true
          volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: cache
              mountPath: /var/cache
      volumes:
        - name: tmp
          emptyDir:
            sizeLimit: 100Mi
        - name: cache
          emptyDir:
            sizeLimit: 50Mi
Pod Security Standards の適用
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted

イメージダイジェストの検証

継続的なダイジェストの監視
#!/bin/bash
# Compare running container digests against approved manifest

NAMESPACE="production"

kubectl get pods -n "$NAMESPACE" -o json | jq -r '
  .items[] |
  .spec.containers[] |
  "\(.image) \(.imageID)"
' | while read IMAGE IMAGE_ID; do
  APPROVED_DIGEST=$(kubectl get deploy -n "$NAMESPACE" -o json | \
    jq -r ".items[].spec.template.spec.containers[] | select(.image==\"$IMAGE\") | .image")

  if [[ "$IMAGE" != *"@sha256:"* ]]; then
    echo "[WARN] Container using mutable tag: $IMAGE"
  fi
done

Microsoft Defender for Containers との統合

Azure Kubernetes 環境では、Microsoft Defender に組み込みのバイナリドリフト検出機能が用意されています。

{
  "alertType": "K8S.NODE_ImageBinaryDrift",
  "severity": "Medium",
  "description": "Binary executed that was not part of the original container image",
  "remediationSteps": [
    "Investigate the binary origin and purpose",
    "Check if the container was compromised",
    "Rebuild the container from a clean image",
    "Enable readOnlyRootFilesystem"
  ]
}

ドリフト対応プレイブック

  1. 検出:ドリフトイベントに対するアラートが発生します(Falco、Defender、Sysdig)
  2. 検証:ドリフトが承認済みのプロセス(init コンテナ、設定の再読み込みなど)によるものではないことを確認します
  3. 隔離:影響を受けた Pod に deny-all NetworkPolicy を適用します
  4. 調査:コンテナのファイルシステム差分とプロセス一覧を取得します
  5. 排除:ドリフトした Pod を削除します(ReplicaSet がクリーンなイメージから再作成します)
  6. 修復:根本原因に対処します(脆弱性へのパッチ適用、イメージの更新、RBAC の強化)

参考資料

コメント