GCP - IAM, Principals & Org Policies Enum

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Konta Usług

Dla wprowadzenia do tego, co to jest konto usługi, sprawdź:

pageGCP - Basic Information

Wyliczanie

Konto usługi zawsze należy do projektu:

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

Użytkownicy i Grupy

Aby uzyskać wprowadzenie do tego, jak działają Użytkownicy i Grupy w GCP, sprawdź:

pageGCP - Basic Information

Wyliczanie

Dzięki uprawnieniom serviceusage.services.enable i serviceusage.services.use można włączać usługi w projekcie i z nich korzystać.

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, otrzymuje nad nim rolę owner. Dlatego może włączyć te usługi w projekcie, aby móc wyliczyć Workspace.

Jednak zauważ, że konieczne jest również posiadanie wystarczających uprawnień w Workspace, aby móc wywołać te interfejsy 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 wyliczyć wszystkie grupy i użytkowników za pomocą poniższych poleceń. Nawet jeśli mówi grupy tożsamości, zwraca również użytkowników bez przypisanych 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

W poprzednich przykładach parametr --labels jest wymagany, dlatego używana jest ogólna wartość (nie jest wymagany, jeśli używasz API bezpośrednio, tak jak PurplePanda robi tutaj.

Nawet po włączeniu usługi admin, możliwe jest otrzymanie błędu podczas wyliczania ich, ponieważ skompromitowany użytkownik przestrzeni roboczej nie ma wystarczających uprawnień:

IAM

Sprawdź to podstawowe informacje na temat IAM.

Domyślne uprawnienia

Z dokumentacji: Gdy tworzony jest zasób organizacji, wszyscy użytkownicy w Twojej domenie otrzymują domyślnie role Twórca konta rozliczeniowego i Twórca projektu. Te domyślne role pozwalają Twoim użytkownikom natychmiast zacząć korzystać z Google Cloud, ale nie są przeznaczone do regularnego użytku w operacjach Twojego zasobu organizacji.

Te role nadają uprawnienia:

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

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

Ponadto, gdy użytkownik tworzy projekt, automatycznie otrzymuje uprawnienia właściciela tego projektu zgodnie z dokumentacją. Dlatego domyślnie użytkownik będzie mógł tworzyć projekt i uruchamiać na nim dowolną usługę (koparki? Wyliczanie przestrzeni roboczej? ...)

Najwyższą 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ł zmieniać uprawnienia dla zasobu za pomocą 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 usunie wcześniej udzielone uprawnienia i ustawi tylko te, które są wskazane w poleceniu.

Wyliczanie

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

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.searchAllIamPolicies moż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.analyzeIamPolicy może żądać wszystkich polityk IAM podmiotu w zasobie.

# 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.searchAllResources pozwala na wyświetlanie wszystkich zasobów organizacji, folderu lub projektu. Zasoby związane z IAM (takie jak role) są uwzględnione.

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.analyzeMove może być przydatne do pobrania polityk dotyczących zasobu, takiego jak projekt

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Przypuszczam, że uprawnienie cloudasset.assets.queryIamPolicy również może umożliwiać znalezienie 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

Testowanie uprawnień IamPermissions

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 testowania swoich obecnych uprawnień.

Należy jednak zauważyć, że usługa cloudresourcemanager.googleapis.com musi być włączona.

Eskalacja uprawnień

Na następnej stronie możesz sprawdzić, jak nadużyć uprawnień IAM do eskalacji uprawnień:

pageGCP - IAM Privesc

Nieuwierzytelniona enumeracja

pageGCP - IAM, Principals & Org Unauthenticated Enum

Po wykorzystaniu

pageGCP - IAM Post Exploitation

Trwałość

Jeśli masz wysokie uprawnienia, możesz:

  • Tworzyć nowe SA (lub użytkowników, jeśli jesteś w Workspace)

  • Nadawać podmiotom kontrolowanym przez siebie więcej uprawnień

  • Przyznawać więcej przywilejów podatnym SA (SSRF w vm, podatna funkcja Cloud...)

  • ...

Polityki organizacyjne

Aby uzyskać wprowadzenie do tego, czym są polityki organizacyjne, sprawdź:

pageGCP - Basic Information

Polityki IAM wskazują, jakie uprawnienia mają podmioty do zasobów za pomocą ról, które przypisują szczegółowe uprawnienia. Polityki organizacyjne ograniczają sposób korzystania z tych usług lub wyłączają określone funkcje. Pomaga to poprawić zasadę 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

Eskalacja uprawnień

Na następnej stronie możesz sprawdzić, jak wykorzystać uprawnienia polityk organizacyjnych do eskalacji uprawnień:

pageGCP - Orgpolicy Privesc

Last updated