SuperAPI AI 工具集

auditing-kubernetes-rbac-privilege-escalation

安全与审计

查看项目

更新于 10-15 12:16

技能介绍

用途

本技能面向获得授权的 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

工作流概览:

  1. 清点 RBAC 对象:kubectl get clusterroles,clusterrolebindings -o wide、kubectl get roles,rolebindings --all-namespaces -o wide,并导出完整 YAML 转储。
  2. 枚举每个主体的有效权限:kubectl auth can-i --list --as=system:serviceaccount:default:default,并针对危险权限做定向探测。
  3. 搜寻升级原语: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 与通配符。
  4. 运行 rbac-police 自动分析:./rbac-police eval ./lib/policies/,或先 ./rbac-police collect -o cluster-snapshot.json 再做离线分析。
  5. 追踪 Pod 到过度授权的服务账号:列出每个 Pod 的 serviceAccountName,筛选自动挂载令牌的 Pod,用 rbac-lookup 查看该账号实际持有的权限。
  6. 在实验环境中演示升级路径(例如具备 create pods 且可访问节点的服务账号,调度一个挂载宿主机文件系统的特权 Pod)。
  7. 报告与整改:列出绑定到 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/