GCP - IAM, Principals & Org Policies Enum
Reading time: 8 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Service Accounts
Za uvod o tome šta je servisni nalog, pogledajte:
Enumeration
Servisni nalog uvek pripada projektu:
gcloud iam service-accounts list --project <project>
Korisnici i Grupe
Za uvod o tome kako funkcionišu Korisnici i Grupe u GCP pogledajte:
Enumeracija
Sa dozvolama serviceusage.services.enable
i serviceusage.services.use
moguće je omogućiti usluge u projektu i koristiti ih.
caution
Imajte na umu da se po defaultu korisnicima Workspace dodeljuje uloga Kreator Projekta, što im omogućava da kreiraju nove projekte. Kada korisnik kreira projekat, dodeljuje mu se uloga owner
. Tako da može omogućiti ove usluge nad projektom kako bi mogao da enumeriše Workspace.
Međutim, primetite da je takođe potrebno imati dovoljno dozvola u Workspace da bi mogli da pozovete ove API-je.
Ako možete omogućiti admin
uslugu i ako vaš korisnik ima dovoljna prava u workspace, mogli biste enumerisati sve grupe i korisnike sa sledećim linijama.
Čak i ako se 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
tip
U prethodnim primerima parametar --labels
je obavezan, tako da se koristi generička vrednost (nije obavezan ako koristite API direktno kao što PurplePanda radi ovde.
Čak i sa omogućenom admin uslugom, moguće je da dobijete grešku prilikom enumeracije jer vaš kompromitovani korisnik radnog prostora nema dovoljno dozvola:
.png)
IAM
Proverite ovo za osnovne informacije o IAM.
Podrazumevane Dozvole
Iz dokumentacije: Kada se kreira resurs organizacije, svim korisnicima u vašem domenu se podrazumevano dodeljuju 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 vaše organizacije.
Ove uloge dodeljuju dozvole:
billing.accounts.create
iresourcemanager.organizations.get
resourcemanager.organizations.get
iresourcemanager.projects.create
Štaviše, kada korisnik kreira projekat, on je automatski dodeljen kao vlasnik tog projekta prema dokumentaciji. Stoga, podrazumevano, korisnik će moći da kreira projekat i pokrene bilo koju uslugu na njemu (rudari? enumeracija radnog prostora? ...)
caution
Najviša privilegija u GCP organizaciji je uloga Administrator 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 novo vezivanje uloge postojećoj IAM politici dok set-iam-policy
briše prethodno dodeljene dozvole i postavlja samo one koje su naznačene u komandi.
Enumeration
# 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
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 zatražiti 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 jednog 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 preuzimanje politika koje utiču na resurs kao što je projekat.
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
- Pretpostavljam da bi dozvola
cloudasset.assets.queryIamPolicy
takođe mogla 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
testIamPermissions enumeracija
caution
Ako ne možete pristupiti IAM informacijama koristeći prethodne metode i nalazite se u Red Team-u. Možete koristiti alat https://github.com/carlospolop/bf_my_gcp_perms da brute-force-ujete svoje trenutne dozvole.
Međutim, imajte na umu da servis cloudresourcemanager.googleapis.com
treba biti omogućen.
Privesc
Na sledećoj stranici možete proveriti kako da zloupotrebite IAM dozvole za eskalaciju privilegija:
Neautentifikovana Enum
GCP - IAM, Principals & Org Unauthenticated Enum
Post Eksploatacija
Persistencija
Ako imate visoke privilegije mogli biste:
- Kreirati nove SAs (ili korisnike ako ste u Workspace)
- Dati principima koje kontrolišete više dozvola
- Dati više privilegija ranjivim SAs (SSRF u vm, ranjiva Cloud Function…)
- …
Org Politike
Za uvod o tome šta su Org Politike proverite:
IAM politike ukazuju na dozvole koje principi imaju nad resursima putem uloga, koje dodeljuju granularne dozvole. Politike organizacije ograničavaju kako se ti servisi mogu koristiti ili koje funkcije su onemogućene. Ovo pomaže u poboljšanju minimalnih 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
Privesc
Na sledećoj stranici možete proveriti kako da zloupotrebite dozvole org politika za eskalaciju privilegija:
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.