AWS - IAM Post Exploitation

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

IAM

Για περισσότερες πληροφορίες σχετικά με την πρόσβαση IAM:

pageAWS - IAM, Identity Center & SSO Enum

Πρόβλημα Μπερούτη Αντιπροσώπου

Εάν επιτρέπετε σε έναν εξωτερικό λογαριασμό (A) να έχει πρόσβαση σε έναν ρόλο στον λογαριασμό σας, πιθανόν να μην έχετε καμία ορατότητα για το ποιος μπορεί ακριβώς να έχει πρόσβαση σε αυτόν τον εξωτερικό λογαριασμό. Αυτό είναι ένα πρόβλημα, επειδή εάν ένας άλλος εξωτερικός λογαριασμός (B) μπορεί να έχει πρόσβαση στον εξωτερικό λογαριασμό (A), είναι πιθανό ότι ο B θα μπορεί επίσης να έχει πρόσβαση στον λογαριασμό σας.

Για τον λόγο αυτό, όταν επιτρέπετε σε έναν εξωτερικό λογαριασμό να έχει πρόσβαση σε έναν ρόλο στον λογαριασμό σας, μπορείτε να καθορίσετε ένα ExternalId. Αυτό είναι ένα "μυστικό" συμβολοσειρά που ο εξωτερικός λογαριασμός (A) πρέπει να καθορίσει για να υποθέσει τον ρόλο στον οργανισμό σας. Εφόσον ο εξωτερικός λογαριασμός B δεν γνωρίζει αυτήν τη συμβολοσειρά, ακόμη κι αν έχει πρόσβαση στον λογαριασμό A, δεν θα μπορεί να έχει πρόσβαση στον ρόλο σας.

Ωστόσο, πρέπει να σημειωθεί ότι αυτή η "μυστική" συμβολοσειρά ExternalId δεν είναι μυστική, οποιοσδήποτε μπορεί να διαβάσει την πολιτική ρόλου IAM assume θα μπορεί να την δει. Αλλά με την προϋπόθεση ότι ο εξωτερικός λογαριασμός A την γνωρίζει, αλλά ο εξωτερικός λογαριασμός B δεν την γνωρίζει, αυτό εμποδίζει τον B να καταχραστεί τον A για να έχει πρόσβαση στον ρόλο σας.

Παράδειγμα:

{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}

Για έναν επιτιθέμενο να εκμεταλλευτεί έναν μπερδεμένο αντιπρόσωπο, θα χρειαστεί να βρει κάπως αν οι αρχές του τρέχοντος λογαριασμού μπορούν να προσωποποιήσουν ρόλους σε άλλους λογαριασμούς.

Απροσδόκητες Εμπιστοσύνες

Μπαλαντέρ ως αρχή

{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" },
}

Αυτή η πολιτική επιτρέπει σε όλες τις υπηρεσίες του AWS να υποθέτουν τον ρόλο.

Υπηρεσία ως κύριος

{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}

Αυτή η πολιτική επιτρέπει σε οποιονδήποτε λογαριασμό να διαμορφώσει το apigateway τους για να καλέσει αυτό το Lambda.

Το S3 ως κύριος

"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}

Εάν ένα S3 bucket δίνεται ως κύριος, επειδή τα 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 είναι η χρήση μιας συνθήκης με το AWS:SourceArn για να ελεγχθεί το προέλευσης ARN. Ωστόσο, ορισμένες υπηρεσίες μπορεί να μην υποστηρίζουν αυτό (όπως η CloudTrail σύμφωνα με ορισμένες πηγές).

Αναφορές

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated