GCP - IAM, Principals & Org Policies Enum

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

服务账户

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

GCP - Basic Information

枚举

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

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

用户与组

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

GCP - Basic Information

枚举

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

Caution

请注意,默认情况下,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

Tip

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

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

IAM

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

默认权限

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

这些 角色 授予 权限

  • billing.accounts.createresourcemanager.organizations.get
  • resourcemanager.organizations.getresourcemanager.projects.create

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

Caution

GCP 组织中的最高权限是 Organization Administrator 角色。

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

testIamPermissions 枚举

Caution

如果您 无法使用之前的方法访问 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

持久性

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

  • 创建新的服务账户(或用户,如果在 Workspace 中)
  • 给您控制的主体更多权限
  • 给易受攻击的服务账户更多权限(VM 中的 SSRF,易受攻击的 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

Privesc

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

GCP - Orgpolicy Privesc

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks