GCP - IAM, Principals & Org Policies Enum

Reading time: 8 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Dienstkonten

Für eine Einführung, was ein Dienstkonto ist, siehe:

GCP - Basic Information

Aufzählung

Ein Dienstkonto gehört immer zu einem Projekt:

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

Benutzer & Gruppen

Für eine Einführung, wie Benutzer & Gruppen in GCP funktionieren, siehe:

GCP - Basic Information

Aufzählung

Mit den Berechtigungen serviceusage.services.enable und serviceusage.services.use ist es möglich, Dienste in einem Projekt zu aktivieren und sie zu nutzen.

caution

Beachten Sie, dass standardmäßig Workspace-Benutzern die Rolle Projektcreator zugewiesen wird, was ihnen den Zugriff auf das Erstellen neuer Projekte ermöglicht. Wenn ein Benutzer ein Projekt erstellt, erhält er die Rolle owner über dieses. Daher könnte er diese Dienste über das Projekt aktivieren, um Workspace aufzulisten.

Beachten Sie jedoch, dass es auch erforderlich ist, ausreichende Berechtigungen in Workspace zu haben, um diese APIs aufrufen zu können.

Wenn Sie den admin-Dienst aktivieren können und Ihr Benutzer ausreichende Berechtigungen in Workspace hat, könnten Sie alle Gruppen & Benutzer mit den folgenden Zeilen aufzählen.
Selbst wenn es identity groups sagt, gibt es auch Benutzer ohne Gruppen zurück:

bash
# 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

In den vorherigen Beispielen ist der Parameter --labels erforderlich, daher wird ein generischer Wert verwendet (es ist nicht erforderlich, wenn Sie die API direkt verwenden, wie PurplePanda hier.

Selbst mit aktivierten Admin-Diensten kann es sein, dass Sie einen Fehler bei der Auflistung erhalten, da Ihr kompromittierter Workspace-Benutzer nicht über ausreichende Berechtigungen verfügt:

IAM

Überprüfen Sie dies für grundlegende Informationen zu IAM.

Standardberechtigungen

Laut den Dokumenten: Wenn eine Organisationsressource erstellt wird, erhalten alle Benutzer in Ihrer Domain standardmäßig die Rollen Billing Account Creator und Project Creator. Diese Standardrollen ermöglichen es Ihren Benutzern, Google Cloud sofort zu nutzen, sind jedoch nicht für den regulären Betrieb Ihrer Organisationsressource gedacht.

Diese Rollen gewähren die Berechtigungen:

  • billing.accounts.create und resourcemanager.organizations.get
  • resourcemanager.organizations.get und resourcemanager.projects.create

Darüber hinaus wird einem Benutzer, der ein Projekt erstellt, automatisch der Eigentümer dieses Projekts gemäß den Dokumenten. Daher kann ein Benutzer standardmäßig ein Projekt erstellen und jeden Dienst darauf ausführen (Miner? Workspace-Auflistung? ...)

caution

Das höchste Privileg in einer GCP-Organisation ist die Rolle Organization Administrator.

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

In den meisten der Dienste können Sie die Berechtigungen über eine Ressource mithilfe der Methode add-iam-policy-binding oder set-iam-policy ändern. Der Hauptunterschied besteht darin, dass add-iam-policy-binding eine neue Rollenbindung zur bestehenden IAM-Politik hinzufügt, während set-iam-policy die zuvor gewährten Berechtigungen löscht und nur die im Befehl angegebenen festlegt.

Auflistung

bash
# 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

Es gibt verschiedene Möglichkeiten, alle Berechtigungen eines Benutzers in verschiedenen Ressourcen (wie Organisationen, Ordnern, Projekten...) mit diesem Dienst zu überprüfen.

  • Die Berechtigung cloudasset.assets.searchAllIamPolicies kann alle IAM-Richtlinien innerhalb einer Ressource anfordern.
bash
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
  • Die Berechtigung cloudasset.assets.analyzeIamPolicy kann alle IAM-Richtlinien eines Subjekts innerhalb einer Ressource anfordern.
bash
# 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'
  • Die Berechtigung cloudasset.assets.searchAllResources ermöglicht das Auflisten aller Ressourcen einer Organisation, eines Ordners oder eines Projekts. IAM-bezogene Ressourcen (wie Rollen) sind enthalten.
bash
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
  • Die Berechtigung cloudasset.assets.analyzeMove kann nützlich sein, um auch Richtlinien abzurufen, die eine Ressource wie ein Projekt betreffen.
bash
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Ich nehme an, dass die Berechtigung cloudasset.assets.queryIamPolicy auch Zugriff darauf geben könnte, die Berechtigungen von Prinzipalen zu finden.
bash
# 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

caution

Wenn Sie keinen Zugriff auf IAM-Informationen mit den vorherigen Methoden haben und Sie sich in einem Red Team befinden, könnten Sie das Tool https://github.com/carlospolop/bf_my_gcp_perms verwenden, um Ihre aktuellen Berechtigungen zu brute-forcen.

Beachten Sie jedoch, dass der Dienst cloudresourcemanager.googleapis.com aktiviert sein muss.

Privesc

Auf der folgenden Seite können Sie überprüfen, wie Sie IAM-Berechtigungen missbrauchen können, um Privilegien zu eskalieren:

GCP - IAM Privesc

Unauthenticated Enum

GCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitation

GCP - IAM Post Exploitation

Persistence

Wenn Sie hohe Privilegien haben, könnten Sie:

  • Neue SAs (oder Benutzer, wenn in Workspace) erstellen
  • Principals, die von Ihnen kontrolliert werden, mehr Berechtigungen geben
  • Verwundbaren SAs mehr Privilegien geben (SSRF in vm, verwundbare Cloud Function…)

Org Policies

Für eine Einführung, was Org Policies sind, überprüfen Sie:

GCP - Basic Information

Die IAM-Richtlinien geben die Berechtigungen an, die Principals über Ressourcen durch Rollen haben, die granularen Berechtigungen zugewiesen sind. Organisationsrichtlinien beschränken, wie diese Dienste genutzt werden können oder welche Funktionen deaktiviert sind. Dies hilft, um das geringste Privileg jeder Ressource in der GCP-Umgebung zu verbessern.

bash
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

Auf der folgenden Seite können Sie überprüfen, wie Sie Org-Richtlinienberechtigungen missbrauchen, um Privilegien zu eskalieren:

GCP - Orgpolicy Privesc

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks