GCP - IAM, Principals & Org Policies Enum
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Konta serwisowe
Aby uzyskać wprowadzenie na temat tego, czym jest konto serwisowe, sprawdź:
Enumeracja
Konto serwisowe zawsze należy do projektu:
gcloud iam service-accounts list --project <project>
Użytkownicy i Grupy
Aby uzyskać wprowadzenie na temat działania Użytkowników i Grup w GCP, sprawdź:
Enumeracja
Dzięki uprawnieniom serviceusage.services.enable i serviceusage.services.use możliwe jest włączenie usług w projekcie i ich użycie.
Caution
Zauważ, że domyślnie użytkownicy Workspace otrzymują rolę Twórca Projektu, co daje im dostęp do tworzenia nowych projektów. Gdy użytkownik tworzy projekt, przyznawana jest mu rola
owner. Tak więc, może włączyć te usługi w projekcie, aby móc enumerować Workspace.Jednak zauważ, że potrzebne są również wystarczające uprawnienia w Workspace, aby móc wywołać te API.
Jeśli możesz włączyć usługę admin i jeśli twój użytkownik ma wystarczające uprawnienia w workspace, możesz enumerować wszystkie grupy i użytkowników za pomocą następujących linii.
Nawet jeśli mówi identity groups, zwraca również użytkowników bez żadnych grup:
# 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
W poprzednich przykładach parametr
--labelsjest wymagany, więc używana jest wartość ogólna (nie jest wymagany, jeśli używasz API bezpośrednio, jak PurplePanda robi tutaj.
Nawet przy włączonej usłudze administratora, możliwe jest, że otrzymasz błąd podczas ich enumeracji, ponieważ twój skompromitowany użytkownik workspace nie ma wystarczających uprawnień:
.png)
IAM
Sprawdź to dla podstawowych informacji o IAM.
Domyślne uprawnienia
Z dokumentacji: Gdy tworzony jest zasób organizacji, wszyscy użytkownicy w twojej domenie otrzymują domyślnie role Twórcy Konta Rozliczeniowego i Twórcy Projektu. Te domyślne role pozwalają twoim użytkownikom na natychmiastowe rozpoczęcie korzystania z Google Cloud, ale nie są przeznaczone do regularnego użytkowania zasobu organizacji.
Te role przyznają uprawnienia:
billing.accounts.createiresourcemanager.organizations.getresourcemanager.organizations.getiresourcemanager.projects.create
Ponadto, gdy użytkownik tworzy projekt, automatycznie otrzymuje właściciela tego projektu zgodnie z dokumentacją. Dlatego domyślnie użytkownik będzie mógł stworzyć projekt i uruchomić na nim dowolną usługę (koparki? enumeracja Workspace? …)
Caution
Najwyższym uprawnieniem w organizacji GCP jest rola Administratora Organizacji.
set-iam-policy vs add-iam-policy-binding
W większości usług będziesz mógł zmienić uprawnienia dotyczące zasobu, używając metody add-iam-policy-binding lub set-iam-policy. Główna różnica polega na tym, że add-iam-policy-binding dodaje nowe powiązanie roli do istniejącej polityki IAM, podczas gdy set-iam-policy usuwa wcześniej przyznane uprawnienia i ustawia tylko te, które są wskazane w poleceniu.
Enumeracja
# 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
Istnieją różne sposoby sprawdzenia wszystkich uprawnień użytkownika w różnych zasobach (takich jak organizacje, foldery, projekty…) za pomocą tej usługi.
- Uprawnienie
cloudasset.assets.searchAllIamPoliciesmoże żądać wszystkich polityk iam wewnątrz zasobu.
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
- Uprawnienie
cloudasset.assets.analyzeIamPolicymoże żądać wszystkich polityk iam danego podmiotu w obrębie zasobu.
# 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'
- Uprawnienie
cloudasset.assets.searchAllResourcespozwala na wylistowanie wszystkich zasobów organizacji, folderu lub projektu. Zasoby związane z IAM (takie jak role) są wliczone.
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
- Uprawnienie
cloudasset.assets.analyzeMovemoże być również przydatne do uzyskania polityk wpływających na zasób, taki jak projekt.
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
- Przypuszczam, że uprawnienie
cloudasset.assets.queryIamPolicymoże również umożliwić dostęp do znajdowania uprawnień podmiotów.
# 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
Jeśli nie możesz uzyskać dostępu do informacji IAM za pomocą poprzednich metod i jesteś w Red Team. Możesz użyć narzędzia https://github.com/carlospolop/bf_my_gcp_perms do brutalnego wymuszania swoich aktualnych uprawnień.
Należy jednak pamiętać, że usługa
cloudresourcemanager.googleapis.commusi być włączona.
Privesc
Na poniższej stronie możesz sprawdzić, jak nadużywać uprawnień IAM, aby eskalować uprawnienia:
Unauthenticated Enum
GCP - IAM, Principals & Org Unauthenticated Enum
Post Exploitation
Persistence
Jeśli masz wysokie uprawnienia, możesz:
- Tworzyć nowe SAs (lub użytkowników, jeśli w Workspace)
- Dawać kontrolowanym przez siebie principalom więcej uprawnień
- Dawać więcej uprawnień podatnym SAs (SSRF w vm, podatna Cloud Function…)
- …
Org Policies
Aby uzyskać wprowadzenie do tego, czym są Org Policies, sprawdź:
Polityki IAM wskazują uprawnienia, jakie principal ma nad zasobami za pomocą ról, które przypisują szczegółowe uprawnienia. Polityki organizacyjne ograniczają sposób, w jaki te usługi mogą być używane lub które funkcje są wyłączone. Pomaga to w poprawie zasady najmniejszych uprawnień dla każdego zasobu w środowisku 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
Na poniższej stronie możesz sprawdzić, jak nadużywać uprawnień polityk organizacyjnych, aby eskalować uprawnienia:
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

