GCP - Basic Information

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

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

Ιεραρχία Πόρων

Το Google Cloud χρησιμοποιεί μια Ιεραρχία Πόρων που είναι παρόμοια, συνεπώς, με αυτήν ενός παραδοσιακού συστήματος αρχείων. Αυτό παρέχει ένα λογικό ροή γονέα/παιδιού με συγκεκριμένα σημεία σύνδεσης για πολιτικές και δικαιώματα.

Σε υψηλό επίπεδο, φαίνεται έτσι:

Organization
--> Folders
--> Projects
--> Resources

Ένα εικονικό μηχάνημα (που ονομάζεται Compute Instance) είναι ένας πόρος. Ένας πόρος βρίσκεται σε ένα έργο, πιθανότατα δίπλα σε άλλα Compute Instances, κάδους αποθήκευσης κ.λπ.

Μετεγκατάσταση Έργων

Είναι δυνατή η μετεγκατάσταση ενός έργου χωρίς κάποια οργάνωση σε μια οργάνωση με τις άδειες roles/resourcemanager.projectCreator και roles/resourcemanager.projectMover. Αν το έργο βρίσκεται μέσα σε άλλη οργάνωση, απαιτείται επικοινωνία με την υποστήριξη του GCP για να τα μετακινήσει έξω από την οργάνωση πρώτα. Για περισσότερες πληροφορίες ανατρέξτε εδώ.

Πολιτικές Οργάνωσης

Επιτρέπουν τον κεντρικό έλεγχο των πόρων cloud της οργάνωσής σας:

  • Κεντρικός έλεγχος για ρυθμίσεις περιορισμών σχετικά με τον τρόπο χρήσης των πόρων της οργάνωσής σας.

  • Ορισμός και θέσπιση οδηγών για τις ομάδες ανάπτυξης σας ώστε να παραμείνουν εντός των ορίων συμμόρφωσης.

  • Βοηθούν τους ιδιοκτήτες έργων και τις ομάδες τους να προχωρήσουν γρήγορα χωρίς φόβο για παραβίαση της συμμόρφωσης.

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

Για να ορίσετε μια πολιτική οργάνωσης, επιλέγετε έναν περιορισμό, ο οποίος είναι ένας συγκεκριμένος τύπος περιορισμού είτε εναντίον ενός υπηρεσίας Google Cloud είτε εναντίον μιας ομάδας υπηρεσιών Google Cloud. Στη συνέχεια, ρυθμίζετε αυτόν τον περιορισμό με τους επιθυμητούς περιορισμούς.

Συνηθισμένες περιπτώσεις χρήσης

  • Περιορισμός κοινοποίησης πόρων με βάση τον τομέα.

  • Περιορισμός χρήσης των λογαριασμών υπηρεσιών Ταυτότητας και Πρόσβασης.

  • Περιορισμός της φυσικής τοποθεσίας των νεοδημιουργημένων πόρων.

  • Απενεργοποίηση δημιουργίας λογαριασμών υπηρεσιών.

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

Προεπιλεγμένες Πολιτικές Οργάνωσης

Αυτές είναι οι πολιτικές που θα προσθέσει αυτόματα η Google κατά την ρύθμιση της οργάνωσής σας στο GCP:

Πολιτικές Διαχείρισης Πρόσβασης

  • Περιορισμός επαφών με περιορισμένο τομέα: Αποτρέπει την προσθήκη χρηστών στις Βασικές Επαφές έξω από τους καθορισμένους τομείς σας. Αυτό περιορίζει τις Βασικές Επαφές ώστε να επιτρέπουν μόνο διαχειριζόμενες ταυτότητες χρηστών στους επιλεγμένους τομείς σας να λαμβάνουν ειδοποιήσεις πλατφόρμας.

  • Περιορισμός κοινοποίησης με περιορισμένο τομέα: Αποτρέπει την προσθήκη χρηστών σε πολιτικές IAM έξω από τους καθορισμένους τομείς σας. Αυτό περιορίζει τις πολιτικές IAM ώστε να επιτρέπουν μόνο διαχειριζόμενες ταυτότητες χρηστών στους επιλεγμένους τομείς σας να έχουν πρόσβαση σε πόρους μέσα σε αυτήν την οργάνωση.

  • Αποτροπή δημόσιας πρόσβασης: Αποτρέπει τα κάδους αποθήκευσης Cloud Storage από το να εκτίθενται στο κοινό. Αυτό εξασφαλίζει ότι ένας προγραμματιστής δεν μπορεί να ρυθμίσει τους κάδους αποθήκευσης Cloud Storage να έχουν μη εξουσιοδοτημένη πρόσβαση στο διαδίκτυο.

  • Ομοιόμορφη πρόσβαση σε επίπεδο κάδου: Αποτρέπει τις λίστες ελέγχου πρόσβασης σε επίπεδο αντικειμένου (ACLs) στους κάδους αποθήκευσης Cloud Storage. Αυτό απλοποιεί τη διαχείριση της πρόσβασης εφαρμόζοντας συνεπώς πολιτικές IAM σε όλα τα αντικείμενα στους κάδους αποθήκευσης Cloud Storage.

  • Απαιτεί σύνδεση στο λειτουργικό σύστημα: Τα VM που δημιουργούνται σε νέα έργα θα έχουν ενεργοποιημένη τη σύνδεση στο λειτουργικό σύστημα. Αυτό σας επιτρέπει να διαχειρίζεστε την πρόσβαση SSH στα παραδείγματά σας χρησιμοποιώντας το IAM χωρίς την ανάγκη δημιουργίας και διαχείρισης μεμονωμένων κλειδιών SSH.

