GCP - IAM, Principals & Org Policies Enum

Support HackTricks

Dienstkonten

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

Aufzählung

Ein Dienstkonto gehört immer zu einem Projekt:

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

Benutzer & Gruppen

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

Aufzählung

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

Beachten Sie, dass standardmäßig Workspace-Benutzern die Rolle Projekt-Ersteller zugewiesen wird, was ihnen den Zugang ermöglicht, neue Projekte zu erstellen. Wenn ein Benutzer ein Projekt erstellt, erhält er die Rolle owner über dieses. Er könnte also 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 auflisten. Selbst wenn es identity groups sagt, 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 verwenden, wie PurplePanda hier.

Selbst wenn der Admin-Dienst aktiviert ist, kann es sein, dass Sie einen Fehler bei der Aufzählung 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 die Eigentümerschaft dieses Projekts gewährt gemäß den Dokumenten. Daher kann ein Benutzer standardmäßig ein Projekt erstellen und jeden Dienst darauf ausführen (Miner? Workspace-Aufzählung? ...)

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.

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, 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.

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.

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

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 eine Ressource wie ein Projekt betreffen.

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.

# 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 Sie sich im 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 ausnutzen können, um Privilegien zu eskalieren:

Unauthenticated Enum

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 (SSRF in vm, vuln Cloud Function…) mehr Privilegien geben

Org-Richtlinien

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

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.

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

In der folgenden Seite kannst du überprüfen, wie man Org-Policy-Berechtigungen missbrauchen kann, um Privilegien zu eskalieren:

Support HackTricks

Last updated