GCP - IAM, Principals & Org Policies Enum

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

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

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

GCP - Basic Information

Καταμέτρηση

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

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

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

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

GCP - Basic Information

Απαρίθμηση

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

Caution

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

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

Εάν μπορείτε να ενεργοποιήσετε την υπηρεσία 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

Tip

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

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

IAM

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

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

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

Αυτοί οι ρόλοι παρέχουν τις άδειες:

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

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

Caution

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

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

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

Enumeration

# 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

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

  • Η άδεια 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 enumeration

Caution

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

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

Privesc

Στην παρακάτω σελίδα μπορείτε να δείτε πώς να καταχραστείτε τα δικαιώματα IAM για να κλιμακώσετε τα προνόμια:

GCP - IAM Privesc

Unauthenticated Enum

GCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitation

GCP - IAM Post Exploitation

Persistence

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

  • Δημιουργήσετε νέες SAs (ή χρήστες αν είστε σε Workspace)
  • Δώσετε σε κύριους που ελέγχετε περισσότερα δικαιώματα
  • Δώσετε περισσότερα προνόμια σε ευάλωτες SAs (SSRF σε vm, ευάλωτη Cloud Function…)

Org Policies

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

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

Privesc

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

GCP - Orgpolicy Privesc

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks