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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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 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:
# 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:
.png)
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
undresourcemanager.organizations.get
resourcemanager.organizations.get
undresourcemanager.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
# 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 nützlich sein, um auch 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
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:
Unauthenticated Enum
GCP - IAM, Principals & Org 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 mehr Privilegien geben (SSRF in vm, verwundbare Cloud Function…)
- …
Org Policies
Für eine Einführung, was Org Policies 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
Auf der folgenden Seite können Sie überprüfen, wie Sie Org-Richtlinienberechtigungen missbrauchen, um Privilegien zu eskalieren:
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.