GCP <--> Workspace Pivoting
Από το GCP στο GWS
Βασικά στοιχεία εξουσιοδότησης σε επίπεδο τομέα
Η εξουσιοδότηση σε επίπεδο τομέα του Google Workspace επιτρέπει σε ένα αντικείμενο ταυτότητας, είτε μια εξωτερική εφαρμογή από την αγορά του Google Workspace είτε ένα εσωτερικό Λογαριασμό Υπηρεσίας του GCP, να έχει πρόσβαση σε δεδομένα σε όλο το Workspace εκ μέρους των χρηστών.
Αυτό σημαίνει βασικά ότι οι λογαριασμοί υπηρεσίας μέσα στα έργα GCP μιας οργάνωσης μπορεί να υποκαταστήσουν τους χρήστες του Workspace της ίδιας οργάνωσης (ή ακόμα και από μια διαφορετική).
Για περισσότερες πληροφορίες σχετικά με το πώς ακριβώς λειτουργεί αυτό, ελέγξτε:
GCP - Understanding Domain-Wide DelegationΠαραβίαση υπάρχουσας εξουσιοδότησης
Αν ένας επιτιθέμενος παραβίασε κάποια πρόσβαση στο GCP και γνωρίζει ένα έγκυρο email χρήστη του Workspace (προτιμητέον υπερδιαχειριστής), μπορεί να απαριθμήσει όλα τα έργα στα οποία έχει πρόσβαση, να απαριθμήσει όλους τους Λογαριασμούς Υπηρεσίας των έργων, να ελέγξει σε ποιους λογαριασμούς υπηρεσίας έχει πρόσβαση, και να επαναλάβει όλα αυτά τα βήματα με κάθε Λογαριασμό Υπηρεσίας που μπορεί να υποκαταστήσει. Με μια λίστα όλων των λογαριασμών υπηρεσίας στους οποίους έχει πρόσβαση και τη λίστα των email του Workspace, ο επιτιθέμενος μπορεί να προσπαθήσει να υποκαταστήσει τον χρήστη με κάθε λογαριασμό υπηρεσίας.
Σημειώστε ότι κατά τη διαμόρφωση της εξουσιοδότησης σε επίπεδο τομέα δεν απαιτείται χρήστης του Workspace, επομένως αρκεί να γνωρίζετε έναν έγκυρο χρήστη και αυτό είναι απαραίτητο για την υποκατάσταση. Ωστόσο, θα χρησιμοποιηθούν οι προνομιακές ενέργειες του χρήστη που υποκαθίσταται, οπότε αν είναι Υπερδιαχειριστής θα μπορείτε να έχετε πρόσβαση σε όλα. Αν δεν έχει καμία πρόσβαση, αυτό θα είναι άχρηστο.
Αυτό το απλό σενάριο θα δημιουργήσει ένα διακριτικό OAuth ως τον υποκαταστάτη χρήστη που μπορείτε στη συνέχεια να χρησιμοποιήσετε για να έχετε πρόσβαση σε άλλα APIs της Google με ή χωρίς το gcloud
:
Αυτό είναι ένα εργαλείο που μπορεί να εκτελέσει την επίθεση ακολουθώντας αυτά τα βήματα:
Απαριθμήστε τα Έργα GCP χρησιμοποιώντας το Resource Manager API.
Επαναλάβετε σε κάθε πόρο έργου και απαριθμήστε τους πόρους Λογαριασμών Υπηρεσιών GCP στους οποίους ο αρχικός χρήστης IAM έχει πρόσβαση χρησιμοποιώντας το GetIAMPolicy.
Επαναλάβετε σε κάθε ρόλο λογαριασμού υπηρεσιών και βρείτε ενσωματωμένους, βασικούς και προσαρμοσμένους ρόλους με άδεια serviceAccountKeys.create στον προορισμό του πόρου λογαριασμού υπηρεσιών. Να σημειωθεί ότι ο ρόλος Επεξεργαστή (Editor) κατά κανόνα διαθέτει αυτήν την άδεια.
Δημιουργήστε ένα νέο ιδιωτικό κλειδί
KEY_ALG_RSA_2048
για κάθε πόρο λογαριασμού υπηρεσιών που βρέθηκε με τη σχετική άδεια στην πολιτική IAM.Επαναλάβετε σε κάθε νέο λογαριασμό υπηρεσιών και δημιουργήστε ένα αντικείμενο
JWT
γι' αυτό που αποτελείται από τα διαπιστευτήρια του ιδιωτικού κλειδιού SA και ένα εύρος OAuth. Η διαδικασία δημιουργίας ενός νέου JWT αντικειμένου θα επαναλάβει όλους τους υπάρχοντες συνδυασμούς εύρων OAuth από τη λίστα oauth_scopes.txt, προκειμένου να βρει όλες τις δυνατότητες αντιπροσώπευσης. Η λίστα oauth_scopes.txt ενημερώνεται με όλα τα εύρη OAuth που έχουμε βρει ως σημαντικά για την κατάχρηση ταυτοτήτων Workspace.Η μέθοδος
_make_authorization_grant_assertion
αποκαλύπτει την ανάγκη να δηλωθεί ένας στόχος χρήστης Workspace, αναφερόμενος ως subject, για τη δημιουργία JWTs υπό DWD. Αν και αυτό μπορεί να φαίνεται ότι απαιτεί ένα συγκεκριμένο χρήστη, είναι σημαντικό να συνειδητοποιήσουμε ότι το DWD επηρεάζει κάθε ταυτότητα εντός ενός τομέα. Συνεπώς, η δημιουργία ενός JWT για οποιονδήποτε χρήστη τομέα επηρεάζει όλες τις ταυτότητες σε αυτόν τον τομέα, σύμφωνα με τον έλεγχο συνδυασμού μας. Απλά, ένας έγκυρος χρήστης Workspace είναι επαρκής για να προχωρήσει. Αυτός ο χρήστης μπορεί να οριστεί στο αρχείο config.yaml του DeleFriend. Αν ένας στόχος χρήστη Workspace δεν είναι ήδη γνωστός, το εργαλείο διευκολύνει την αυτόματη εντοπισμό έγκυρων χρηστών Workspace σάρωσης χρηστών τομέων με ρόλους σε έργα GCP. Είναι σημαντικό να σημειωθεί (ξανά) ότι τα JWT είναι ειδικά για τομέα και δεν δημιουργούνται για κάθε χρήστη· επομένως, η αυτόματη διαδικασία στοχεύει σε μια μοναδική ταυτότητα ανά τομέα.Απαριθμήστε και δημιουργήστε ένα νέο διακριτικό πρόσβασης (bearer access token) για κάθε JWT και επικυρώστε το διακριτικό έναντι του API tokeninfo.
Το Gitlab έχει δημιουργήσει αυτό το σενάριο Python που μπορεί να κάνει δύο πράγματα - να απαριθμήσει τον κατάλογο χρηστών και να δημιουργήσει έναν νέο διαχειριστικό λογαριασμό ενώ υποδεικνύει ένα json με διαπιστευτήρια SA και τον χρήστη προς μίμηση. Έτσι θα το χρησιμοποιούσες:
Δημιουργία μιας νέας αντιπροσωπείας (Μόνιμη)
Είναι δυνατόν να ελέγξετε τις Παγκόσμιες Αντιπροσωπείες τομέα στο https://admin.google.com/u/1/ac/owl/domainwidedelegation.
Ένας επιτιθέμενος με τη δυνατότητα δημιουργίας λογαριασμών υπηρεσιών σε ένα έργο GCP και υπερδιαχειριστικά δικαιώματα στο GWS μπορεί να δημιουργήσει μια νέα αντιπροσωπεία επιτρέποντας στους λογαριασμούς υπηρεσιών να προσωποποιήσουν ορισμένους χρήστες του GWS:
Δημιουργία Νέου Λογαριασμού Υπηρεσίας και Αντίστοιχου Ζεύγους Κλειδιών: Στο GCP, νέοι πόροι λογαριασμών υπηρεσιών μπορούν να παραχθούν είτε αλληλεπιδραστικά μέσω της κονσόλας είτε προγραμματιστικά χρησιμοποιώντας άμεσες κλήσεις API και εργαλεία CLI. Αυτό απαιτεί τον ρόλο
iam.serviceAccountAdmin
ή οποιονδήποτε προσαρμοσμένο ρόλο εξοπλισμένο με την άδειαiam.serviceAccounts.create
. Μόλις δημιουργηθεί ο λογαριασμός υπηρεσίας, θα προχωρήσουμε στη δημιουργία ενός σχετικού ζεύγους κλειδιών (άδειαiam.serviceAccountKeys.create
).Δημιουργίας νέας αντιπροσωπείας: Είναι σημαντικό να κατανοήσουμε ότι μόνο ο ρόλος Super Admin διαθέτει τη δυνατότητα να δημιουργήσει παγκόσμια Παγκόσμια Αντιπροσωπεία στο Google Workspace και η Παγκόσμια Αντιπροσωπεία δεν μπορεί να δημιουργηθεί προγραμματικά, Μπορεί μόνο να δημιουργηθεί και να προσαρμοστεί χειροκίνητα μέσω της κονσόλας του Google Workspace.
Η δημιουργία του κανόνα μπορεί να βρεθεί στη σελίδα Ελέγχοι API → Διαχείριση Παγκόσμιας Αντιπροσωπείας στην κονσόλα Διαχείρισης Google Workspace.
Επισύναψη προνομίων εμβέλειας OAuth: Κατά τη διαμόρφωση μιας νέας αντιπροσωπείας, το Google απαιτεί μόνο 2 παραμέτρους, τον Αναγνωριστικό Πελάτη, που είναι το ID OAuth του Πόρου Λογαριασμού Υπηρεσίας του GCP και τις εμβέλειες OAuth που καθορίζουν ποιες κλήσεις API απαιτεί η αντιπροσωπεία.
Η πλήρης λίστα των εμβέλειών OAuth μπορεί να βρεθεί εδώ, αλλά εδώ υπάρχει μια πρόταση:
https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid
Ενεργώντας εκ μέρους της στόχος ταυτότητας: Σε αυτό το σημείο, έχουμε ένα λειτουργικό αντιπροσωπευτικό αντικείμενο στο GWS. Τώρα, χρησιμοποιώντας το ιδιωτικό κλειδί του Λογαριασμού Υπηρεσίας του GCP, μπορούμε να πραγματοποιήσουμε κλήσεις API (στο εύρος που καθορίζεται στην παράμετρο εμβέλειας OAuth) για να το ενεργοποιήσουμε και να ενεργήσουμε εκ μέρους οποιασδήποτε ταυτότητας υπάρχει στο Google Workspace. Όπως μάθαμε, ο λογαριασμός υπηρεσίας θα δημιουργήσει διακριτικά πρόσβασης ανάλογα με τις ανάγκες του και σύμφωνα με την άδεια που έχει σε εφαρμογές REST API.
Ελέγξτε τη προηγούμενη ενότητα για μερικά εργαλεία για τη χρήση αυτής της αντιπροσωπείας.
Διασυνδεσμική αντιπροσωπεία Οργανισμών
Το ID OAuth του Λογαριασμού Υπηρεσίας είναι παγκόσμιο και μπορεί να χρησιμοποιηθεί για διασυνδεσμική αντιπροσωπεία. Δεν έχει εφαρμοστεί καμία περιοριστική μέτρηση για να αποτρέψει τη διασυνδεσμική αντιπροσωπεία. Απλά, οι λογαριασμοί υπηρεσιών από διαφορετικούς οργανισμούς GCP μπορούν να χρησιμοποιηθούν για τη διαμόρφωση παγκόσμιας αντιπροσωπείας σε άλλους οργανισμούς Workspace. Αυτό θα οδηγήσει στο χρειασμό μόνο της πρόσβασης Super Admin στο Workspace, και όχι πρόσβασης στον ίδιο λογαριασμό GCP, καθώς ο εχθρός μπορεί να δημιουργήσει Λογαριασμούς Υπηρεσιών και ιδιωτικά κλειδιά στον προσωπικά ελεγχόμενο λογαριασμό GCP του.
Δημιουργία Ενός Έργου για απαρίθμηση του Workspace
Από προεπιλογή οι χρήστες του Workspace έχουν την άδεια να δημιουργήσουν νέα έργα, και όταν δημιουργείται ένα νέο έργο ο δημιουργός αποκτά τον ρόλο Κάτοχος πάνω σε αυτό.
Συνεπώς, ένας χρήστης μπορεί να δημιουργήσει ένα έργο, ενεργοποιήσει τις APIs για την απαρίθμηση του Workspace στο νέο του έργο και να προσπαθήσει να το απαριθμήσει.
Για να μπορεί ένας χρήστης να απαριθμήσει το Workspace, χρειάζεται επαρκή δικαιώματα Workspace (όχι όλοι οι χρήστες θα μπορούν να απαριθμήσουν τον κατάλογο).
Ελέγξτε περισσότερη απαρίθμηση στο:
GCP - IAM, Principals & Org Policies EnumΚατάχρηση του Gcloud
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τη ροή του gcloud
για σύνδεση στο:
Όπως εξηγείται εκεί, το gcloud μπορεί να ζητήσει την εμβέλεια https://www.googleapis.com/auth/drive
η οποία θα επιτρέψει σε έναν χρήστη να έχει πρόσβαση στον φάκελο του χρήστη.
Ως επιτιθέμενος, αν έχετε διαρρήξει σωματικά τον υπολογιστή ενός χρήστη και ο χρήστης είναι ακόμα συνδεδεμένος με τον λογαριασμό του, μπορείτε να συνδεθείτε δημιουργώντας ένα τεκμήριο με πρόσβαση στο drive χρησιμοποιώντας:
Εάν ένας επιτιθέμενος αφομοιώσει τον υπολογιστή ενός χρήστη, μπορεί επίσης να τροποποιήσει το αρχείο google-cloud-sdk/lib/googlecloudsdk/core/config.py
και να προσθέσει στο CLOUDSDK_SCOPES
το scope 'https://www.googleapis.com/auth/drive'
:
Έτσι, την επόμενη φορά που ο χρήστης συνδεθεί, θα δημιουργήσει ένα token με πρόσβαση στο drive που ο επιτιθέμενος θα μπορούσε να καταχραστεί για πρόσβαση στο drive. Φυσικά, ο περιηγητής θα υποδείξει ότι το δημιουργημένο token θα έχει πρόσβαση στο drive, αλλά καθώς ο χρήστης θα καλέσει το gcloud auth login
, πιθανόν δεν θα υποψιάζεται τίποτα.
Για να εμφανιστούν οι φάκελοι του drive: curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://www.googleapis.com/drive/v3/files"
Από GWS σε GCP
Πρόσβαση σε προνομιούχους χρήστες GCP
Εάν ένας επιτιθέμενος έχει πλήρη πρόσβαση στο GWS, θα μπορεί να έχει πρόσβαση σε ομάδες με προνομιούχη πρόσβαση στο GCP ή ακόμη και σε χρήστες, επομένως η μετάβαση από το GWS στο GCP είναι συνήθως πιο "απλή" απλά επειδή οι χρήστες στο GWS έχουν υψηλά προνόμια στο GCP.
Ανάκληση Προνομίων Google Groups
Από προεπιλογή, οι χρήστες μπορούν ελεύθερα να εγγραφούν σε ομάδες Workspace του Οργανισμού και αυτές οι ομάδες ενδέχεται να έχουν ανατεθεί δικαιώματα GCP (ελέγξτε τις ομάδες σας στο https://groups.google.com/).
Εκμεταλλευόμενος την ανάκληση προνομίων google groups μπορείτε να αναβαθμίσετε σε μια ομάδα με κάποιο είδος προνομιούχης πρόσβασης στο GCP.
Αναφορές
Last updated