【云攻防系列】从攻击者视角聊聊K8S集群安全(上)
字数 2286 2025-08-26 22:11:22

Kubernetes集群安全攻防指南(上)

1. Kubernetes集群安全概述

Kubernetes(简称K8S)作为云原生管理与编排系统的代表,在生产环境下的市场占有率高达96%。其系统复杂性带来了严重的安全威胁,主要包括:

  • K8S组件的未授权访问
  • 容器逃逸
  • 横向攻击
  • 业务Pod漏洞利用

2. Kubernetes集群攻击点分析

2.1 攻击K8S组件(攻击点1~4)

K8S组件问题主要源于不安全配置,以下是四个代表性组件问题:

1. API Server未授权访问

  • 默认端口:6443(HTTPS)、8080(HTTP)
  • 风险:直接控制集群核心

2. etcd未授权访问

  • 默认端口:2379(客户端)、2380(节点间通信)
  • 风险:获取集群所有数据,包括敏感配置和密钥

3. kubelet未授权访问

  • 默认端口:10250(HTTPS)、10255(HTTP)
  • 风险:执行容器命令,获取Pod shell

4. kube-proxy不安全配置

  • 默认端口:10249(指标)、31433(NodePort)
  • 风险:服务暴露和流量劫持

其他组件风险

  • Dashboard:30000-32767(NodePort)
  • Docker:2375(未加密)、2376(TLS)

2.2 攻击节点对外服务(攻击点5)

常见风险场景:

  • 通过NodePort暴露的MySQL服务存在弱口令
  • 其他不应暴露的管理接口

MySQL攻击路径

  1. 直接通过NodePort访问MySQL,利用弱口令登录
  2. 攻击应用获取Pod shell,通过环境变量发现内网MySQL地址
  3. 逃逸到节点后,通过docker inspect查看MySQL容器环境变量

2.3 攻击业务Pod(攻击点6)

3.1 信息搜集

环境信息搜集

  • OS、Kernel、User基本信息
  • 可用Capabilities
  • 可用Linux命令
  • 挂载情况
  • 网络配置
  • 云厂商metadata API信息

敏感服务发现

  • 扫描内网端口:22(SSH)、80/8080(HTTP)、443/8443(HTTPS)、3306(MySQL)、4194(cAdvisor)、30000-32767(NodePort)

敏感信息扫描

  • 业务敏感文件(代码、数据库、AK/secret)
  • 环境变量
  • ServiceAccount信息(/run/secrets/kubernetes.io/serviceaccount/)
  • 进程信息

3.2 提权

Pod内提权

  • 内核漏洞提权(如DirtyCow、DirtyPipe)
  • sudo提权
  • suid提权
  • cronjob提权

K8S提权

  • RBAC提权
  • Nday利用(CVE-2018-1002105、CVE-2020-8559)

3.3 拒绝服务

攻击层面

  1. 业务/Pod层面:

    • CPU耗尽攻击
    • 内存耗尽攻击
    • 存储耗尽攻击
    • 网络资源耗尽攻击
  2. 集群层面:

    • 利用K8S软件漏洞(CVE-2019-11253、CVE-2019-9512、CVE-2019-9514)

2.4 容器逃逸(攻击点7)

容器逃逸突破Namespace和Cgroup限制,分为三类原因:

(1) 容器不安全配置

危险权限

  • privileged权限(特权容器)
  • 危险Capabilities(cap_sys_admin、cap_sys_module、cap_sys_dac_search等)

危险目录挂载

  • /var/run/docker.sock:与docker守护进程通信
  • 其他敏感主机目录挂载

(2) 相关组件漏洞

常见组件漏洞:

  • runc(CVE-2019-5736:需要宿主机和容器交互)
  • containerd(CVE-2020-15257:抽象套接字逃逸)
  • docker(多种历史漏洞)
  • kubelet(多种配置漏洞)

(3) 内核漏洞

可用于容器逃逸的内核漏洞:

  • CVE-2016-5195(DirtyCow)
  • CVE-2017-1000112
  • CVE-2017-7308
  • CVE-2020-14386
  • CVE-2021-22555
  • CVE-2022-0185
  • CVE-2022-0492
  • CVE-2022-0847(DirtyPipe)

注意事项

  • 内核漏洞利用有风险,可能导致系统崩溃
  • 部分漏洞是"一次性使用"的(如CVE-2019-5736会破坏runc)

3. 防御建议

3.1 组件安全

  • 严格限制API Server访问
  • etcd启用认证和加密
  • 限制kubelet和kube-proxy的访问
  • 关闭不必要的组件端口

3.2 节点安全

  • 定期更新节点操作系统
  • 限制NodePort使用范围
  • 监控异常对外服务

3.3 Pod安全

  • 使用最小权限原则
  • 定期更新基础镜像
  • 限制危险Capabilities
  • 避免敏感目录挂载

3.4 容器逃逸防护

  • 使用Pod安全策略(PSP)或Pod安全准入控制器
  • 定期更新容器运行时
  • 监控特权容器使用
  • 实施网络策略限制横向移动

4. 总结

本篇详细介绍了K8S集群中前7个攻击点,包括组件安全、节点服务暴露、业务Pod攻击和容器逃逸技术。下篇将继续探讨横向攻击、管理平台安全、镜像库安全和第三方组件安全等攻击点。

