GCP - IAM, Principals & Org Policies Enum

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Diensrekeninge

Vir 'n inleiding oor wat 'n diensrekening is, kyk na:

pageGCP - 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 werk in GCP, kyk na:

pageGCP - Basic Information

Enumerasie

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

Let daarop dat Stoorplekgebruikers standaard die rol Projek Skepper toegeken word, wat hulle toegang gee om nuwe projekte te skep. Wanneer 'n gebruiker 'n projek skep, kry hy die eienaar rol daaroor. So, hy kan hierdie dienste oor die projek aktiveer om Stoorplek te kan enumereer.

Let egter daarop dat dit ook nodig is om genoeg toestemmings in Stoorplek te hê om hierdie API's te kan aanroep.

As jy die admin diens kan aktiveer en as jou gebruiker genoeg voorregte in Stoorplek het, kan jy alle groepe & gebruikers enumereer met die volgende lyne. Selfs al sê dit identiteitsgroepe, dit gee 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

In die vorige voorbeelde is die param --labels vereis, dus 'n generiese waarde word gebruik (dit is nie nodig as jy die API direk gebruik soos PurplePanda hier doen.

Selfs met die admin-diens geaktiveer, is dit moontlik dat jy 'n fout kry tydens die opname omdat jou gekompromitteerde werkspasie-gebruiker nie genoeg toestemmings het nie:

IAM

Kyk hier vir basiese inligting oor IAM.

Standaard Toestemmings

Van die dokumente: 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 laat jou gebruikers toe om dadelik Google Cloud te begin gebruik, maar is nie bedoel vir gebruik in die normale 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

Meer oor, wanneer 'n gebruiker 'n projek skep, word hy outomaties eienaar van daardie projek volgens die dokumente. Daarom sal 'n gebruiker standaard 'n projek kan skep en enige diens daarop kan hardloop (mynwerkers? Werkspasie opname? ...)

Die hoogste voorreg in 'n GCP-organisasie is die Organization Administrator rol.

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

In die meeste van die dienste sal jy die toestemmings oor 'n hulpbron kan verander deur die metode add-iam-policy-binding of set-iam-policy te gebruik. Die hoofverskil is dat add-iam-policy-binding 'n nuwe rolbinding byvoeg tot die bestaande IAM-beleid terwyl set-iam-policy die voorheen toegekende toestemmings sal verwyder en slegs diegene wat in die bevel aangedui is, sal instel.

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 regte van 'n gebruiker in verskillende bronne (soos organisasies, vouers, projekte...) te kontroleer met behulp van hierdie diens.

  • Die reg cloudasset.assets.searchAllIamPolicies kan alle die iam-beleide binne 'n bron 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 die iam-beleide van 'n hoofsaak binne 'n hulpbron aanvra.

# 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 maak dit moontlik om alle bronne van 'n organisasie, vouer, of projek te lys. IAM-verwante bronne (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 wat 'n hulpbron soos 'n projek affekteer, te onttrek

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Ek vermoed dat die toestemming cloudasset.assets.queryIamPolicy ook toegang kan gee om die toestemmings van beginsels 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

ToetsIamPermissions opskrif

Indien jy nie toegang tot IAM-inligting het nie deur die vorige metodes en jy is in 'n Rooi Span, kan jy die instrument gebruik https://github.com/carlospolop/bf_my_gcp_perms om jou huidige toestemmings te brute force.

Let wel dat die diens cloudresourcemanager.googleapis.com geaktiveer moet wees.

Privesc

Op die volgende bladsy kan jy sien hoe om IAM-toestemmings te misbruik om voorregte te eskaleer:

pageGCP - IAM Privesc

Ongeverifieerde Enum

pageGCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitation

pageGCP - IAM Post Exploitation

Volharding

Indien jy hoë voorregte het, kan jy:

  • Nuwe SAs skep (of gebruikers indien in Workspace)

  • Prinsipale wat deur jou beheer word, meer toestemmings gee

  • Meer voorregte aan kwesbare SAs gee (SSRF in vm, kwesbare Cloud Function...)

  • ...

Organisasiebeleide

Vir 'n inleiding oor wat Organisasiebeleide is, kyk na:

pageGCP - Basic Information

Die IAM-beleide dui aan watter toestemmings prinsipale het oor hulpbronne via rolle, wat toegewys is aan fynkorrelige toestemmings. Organisasiebeleide beperk hoe daardie dienste gebruik kan word of watter funksies gedeaktiveer is. Dit help om die minste voorreg 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

Op die volgende bladsy kan jy sien hoe om organisasiebeleide-permissies te misbruik om voorregte te eskaleer:

pageGCP - Orgpolicy Privesc
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated