GCP - IAM, Principals & Org Policies Enum

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)!

Άλλοι τρόποι υποστήριξης των HackTricks:

Λογαριασμοί Υπηρεσιών

Για μια εισαγωγή σχετικά με το τι είναι ένας λογαριασμός υπηρεσίας, ελέγξτε:

pageGCP - Basic Information

Απαρίθμηση

Ένας λογαριασμός υπηρεσίας ανήκει πάντα σε ένα έργο:

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

Χρήστες & Ομάδες

Για μια εισαγωγή σχετικά με το πώς λειτουργούν οι Χρήστες & Ομάδες στο GCP, ελέγξτε:

pageGCP - Basic Information

Απαρίθμηση

Με τις άδειες serviceusage.services.enable και serviceusage.services.use είναι δυνατή η ενεργοποίηση υπηρεσιών σε ένα έργο και η χρήση τους.

Σημειώστε ότι από προεπιλογή, οι χρήστες του Workspace διαθέτουν τον ρόλο Project Creator, που τους παρέχει πρόσβαση για τη δημιουργία νέων έργων. Όταν ένας χρήστης δημιουργεί ένα έργο, του αποδίδεται ο ρόλος owner πάνω σε αυτό. Έτσι, μπορεί να ενεργοποιήσει αυτές τις υπηρεσίες στο έργο για να είναι σε θέση να απαριθμήσει το Workspace.

Ωστόσο, σημειώστε ότι απαιτείται επίσης να έχετε επαρκείς δικαιώματα στο Workspace για να είστε σε θέση να καλέσετε αυτές τις διεπαφές προγραμματισμού εφαρμογών.

Αν μπορείτε να ενεργοποιήσετε την υπηρεσία admin και αν ο χρήστης σας έχει επαρκή δικαιώματα στο workspace, μπορείτε να απαριθμήσετε όλες τις ομάδες & χρήστες με τις παρακάτω γραμμές. Ακόμη κι αν αναφέρεται identity groups, επιστρέφει επίσης χρήστες χωρίς καμία ομάδα:

# 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

