K8s 之 ApiServer 组件风险
字数 2071 2025-08-27 12:33:43
Kubernetes API Server 安全风险与防护指南
1. API Server 概述
API Server 是 Kubernetes 集群的管理入口,提供 API 来控制集群内部组件。默认使用两个端口:
- 8080端口 (insecure-port,非安全端口):无需认证
- 6443端口 (secure-port,安全端口):需要认证且有 TLS 保护
2. API Server 主要安全风险
2.1 Insecure-port 端口对外暴露
风险描述:
- 生产环境中如果暴露8080端口,攻击者可利用此端口进行集群攻击
- 1.20版本后该选项已无效化
- 默认不开启,需在
/etc/kubernetes/manifests/kube-apiserver.yaml中显式配置
防护措施:
- 确保不使用或禁用insecure-port
- 升级到Kubernetes 1.20+版本
- 检查并清理相关配置
2.2 未授权配置错误
风险描述:
- 当
system:anonymous用户被错误绑定到cluster-admin用户组时,匿名用户可支配整个集群 - 配置示例:
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
攻击方式:
- 获取所有token后与API Server交互,控制集群
防护措施:
- 检查并删除匿名用户的过高权限绑定
- 实施最小权限原则
- 定期审计RBAC配置
2.3 历史提权漏洞(CVE-2018-1002105)
漏洞描述:
- 允许用户在已建立的API Server连接上打通client到kubelet的通道
- 提升普通用户到API Server权限
影响版本:
- Kubernetes v1.0.x-1.9.x
- v1.10.0-1.10.10 (fixed in v1.10.11)
- v1.11.0-1.11.4 (fixed in v1.11.5)
- v1.12.0-1.12.2 (fixed in v1.12.3)
利用条件:
- 用户至少需要具有一个pod的exec/attach/portforward权限
漏洞复现:
- 创建命名空间和pod
- 配置RBAC赋予exec权限
- 使用exp创建挂载宿主机根目录的pod
- 读取宿主机敏感凭据
防护措施:
- 及时升级到安全版本
- 限制pod exec/attach/portforward权限
- 监控异常API请求
2.4 配置不当的RBAC提权风险
2.4.1 create pods权限
风险描述:
- 当resources为
*或pods,verbs包含create时 - 攻击者可创建挂载根目录的pod实现容器逃逸
2.4.2 list secrets权限
风险描述:
- 当resources为
*或secrets,verbs包含list时 - 可列出集群中所有secrets,包括特权账号凭据
2.4.3 get secret权限
风险描述:
- 当resources为
*或secrets,verbs包含get时 - 可获取特定service account的secrets
2.4.4 get/list/watch secrets权限
攻击方式:
- 创建恶意pod并挂载secrets
- 使用
automountServiceAccountToken挂载特权SA令牌 - 获取所有secrets并外带数据
2.4.5 Impersonate权限
风险描述:
- 允许用户模拟其他用户或组
- 通过HTTP头实现:
Impersonate-User: 用户名Impersonate-Group: 组名(可多次设置)Impersonate-Extra-(extra name): 额外字段Impersonate-Uid: 唯一标识符
利用方式:
kubectl --as <user-to-impersonate> ...
kubectl --as <user-to-impersonate> --as-group <group-to-impersonate> ...
防护措施:
- 严格限制Impersonate权限
- 监控异常模拟请求
- 实施基于属性的访问控制(ABAC)
2.5 API Server权限维持
Shadow API Server技术:
- 在原有API Server上开放更大权限
- 放弃日志审计实现隐蔽控制
- 典型配置参数:
--allow-privileged --insecure-port=9443 --insecure-bind-address=0.0.0.0 --secure-port=9444 --anonymous-auth=true --authorization-mode=AlwaysAllow
防护措施:
- 监控API Server异常进程
- 检查非标准端口监听
- 实施网络策略限制API Server访问
- 定期审计API Server配置
3. 安全建议
-
端口安全:
- 禁用insecure-port
- 限制API Server网络暴露范围
-
认证授权:
- 禁用匿名访问
- 实施最小权限原则
- 定期审计RBAC配置
-
漏洞管理:
- 及时升级到安全版本
- 关注Kubernetes安全公告
-
监控审计:
- 启用API Server审计日志
- 监控异常API请求
- 实施运行时安全监控
-
配置加固:
- 使用Pod安全策略
- 限制敏感操作权限
- 禁用不必要的API
4. 总结
API Server作为Kubernetes集群的核心组件,其安全性直接影响整个集群的安全状态。管理员应充分了解API Server的各种安全风险,采取适当的防护措施,并建立持续的安全监控机制,确保集群的安全运行。