关键要点

  1. K8S组件未授权访问是最直接的攻击入口
  2. 容器逃逸是云环境特有的高风险攻击路径
  3. 最小权限原则是防御的核心思想
  4. 安全配置错误比漏洞更容易被利用

参考资源

  1. CNCF年度调查报告
  2. RBAC权限滥用研究报告
  3. CIS Docker安全基准
Kubernetes集群安全攻防指南(上) 1. Kubernetes集群安全概述 Kubernetes(简称K8S)作为云原生管理与编排系统的代表,在生产环境下的市场占有率高达96%。其系统复杂性带来了严重的安全威胁,主要包括: K8S组件的未授权访问 容器逃逸 横向攻击 业务Pod漏洞利用 2. Kubernetes集群攻击点分析 2.1 攻击K8S组件(攻击点1~4) K8S组件问题主要源于不安全配置,以下是四个代表性组件问题: 1. API Server未授权访问 默认端口:6443(HTTPS)、8080(HTTP) 风险:直接控制集群核心 2. etcd未授权访问 默认端口:2379(客户端)、2380(节点间通信) 风险:获取集群所有数据,包括敏感配置和密钥 3. kubelet未授权访问 默认端口:10250(HTTPS)、10255(HTTP) 风险:执行容器命令,获取Pod shell 4. kube-proxy不安全配置 默认端口:10249(指标)、31433(NodePort) 风险:服务暴露和流量劫持 其他组件风险 : Dashboard:30000-32767(NodePort) Docker:2375(未加密)、2376(TLS) 2.2 攻击节点对外服务(攻击点5) 常见风险场景: 通过NodePort暴露的MySQL服务存在弱口令 其他不应暴露的管理接口 MySQL攻击路径 : 直接通过NodePort访问MySQL,利用弱口令登录 攻击应用获取Pod shell,通过环境变量发现内网MySQL地址 逃逸到节点后,通过docker inspect查看MySQL容器环境变量 2.3 攻击业务Pod(攻击点6) 3.1 信息搜集 环境信息搜集 : OS、Kernel、User基本信息 可用Capabilities 可用Linux命令 挂载情况 网络配置 云厂商metadata API信息 敏感服务发现 : 扫描内网端口:22(SSH)、80/8080(HTTP)、443/8443(HTTPS)、3306(MySQL)、4194(cAdvisor)、30000-32767(NodePort) 敏感信息扫描 : 业务敏感文件(代码、数据库、AK/secret) 环境变量 ServiceAccount信息(/run/secrets/kubernetes.io/serviceaccount/) 进程信息 3.2 提权 Pod内提权 : 内核漏洞提权(如DirtyCow、DirtyPipe) sudo提权 suid提权 cronjob提权 K8S提权 : RBAC提权 Nday利用(CVE-2018-1002105、CVE-2020-8559) 3.3 拒绝服务 攻击层面 : 业务/Pod层面: CPU耗尽攻击 内存耗尽攻击 存储耗尽攻击 网络资源耗尽攻击 集群层面: 利用K8S软件漏洞(CVE-2019-11253、CVE-2019-9512、CVE-2019-9514) 2.4 容器逃逸(攻击点7) 容器逃逸突破Namespace和Cgroup限制,分为三类原因: (1) 容器不安全配置 危险权限 : privileged权限(特权容器) 危险Capabilities(cap_ sys_ admin、cap_ sys_ module、cap_ sys_ dac_ search等) 危险目录挂载 : /var/run/docker.sock:与docker守护进程通信 其他敏感主机目录挂载 (2) 相关组件漏洞 常见组件漏洞: runc(CVE-2019-5736:需要宿主机和容器交互) containerd(CVE-2020-15257:抽象套接字逃逸) docker(多种历史漏洞) kubelet(多种配置漏洞) (3) 内核漏洞 可用于容器逃逸的内核漏洞: CVE-2016-5195(DirtyCow) CVE-2017-1000112 CVE-2017-7308 CVE-2020-14386 CVE-2021-22555 CVE-2022-0185 CVE-2022-0492 CVE-2022-0847(DirtyPipe) 注意事项 : 内核漏洞利用有风险,可能导致系统崩溃 部分漏洞是"一次性使用"的(如CVE-2019-5736会破坏runc) 3. 防御建议 3.1 组件安全 严格限制API Server访问 etcd启用认证和加密 限制kubelet和kube-proxy的访问 关闭不必要的组件端口 3.2 节点安全 定期更新节点操作系统 限制NodePort使用范围 监控异常对外服务 3.3 Pod安全 使用最小权限原则 定期更新基础镜像 限制危险Capabilities 避免敏感目录挂载 3.4 容器逃逸防护 使用Pod安全策略(PSP)或Pod安全准入控制器 定期更新容器运行时 监控特权容器使用 实施网络策略限制横向移动 4. 总结 本篇详细介绍了K8S集群中前7个攻击点,包括组件安全、节点服务暴露、业务Pod攻击和容器逃逸技术。下篇将继续探讨横向攻击、管理平台安全、镜像库安全和第三方组件安全等攻击点。 关键要点 : K8S组件未授权访问是最直接的攻击入口 容器逃逸是云环境特有的高风险攻击路径 最小权限原则是防御的核心思想 安全配置错误比漏洞更容易被利用 参考资源 CNCF年度调查报告 RBAC权限滥用研究报告 CIS Docker安全基准