从零开始的 Kubernetes 攻防指南
本材料是基于安全大佬 nearg1e
原先在腾讯发表的博客 《红蓝对抗中的云原生漏洞挖掘及利用实录》 进行持续更新和完善;且由于 Kubernetes 安全特性、容器安全等场景的攻防技术在不断发展和改变,文章的内容也会持续不断的进行调整;并在后续会补充从零开始的实验环境搭建、Kubernetes 安全特性对抗、完整红蓝对抗案例、EBPF 安全等相关的内容。
测试环境建议:测试环境的所有问题钱都能解决,我们可以直接在云厂商上购买一个包含多节点的 Kubernetes 容器集群;但如果只有一台 VPS 服务器或配置有限的虚拟机环境,那么我建议可以使用 minikube、kind 或 K3s 等工具来搭建一个 Kubernetes 容器集群进行测试。
注:本材料所有内容仅供安全研究和企业安全能力建设参考,请勿用于未授权渗透测试和恶意入侵攻击。
CNCF
在对云原生定义的描述中提到云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。
我们今天所聊到的漏洞和利用手法也紧紧围绕着上述的几类技术和由云原生相关技术所演化出来的多种技术架构进行,包括但不限于容器、服务网格、微服务、不可变基础设施、声明式 API、无服务架构、函数计算、DevOps 等,并涉及研发团队在使用的一些云原生开源组件和自研、二次开发时常见的安全问题。不在 “云原生安全” 这个概念上做过多的延伸和扩展,且提及所有的安全漏洞都在 “腾讯蓝军” 对内对外的攻防演练和漏洞挖掘中有实际的利用经验积累。
在实际的攻防中我们所进行的攻击路径并非完全契合在 CIS2020 上总结的攻击模型:
因为大部分情况下我们遇到的内网并非完全基于容器技术所构建的,所以内网的起点并不一定是一个权限受限的容器,但攻击的方向和目标却大同小异:为了获取特定靶标的权限、资金和数据,我们一般需要控制更多乃至全部的容器、主机和集群。
也由于业界云原生实践的发展非常迅速,虽然进入内网之后我们所接触的不一定是全是 Kubernetes 所编排下的容器网络和架构,但基于云原生技术所产生的新漏洞和利用手法往往能帮蓝军打开局面。
举个例子,当我们通过远控木马获取某个集群管理员 PC 上的 kubeconfig
文件 (一般位于 ~/.kube/config
目录),此时我们就拥有了管理 Kubernetes 集群的所有能力了,具体能做的事情后面会有更详细的探讨。
如果此时该集群没有设置严格的 security policy
且目标企业的 HIDS 没有针对容器特性进行一定策略优化的话,那创建一个能获取 NODE 权限的 POD 或许就是一个不错的选择,因为只有这样获取的 shell 才能更方便的在容器母机上进行信息收集,例如 strace
母机 sshd
进程抓取我们想要的用户名和密码、使用 tcpdump
抓取内网系统的管理员登录态等,目前正在运行的容器一般是没有这些权限的。
以下是这种情况下我们常用的 POD yaml 配置:
如果对 Kubernetes 的 POD 不熟悉,其实上述的配置就比较类似于在想要 ROOT 权限的业务服务器上执行以下 docker 命令:
docker -H ${host_docker_sock} run -d -it --name neartest_Kubernetes_hashsubix -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/near_sandbox" --network=host --privileged=true --cap-add=ALL alpine:latest /bin/sh -c tail -f /dev/null
执行的结果和作用如下 (注:所有的挂载和选项并非都必须,实战中填写需要的权限和目录即可,此处提供一个较全的参考):
当然上述大部分配置都会被多租户集群下的 Kubernetes Security Policy
所拦截,且如果目前主机上的 HIDS 有一定容器安全能力的话,这类配置的容器创建行为也比较容易会被标记为异常行为。
不过,显然我们在真实的对抗中如果只是想达到执行 strace 抓取 sshd 的目的,配置可以更加简化一点,只需添加 SYS_PTRACE
的 capabilities
即可,我在演习中也正是这么做的。
因为具有 SYS_PTRACE
权限的容器并且进行 kubectl exec
的行为在实际的研发运维流程中非常常见,是 HIDS 比较不容易察觉的类业务型操作;另外也可以寻找节点上已有该配置的容器和 POD 进行控制,同样是不易被防御团队所察觉的。
接下来我们也会一个个讨论这类漏洞和手法和我们实际在对抗中遇到的场景。同时,无论是在 CNCF 对云原生的定义里,还是大家对云原生技术最直观的感受,大部分技术同学都会想到容器以及容器编排相关的技术,这里我们就以容器为起始,开启我们今天的云原生安全探索之旅吧~,目录如下所示:
完整的指南请参考 Git 仓库地址 https://github.com/neargle/my-re0-k8s-security
了解更多信息。