【云攻防系列】从攻击者视角聊聊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攻击路径:
- 直接通过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安全基准