GCP - IAM, Principali e Politiche Organizzative Enum
Reading time: 8 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Account di Servizio
Per un'introduzione su cosa sia un account di servizio, controlla:
Enumerazione
Un account di servizio appartiene sempre a un progetto:
gcloud iam service-accounts list --project <project>
Utenti e Gruppi
Per un'introduzione su come funzionano Utenti e Gruppi in GCP, controlla:
Enumerazione
Con i permessi serviceusage.services.enable
e serviceusage.services.use
è possibile abilitare i servizi in un progetto e usarli.
caution
Nota che per impostazione predefinita, gli utenti di Workspace ricevono il ruolo Project Creator, che consente loro di creare nuovi progetti. Quando un utente crea un progetto, gli viene assegnato il ruolo owner
su di esso. Quindi, potrebbe abilitare questi servizi sul progetto per poter enumerare Workspace.
Tuttavia, nota che è anche necessario avere sufficienti permessi in Workspace per poter chiamare queste API.
Se puoi abilitare il servizio admin
e se il tuo utente ha sufficienti privilegi in workspace, potresti enumerare tutti i gruppi e gli utenti con le seguenti righe.
Anche se dice identity groups
, restituisce anche utenti senza alcun gruppo:
# 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
Negli esempi precedenti, il parametro --labels
è richiesto, quindi viene utilizzato un valore generico (non è richiesto se si utilizza l'API direttamente come PurplePanda fa qui.
Anche con il servizio admin abilitato, è possibile che tu riceva un errore nell'enumerarli perché il tuo utente di workspace compromesso non ha abbastanza permessi:
.png)
IAM
Controlla questo per informazioni di base su IAM.
Permessi Predefiniti
Dalla documentazione: Quando viene creato una risorsa dell'organizzazione, a tutti gli utenti nel tuo dominio vengono concessi i ruoli di Creatore di Account di Fatturazione e Creatore di Progetti per impostazione predefinita. Questi ruoli predefiniti consentono ai tuoi utenti di iniziare a utilizzare Google Cloud immediatamente, ma non sono destinati all'uso nell'operazione regolare della risorsa della tua organizzazione.
Questi ruoli concedono i permessi:
billing.accounts.create
eresourcemanager.organizations.get
resourcemanager.organizations.get
eresourcemanager.projects.create
Inoltre, quando un utente crea un progetto, gli viene automaticamente concesso il ruolo di proprietario di quel progetto secondo la documentazione. Pertanto, per impostazione predefinita, un utente sarà in grado di creare un progetto e eseguire qualsiasi servizio su di esso (miner? enumerazione di Workspace? ...)
caution
Il privilegio più alto in un'Organizzazione GCP è il ruolo di Amministratore dell'Organizzazione.
set-iam-policy vs add-iam-policy-binding
Nella maggior parte dei servizi, sarai in grado di modificare i permessi su una risorsa utilizzando il metodo add-iam-policy-binding
o set-iam-policy
. La principale differenza è che add-iam-policy-binding
aggiunge un nuovo binding di ruolo alla policy IAM esistente, mentre set-iam-policy
elimina i permessi precedentemente concessi e imposta solo quelli indicati nel comando.
Enumerazione
# 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
Ci sono diversi modi per controllare tutti i permessi di un utente in diverse risorse (come organizzazioni, cartelle, progetti...) utilizzando questo servizio.
- Il permesso
cloudasset.assets.searchAllIamPolicies
può richiedere tutte le politiche IAM all'interno di una risorsa.
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
- Il permesso
cloudasset.assets.analyzeIamPolicy
può richiedere tutte le politiche iam di un principale all'interno di una risorsa.
# 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'
- Il permesso
cloudasset.assets.searchAllResources
consente di elencare tutte le risorse di un'organizzazione, cartella o progetto. Risorse relative a IAM (come i ruoli) incluse.
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
- Il permesso
cloudasset.assets.analyzeMove
può essere utile anche per recuperare le politiche che influenzano una risorsa come un progetto.
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
- Suppongo che il permesso
cloudasset.assets.queryIamPolicy
potrebbe anche dare accesso per trovare i permessi dei principali.
# 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
Se non puoi accedere alle informazioni IAM utilizzando i metodi precedenti e sei in un Red Team. Potresti utilizzare lo strumento https://github.com/carlospolop/bf_my_gcp_perms per forzare le tue attuali autorizzazioni.
Tuttavia, nota che il servizio cloudresourcemanager.googleapis.com
deve essere abilitato.
Privesc
Nella pagina seguente puoi controllare come abuse IAM permissions to escalate privileges:
Unauthenticated Enum
GCP - IAM, Principals & Org Unauthenticated Enum
Post Exploitation
Persistence
Se hai privilegi elevati potresti:
- Creare nuovi SAs (o utenti se in Workspace)
- Dare ai principi controllati da te più autorizzazioni
- Dare più privilegi a SAs vulnerabili (SSRF in vm, vuln Cloud Function…)
- …
Org Policies
Per un'introduzione su cosa sono le Org Policies controlla:
Le politiche IAM indicano le autorizzazioni che i principi hanno sulle risorse tramite ruoli, ai quali sono assegnate autorizzazioni granulari. Le politiche di organizzazione ristretta come possono essere utilizzati quei servizi o quali funzionalità sono disabilitate. Questo aiuta a migliorare il principio del minor privilegio per ciascuna risorsa nell'ambiente 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
Nella pagina seguente puoi controllare come abusare dei permessi delle politiche organizzative per escalare i privilegi:
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.