拿到 Node 访问权限后
通过 hostPath: / ,我们可以拿到各个 Pod 的 Token 权限,还可以拿到如下目标:
- kubelet 的配置文件 / kubeconfig:可以以 Node 身份操作集群(Node 身份往往能读它自己节点上所有 Pod 的信息)
- 容器运行时 socket(containerd / docker):可以控制这台机器上所有容器,包括别的租户的
- 其他 Pod 的挂载卷:业务数据、数据库文件、证书私钥
- 宿主机进程空间(配合 hostPID):逃逸出容器,拿到真正的 root shell
拿到节点身份后
云上的节点通常带着一个实例角色,可以通过 metadata 服务拿到临时云凭据。于是攻击路径变成:
容器 → 节点 → 云实例角色 → 对象存储 / 镜像仓库 / 其他云资源
防御视角
纵深防御:
- 禁 hostPath
- 节点用最小权限的实例角色 + 出网限制
- Secret 里不放长期密钥、改用工作负载身份
- registry 凭据按命名空间隔离、定期轮换
- 审计 + 运行时检测
加固清单
准入与隔离
- 命名空间打上 PSA 标签:
pod-security.kubernetes.io/enforce=restricted - Kyverno/Gatekeeper 策略:禁
hostPath、禁privileged、禁hostPID/hostNetwork - 限制 Workflow/Job 的
serviceAccountName白名单
身份与权限
-
cluster-admin绑定逐个复核 - 所有 SA 的
list/get/watch secrets权限逐个复核 - 不需要操作集群的 Pod 设
automountServiceAccountToken: false - 系统组件一组件一 SA,权限独立最小化
凭据
- 清点所有长期 SA token Secret,能删的删
- AK/SK 按命名空间隔离,禁止"一份密钥铺满全集群"
- 镜像拉取凭据定期轮换,能用作工作负载身份的就不落 Secret
- Helm release Secret 检查是否含明文口令
检测
- API 审计日志开启,覆盖 secrets / pods / SSAR / workflows
- 运行时检测(Falco)覆盖 token 文件读取、可疑 exec
- 云侧:对象存储、镜像仓库的访问日志接入告警
平台
- 所有内部平台 API 做完整鉴权 + 对象级授权
- 平台的集群 SA 权限最小化(它是"混淆代理"的高危角色)