Επιπλέον πολιτικές ασφαλείας για λογαριασμούς υπηρεσιών

  • Απενεργοποίηση αυτόματων χορηγήσεων IAM: Αποτρέπει τους προεπιλεγμένους λογαριασμούς υπηρεσιών App Engine και Compute Engine από το να χορηγούνται αυτόματα ο ρόλος Editor IAM σε ένα έργο κατά τη δημιουργία. Αυτό εξασφαλίζει ότι οι λογαριασμοί υπηρεσιών δεν λαμβάνουν υπερβολικά επιτρεπτικούς ρόλους IAM κατά τη δημιουργία.

  • Απενεργοποίηση δημιουργίας κλειδιών λογαριασμών υπηρεσιών: Αποτρέπει τη δημιουργία δημόσιων κλειδιών λογαριασμών υπηρεσιών. Αυτό βοηθά στη μείωση του κινδύνου εκθέσεως μόνιμων διαπιστευτικών.

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

Πολιτικές διαμόρφωσης ασφαλούς δικτύου VPC

  • **Ορισμός επιτρεπόμενων εξωτερικών IP για παραδείγμα

Χρήστες

Στη κονσόλα GCP δεν υπάρχει διαχείριση Χρηστών ή Ομάδων, αυτό γίνεται στο Google Workspace. Ωστόσο, μπορείτε να συγχρονίσετε έναν διαφορετικό πάροχο ταυτότητας στο Google Workspace.

Μπορείτε να έχετε πρόσβαση στους χρήστες και τις ομάδες του Workspace στο https://admin.google.com.

Το MFA μπορεί να επιβληθεί στους χρήστες του Workspace, ωστόσο, ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει ένα τοκέν για πρόσβαση στο GCP μέσω της γραμμής εντολών χωρίς προστασία MFA (θα προστατεύεται από MFA μόνο όταν ο χρήστης συνδεθεί για να το δημιουργήσει: gcloud auth login).

Ομάδες

Όταν δημιουργείται μια οργάνωση, προτείνεται ιδιαίτερα η δημιουργία ορισμένων ομάδων. Εάν διαχειρίζεστε οποιαδήποτε από αυτές, θα μπορούσατε να έχετε διαρρεύσει όλη ή σημαντικό μέρος της οργάνωσης:

Προεπιλεγμένη Πολιτική Κωδικού Πρόσβασης

  • Επιβολή ισχυρών κωδικών πρόσβασης

  • Από 8 έως 100 χαρακτήρες

  • Χωρίς επανάχρηση

  • Χωρίς λήξη

  • Εάν οι άνθρωποι έχουν πρόσβαση στο Workspace μέσω ενός παρόχου τρίτων, αυτές οι απαιτήσεις δεν εφαρμόζονται.

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

Αυτοί είναι οι αρχέτυποι που μπορούν να έχουν συνδεθεί σε πόρους και να έχουν πρόσβαση για να αλληλεπιδρούν εύκολα με το GCP. Για παράδειγμα, είναι δυνατόν να έχετε πρόσβαση στο auth token ενός Λογαριασμού Υπηρεσίας συνδεδεμένου σε ένα VM στα μεταδεδομένα. Είναι δυνατόν να αντιμετωπίσετε ορισμένες συγκρούσεις κατά τη χρήση τόσο του IAM όσο και των εμβέλειών πρόσβασης. Για παράδειγμα, ο λογαριασμός υπηρεσίας σας μπορεί να έχει τον ρόλο IAM του compute.instanceAdmin αλλά το παράδειγμα που έχετε παραβιάσει έχει περιοριστεί με τον περιορισμό εμβέλειας του https://www.googleapis.com/auth/compute.readonly. Αυτό θα σας εμποδίσει από το να κάνετε οποιεσδήποτε αλλαγές χρησιμοποιώντας το OAuth token που ανατίθεται αυτόματα στο παράδειγμά σας.

Είναι παρόμοιο με τους ρόλους IAM από το AWS. Αλλά διαφορετικά από το AWS, οποιοσδήποτε λογαριασμός υπηρεσίας μπορεί να συνδεθεί με οποιαδήποτε υπηρεσία (δεν χρειάζεται να το επιτρέψει μέσω μιας πολιτικής).

