课题研究 云安全与容器安全 子课题02 · 第02页 / 共8页
02子课题 · 容器与Kubernetes安全

容器与Kubernetes安全第02页:集群架构与攻击面解析

在制定任何防护策略之前,必须先回答"攻击者从哪里进来、进来后能做什么"。本页对Kubernetes集群进行完整的组件级解剖:控制面五大组件(API Server、etcd、Scheduler、Controller Manager、Cloud Controller Manager)、节点三大组件(kubelet、kube-proxy、容器运行时)与附加组件(DNS、Ingress、CNI、CSI)逐一建立攻击面档案;随后绘制从外部入口到控制面、再到工作负载的完整攻击路径图谱,并以NVD官方档案逐一核对CVE-2018-1002105、CVE-2019-5736、CVE-2021-25741、CVE-2022-0811、CVE-2024-21626等标志性漏洞的机理与防护要点。

API Serveretcdkubeletkube-proxyScheduler攻击面CVE-2018-1002105CVE-2019-5736CVE-2021-25741CVE-2022-0811CVE-2024-21626控制面研究状态:研究中
所属专题云安全与容器安全 › 子课题02 容器与Kubernetes安全
目标受众安全架构师、渗透测试人员、集群管理员、SOC分析人员
全文结构组件档案 → 攻击路径 → 漏洞谱系 → 端口基线

01 · 集群总体架构

Kubernetes集群由控制面(Control Plane)与一组工作节点(Node)构成。控制面负责全局决策与集群事件响应,节点负责运行容器化工作负载。安全研究的第一个基本事实是:控制面的任何组件失守,在绝大多数架构下等同于整集群失守——因为控制面持有全部集群状态(含全部Secrets)与对所有工作负载的调度控制权。

组件职责默认端口安全关键性
kube-apiserver集群唯一入口,所有组件与CLI均经其操作集群状态;处理认证、授权、准入控制6443(HTTPS)最高:历史上未授权访问类漏洞的汇聚点,须默认拒绝匿名访问
etcd集群全部状态的分布式键值存储(含Secrets明文,除非启用静态加密)2379客户端
2380 peer
最高:快照/备份泄露即全集群机密泄露;peer通信无加密=集群可被注入
kube-scheduler为Pod选择节点;自身不直接暴露用户数据,但可被用于施加调度侧影响10251(HTTP健康检查,仅本机;v1.22起逐步弃用)中:需绑定本地监听,禁止集群网可达
kube-controller-manager运行各类控制器(副本、节点、端点等),持有强权限ServiceAccount10252(HTTP健康检查,仅本机;v1.22起逐步弃用)中高:其凭证泄露可被用于大范围操纵集群资源
cloud-controller-manager与云厂商API交互(负载均衡、节点、路由、卷的生命周期)云厂商相关中高:其云凭证泄露可影响云账号内资源
kubelet节点代理:执行Pod生命周期管理、挂载卷、上报状态;暴露REST接口10250(HTTPS)
10255(只读,v1.16起废弃)
高:匿名读取曾泄露Pod环境变量(含密钥),未授权exec等同于节点shell
kube-proxy实现Service的虚拟IP与负载均衡规则(iptables/IPVS模式)10256(metrics)中:规则篡改可造成流量劫持(与CVE-2020-8554类问题相关)
容器运行时containerd / CRI-O,经CRI与kubelet交互,实际创建容器进程本地socket(默认不监听网络)高:运行时漏洞(runc/CRI-O)直接构成逃逸面
CoreDNS集群服务发现与域名解析53(UDP/TCP)
9153(metrics)
中高:DNS投毒/隧道可支撑C2通信与数据外传

架构分层的安全含义:控制面组件之间的通信(apiserver↔etcd、apiserver↔kubelet、apiserver↔scheduler)应全部使用双向TLS(默认由kubeadm证书体系支撑);任何"为了调试方便"关闭TLS、放行匿名访问或将控制面端口暴露至节点网段之外的做法,都会把单点配置错误放大为集群级风险。托管集群(EKS/AKS/GKE及各国内云)由云厂商托管控制面,但节点kubelet、Pod网络与全部工作负载配置仍是客户责任面。

