GCP - IAM, Principals & Org Policies Enum

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Service Accounts

Za uvod o tome šta je servisni nalog proverite:

pageGCP - Basic Information

Enumeracija

Servisni nalog uvek pripada projektu:

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

Korisnici i grupe

Za uvod o tome kako korisnici i grupe funkcionišu u GCP proverite:

pageGCP - Basic Information

Enumeracija

Sa dozvolama serviceusage.services.enable i serviceusage.services.use moguće je omogućiti usluge u projektu i koristiti ih.

Imajte na umu da su korisnicima Workspace-a podrazumevano dodeljene uloge Kreator projekta, što im omogućava pristup kreiranju novih projekata. Kada korisnik kreira projekat, dodeljena mu je uloga owner nad njim. Dakle, može omogućiti ove usluge nad projektom kako bi mogao da enumeriše Workspace.

Međutim, imajte na umu da je takođe potrebno imati dovoljno dozvola u Workspace-u kako biste mogli da pozovete ove API-je.

Ako možete omogućiti uslugu admin i ako vaš korisnik ima dovoljno privilegija u Workspace-u, možete enumerisati sve grupe i korisnike sa sledećim linijama. Čak i ako kaže identity groups, takođe vraća korisnike bez ikakvih grupa:

# 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

U prethodnim primerima parametar --labels je obavezan, pa se koristi generička vrednost (nije potreban ako koristite API direktno kao što PurplePanda radi ovde.

Čak i sa omogućenom admin uslugom, moguće je da dobijete grešku prilikom numerisanja jer vaš kompromitovani korisnik workspace-a nema dovoljno dozvola:

IAM

Proverite ovde osnovne informacije o IAM-u.

Podrazumevane Dozvole

Iz dokumenata: Kada se kreira resurs organizacije, svi korisnici u vašem domenu automatski dobijaju uloge Kreator računa za naplatu i Kreator projekta. Ove podrazumevane uloge omogućavaju vašim korisnicima da odmah počnu da koriste Google Cloud, ali nisu namenjene za redovno korišćenje resursa organizacije.

Ove uloge dodeljuju dozvole:

  • billing.accounts.create i resourcemanager.organizations.get

  • resourcemanager.organizations.get i resourcemanager.projects.create

Pored toga, kada korisnik kreira projekat, automatski postaje vlasnik tog projekta prema dokumentima. Dakle, podrazumevano, korisnik će moći da kreira projekat i pokrene bilo koju uslugu na njemu (rudari? Enumeracija Workspace-a? ...)

Najveći privilegija u GCP organizaciji je uloga Administratora organizacije.

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

U većini usluga moći ćete da promenite dozvole nad resursom koristeći metodu add-iam-policy-binding ili set-iam-policy. Glavna razlika je u tome što add-iam-policy-binding dodaje novu ulogu postojećoj IAM politici dok će set-iam-policy obrisati prethodno dodeljene dozvole i postaviti samo one navedene u komandi.

Enumeracija

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

Postoje različiti načini da se provere sve dozvole korisnika u različitim resursima (kao što su organizacije, fascikle, projekti...) koristeći ovu uslugu.

  • Dozvola cloudasset.assets.searchAllIamPolicies može zahtevati sve iam politike unutar resursa.

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
  • Dozvola cloudasset.assets.analyzeIamPolicy može zatražiti sve iam politike glavnog subjekta unutar resursa.

# 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'
  • Dozvola cloudasset.assets.searchAllResources omogućava listanje svih resursa organizacije, fascikle ili projekta. Uključeni su resursi povezani sa IAM-om (kao što su uloge).

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
  • Dozvola cloudasset.assets.analyzeMove može biti korisna i za dobijanje politika koje utiču na resurs poput projekta

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Pretpostavljam da dozvola cloudasset.assets.queryIamPolicy takođe može omogućiti pristup pronalaženju dozvola principala

# 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

Testiranje dozvola Iam enumeracija

Ako ne možete pristupiti informacijama o IAM koristeći prethodne metode i ako ste u Crvenom timu, možete koristiti alat https://github.com/carlospolop/bf_my_gcp_perms za grubo testiranje vaših trenutnih dozvola.

Međutim, imajte na umu da je potrebno omogućiti uslugu cloudresourcemanager.googleapis.com.

Eskalacija privilegija

Na sledećoj stranici možete proveriti kako zloupotrebiti IAM dozvole za eskalaciju privilegija:

pageGCP - IAM Privesc

Neautentifikovana enumeracija

pageGCP - IAM, Principals & Org Unauthenticated Enum

Post eksploatacija

pageGCP - IAM Post Exploitation

Upornost

Ako imate visoke privilegije, možete:

  • Kreirati nove servisne naloge (ili korisnike ako ste u Workspace-u)

  • Dati principale koje kontrolišete više dozvola

  • Dati više privilegija ranjivim servisnim nalozima (SSRF u vm, ranjiva Cloud funkcija...)

  • ...

Org Politike

Za uvod u to šta su Org Politike, pogledajte:

pageGCP - Basic Information

IAM politike ukazuju na dozvole koje principali imaju nad resursima putem uloga, koje dodeljuju granularne dozvole. Organizacione politike ograničavaju način korišćenja tih usluga ili onemogućavaju određene funkcije. Ovo pomaže u poboljšanju najmanjih privilegija svakog resursa u GCP okruženju.

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

Eskalacija privilegija

Na sledećoj stranici možete proveriti kako zloupotrebiti dozvole org politika za eskalaciju privilegija:

pageGCP - Orgpolicy Privesc

Last updated