Az - Tokens & Public Applications
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Το Entra ID είναι η πλατφόρμα διαχείρισης ταυτότητας και πρόσβασης (IAM) της Microsoft που βασίζεται στο cloud, λειτουργώντας ως το θεμελιώδες σύστημα αυθεντικοποίησης και εξουσιοδότησης για υπηρεσίες όπως το Microsoft 365 και το Azure Resource Manager. Το Azure AD εφαρμόζει το πλαίσιο εξουσιοδότησης OAuth 2.0 και το πρωτόκολλο αυθεντικοποίησης OpenID Connect (OIDC) για τη διαχείριση πρόσβασης σε πόρους.
Κύριοι Συμμετέχοντες στο OAuth 2.0:
Server Πόρων (RS): Προστατεύει πόρους που ανήκουν στον κάτοχο των πόρων.
Κάτοχος Πόρων (RO): Συνήθως είναι ο τελικός χρήστης που κατέχει τους προστατευόμενους πόρους.
Εφαρμογή Πελάτη (CA): Μια εφαρμογή που ζητά πρόσβαση σε πόρους εκ μέρους του κατόχου των πόρων.
Server Εξουσιοδότησης (AS): Εκδίδει διαπιστευτήρια πρόσβασης σε εφαρμογές πελατών μετά την αυθεντικοποίηση και εξουσιοδότησή τους.
Εύρος και Συγκατάθεση:
Εύρος: Λεπτομερείς άδειες που ορίζονται στον server πόρων που καθορίζουν τα επίπεδα πρόσβασης.
Συγκατάθεση: Η διαδικασία με την οποία ο κάτοχος πόρων παραχωρεί σε μια εφαρμογή πελάτη άδεια πρόσβασης σε πόρους με συγκεκριμένα εύρη.
Ενσωμάτωση Microsoft 365:
Το Microsoft 365 χρησιμοποιεί το Azure AD για IAM και αποτελείται από πολλές "πρώτης κατηγορίας" εφαρμογές OAuth.
Αυτές οι εφαρμογές είναι βαθιά ενσωματωμένες και συχνά έχουν αλληλεξαρτώμενες σχέσεις υπηρεσιών.
Για να απλοποιήσει την εμπειρία του χρήστη και να διατηρήσει τη λειτουργικότητα, η Microsoft παραχωρεί "υπονοούμενη συγκατάθεση" ή "προ-συγκατάθεση" σε αυτές τις πρώτης κατηγορίας εφαρμογές.
Υπονοούμενη Συγκατάθεση: Ορισμένες εφαρμογές αποκτούν αυτόματα πρόσβαση σε συγκεκριμένα εύρη χωρίς ρητή έγκριση από τον χρήστη ή τον διαχειριστή.
Αυτά τα προ-συμφωνημένα εύρη είναι συνήθως κρυμμένα τόσο από τους χρήστες όσο και από τους διαχειριστές, καθιστώντας τα λιγότερο ορατά σε τυπικές διεπαφές διαχείρισης.
Τύποι Εφαρμογών Πελατών:
Εμπιστευτικοί Πελάτες:
Διαθέτουν τα δικά τους διαπιστευτήρια (π.χ., κωδικούς πρόσβασης ή πιστοποιητικά).
Μπορούν να αυθεντικοποιηθούν με ασφάλεια στον server εξουσιοδότησης.
Δημόσιοι Πελάτες:
Δεν έχουν μοναδικά διαπιστευτήρια.
Δεν μπορούν να αυθεντικοποιηθούν με ασφάλεια στον server εξουσιοδότησης.
Σημασία Ασφαλείας: Ένας επιτιθέμενος μπορεί να προσποιηθεί μια δημόσια εφαρμογή πελάτη κατά την αίτηση διαπιστευτηρίων, καθώς δεν υπάρχει μηχανισμός για τον server εξουσιοδότησης να επαληθεύσει τη νομιμότητα της εφαρμογής.
Υπάρχουν τρία είδη διαπιστευτηρίων που χρησιμοποιούνται στο OIDC:
Access Tokens: Ο πελάτης παρουσιάζει αυτό το διαπιστευτήριο στον server πόρων για να πρόσβαση σε πόρους. Μπορεί να χρησιμοποιηθεί μόνο για μια συγκεκριμένη συνδυασμένη χρήση χρήστη, πελάτη και πόρου και δεν μπορεί να ανακληθεί μέχρι την λήξη του - δηλαδή 1 ώρα από προεπιλογή.
ID Tokens: Ο πελάτης λαμβάνει αυτό το διαπιστευτήριο από τον server εξουσιοδότησης. Περιέχει βασικές πληροφορίες σχετικά με τον χρήστη. Είναι δεσμευμένο σε μια συγκεκριμένη συνδυασμένη χρήση χρήστη και πελάτη.
Refresh Tokens: Παρέχονται στον πελάτη με το access token. Χρησιμοποιούνται για να λάβουν νέα access και ID tokens. Είναι δεσμευμένο σε μια συγκεκριμένη συνδυασμένη χρήση χρήστη και πελάτη και μπορεί να ανακληθεί. Η προεπιλεγμένη λήξη είναι 90 ημέρες για ανενεργά refresh tokens και χωρίς λήξη για ενεργά tokens (είναι δυνατή η λήψη νέων refresh tokens από ένα refresh token).
Ένα refresh token θα πρέπει να συνδέεται με ένα aud
, με κάποια εύρη, και με έναν tenant και θα πρέπει να μπορεί να δημιουργεί μόνο access tokens για αυτό το aud, τα εύρη (και όχι περισσότερα) και τον tenant. Ωστόσο, αυτό δεν ισχύει για τα FOCI applications tokens.
Ένα refresh token είναι κρυπτογραφημένο και μόνο η Microsoft μπορεί να το αποκρυπτογραφήσει.
Η λήψη ενός νέου refresh token δεν ανακαλεί το προηγούμενο refresh token.
Πληροφορίες για conditional access είναι αποθηκευμένες μέσα στο JWT. Έτσι, αν ζητήσετε το token από μια επιτρεπόμενη διεύθυνση IP, αυτή η IP θα είναι αποθηκευμένη στο token και στη συνέχεια μπορείτε να χρησιμοποιήσετε αυτό το token από μια μη επιτρεπόμενη IP για να αποκτήσετε πρόσβαση στους πόρους.
Το πεδίο που υποδεικνύεται στο πεδίο "aud" είναι ο server πόρων (η εφαρμογή) που χρησιμοποιείται για την εκτέλεση της σύνδεσης.
Η εντολή az account get-access-token --resource-type [...]
υποστηρίζει τους παρακάτω τύπους και καθένας από αυτούς θα προσθέσει ένα συγκεκριμένο "aud" στο αποτέλεσμα του access token:
Σημειώστε ότι τα παρακάτω είναι μόνο οι APIs που υποστηρίζονται από το az account get-access-token
, αλλά υπάρχουν περισσότερα.
Το εύρος ενός access token αποθηκεύεται μέσα στο κλειδί scp μέσα στο JWT του access token. Αυτά τα εύρη καθορίζουν σε τι έχει πρόσβαση το access token.
Αν ένα JWT επιτρέπεται να επικοινωνήσει με μια συγκεκριμένη API αλλά δεν έχει το εύρος για να εκτελέσει την ζητούμενη ενέργεια, δεν θα μπορεί να εκτελέσει την ενέργεια με αυτό το JWT.
Προηγουμένως αναφέρθηκε ότι τα refresh tokens θα πρέπει να συνδέονται με τα scopes με τα οποία δημιουργήθηκαν, με την εφαρμογή και τον tenant για τον οποίο δημιουργήθηκαν. Εάν οποιοδήποτε από αυτά τα όρια παραβιαστεί, είναι δυνατόν να γίνει κλιμάκωση προνομίων καθώς θα είναι δυνατή η δημιουργία access tokens για άλλους πόρους και tenants στους οποίους έχει πρόσβαση ο χρήστης και με περισσότερα scopes από ό,τι είχε αρχικά προγραμματιστεί.
Επιπλέον, αυτό είναι δυνατό με όλα τα refresh tokens στην Microsoft identity platform (λογαριασμοί Microsoft Entra, προσωπικοί λογαριασμοί Microsoft και κοινωνικοί λογαριασμοί όπως το Facebook και το Google) επειδή όπως αναφέρουν οι docs: "Τα refresh tokens είναι δεσμευμένα σε έναν συνδυασμό χρήστη και πελάτη, αλλά δεν είναι δεσμευμένα σε πόρο ή tenant. Ένας πελάτης μπορεί να χρησιμοποιήσει ένα refresh token για να αποκτήσει access tokens σε οποιονδήποτε συνδυασμό πόρου και tenant όπου έχει άδεια να το κάνει. Τα refresh tokens είναι κρυπτογραφημένα και μόνο η Microsoft identity platform μπορεί να τα διαβάσει."
Επιπλέον, σημειώστε ότι οι εφαρμογές FOCI είναι δημόσιες εφαρμογές, οπότε δεν απαιτείται μυστικό για την αυθεντικοποίηση στον διακομιστή.
Στη συνέχεια, οι γνωστοί πελάτες FOCI που αναφέρθηκαν στην αρχική έρευνα μπορούν να βρεθούν εδώ.
Ακολουθώντας το προηγούμενο παράδειγμα κώδικα, σε αυτόν τον κώδικα ζητείται ένα νέο token για ένα διαφορετικό scope:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)