BadPods项目最佳实践:如何安全测试K8s集群权限配置
BadPods是一个用于创建具有不同特权级别的Pod清单集合,能够快速演示允许hostNetwork、hostPID、hostPath、hostIPC和privileged等安全敏感Pod属性所带来的风险。本文将介绍如何使用BadPods项目进行K8s集群权限配置的安全测试,帮助新手和普通用户轻松掌握相关技能。
BadPods项目概述
BadPods项目提供了128个独立的、随时可用的清单文件,涵盖了8种不同特权级别的Bad Pods(如hostpid、hostnetwork、everything-allowed等),8种可创建Pod的资源类型(Pod、Deployment、ReplicaSet、StatefulSet等),以及2种访问已创建Pod的方式(exec和反向shell)。
BadPods项目架构图,展示了不同特权级别的Bad Pods及其相关资源类型
为什么需要测试K8s集群权限配置
K8s集群的权限配置不当可能导致严重的安全风险,例如攻击者可以通过创建具有特权的Pod来获取集群的敏感信息、执行恶意代码等。BadPods项目通过提供各种特权Pod的清单,帮助用户测试集群的权限配置,及时发现并修复潜在的安全漏洞。
BadPods的八种特权Pod类型
BadPods项目包含八种不同特权级别的Pod,每种Pod都对应着不同的安全风险:
1. Everything allowed
这种Pod拥有所有的特权,包括privileged、hostPID、hostPath、hostNetwork和hostIPC。
Everything allowed Pod权限示意图,所有权限门都处于打开状态
相关清单文件路径:manifests/everything-allowed/
2. Privileged and hostPid
此Pod同时拥有privileged和hostPID特权。
Privileged and hostPid Pod权限示意图,Privileged和hostPID权限门打开
相关清单文件路径:manifests/priv-and-hostpid/
3. Privileged only
仅拥有privileged特权的Pod。
Privileged only Pod权限示意图,仅Privileged权限门打开
相关清单文件路径:manifests/priv/
4. hostPath only
只具备hostPath特权的Pod。
hostPath only Pod权限示意图,仅hostPath权限门打开
相关清单文件路径:manifests/hostpath/
5. hostPid only
拥有hostPID特权的Pod。
hostPid only Pod权限示意图,仅hostPID权限门打开
相关清单文件路径:manifests/hostpid/
6. hostNetwork only
具备hostNetwork特权的Pod。
hostNetwork only Pod权限示意图,仅hostNetwork权限门打开
相关清单文件路径:manifests/hostnetwork/
7. hostIPC only
拥有hostIPC特权的Pod。
hostIPC only Pod权限示意图,仅hostIPC权限门打开
相关清单文件路径:manifests/hostipc/
8. Nothing allowed
不拥有任何特权的Pod,可作为测试的基准。
Nothing allowed Pod权限示意图,所有权限门都处于关闭状态
相关清单文件路径:manifests/nothing-allowed/
测试前的准备工作
在使用BadPods进行测试之前,需要确保满足以下条件:
- 能够访问K8s集群。
- 具有在至少一个命名空间中创建以下资源类型之一的RBAC权限:CronJob、DeamonSet、Deployment、Job、Pod、ReplicaSet、ReplicationController、StatefulSet。
- 具有exec进入Pod的RBAC权限,或者网络策略允许Pod到测试者的反向shell连接。
- 没有Pod安全策略执行,或者存在允许创建具有一个或多个安全敏感属性的Pod的策略。
安全测试的两种方法
方法一:有条理的测试方法
- 评估RBAC:确定可以创建哪些资源类型。
- 评估准入策略:确定能够创建哪些Bad Pods。
- 创建资源:根据允许的情况,使用特定的Bad Pod类型和资源类型创建资源。
- 后渗透测试:根据所创建的Bad Pod类型,参考相应的README中概述的后渗透测试步骤。
方法二:全面测试方法
- 创建资源:直接应用不同的清单,查看哪些能够成功创建。例如:
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/priv-and-hostpid/pod/priv-and-hostpid-exec-pod.yaml ...(依次应用其他Bad Pod的清单) - 后渗透测试:对于任何成功创建的Pod,参考相应的README中概述的后渗透测试步骤。
安全测试的最佳实践
1. 从克隆仓库创建所有八个Bad Pods
git clone https://gitcode.com/gh_mirrors/ba/badPods
cd badPods
kubectl apply -f ./manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml
kubectl apply -f ./manifests/priv-and-hostpid/pod/priv-and-hostpid-exec-pod.yaml
kubectl apply -f ./manifests/priv/pod/priv-exec-pod.yaml
kubectl apply -f ./manifests/hostpath/pod/hostpath-exec-pod.yaml
kubectl apply -f ./manifests/hostpid/pod/hostpid-exec-pod.yaml
kubectl apply -f ./manifests/hostnetwork/pod/hostnetwork-exec-pod.yaml
kubectl apply -f ./manifests/hostipc/pod/hostipc-exec-pod.yaml
kubectl apply -f ./manifests/nothing-allowed/pod/nothing-allowed-exec-pod.yaml
2. 使用everything-allowed Pod创建所有八种资源类型
find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl apply -f {} \;
3. 清理测试资源
测试完成后,及时清理创建的资源,避免对集群造成不必要的影响:
find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl delete -f {} \;
总结
BadPods项目为K8s集群权限配置的安全测试提供了便捷的工具和方法。通过本文介绍的最佳实践,新手和普通用户可以轻松地使用BadPods来测试自己的K8s集群,及时发现并修复潜在的安全漏洞,提高集群的安全性。在使用过程中,务必遵循安全测试的规范和流程,确保测试活动不会对生产环境造成影响。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



