©2025云安全联盟大中华区版权所有1 ©2024云安全联盟大中华区-保留所有权利。你可以在你的电脑上下载、储存、展示、查看及打印,或者访问云安全联盟大中华区官网(https://www.c-csa.cn)。须遵守以下:(a)本文只可作个人、信息获取、非商业用途; (b)本文内容不得篡改;(c)本文不得转发;(d)该商标、版权或其他声明不得删除。在遵循中华人民共和国著作权法相关条款情况下合理使用本文内容,使用时请注明引用于云安全联盟大中华区。 ©2025云安全联盟大中华区版权所有2 ©2025云安全联盟大中华区版权所有3 致谢 《Kubernetes安全指南》由CSA大中华区云原生安全工作组内K8S安全研究项目组专家撰写,感谢以下专家的贡献: 编写组: 王亮审校组: 刘文懋 党超辉谢奕智 TeamsSix杨天识 卜宋博 何诣莘 徐岩 张元恺 夏威 ©2025云安全联盟大中华区版权所有4 序言 《Kubernetes安全指南》基于Kubernetes技术架构及基本组件,运用ATT&CK模型,深入探讨了Kubernetes攻防矩阵。从攻防双方视角分析针对各种弱点的攻击手法以及防御手段。 指南关注Kubernetes平台的攻防研究。从攻击者的角度追踪现实世界中的使用和出现过的用法,详细描述初始访问-->执行-->持久化-->权限提升-->防御绕过-->凭据窃取-->探测-->横向移动-->影响等9类不同战术,并将9类战术中常用的65种技术进行了深入探讨。文章图文并茂展示了真实的攻击场景,为研究Kubernetes的安全人员提供给了可借鉴的实例。 指南中从防御方的视角描述了漏洞、配置错误两大类风险。通过每种风险的剖析,解释了采用何种手段可有效降低风险提高攻击方的攻击成本。 指南中介绍了4个Kubernetes相关的安全开源项目。分别是Kubebench、OPA、CDK、Trivy。通过对以上安全开源项目介绍,为读者在防御阶段使用工具提供了参考。应用场景和优秀开源项目的介绍,有助于推动Kubernetes安全技术的进一步发展和实践。 希望通过指南深入浅出地为读者介绍Kubernetes相关的安全知识。广大的Kubernetes运维人员可以使用本报告作为其日常工作的工具参考。 李雨航YaleLiCSA大中华区主席兼研究院院长 ©2025云安全联盟大中华区版权所有5 目录 1.Kubernetes简介8 1.1Kubernetes架构8 1.2Kubernetes组件9 1.2.1控制平面组件9 1.2.2节点组件11 2.Kubernetes安全风险12 2.1KubernetesATT&CK矩阵12 2.2KubernetesATT&CK矩阵详述14 2.2.1初始访问14 2.2.2执行17 2.2.3持久化23 2.2.4权限提升28 2.2.5防御绕过35 2.2.6凭证窃取38 2.2.7探测43 2.2.8横向移动52 2.2.9影响55 3.Kubernetes风险检测防护58 3.1配置错误58 3.2漏洞风险61 4.Kubernetes安全开源项目65 4.1Kube-bench65 4.1.1kube-bench概述65 4.1.2kube-bench工作原理66 4.1.3kube-bench使用68 4.2OPA69 4.2.1OPA概述69 4.2.2OPA工作原理70 4.2.3OPA使用70 4.3CDK73 4.3.1CDK概述73 4.3.2CDK工作原理73 4.3.3CDK使用73 4.4Trivy75 ©2025云安全联盟大中华区版权所有6 4.4.1Trivy概述75 4.4.2Trivy工作原理75 4.4.3Trivy使用76 5.参考文献79 ©2025云安全联盟大中华区版权所有7 1.Kubernetes简介 章节1以下内容节选自Kubernetes官网。便于读者了解Kubernetes基本组件,容易理解后续章 节攻防实践与Kubernetes组件的关系。 1.1Kubernetes架构 Kubernetes集群由一个控制平面和一组用于运行容器化应用的服务器组成,这些服务器称作节点(Node)。每个集群至少需要一个节点来运行Pod。 控制平面管理集群中的节点和Pod。一个集群一般运行多个节点,控制平面通常跨多节点运行,以提供容错和高可用。 控制平面组件会为集群做全局决策,比如资源的调度,以及检测和响应集群事件。控制平面组件可以在集群中的任何节点上运行。为了简单起见,安装脚本通常会在同一个节点上启动所有控制平面组件,并且不会在此计算机上运行用户容器。节点组件会在每个节点上运行,负责维护运行的Pod并提供Kubernetes运行环境。 ©2025云安全联盟大中华区版权所有8 1.2Kubernetes组件 1.2.1控制平面组件 1.2.1.1kube-apiserver Kube-apiserver是Kubernetes的一个组件,是Kubernetes控制平面的前端接口。 KubernetesAPI服务器的主要实现是Kube-apiserver。Kube-apiserver被设计为水平扩展,可通过部署更多实例进行扩展。 1.2.1.2etcd Etcd采用Go语言编写,通过Raft一致性算法,实现的一个高可用的分布式键值(key-value)数据库。Etcd是Kubernetes的关键组件,它存储了集群的整个状态包括:集群的配置,规格以及运行中的工作负载的状态。 1.2.1.3kube-scheduler kube-scheduler监视新创建的未分配节点的Pod,然后为Pod选择一个节点继续运行。选择节点决策时考虑的因素包括:个体和集体资源需求、硬件/软件/策略约束、亲和与反亲和规范、数据局部性、工作负载之间的干扰和截止日期等内容。 1.2.1.4kube-controller-manager kube-controller-manager控制平面组件控制器,从逻辑上每个控制器可作为一个单独的进程。为了降低复杂性,这些控制器被编译成一个二进制文件,并在一个进程中运行。 有许多不同类型的控制器。其中的一些示例: 节点控制器:负责在节点宕机时进行通知和响应。 作业控制器:监视一次性任务的作业对象,然后创建Pod来运行这些任务以完成。 EndpointSlice控制器:填充EndpointSlice对象(以提供服务和Pod之间的链接)。 ©2025云安全联盟大中华区版权所有9 ServiceAccount控制器:为新命名空间创建默认ServiceAccounts。 1.2.1.5cloud-controller-manager cloud-controller-manager控制器管理器允许链接集群到云提供商的API,使用该云平台与集群进行交互。 与kube-controller-manager一样,cloud-controller-manager在逻辑上结合了几个独立控制器作为单个进程运行于一个二进制文件中。可以水平缩放(运行多个副本)以提高性能或提高故障容忍。 1.2.2.6CoreDNS CoreDNS是Kubernetes集群中的默认DNS解析器,用于提供DNS服务,使得Pod能够通过服务名或其他网络标识符进行通信。CoreDNS是一个灵活、高效的DNS服务器,它可以通过插件机制进行扩展。 CoreDNS在Kubernetes中的主要职责是: 服务发现:通过服务名解析PodIP,允许Pod之间通过名称互相访问。 DNS解析:为集群内部的服务提供DNS解析能力,支持集群外部DNS请求转发。 负载均衡:通过解析服务名为多个Pod提供IP地址,支持负载均衡。 1.1.2.7WebUI(仪表板) Dashboard是基于网页的Kubernetes用户界面。Dashboard同时展示了Kubernetes集群中的资源状态信息和所有报错信息。 可以使用Dashboard将容器应用部署到Kubernetes集群中,也可以对容器应用排错,还能管理集群资源。可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改Kubernetes资源(如Deployment、Job、DaemonSet等)。可以对Deployment实现弹性伸缩、滚动升级、重启Pod或者使用向导创建新的应用。 ©2025云安全联盟大中华区版权所有10 1.2.2节点组件 节点组件在每个节点上运行,维护正在运行的Pod并提供Kubernetes运行时环境。 1.2.2.1Kubelet Kubelet是Kubernetes中负责管理每个节点上的Pod的核心组件。它的实现原理涉及多个关键方面,包括与KubernetesAPI服务器的交互、Pod生命周期管理、容器运行时接口(CRI)、节点健康检查和资源管理等。 1.2.2.2kube-proxy kube-proxy是Kubernetes的核心组件,运行在每个Node节点上,它是实现KubernetesService的通信与负载均衡机制的重要组件。kube-proxy负责为Pod创建代理服务,从apiserver获取所有server信息,并根据server信息创建代理服务,实现server到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。 1.2.2.3Containerruntime 使Kubernetes能够有效运行容器的基本组件。它负责管理Kubernetes环境中容器的生命周期。 Kubernetes支持容器运行时如docker、containerd、CRI-O。 1.1.2.4NetworkPlugins CNI(ContainerNetworkInterface)网络插件作为Kubernetes集群中网络管理的关键组成部分,扮演着连接和管理容器网络的重要角色。 Pod网络是Kubernetes中的另一个重要概念,用于定义Pod之间的网络通信。每个Pod都有一个唯一的IP地址,可以用于在Pod之间进行通信。Pod网络通常使用CNI(ContainerNetworkInterface)插件来实现,CNI插件负责为每个Pod分配一个唯一的IP地址,并将Pod连接到集群网络中。 ©2025云安全联盟大中华区版权所有11 2.Kubernetes安全风险 2.1KubernetesATT&CK矩阵 初始访问 执行 持久化 权限提升 防御绕过 凭证窃取 探测 横向移动 影响 凭证泄漏 在容器内执行 创建后门容器 利用特权容器提权 容器日志清理 获取Kubernetessecret 访问KubernetesAPIServer Kubernetes内网横向访问 数据销毁 Kubeconfig文件 创建容器 在已有权限的容器中植入后 门 为普通用户添加高权限 Kubernetesevent日志清理 获取Kubeconfig 访问KubletAPI 通过serviceAccount访问 KUBERNETESAPI 资源劫持 使用恶意镜像 带有SSH服务的容器 Kubernetes定时任务 为EKS添加高权限角色 部署ShadowAPIServer 访问容器SA 访问Kubernetes Dashboard 利用Kubernetes第三方组件横向 移动 端点拒绝服务 存在漏洞的应用程序 应用程序漏洞(RCE) 在自定义镜像中植入后门 使用容器里挂载的敏感目录逃逸到宿主机 通过匿名网络访问 利用Kubernetes准入控制器窃取信 息 访问云厂商服务接口(实例元数据API) 窃取凭证攻击云资源 网络拒绝服务 暴露的敏感接 口 Sidecar注 入 修改安全配置 利用内核漏洞逃 逸到宿主机 修改请求来源的UA头 不安全的凭证 访问私有镜像库 窃取凭证攻击其他应用 阻止系统恢复 使用Se