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可以:

  1. 直接读取/修改Kubernetes集群数据
  2. 获取敏感信息(如Secrets)
  3. 注入恶意配置
  4. 完全控制整个集群

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 控制集群

通过修改以下关键数据可控制集群:

  1. 修改/registry/deployments/下的部署配置
  2. 添加管理员权限用户
  3. 修改集群网络配置

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被未授权访问:

  1. 立即隔离受影响系统
  2. 轮换所有Secret和证书
  3. 审查所有集群配置
  4. 检查是否有恶意部署或修改
  5. 更新etcd配置并修复漏洞

6. 最佳实践

  1. 使用TLS加密etcd通信
  2. 启用基于角色的访问控制(RBAC)
  3. 定期备份etcd数据
  4. 保持etcd版本更新
  5. 最小化etcd网络暴露面

通过以上措施,可以有效防止etcd未授权访问导致Kubernetes集群被控制的风险。

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服务 3.2 确认未授权访问 3.3 使用etcdctl工具操作 3.4 获取敏感信息 重点关注以下路径: /registry/secrets/ - 存储所有Secret /registry/configmaps/ - 存储ConfigMap /registry/services/ - 存储服务信息 3.5 控制集群 通过修改以下关键数据可控制集群: 修改 /registry/deployments/ 下的部署配置 添加管理员权限用户 修改集群网络配置 4. 防御措施 4.1 认证与授权 4.2 网络隔离 仅允许Kubernetes master节点访问etcd 配置防火墙规则限制访问源IP 避免etcd服务暴露在公网 4.3 数据加密 启用etcd数据加密 4.4 监控与审计 启用etcd审计日志 监控异常etcd访问模式 定期检查etcd配置 5. 应急响应 一旦发现etcd被未授权访问: 立即隔离受影响系统 轮换所有Secret和证书 审查所有集群配置 检查是否有恶意部署或修改 更新etcd配置并修复漏洞 6. 最佳实践 使用TLS加密etcd通信 启用基于角色的访问控制(RBAC) 定期备份etcd数据 保持etcd版本更新 最小化etcd网络暴露面 通过以上措施,可以有效防止etcd未授权访问导致Kubernetes集群被控制的风险。