AWS - IAM Post Exploitation
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
IAM
Για περισσότερες πληροφορίες σχετικά με την πρόσβαση IAM:
AWS - IAM, Identity Center & SSO Enum
Πρόβλημα Confused Deputy
Αν επιτρέψετε σε έναν εξωτερικό λογαριασμό (A) να έχει πρόσβαση σε ένα role στον λογαριασμό σας, πιθανότατα θα έχετε μηδενική ορατότητα για το ποιος ακριβώς μπορεί να έχει πρόσβαση σε αυτόν τον εξωτερικό λογαριασμό. Αυτό αποτελεί πρόβλημα, επειδή αν ένας άλλος εξωτερικός λογαριασμός (B) μπορεί να έχει πρόσβαση στον εξωτερικό λογαριασμό (A), είναι πιθανό ότι και ο B θα μπορεί επίσης να έχει πρόσβαση στον λογαριασμό σας.
Επομένως, όταν επιτρέπετε σε έναν εξωτερικό λογαριασμό να έχει πρόσβαση σε ένα role στον λογαριασμό σας, είναι δυνατό να καθορίσετε ένα ExternalId. Αυτό είναι μια “μυστική” συμβολοσειρά που ο εξωτερικός λογαριασμός (A) πρέπει να δηλώσει προκειμένου να assume the role στην οργάνωσή σας. Καθώς ο εξωτερικός λογαριασμός B δεν θα γνωρίζει αυτή τη συμβολοσειρά, ακόμα κι αν έχει πρόσβαση στον A, δεν θα μπορεί να έχει πρόσβαση στο role σας.
.png)
Ωστόσο, σημειώστε ότι αυτό το ExternalId “μυστικό” δεν είναι μυστικό, οποιοσδήποτε μπορεί να διαβάσει την IAM assume role policy και θα μπορεί να το δει. Αλλά όσο ο εξωτερικός λογαριασμός A το γνωρίζει, και ο εξωτερικός λογαριασμός B δεν το γνωρίζει, αυτό εμποδίζει τον B να εκμεταλλευτεί τον A για να έχει πρόσβαση στο role σας.
Παράδειγμα:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}
Warning
Για να εκμεταλλευτεί ένας attacker έναν confused deputy, θα χρειαστεί με κάποιον τρόπο να βρει εάν οι principals του current account μπορούν να impersonate roles σε other accounts.
Απρόσμενες εμπιστοσύνες
Wildcard ως principal
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" }
}
Αυτή η πολιτική επιτρέπει σε όλο το AWS να αναλάβει τον ρόλο.
Υπηρεσία ως principal
{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}
Αυτή η πολιτική επιτρέπει σε οποιονδήποτε λογαριασμό να ρυθμίσει το apigateway του ώστε να καλεί αυτό το Lambda.
S3 ως principal
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
Εάν ένα S3 bucket δοθεί ως principal, επειδή τα S3 buckets δεν έχουν Account ID, αν εσείς διαγράψατε το bucket σας και ο επιτιθέμενος το δημιούργησε στον δικό του λογαριασμό, τότε θα μπορούσε να το εκμεταλλευτεί.
Δεν υποστηρίζεται
{
"Effect": "Allow",
"Principal": { "Service": "cloudtrail.amazonaws.com" },
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}
Ένας κοινός τρόπος για την αποφυγή προβλημάτων Confused Deputy είναι η χρήση ενός condition με AWS:SourceArn για έλεγχο του origin ARN. Ωστόσο, κάποιες υπηρεσίες μπορεί να μην το υποστηρίζουν (όπως το CloudTrail σύμφωνα με ορισμένες πηγές).
Διαγραφή διαπιστευτηρίων
Με οποιαδήποτε από τις παρακάτω permissions — iam:DeleteAccessKey, iam:DeleteLoginProfile, iam:DeleteSSHPublicKey, iam:DeleteServiceSpecificCredential, iam:DeleteInstanceProfile, iam:DeleteServerCertificate, iam:DeleteCloudFrontPublicKey, iam:RemoveRoleFromInstanceProfile — ένας actor μπορεί να αφαιρέσει access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates ή CloudFront public keys, ή να αποσυνδέσει roles από instance profiles. Τέτοιες ενέργειες μπορούν άμεσα να αποκλείσουν νόμιμους χρήστες και εφαρμογές και να προκαλέσουν denial-of-service ή απώλεια πρόσβασης για συστήματα που εξαρτώνται από αυτά τα διαπιστευτήρια, επομένως αυτά τα IAM permissions πρέπει να περιορίζονται αυστηρά και να παρακολουθούνται.
# Remove Access Key of a user
aws iam delete-access-key \
--user-name <Username> \
--access-key-id AKIAIOSFODNN7EXAMPLE
## Remove ssh key of a user
aws iam delete-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE
Διαγραφή ταυτότητας
Με δικαιώματα όπως iam:DeleteUser, iam:DeleteGroup, iam:DeleteRole, ή iam:RemoveUserFromGroup, ένας δράστης μπορεί να διαγράψει χρήστες, ρόλους ή ομάδες — ή να αλλάξει τα μέλη μιας ομάδας — αφαιρώντας ταυτότητες και τις σχετικές ενδείξεις. Αυτό μπορεί αμέσως να διακόψει την πρόσβαση για άτομα και υπηρεσίες που εξαρτώνται από αυτές τις ταυτότητες, προκαλώντας denial-of-service ή απώλεια πρόσβασης, οπότε αυτές οι IAM ενέργειες πρέπει να περιορίζονται αυστηρά και να παρακολουθούνται.
# Delete a user
aws iam delete-user \
--user-name <Username>
# Delete a group
aws iam delete-group \
--group-name <Username>
# Delete a role
aws iam delete-role \
--role-name <Role>
Με οποιαδήποτε από τις παρακάτω άδειες — iam:DeleteGroupPolicy, iam:DeleteRolePolicy, iam:DeleteUserPolicy, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRolePermissionsBoundary, iam:DeleteUserPermissionsBoundary, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy — ένας παράγοντας μπορεί να διαγράψει ή να αποσυνδέσει διαχειριζόμενες/ενσωματωμένες πολιτικές, να αφαιρέσει εκδόσεις πολιτικών ή όρια δικαιωμάτων, και να αποσυνδέσει πολιτικές από χρήστες, ομάδες ή ρόλους. Αυτό καταστρέφει εξουσιοδοτήσεις και μπορεί να αλλάξει το μοντέλο δικαιωμάτων, προκαλώντας άμεση απώλεια πρόσβασης ή άρνηση υπηρεσίας για οντότητες που εξαρτιόνταν από αυτές τις πολιτικές, οπότε αυτές οι IAM ενέργειες πρέπει να είναι αυστηρά περιορισμένες και παρακολουθούμενες.
# Delete a group policy
aws iam delete-group-policy \
--group-name <GroupName> \
--policy-name <PolicyName>
# Delete a role policy
aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>
Διαγραφή Ομοσπονδιακής Ταυτότητας
Με τις iam:DeleteOpenIDConnectProvider, iam:DeleteSAMLProvider, και iam:RemoveClientIDFromOpenIDConnectProvider, ένας παράγοντας μπορεί να διαγράψει παρόχους ταυτότητας OIDC/SAML ή να αφαιρέσει client IDs. Αυτό διακόπτει την ομοσπονδιακή αυθεντικοποίηση, αποτρέποντας την επικύρωση των token και στερώντας άμεσα την πρόσβαση σε χρήστες και υπηρεσίες που βασίζονται στο SSO μέχρι να αποκατασταθεί ο IdP ή οι ρυθμίσεις.
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com
# Delete SAML provider
aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS
Παράνομη ενεργοποίηση MFA
Με το iam:EnableMFADevice, ένας επιτιθέμενος μπορεί να καταχωρήσει μια συσκευή MFA στην ταυτότητα ενός χρήστη, εμποδίζοντας τον νόμιμο χρήστη να πραγματοποιήσει σύνδεση. Εφόσον ενεργοποιηθεί μια μη εξουσιοδοτημένη συσκευή MFA, ο χρήστης μπορεί να αποκλειστεί έως ότου η συσκευή αφαιρεθεί ή επαναρυθμιστεί (σημείωση: εάν έχουν καταχωρηθεί πολλές συσκευές MFA, για τη σύνδεση απαιτείται μόνο μία, οπότε αυτή η επίθεση δεν θα έχει αποτέλεσμα στην άρνηση πρόσβασης).
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012
Certificate/Key Metadata Tampering
Με τα iam:UpdateSSHPublicKey, iam:UpdateCloudFrontPublicKey, iam:UpdateSigningCertificate, iam:UpdateServerCertificate, ένας δράστης μπορεί να αλλάξει την κατάσταση ή τα μεταδεδομένα των δημόσιων κλειδιών και των πιστοποιητικών. Σημειώνοντας τα κλειδιά/πιστοποιητικά ως ανενεργά ή τροποποιώντας αναφορές, μπορούν να διακόψουν την SSH authentication, να ακυρώσουν τις X.509/TLS validations και να διαταράξουν άμεσα υπηρεσίες που εξαρτώνται από αυτά τα διαπιστευτήρια, προκαλώντας απώλεια πρόσβασης ή διαθεσιμότητας.
aws iam update-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE \
--status Inactive
aws iam update-server-certificate \
--server-certificate-name <Certificate_Name> \
--new-path /prod/
iam:Delete*
Το IAM wildcard iam:Delete* παρέχει τη δυνατότητα αφαίρεσης πολλών τύπων πόρων IAM—users, roles, groups, policies, keys, certificates, MFA devices, policy versions, κ.λπ.—και ως εκ τούτου έχει πολύ μεγάλη έκταση επιπτώσεων: ένας δράστης που του έχει χορηγηθεί iam:Delete* μπορεί να καταστρέψει μόνιμα ταυτότητες, διαπιστευτήρια, πολιτικές και σχετικά αντικείμενα, να αφαιρέσει στοιχεία ελέγχου/αποδεικτικά και να προκαλέσει διακοπές υπηρεσιών ή λειτουργικές διαταραχές. Μερικά παραδείγματα είναι
# Delete a user
aws iam delete-user --user-name <Username>
# Delete a role
aws iam delete-role --role-name <RoleName>
# Delete a managed policy
aws iam delete-policy --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/<PolicyName>
iam:EnableMFADevice
Ένας φορέας που του έχει δοθεί η ενέργεια iam:EnableMFADevice μπορεί να καταχωρίσει ένα MFA device σε μια ταυτότητα στον λογαριασμό, υπό την προϋπόθεση ότι ο χρήστης δεν είχε ήδη κάποιο ενεργοποιημένο. Αυτό μπορεί να χρησιμοποιηθεί για να παρεμποδίσει την πρόσβαση ενός χρήστη: μόλις ένας attacker καταχωρίσει ένα MFA device, ο νόμιμος χρήστης μπορεί να εμποδιστεί να κάνει sign in επειδή δεν ελέγχει το attacker-registered MFA.
This denial-of-access attack λειτουργεί μόνο εάν ο χρήστης δεν είχε καταχωρημένο MFA; εάν ο attacker καταχωρίσει ένα MFA device για εκείνον τον χρήστη, ο νόμιμος χρήστης θα κλειδωθεί εκτός οποιωνδήποτε flows απαιτούν το νέο MFA. Εάν ο χρήστης ήδη έχει ένα ή περισσότερα MFA devices υπό τον έλεγχό του, η προσθήκη ενός attacker-controlled MFA δεν αποκλείει τον νόμιμο χρήστη — μπορεί να συνεχίσει να πραγματοποιεί έλεγχο ταυτότητας χρησιμοποιώντας οποιοδήποτε MFA έχει ήδη.
Για να ενεργοποιήσει (καταχωρίσει) ένα MFA device για έναν χρήστη, ένας attacker θα μπορούσε να εκτελέσει:
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012
Αναφορές
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