Πολλοί από τους λογαριασμούς υπηρεσίας που θα βρείτε είναι πραγματικά αυτόματα δημιουργημένοι από το GCP όταν αρχίσετε να χρησιμοποιείτε μια υπηρεσία, όπως:

PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com

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

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Εύρος πρόσβασης

Τα εύρη πρόσβασης συνδέονται με τα δημιουργημένα τοκεν OAuth για πρόσβαση στα σημεία API του GCP. Αυτά περιορίζουν τις άδειες του τοκεν OAuth. Αυτό σημαίνει ότι αν ένα τοκεν ανήκει σε Έναν Κάτοχο ενός πόρου αλλά δεν έχει στο εύρος του τοκεν την πρόσβαση σε αυτόν τον πόρο, το τοκεν δεν μπορεί να χρησιμοποιηθεί για (κατάχρηση) αυτών των προνομίων.

Η Google προτείνει πραγματικά (https://cloud.google.com/compute/docs/access/service-accounts#service_account_permissions) ότι τα εύρη πρόσβασης δεν πρέπει να χρησιμοποιούνται και να βασιστείτε αποκλειστικά στο IAM. Το web πύλη διαχείρισης επιβάλλει πραγματικά αυτό, αλλά τα εύρη πρόσβασης μπορούν ακόμα να εφαρμοστούν σε παραδείγματα χρησιμοποιώντας προγραμματιστικά προσαρμοσμένους λογαριασμούς υπηρεσιών.

Μπορείτε να δείτε ποια εύρη είναι εκχωρημένα με ερώτημα:

curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'

{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}

Οι προηγούμενες εξουσίες είναι αυτές που δημιουργούνται από προεπιλογή χρησιμοποιώντας το gcloud για πρόσβαση σε δεδομένα. Αυτό συμβαίνει επειδή όταν χρησιμοποιείτε το gcloud δημιουργείτε πρώτα ένα διακριτικό OAuth, και στη συνέχεια το χρησιμοποιείτε για να επικοινωνήσετε με τα σημεία πρόσβασης.

Η πιο σημαντική εξουσία από αυτές είναι πιθανώς η cloud-platform, η οποία βασικά σημαίνει ότι είναι δυνατή η πρόσβαση σε οποιαδήποτε υπηρεσία στο GCP.

Μπορείτε να βρείτε μια λίστα με όλες τις δυνατές εξουσίες εδώ.

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

# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db

# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user

# Print new token
gcloud auth application-default print-access-token

# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"

Πολιτικές IAM του Terraform, Δεσμεύσεις και Μέλη

Όπως ορίζεται από το terraform στο https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam χρησιμοποιώντας το terraform με το GCP υπάρχουν διαφορετικοί τρόποι για να χορηγήσετε πρόσβαση σε έναν αρχέτυπο πάνω σε ένα πόρο:

  • Μέλη: Ορίζετε αρχέτυπα ως μέλη ρόλων χωρίς περιορισμούς σχετικά με τον ρόλο ή τα αρχέτυπα. Μπορείτε να ορίσετε έναν χρήστη ως μέλος ενός ρόλου και στη συνέχεια να ορίσετε μια ομάδα ως μέλος του ίδιου ρόλου και επίσης να ορίσετε αυτά τα αρχέτυπα (χρήστη και ομάδα) ως μέλη άλλων ρόλων.

  • Δεσμεύσεις: Πολλά αρχέτυπα μπορούν να δεσμευτούν σε ένα ρόλο. Αυτά τα αρχέτυπα μπορούν ακόμα να δεσμευτούν ή να είναι μέλη άλλων ρόλων. Ωστόσο, αν ένα αρχέτυπο που δεν είναι δεσμευμένο στον ρόλο οριστεί ως μέλος ενός δεσμευμένου ρόλου, την επόμενη φορά που θα εφαρμοστεί η δέσμευση, το μέλος θα εξαφανιστεί.

  • Πολιτικές: Μια πολιτική είναι εξουσιοδοτική, υποδεικνύει ρόλους και αρχέτυπα και στη συνέχεια, αυτά τα αρχέτυπα δεν μπορούν να έχουν περισσότερους ρόλους και αυτοί οι ρόλοι δεν μπορούν να έχουν περισσότερα αρχέτυπα εκτός αν αυτή η πολιτική τροποποιηθεί (ούτε καν σε άλλες πολιτικές, δεσμεύσεις ή μέλη). Επομένως, όταν ένας ρόλος ή αρχέτυπο καθορίζεται στην πολιτική, όλα τα προνόμιά του περιορίζονται από αυτήν την πολιτική. Φυσικά, αυτό μπορεί να παρακαμφθεί στην περίπτωση που το αρχέτυπο δίνεται η δυνατότητα να τροποποιήσει την πολιτική ή τις άδειες εξέλιξης προνομίων (όπως δημιουργία ενός νέου αρχετύπου και δέσμευσή του σε έναν νέο ρόλο).

Αναφορές

Last updated