用途
本技能面向获得授权的 Kubernetes 安全评估与集群渗透测试,用于系统性地审计 RBAC(基于角色的访问控制)配置,找出过度宽松的角色、绑定以及服务账号令牌滥用路径。由于工作负载默认会挂载服务账号令牌,攻击者一旦攻陷某个 Pod,即可继承该账号的 RBAC 权限;过度宽松的绑定会把单个被攻陷的 Pod 变成整个集群的接管入口。
主要能力
- 清点集群内全部 Role、ClusterRole、RoleBinding、ClusterRoleBinding 对象,并导出为 YAML 供离线分析。
- 使用
kubectl auth can-i --list --as枚举每个主体的有效权限(该检查会评估实时授权器,包含 RBAC 与 webhook)。 - 识别持有“等价于 cluster-admin”危险原语的主体,包括:对 roles 的 escalate、对 clusterroles 的 bind、对 users/groups/serviceaccounts 的 impersonate、对 pods 的 create/update/patch、对 pods/exec、pods/attach、pods/ephemeralcontainers 的 create、对 secrets 的 get/list/watch、对 serviceaccounts/token 的 create、对 validatingwebhookconfigurations/mutatingwebhookconfigurations、nodes/proxy、certificatesigningrequests/approval 的 update/patch,以及通配符
*/*。 - 使用 rbac-police 基于 Rego 策略分析集群快照,给出可升级至 cluster-admin 的主体及具体路径。
- 使用 kubectl-who-can 反向查询“谁能执行某操作”,使用 rakkess(access-matrix)生成主体维度的动词×资源矩阵,使用 rbac-lookup 查询某主体持有的角色。
- 将挂载令牌的 Pod 映射到高风险服务账号,确认发现是否可被实际工作负载触达。
- 在实验环境中端到端演示一条升级路径,并产出带最小权限整改建议的优先级报告。
使用方式
前置条件:已配置指向目标集群的 kubectl(使用自己的凭据或捕获的服务账号令牌);具备 RBAC 对象的读取权限(多数审计以 cluster-reader 或 admin 上下文运行)。
工具安装命令(保留原文):
# rbac-police - find escalation paths (Cymulate)
curl -L https://github.com/PaloAltoNetworks/rbac-police/releases/latest/download/rbac-police-linux-amd64 -o rbac-police
chmod +x rbac-police
# kubectl-who-can - which subjects can perform an action (Aqua)
kubectl krew install who-can
# rakkess - access matrix of resources x verbs for the current/another subject
kubectl krew install access-matrix
# rbac-lookup - which roles a subject has (FairwindsOps)
kubectl krew install rbac-lookup
工作流概览:
- 清点 RBAC 对象:
kubectl get clusterroles,clusterrolebindings -o wide、kubectl get roles,rolebindings --all-namespaces -o wide,并导出完整 YAML 转储。 - 枚举每个主体的有效权限:
kubectl auth can-i --list --as=system:serviceaccount:default:default,并针对危险权限做定向探测。 - 搜寻升级原语:
kubectl who-can create pods、kubectl who-can '*' '*'、kubectl who-can get secrets、kubectl who-can impersonate users、kubectl who-can create serviceaccounts/token等,并在原始转储中 grep escalate/bind/impersonate 与通配符。 - 运行 rbac-police 自动分析:
./rbac-police eval ./lib/policies/,或先./rbac-police collect -o cluster-snapshot.json再做离线分析。 - 追踪 Pod 到过度授权的服务账号:列出每个 Pod 的 serviceAccountName,筛选自动挂载令牌的 Pod,用 rbac-lookup 查看该账号实际持有的权限。
- 在实验环境中演示升级路径(例如具备 create pods 且可访问节点的服务账号,调度一个挂载宿主机文件系统的特权 Pod)。
- 报告与整改:列出绑定到 cluster-admin 的主体,给出最小权限整改建议。
适用场景
- 获得授权的 Kubernetes 安全评估或集群渗透测试期间。
- 攻陷某个 Pod 后,判断其服务账号令牌能触达哪些资源。
- 生产上线前审查 RBAC 漂移。
- 平台迁移或 Helm 发布后验证最小权限。
限制与注意事项
- 法律声明:本技能仅用于获得授权的安全测试与教育目的。枚举和行使 RBAC 权限会影响在线集群的访问态势,只能测试自己拥有或获得书面明确授权评估的集群。
- 使用
--as模拟主体需要审计身份具备 impersonate 权限。 - rbac-police 需要具备读取权限的 kubeconfig;离线分析需先采集快照。
- 演示升级路径的步骤仅限实验环境。
- 整改建议包括:用显式动词/资源替换通配符;除非必要,移除 escalate/bind/impersonate;对不调用 API 的工作负载设置
automountServiceAccountToken: false;尽可能使用命名空间级 Role 而非 ClusterRole;谨慎使用 aggregationRule。
MITRE ATT&CK 映射
- T1078 Valid Accounts(防御规避/持久化/权限提升)
- T1098 Account Manipulation(持久化)
- T1528 Steal Application Access Token(凭据访问)
- T1613 Container and Resource Discovery(发现)
- T1611 Escape to Host(权限提升)
工具与资源
- kubectl auth can-i:权威的实时权限检查(--list、--as),https://kubernetes.io/docs/reference/access-authn-authz/authorization/
- rbac-police:基于 Rego 的升级路径分析,https://github.com/PaloAltoNetworks/rbac-police
- kubectl-who-can:反向查询谁能执行某操作,https://github.com/aquasecurity/kubectl-who-can
- rakkess(access-matrix):主体维度的动词×资源矩阵,https://github.com/corneliusweig/rakkess
- rbac-lookup:查询主体持有的角色,https://github.com/FairwindsOps/rbac-lookup
- Kubernetes RBAC Good Practices:权威的升级原语清单,https://kubernetes.io/docs/concepts/security/rbac-good-practices/