02 · 控制面攻击面详析

2.1 API Server:全集群的唯一总线

  • 认证(Authentication):支持X.509客户端证书、静态Bearer Token文件、ServiceAccount Token、OpenID Connect(OIDC)、Webhook等多种认证插件;匿名请求默认是否允许由--anonymous-auth控制——生产集群必须关闭。历史上"匿名访问+API Server聚合层"的组合曾导致CVE-2018-1002105提权。
  • 授权(Authorization):支持Node、ABAC、RBAC、Webhook四种模式,RBAC为事实标准;授权决策基于"用户/组/SA + verb + resource + namespace"四维,配置不当的ClusterRoleBinding是横向移动的主要通道(第3页详述)。
  • 准入控制(Admission):持久化前的最后闸口,内置插件与动态准入(Webhook)共同决定"默认安全"水位(第3页详述)。
  • 暴露面:API Server不应直接暴露于互联网;必须暴露时(如CI/CD、多集群联邦)应置于白名单网关之后,启用审计日志并监控异常verb(如批量list secrets)。

2.2 etcd:集群王冠上的宝石

  • etcd默认以明文存储所有值——包括Secrets;必须通过EncryptionConfiguration启用静态加密(推荐KMS提供程序,KMS v2自Kubernetes v1.29起GA)。
  • etcd客户端端口2379若对节点网开放且缺少客户端证书双向认证,攻击者可读取/篡改全部集群状态;peer端口2380同理。
  • 备份快照(snapshot)包含全部机密,其存储桶的访问控制与加密必须与生产数据同级;快照恢复演练是灾难恢复能力的唯一验证方式(第7页)。

2.3 kubelet:节点上的"小API Server"

  • kubelet的10250端口暴露pods/exec、pods/logs、pods/attach等接口;在未启用匿名认证且未配置Webhook授权的旧版本上,匿名请求可读取Pod清单(含环境变量中的密钥)甚至执行命令——公开互联网上曾大量扫描到此类暴露。
  • 只读端口10255(无认证的只读接口)自v1.16起废弃、后续版本逐步收紧(v1.22起scheduler/controller-manager改用安全端口10259/10257提供HTTPS健康检查),遗留旧集群应升级并按基线绑定回环。
  • kubelet服务证书自动签发与轮换(ServerTLSBootstrap功能,v1.12引入)渐成主流部署方式,替代早期手动分发证书的模式;轮换失败会导致节点失联,运维监控需覆盖。

2.4 scheduler / controller-manager 的间接面

两者通常仅监听本机回环,直接暴露风险低,但其持有的强权限凭证(controller-manager的ServiceAccount令牌)是凭证窃取的高价值目标——获取该令牌可在集群内执行近乎全部资源操作。其健康检查端口的未授权访问信息泄露属低危,按基线绑定回环即可消除。

03 · 节点与工作负载攻击面

  • kube-proxy与Service劫持:kube-proxy依据Service/Endpoint规则改写节点转发规则;CVE-2020-8554证明攻击者可通过设置ExternalIP/LoadBalancer IP为集群内尚未分配或敏感的目标地址(如localhost上运行的数据库),诱导集群内流量被劫持至恶意Pod——该漏洞无需任何权限即可实施,防护依赖修复版本与网络层缓解。
  • 容器运行时接口(CRI):containerd默认不监听网络(本地socket);一旦因调试开启TCP监听且未认证,等同于直接容器创建权。CRI-O历史上通过Pod注解注入sysctl(CVE-2022-0811,cr8escape)实现权限提升,凸显"注解/标签即输入"的验证原则。
  • 容器存储接口(CSI)与卷挂载:hostPath卷可将宿主机任意路径挂载进容器,是最高危的Pod配置之一;subPath的符号链接处理曾引入CVE-2021-25741目录逃逸。持久卷(PV)的回收策略与快照权限亦需纳入审计。
  • 节点操作系统:节点内核漏洞在容器场景的影响被放大(共享内核);节点还应禁用SSH密码登录、启用只读根分区或独立/var/lib/containerd分区,防止容器日志与镜像写满系统盘(拒绝服务的朴素路径)。

