GCP - IAM, Principals & Org Policies Enum

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Dienstkonten

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

pageGCP - Basic Information

Enumeration

Ein Dienstkonto gehört immer zu einem Projekt:

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

Benutzer & Gruppen

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

pageGCP - Basic Information

Auflistung

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

Beachten Sie, dass standardmäßig Workspace-Benutzern die Rolle Projektersteller zugewiesen wird, was ihnen Zugriff gibt, neue Projekte zu erstellen. Wenn ein Benutzer ein Projekt erstellt, erhält er die Rolle owner darüber. Daher könnte er diese Dienste im Projekt aktivieren, um Workspace aufzulisten.

Es ist jedoch auch erforderlich, ausreichende Berechtigungen in Workspace zu haben, um diese APIs aufrufen zu können.

Wenn Sie den Dienst admin aktivieren können und wenn Ihr Benutzer ausreichende Berechtigungen in Workspace hat, könnten Sie alle Gruppen & Benutzer auflisten mit den folgenden Befehlen. Auch wenn es Identitätsgruppen heißt, gibt es auch Benutzer ohne Gruppen zurück:

# 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

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

Auch wenn der Admin-Dienst aktiviert ist, kann es sein, dass Sie beim Aufzählen Fehler erhalten, weil Ihr kompromittierter Workspace-Benutzer nicht über ausreichende Berechtigungen verfügt:

IAM

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

Standardberechtigungen

Gemäß den Dokumenten: Wenn ein Organisationsressource erstellt wird, erhalten standardmäßig alle Benutzer in Ihrer Domäne 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 vorgesehen.

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 beim Erstellen eines Projekts automatisch gemäß den Dokumenten der Eigentümer dieses Projekts zugewiesen. Daher kann ein Benutzer standardmäßig ein Projekt erstellen und jeden Dienst darauf ausführen (Miner? Workspace-Aufzählung? ...)

Die höchste Berechtigung in einer GCP-Organisation ist die Rolle des Organisationsadministrators.

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

In den meisten Diensten können Sie die Berechtigungen für eine Ressource mit der Methode add-iam-policy-binding oder set-iam-policy ändern. Der Hauptunterschied besteht darin, dass add-iam-policy-binding eine neue Rollenbindung zur vorhandenen IAM-Richtlinie hinzufügt, während set-iam-policy die zuvor gewährten Berechtigungen löscht und nur die im Befehl angegebenen setzt.

Aufzählung

# 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, um alle Berechtigungen eines Benutzers in verschiedenen Ressourcen (wie Organisationen, Ordner, Projekte...) mithilfe dieses Dienstes zu überprüfen.

  • Die Berechtigung cloudasset.assets.searchAllIamPolicies kann alle IAM-Richtlinien innerhalb einer Ressource abrufen.

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 Prinzipals innerhalb eines Ressourcenobjekts anfordern.

# 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 Projekts. IAM-bezogene Ressourcen (wie Rollen) sind inbegriffen.

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 auch nützlich sein, um Richtlinien abzurufen, die sich auf eine Ressource wie ein Projekt auswirken.

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Ich vermute, dass die Berechtigung cloudasset.assets.queryIamPolicy auch Zugriff auf die Suche nach Berechtigungen von Prinzipalen geben könnte.

# 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

Wenn Sie keinen Zugriff auf IAM-Informationen mit den vorherigen Methoden haben und im Red Team sind, könnten Sie das Tool https://github.com/carlospolop/bf_my_gcp_perms verwenden, um Ihre aktuellen Berechtigungen per Brute-Force zu erzwingen.

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

Privesc

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

pageGCP - IAM Privesc

Unauthenticated Enum

pageGCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitation

pageGCP - IAM Post Exploitation

Persistence

Wenn Sie hohe Berechtigungen haben, könnten Sie:

  • Neue SAs erstellen (oder Benutzer, wenn Sie in Workspace sind)

  • Prinzipale, die von Ihnen kontrolliert werden, mehr Berechtigungen geben

  • Mehr Privilegien an anfällige SAs geben (SSRF in vm, vuln Cloud Function...)

  • ...

Org Policies

Für eine Einführung in das, was Org Policies sind, siehe:

pageGCP - Basic Information

Die IAM-Richtlinien geben an, welche Berechtigungen Prinzipale über Ressourcen über Rollen haben, die granulare Berechtigungen zugewiesen bekommen. Organisationsrichtlinien beschränken, wie diese Dienste verwendet werden können oder welche Funktionen deaktiviert sind. Dies hilft, um das Prinzip des geringsten Privilegs für jede Ressource in der GCP-Umgebung zu verbessern.

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

Berechtigungserhöhung

Auf der folgenden Seite können Sie nachschauen, wie Sie Organisationsrichtlinienberechtigungen missbrauchen, um Berechtigungen zu eskalieren:

pageGCP - Orgpolicy Privesc

Last updated