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权限

漏洞复现

  1. 创建命名空间和pod
  2. 配置RBAC赋予exec权限
  3. 使用exp创建挂载宿主机根目录的pod
  4. 读取宿主机敏感凭据

防护措施

  • 及时升级到安全版本
  • 限制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权限

攻击方式

  1. 创建恶意pod并挂载secrets
  2. 使用automountServiceAccountToken挂载特权SA令牌
  3. 获取所有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. 安全建议

  1. 端口安全

    • 禁用insecure-port
    • 限制API Server网络暴露范围
  2. 认证授权

    • 禁用匿名访问
    • 实施最小权限原则
    • 定期审计RBAC配置
  3. 漏洞管理

    • 及时升级到安全版本
    • 关注Kubernetes安全公告
  4. 监控审计

    • 启用API Server审计日志
    • 监控异常API请求
    • 实施运行时安全监控
  5. 配置加固

    • 使用Pod安全策略
    • 限制敏感操作权限
    • 禁用不必要的API

4. 总结

API Server作为Kubernetes集群的核心组件,其安全性直接影响整个集群的安全状态。管理员应充分了解API Server的各种安全风险,采取适当的防护措施,并建立持续的安全监控机制,确保集群的安全运行。

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 用户组时,匿名用户可支配整个集群 配置示例: 攻击方式 : 获取所有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 : 唯一标识符 利用方式 : 防护措施 : 严格限制Impersonate权限 监控异常模拟请求 实施基于属性的访问控制(ABAC) 2.5 API Server权限维持 Shadow API Server技术 : 在原有API Server上开放更大权限 放弃日志审计实现隐蔽控制 典型配置参数: 防护措施 : 监控API Server异常进程 检查非标准端口监听 实施网络策略限制API Server访问 定期审计API Server配置 3. 安全建议 端口安全 : 禁用insecure-port 限制API Server网络暴露范围 认证授权 : 禁用匿名访问 实施最小权限原则 定期审计RBAC配置 漏洞管理 : 及时升级到安全版本 关注Kubernetes安全公告 监控审计 : 启用API Server审计日志 监控异常API请求 实施运行时安全监控 配置加固 : 使用Pod安全策略 限制敏感操作权限 禁用不必要的API 4. 总结 API Server作为Kubernetes集群的核心组件,其安全性直接影响整个集群的安全状态。管理员应充分了解API Server的各种安全风险,采取适当的防护措施,并建立持续的安全监控机制,确保集群的安全运行。