Kubernetes 攻击思路
1. 从外部服务入手
这是最常见的攻击起点,攻击者通常会寻找暴露在公网上的 K8s 组件或应用。
a. 攻击 Web 应用
- 漏洞利用:如果 K8s 集群中运行着 Web 应用,攻击者会首先对这些应用进行漏洞扫描。常见的漏洞包括 SQL 注入、文件上传、RCE(远程代码执行)等
- 反向 Shell:一旦成功利用 RCE,攻击者可以在 Pod 内部获取一个反向 Shell。这是进入集群内部的第一步
- 容器逃逸:仅仅获得 Pod 的 Shell 还不够。攻击者会尝试进行容器逃逸,利用 Pod 配置不当或内核漏洞,从容器内部获取宿主机(Node)的权限。
b. 攻击暴露的 K8s 服务
- Kubelet API:如果 Kubelet 的 API(默认端口 10250 或 10255)没有进行严格的认证,攻击者可以直接访问它。通过 Kubelet API,攻击者可以执行命令、查看 Pod 详情,甚至创建新的 Pod,从而实现对整个 Node 的控制
- Dashboard:如果 K8s Dashboard 暴露在公网,并且使用了弱密码,攻击者可以登录 Dashboard,然后利用其强大的 UI 界面直接管理集群资源
2. 权限提升与横向移动
一旦攻击者进入集群内部,哪怕是获得了普通 Pod 的权限,他们也会立即开始进行权限提升和横向移动,寻找更高的权限,例如 Cluster Admin
a. 权限提升
- RBAC 滥用:K8s 的 RBAC(基于角色的访问控制)机制是权限提升的核心攻击点。攻击者会枚举当前 Pod 所拥有的 ServiceAccount 权限,寻找那些被错误配置为高权限的角色。例如,如果一个普通 Pod 的 ServiceAccount 拥有
list secrets
或create pods
的权限,攻击者就可以利用这些权限来窃取敏感信息或创建恶意 Pod - 滥用宿主机挂载:如果 Pod 被配置为挂载了宿主机的敏感路径(如
/etc
、/var/run/docker.sock
),攻击者可以直接访问这些路径,甚至通过docker.sock
控制宿主机的 Docker 守护进程,从而实现容器逃逸。
b. 横向移动
- ServiceAccount 凭证窃取:攻击者可以窃取当前 Pod 的 ServiceAccount Token,并使用这个 Token 伪装成 ServiceAccount,访问其他 Pod 或 K8s API
- 扫描内网:利用已控制的 Pod 作为跳板,攻击者可以对集群内网进行扫描,寻找其他可以被攻击的服务或未授权的 API
3. 供应链攻击
供应链攻击是一种更高级的攻击方式,它不直接攻击 K8s 集群本身,而是攻击 K8s 集群所依赖的组件
- 恶意镜像:攻击者可以将恶意代码注入到 Docker 或 OCI 镜像中。当开发者或 CI/CD 流水线拉取并部署这个镜像时,恶意代码就会在集群内部运行
- 第三方工具漏洞:攻击者可以利用 K8s 周边工具的漏洞,例如,攻击 CI/CD 工具(如 Jenkins、Gitlab CI)或 Helm charts,通过这些工具将恶意 Payload 部署到集群中