GCP - IAM, Principals & Org Policies Enum

支持 HackTricks

服务账户

有关服务账户的介绍,请查看:

枚举

服务账户始终属于一个项目:

gcloud iam service-accounts list --project <project>

用户与组

有关 GCP 中用户与组如何工作的介绍,请查看:

枚举

通过权限 serviceusage.services.enableserviceusage.services.use,可以在项目中 启用服务 并使用它们。

请注意,默认情况下,Workspace 用户被授予 项目创建者 角色,使他们能够 创建新项目。当用户创建项目时,他会被授予 owner 角色。因此,他可以 在项目上启用这些服务以便能够枚举 Workspace

然而,请注意,还需要在 Workspace 中拥有 足够的权限 才能调用这些 API。

如果您可以 启用 admin 服务,并且您的用户在 Workspace 中拥有 足够的权限,您可以使用以下代码 枚举所有组和用户。 即使它显示 identity groups,它也会返回 没有任何组的用户

# Enable admin
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com

# Using admin.googleapis.com
## List all users
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud beta identity groups preview --customer <workspace-id>

# Using cloudidentity.googleapis.com
## List groups of a user (you can list at least the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum

## List Group Members (you can list at least the groups you belong to)
gcloud identity groups memberships list --group-email=<email>
### Make it transitive
gcloud identity groups memberships search-transitive-memberships --group-email=<email>

## Get a graph (if you have enough permissions)
gcloud identity groups memberships get-membership-graph --member-email=<email> --labels=cloudidentity.googleapis.com/groups.discussion_forum

在之前的示例中,参数 --labels 是必需的,因此使用了一个通用值(如果您直接使用 API,就不需要这个参数,如 PurplePanda 在这里所做的)。

即使启用了管理员服务,您也可能会因为被攻陷的工作区用户权限不足而在枚举时遇到错误:

IAM

查看 此处以获取有关 IAM 的基本信息

默认权限

来自 文档:当创建组织资源时,您域中的所有用户默认被授予 计费账户创建者项目创建者 角色。这些默认角色允许您的用户立即开始使用 Google Cloud,但不适用于您组织资源的常规操作。

这些 角色 授予 权限

  • billing.accounts.createresourcemanager.organizations.get

  • resourcemanager.organizations.getresourcemanager.projects.create

此外,当用户创建项目时,他会根据 文档 自动获得该项目的所有者。因此,默认情况下,用户将能够创建项目并在其上运行任何服务(矿工?工作区枚举?...)

GCP 组织中的最高权限是 组织管理员 角色。

set-iam-policy vs add-iam-policy-binding

在大多数服务中,您将能够使用 add-iam-policy-bindingset-iam-policy 方法更改资源的权限。主要区别在于 add-iam-policy-binding 添加一个新的角色绑定 到现有的 IAM 策略,而 set-iam-policy删除之前 授予的权限,并 仅设置命令中指示的权限

枚举

# Roles
## List roles
gcloud iam roles list --project $PROJECT_ID # List only custom roles
gcloud iam roles list --filter='etag:AA=='

## Get perms and description of role
gcloud iam roles describe roles/container.admin
gcloud iam roles describe --project <proj-name> <role-name>

# Policies
gcloud organizations get-iam-policy <org_id>
gcloud resource-manager folders get-iam-policy <folder-id>
gcloud projects get-iam-policy <project-id>

# MISC
## Testable permissions in resource
gcloud iam list-testable-permissions --filter "NOT apiDisabled: true" <resource>
## Grantable roles to a resource
gcloud iam list-grantable-roles <project URL>

cloudasset IAM Enumeration

有不同的方法可以检查用户在不同资源(如组织、文件夹、项目等)中的所有权限,使用此服务。

  • 权限 cloudasset.assets.searchAllIamPolicies 可以请求 资源内的所有 iam 策略

gcloud asset search-all-iam-policies #By default uses current configured project
gcloud asset search-all-iam-policies --scope folders/1234567
gcloud asset search-all-iam-policies --scope organizations/123456
gcloud asset search-all-iam-policies --scope projects/project-id-123123
  • 权限 cloudasset.assets.analyzeIamPolicy 可以请求资源内某个主体的 所有 IAM 策略

# Needs perm "cloudasset.assets.analyzeIamPolicy" over the asset
gcloud asset analyze-iam-policy --organization=<org-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --folder=<folder-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --project=<project-name> \
--identity='user:email@hacktricks.xyz'
  • 权限 cloudasset.assets.searchAllResources 允许列出一个组织、文件夹或项目的所有资源。包括与 IAM 相关的资源(如角色)。

gcloud asset search-all-resources --scope projects/<proj-name>
gcloud asset search-all-resources --scope folders/1234567
gcloud asset search-all-resources --scope organizations/123456
  • 权限 cloudasset.assets.analyzeMove 也可能对检索影响资源(如项目)的策略有用

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • 我想权限 cloudasset.assets.queryIamPolicy 也可以访问查找主体的权限

# But, when running something like this
gcloud asset query --project=<proj> --statement='SELECT * FROM compute_googleapis_com_Instance'
# I get the error
ERROR: (gcloud.asset.query) UNAUTHENTICATED: QueryAssets API is only supported for SCC premium customers. See https://cloud.google.com/security-command-center/pricing

testIamPermissions enumeration

如果您无法使用之前的方法访问IAM信息并且您在红队中。您可以使用工具 https://github.com/carlospolop/bf_my_gcp_perms 来暴力破解您当前的权限。

但是,请注意需要启用服务**cloudresourcemanager.googleapis.com**。

Privesc

在以下页面中,您可以查看如何滥用IAM权限以提升特权

Unauthenticated Enum

Post Exploitation

Persistence

如果您拥有高权限,您可以:

  • 创建新的服务账户(或在Workspace中创建用户)

  • 给您控制的主体更多权限

  • 给脆弱的服务账户更多特权(VM中的SSRF,脆弱的Cloud Function…)

Org Policies

有关Org Policies是什么的介绍,请查看:

IAM策略指示主体通过角色对资源的权限,这些角色分配了细粒度的权限。组织策略限制这些服务的使用方式或禁用哪些功能。这有助于提高GCP环境中每个资源的最小权限。

gcloud resource-manager org-policies list --organization=ORGANIZATION_ID
gcloud resource-manager org-policies list --folder=FOLDER_ID
gcloud resource-manager org-policies list --project=PROJECT_ID

Privesc

在以下页面中,您可以查看如何滥用组织政策权限以提升特权

支持 HackTricks

Last updated