写在前面:合法学习边界
云安全测试只用于授权环境。对非授权集群做逃逸/提权可能触犯法律并造成业务中断。
一、原理:容器不等于隔离
容器共享宿主机内核,隔离比虚拟机弱。“容器内 = 安全”是错误认知。
1
2
3
4
5
6
| 主要风险面:
1. 镜像漏洞(依赖过旧)
2. 配置错误(特权容器、宿主机目录挂载)
3. 容器逃逸(漏洞突破隔离拿宿主)
4. K8s 组件未授权(API Server / etcd / kubelet)
5. 权限过大(RBAC 配置不当)
|
二、影响与危害
1
2
3
4
| 拿到容器 → 逃逸到宿主机
宿主机 → 横向到整个集群
etcd/API 泄露 → 集群被接管
云凭证/命名空间数据泄露
|
风险等级:高到严重。
三、常见利用与验证
1. docker.sock 未授权
1
2
3
| 容器内挂载了 /var/run/docker.sock → 可操控宿主机 Docker
验证:ls /var/run/docker.sock
利用:创建特权容器挂载宿主机根目录 → chroot 提权
|
2. 特权容器逃逸
1
2
3
| 特权容器可访问宿主机设备与资源
验证:cat /proc/self/status | grep CapEff(看 CAP_SYS_ADMIN)
利用:mount 宿主机盘、nsenter 逃逸
|
3. runC / 内核漏洞逃逸
1
2
| runC 历史漏洞(CVE-2019-5736 等)可逃逸到宿主机
内核漏洞(如 Dirty Pipe)在容器内也能利用
|
4. Kubelet API 未授权
1
2
3
| curl -k https://<节点IP>:10250/pods
curl -k https://<节点IP>:10250/run/命名空间/容器/命令
# 解释:10250 未鉴权时可直接执行容器命令
|
5. etcd 泄露
1
2
| etcd 存集群全部密钥与配置
2379 端口未鉴权 → 直接 dump
|
6. kubeconfig / 云凭证泄露
1
2
| 泄露的 kubeconfig 可管理集群
云凭证(AK/SK)可接管云资源
|
四、检测与审计步骤
1
2
3
4
5
| 第 1 步:端口扫描 2379/10250/6443/10255
第 2 步:探测 Kubelet/API 是否未鉴权
第 3 步:检查容器是否特权/挂载宿主机目录
第 4 步:镜像漏洞扫描(Trivy/Clair)
第 5 步:审查 RBAC 与命名空间权限
|
五、防御与修复
1
2
3
4
5
6
| 禁止挂载 docker.sock;不用特权容器
镜像扫描 + 及时更新依赖
API Server/Kubelet/etcd 开启鉴权与 TLS
RBAC 最小权限,禁止 cluster-admin 滥用
网络策略隔离命名空间
运行时安全(gVisor/Falco 行为监控)
|
六、小结
云安全的核心是“容器不是隔离边界,配置决定安全”。渗透时先试 docker.sock 与 K8s 未授权端点(10250/2379);防守时禁用特权、收紧 RBAC、加镜像扫描和运行时监控。容器逃逸 + K8s 未授权,是云上渗透的两条主线。