04 · 典型攻击路径图谱

综合NSA/CISA加固指南与公开事件复盘,针对Kubernetes的典型攻击路径可归纳为以下六步链式模型。防御设计的要义在于:在链路上设置多重独立失效点,使单点被突破不导致目标达成。

Kubernetes典型攻击路径(六步链式模型)
从外部入口到数据目标的完整攻击链,对应各步的防护要点见括号内(页码指向本课题对应章节)
说明:本模型为防御性分析框架,综合NSA/CISA《Kubernetes Hardening Guidance》(2022)与公开事件复盘归纳,不含具体攻击代码。

05 · 标志性漏洞档案

以下条目均可在NVD(nvd.nist.gov)与Kubernetes官方安全公告中查证。评分采用NVD官方CVSS v3.x分值;修复版本以官方安全公告为准。档案用途为防御基线评估与检测规则验证,不提供利用代码。

CVE/时间CVSS涉及组件机理与防护要点修复版本(官方公告)
CVE-2018-1002105
2018.12
9.8(高危)kube-apiserver
(聚合层)
经聚合API服务器升级请求时权限检查被绕过的提权漏洞:普通用户可借由exec/attach通道获得API Server同等权限。防护:升级至修复版本;对外审慎开放聚合层;审计聚合API使用。v1.10.11 / v1.11.5 / v1.12.3 / v1.13.0-alpha.1起修复
CVE-2019-5736
2019.02
8.6(高危)runc
(容器运行时)
容器内进程以/proc/self/exe(即宿主机上runc二进制)为输入执行时,可覆写宿主机runc实现逃逸。防护:升级runc;不以root运行不受信容器;启用seccomp限制关键系统调用。runc 1.0.0-rc7(补丁于2019.02.11合入并发布;Docker 18.09.2及以上版本亦内置修复)
CVE-2019-1002101
2019.03
5.5(中危)kubectl cpkubectl cp解包tar时未正确处理符号链接,可在解压目标之外写入文件。防护:升级kubectl;CI/CD中固定工具版本并校验。v1.11.9 / v1.12.7 / v1.13.5 / v1.14.0起修复
CVE-2019-11246
2019.06
6.5(中危)kubectl cptar符号链接处理不当可在容器内覆盖/删除目标路径之外的文件。防护:升级kubectl;限制运维工具版本漂移。v1.12.9 / v1.13.6 / v1.14.2起修复
CVE-2020-8554
2020.06
5.0(NVD原始评分,后续研究上调至中高危区间)kube-proxy /
Service
Man-in-the-middle using ExternalIP:攻击者创建ExternalIP指向敏感目标(如localhost服务或云元数据端点)的Service,诱使集群内流量被路由至其Pod。防护:升级修复版本;限制RBAC中patch service/status权限;网络层阻断可疑ExternalIP。v1.16.13 / v1.17.9 / v1.18.6起修复(含后续回移补丁)
CVE-2021-25741
2021.09
8.1(高危)kubelet
(subPath挂载)
符号链接交换攻击:利用subPath卷挂载处理时序,逃逸至宿主机文件系统。防护:升级kubelet;避免对不受信负载开放hostPath/subPath组合;PSS Restricted档限制挂载行为。v1.19.15 / v1.20.11 / v1.21.5 / v1.22.2起修复
CVE-2022-0492
2022.02
7.8(高危)Linux内核
cgroups(容器逃逸面)
cgroups v1 release_agent机制可被容器内进程滥用(配合mount能力)实现宿主机命令执行。防护:内核升级;容器以drop ALL capabilities+no-new-privileges运行(PSS Baseline即有此要求)。Linux内核修复版本(2022.02修复合入主线)
CVE-2022-0811
2022.03
8.8(高危)CRI-O
(cr8escape)
对Pod注解中的sysctl参数未做白名单校验,攻击者可注入如kernel.core_pattern等内核参数实现宿主机代码执行。防护:升级CRI-O至1.19.6+/1.20.5+/1.21.4+/1.22.1+;注解/标签视为不可信输入做白名单校验。CRI-O 1.19.6 / 1.20.5 / 1.21.4 / 1.22.1+
CVE-2024-21626
2024.01
8.6(高危)runc
(工作目录处理)
容器内进程工作目录文件描述符泄漏:当容器工作目录设置为/proc/self/fd/..等路径时,可访问宿主机文件系统。防护:升级runc 1.1.12+;启用seccomp;避免不受信负载设置异常工作目录。runc 1.1.12+(2024.01.31发布)