Στα προηγούμενα παραδείγματα το παράμετρο --labels είναι υποχρεωτική, οπότε χρησιμοποιείται μια γενική τιμή (δεν είναι απαραίτητη εάν χρησιμοποιείτε το API απευθείας όπως κάνει ο PurplePanda εδώ.

Ακόμα και με την υπηρεσία διαχειριστή ενεργοποιημένη, είναι δυνατόν να λάβετε ένα σφάλμα κατά την απαρίθμησή τους επειδή ο χρήστης του χώρου εργασίας που έχετε χειραγωγήσει δεν έχει αρκετές άδειες:

IAM

Ελέγξτε αυτό για βασικές πληροφορίες σχετικά με το IAM.

Προεπιλεγμένες Άδειες

Από τα έγγραφα: Όταν δημιουργείται ένας πόρος οργανισμού, όλοι οι χρήστες στον τομέα σας αποκτούν τους ρόλους Δημιουργός Λογαριασμού Χρέωσης και Δημιουργός Έργου από προεπιλογή. Αυτοί οι προεπιλεγμένοι ρόλοι επιτρέπουν στους χρήστες σας να αρχίσουν να χρησιμοποιούν αμέσως το Google Cloud, αλλά δεν προορίζονται για χρήση στην κανονική λειτουργία του πόρου του οργανισμού σας.

Αυτοί οι ρόλοι χορηγούν τις άδειες:

  • billing.accounts.create και resourcemanager.organizations.get

  • resourcemanager.organizations.get και resourcemanager.projects.create

Επιπλέον, όταν ένας χρήστης δημιουργεί ένα έργο, του απονέμεται αυτόματα ο ιδιοκτήτης του έργου σύμφωνα με τα έγγραφα. Συνεπώς, από προεπιλογή, ένας χρήστης θα μπορεί να δημιουργήσει ένα έργο και να εκτελέσει οποιαδήποτε υπηρεσία σε αυτό (miner? Απαρίθμηση Workspace? ...)

Η υψηλότερη προνομιούχα στον Οργανισμό GCP είναι ο ρόλος Διαχειριστής Οργανισμού.

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

Στις περισσότερες υπηρεσίες θα μπορείτε να αλλάξετε τις άδειες επάνω σε έναν πόρο χρησιμοποιώντας τη μέθοδο add-iam-policy-binding ή set-iam-policy. Η βασική διαφορά είναι ότι το add-iam-policy-binding προσθέτει μια νέα δέσμευση ρόλου στην υπάρχουσα πολιτική IAM, ενώ το set-iam-policy θα διαγράψει τις προηγουμένως χορηγηθείσες άδειες και θα ορίσει μόνο τις που υποδεικνύονται στην εντολή.

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

Απαρίθμηση IAM του cloudasset

Υπάρχουν διαφορετικοί τρόποι για να ελέγξετε όλα τα δικαιώματα ενός χρήστη σε διάφορους πόρους (όπως οργανισμούς, φακέλους, έργα...) χρησιμοποιώντας αυτήν την υπηρεσία.

  • Το δικαίωμα cloudasset.assets.searchAllIamPolicies μπορεί να ζητήσει όλες τις πολιτικές iam μέσα σε έναν πόρο.

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
  • Η άδεια cloudasset.assets.analyzeIamPolicy μπορεί να ζητήσει όλες τις πολιτικές iam ενός κύριου μέσα σε ένα πόρο.

# 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'
  • Η άδεια cloudasset.assets.searchAllResources επιτρέπει τη λίσταριση όλων των πόρων μιας οργάνωσης, φακέλου ή έργου. Συμπεριλαμβάνονται και οι σχετικοί πόροι IAM (όπως ρόλοι).

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
  • Η άδεια cloudasset.assets.analyzeMove μπορεί να είναι χρήσιμη και για την ανάκτηση πολιτικών που επηρεάζουν έναν πόρο όπως ένα έργο.

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Υποθέτω ότι η άδεια cloudasset.assets.queryIamPolicy θα μπορούσε επίσης να παρέχει πρόσβαση για την εύρεση των δικαιωμάτων των αρχών

# 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

Αν δεν μπορείτε να έχετε πρόσβαση στις πληροφορίες IAM χρησιμοποιώντας τις προηγούμενες μεθόδους και βρίσκεστε σε ομάδα Red Team, μπορείτε να χρησιμοποιήσετε το εργαλείο https://github.com/carlospolop/bf_my_gcp_perms για να εκτελέσετε brute-force στα τρέχοντα δικαιώματά σας.

Ωστόσο, σημειώστε ότι η υπηρεσία cloudresourcemanager.googleapis.com πρέπει να είναι ενεργοποιημένη.

Ανύψωση δικαιωμάτων

Στην ακόλουθη σελίδα μπορείτε να ελέγξετε πώς να καταχραστείτε τα δικαιώματα IAM για την ανύψωση προνομίων:

pageGCP - IAM Privesc

Ανεξιχνίαστη Απαρίθμηση

pageGCP - IAM, Principals & Org Unauthenticated Enum

Μετά την Εκμετάλλευση

pageGCP - IAM Post Exploitation

Διατήρηση

Αν έχετε υψηλά προνόμια μπορείτε:

  • Να δημιουργήσετε νέα SAs (ή χρήστες αν βρίσκεστε στο Workspace)

  • Να δώσετε σε αρχές που ελέγχετε περισσότερα δικαιώματα

  • Να δώσετε περισσότερα προνόμια σε ευάλωτα SAs (SSRF σε vm, ευάλωτη Cloud Function...)

  • ...

Πολιτικές Οργανισμού

Για μια εισαγωγή σχετικά με το τι είναι οι Πολιτικές Οργανισμού, ελέγξτε:

pageGCP - Basic Information

Οι πολιτικές IAM υποδεικνύουν τα δικαιώματα που έχουν οι αρχές σε πόρους μέσω ρόλων, οι οποίοι ανατίθενται διακριτικά δικαιώματα. Οι πολιτικές οργανισμού περιορίζουν τον τρόπο με τον οποίο μπορούν να χρησιμοποιηθούν αυτές οι υπηρεσίες ή ποια χαρακτηριστικά είναι απενεργοποιημένα. Αυτό βοηθά στη βελτίωση του λιγότερου δυνατού προνομίου κάθε πόρου στο περιβάλλον 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

Ανύψωση δικαιωμάτων

Στην παρακάτω σελίδα μπορείτε να ελέγξετε πώς να καταχραστείτε τα δικαιώματα των πολιτικών οργανισμού για ανύψωση προνομίων:

pageGCP - Orgpolicy Privesc
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated