GCP - IAM, Principals & Org Policies Enum

支持 HackTricks

服务账号

有关服务账号的简介,请查看:

GCP - Basic Information

枚举

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

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

用户和用户组

有关在GCP中用户和用户组如何工作的简介,请查看:

GCP - Basic Information

枚举

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

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

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

如果您可以启用admin服务,并且您的用户在Workspace中具有足够的特权,您可以使用以下代码枚举所有用户组和用户。 即使它说**身份组,它也会返回没有任何组的用户**:

# 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 在这里所做的那样

即使启用了管理员服务,由于您受损的 Workspace 用户没有足够的权限,可能会在枚举它们时出现错误:

IAM

查看这里有关 IAM 的基本信息

默认权限

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

这些角色授予以下权限

  • billing.accounts.createresourcemanager.organizations.get

  • resourcemanager.organizations.getresourcemanager.projects.create

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

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枚举

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

  • 权限 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

测试IamPermissions枚举

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

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

提权

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

GCP - IAM Privesc

未经身份验证的枚举

GCP - IAM, Principals & Org Unauthenticated Enum

后期利用

GCP - IAM Post Exploitation

持久性

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

  • 创建新的SA(或用户,如果在Workspace中)

  • 为自己控制的主体提供更多权限

  • 为易受攻击的SA提供更多特权(vm中的SSRF,vuln Cloud Function等)

  • ...

机构策略

有关机构策略的简介,请查看:

GCP - Basic Information

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

提权

您可以查看以下页面,了解如何滥用组织策略权限来提升特权

GCP - Orgpolicy Privesc
支持HackTricks

Last updated