漏洞治理要点:①控制面组件(apiserver/kubelet/运行时)必须纳入与OS同级的补丁SLA,公开K8s漏洞的修复版本以Kubernetes官方CHANGELOG与安全公告为准;②"已打补丁"不等于"已加固"——CVE-2022-0811与CVE-2021-25741的机理均涉及"注解/挂载等配置即输入"的验证缺失,对应的准入校验规则应在集群内长期生效(第3、4页);③托管集群客户无法控制控制面补丁节奏,但节点组件升级与运行时版本仍是客户责任。

06 · 端口与协议基线

端口组件暴露范围基线说明
6443/TCPkube-apiserver仅控制面节点间与运维白名单;禁止互联网直曝集群最高价值端口;跨集群访问走白名单网关+审计
2379/TCPetcd客户端仅apiserver所在网段可达启用客户端证书双向认证;开启静态加密存储
2380/TCPetcd peer仅etcd集群成员间peer通信须TLS
10250/TCPkubelet仅控制面节点(apiserver→kubelet)与节点本地禁止匿名认证;监控异常exec/pods列表行为
10251/10252scheduler / controller-manager仅回环(127.0.0.1)健康检查端口,绑定回环即可
10256/TCPkube-proxy metrics仅监控网段metrics端口无认证,勿暴露业务网
53 UDP/TCPCoreDNS集群内Pod与节点对外递归解析应经企业DNS转发,防DNS隧道滥用
9153/TCPCoreDNS metrics仅监控网段同上

核查建议:端口基线应转化为可执行核查项——①集群内以DaemonSet形式运行端口扫描器周期核对监听面;②网络层以云安全组/网络ACL固化白名单;③对6443/10250的访问建立审计日志并接入检测规则(第7页场景库);④任何新增监听端口的变更须过变更评审。

07 · 控制面暴露面高频失误清单

结合公开威胁情报与基线核查实践,以下四类失误是公开互联网上Kubernetes暴露事件的绝对主体。每一条均可通过第8页基线核查项在数小时内消除:

失误后果一键核查方式
6443对公网开放且无白名单认证爆破、漏洞面直接暴露于互联网扫描器外部扫描/云安全组核查;公网暴露即高危工单
kubelet 10250允许匿名读取Pod清单与环境变量(含密钥)批量泄露curl -k https://节点:10250/pods 匿名访问测试
etcd 2379未启用客户端双向TLS集群全部状态与Secrets可读可写etcdctl --endpoints member list 免证书连通性测试
dashboard/聚合层等附加组件遗留弱认证历史未授权访问事件的经典入口集群附加组件清单审计;匿名token登录测试

本节参考来源(第2页)

[1]

Kubernetes官方文档《Kubernetes Cluster Architecture》与组件参考:kubernetes.io/docs/concepts/architecture;kubelet认证授权说明:kubernetes.io(kubelet认证授权)。

[2]

NSA & CISA《Kubernetes Hardening Guidance》v1.1(2022年8月):控制面加固、pod安全、网络隔离、日志审计等官方建议原文。

[3]

CVE官方条目(评分与修复版本以NVD为准):CVE-2018-1002105、CVE-2019-5736、CVE-2020-8554、CVE-2021-25741、CVE-2022-0492、CVE-2022-0811、CVE-2024-21626。

[4]

Kubernetes官方安全公告与CHANGELOG(修复版本核对):github.com/kubernetes/kubernetes CHANGELOG。

[5]

MITRE ATT&CK for Containers(容器化环境攻击技术知识库,防御框架对照):attack.mitre.org(Containers矩阵)。