GCP - IAM, Principals & Org Policies Enum

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Diensrekening

Vir ’n inleiding oor wat ’n diensrekening is, kyk:

GCP - Basic Information

Enumerasie

’n Diensrekening behoort altyd aan ’n projek:

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

Gebruikers & Groepe

Vir ’n inleiding oor hoe Gebruikers & Groepe in GCP werk, kyk:

GCP - Basic Information

Enumerasie

Met die toestemmings serviceusage.services.enable en serviceusage.services.use is dit moontlik om dienste in ’n projek te aktiveer en dit te gebruik.

Caution

Let daarop dat Workspace-gebruikers standaard die rol Project Creator toegeken kry, wat hulle toegang gee om nuwe projekte te skep. Wanneer ’n gebruiker ’n projek skep, word hy die owner rol oor dit toegeken. So, hy kan hierdie dienste oor die projek aktiveer om in staat te wees om Workspace te enumerate.

Dit is egter ook nodig om voldoende toestemmings in Workspace te hê om hierdie API’s aan te roep.

As jy die admin diens kan aktiveer en as jou gebruiker voldoende voorregte in workspace het, kan jy alle groepe & gebruikers met die volgende lyne enumerate.
Selfs al sê dit identity groups, keer dit ook gebruikers sonder enige groepe terug:

# 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

In die vorige voorbeelde is die parameter --labels vereis, so ’n generiese waarde word gebruik (dit is nie vereis as jy die API direk gebruik nie soos PurplePanda hier doen.

Selfs met die admin diens geaktiveer, is dit moontlik dat jy ’n fout kry wanneer jy hulle opnoem omdat jou gecompromitteerde werkruimte gebruiker nie genoeg toestemming het nie:

IAM

Kyk na hierdie vir basiese inligting oor IAM.

Standaard Toestemmings

Van die dokumentasie: Wanneer ’n organisasie hulpbron geskep word, word alle gebruikers in jou domein standaard die Billing Account Creator en Project Creator rolle toegeken. Hierdie standaard rolle stel jou gebruikers in staat om Google Cloud onmiddellik te begin gebruik, maar is nie bedoel vir gebruik in die gewone werking van jou organisasie hulpbron nie.

Hierdie rolle gee die toestemmings:

  • billing.accounts.create en resourcemanager.organizations.get
  • resourcemanager.organizations.get en resourcemanager.projects.create

Boonop, wanneer ’n gebruiker ’n projek skep, word hy automaties die eienaar van daardie projek toegeken volgens die dokumentasie. Daarom, standaard, sal ’n gebruiker in staat wees om ’n projek te skep en enige diens daarop te laat loop (miners? Werkruimte opnoeming? …)

Caution

Die hoogste voorreg in ’n GCP Organisasie is die Organisasie Administrateur rol.

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

In die meeste van die dienste sal jy in staat wees om die toestemmings oor ’n hulpbron te verander deur die metode add-iam-policy-binding of set-iam-policy te gebruik. Die hoof verskil is dat add-iam-policy-binding ’n nuwe rol binding byvoeg tot die bestaande IAM beleid terwyl set-iam-policy die voorheen toegeken toestemmings sal verwyder en slegs diegene wat in die opdrag aangedui is, sal stel.

Opname

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

Daar is verskillende maniere om al die toestemmings van ’n gebruiker in verskillende hulpbronne (soos organisasies, vouers, projekte…) te kontroleer met behulp van hierdie diens.

  • Die toestemming cloudasset.assets.searchAllIamPolicies kan alle iam beleide binne ’n hulpbron aanvra.
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
  • Die toestemming cloudasset.assets.analyzeIamPolicy kan alle iam-beleide van ’n prinsiep binne ’n hulpbron versoek.
# 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'
  • Die toestemming cloudasset.assets.searchAllResources stel in staat om alle hulpbronne van ’n organisasie, gids of projek op te lys. IAM-verwante hulpbronne (soos rolle) ingesluit.
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
  • Die toestemming cloudasset.assets.analyzeMove kan nuttig wees om ook beleide te verkry wat ’n hulpbron soos ’n projek beïnvloed.
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Ek neem aan die toestemming cloudasset.assets.queryIamPolicy kan ook toegang gee om toestemmings van principals te vind.
# 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 enumerasie

Caution

As jy nie toegang tot IAM-inligting kan verkry nie met die vorige metodes en jy is in ’n Red Team. Jy kan die hulpmiddel https://github.com/carlospolop/bf_my_gcp_perms gebruik om jou huidige toestemmings te brute-force.

Let egter daarop dat die diens cloudresourcemanager.googleapis.com geaktiveer moet wees.

Privesc

Op die volgende bladsy kan jy kyk hoe om IAM-toestemmings te misbruik om voorregte te verhoog:

GCP - IAM Privesc

Ongeauthentiseerde Enum

GCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitatie

GCP - IAM Post Exploitation

Volharding

As jy hoë voorregte het, kan jy:

  • Nuwe SA’s (of gebruikers as in Workspace) skep
  • Principals wat deur jouself beheer word meer toestemmings gee
  • Meer voorregte aan kwesbare SA’s gee (SSRF in vm, kwesbare Cloud Function…)

Organisasiebeleide

Vir ’n inleiding oor wat Organisasiebeleide is, kyk:

GCP - Basic Information

Die IAM-beleide dui die toestemmings aan wat principals oor hulpbronne het via rolle, wat granular toestemmings toegeken word. Organisasiebeleide beperk hoe daardie dienste gebruik kan word of watter funksies gedeaktiveer is. Dit help om die minste voorregte van elke hulpbron in die GCP-omgewing te verbeter.

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

In die volgende bladsy kan jy kyk hoe om org beleidstoestemmings te misbruik om voorregte te verhoog:

GCP - Orgpolicy Privesc

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks