diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index 095f5dcf3..e9874ef7e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md @@ -6,9 +6,9 @@ ### `sts:AssumeRole` -Κάθε role δημιουργείται με μια **role trust policy**, αυτή η πολιτική υποδεικνύει **ποιος μπορεί να αναλάβει το δημιουργημένο role**. Αν ένα role από τον **same account** δηλώνει ότι ένας account μπορεί να το αναλάβει, αυτό σημαίνει ότι ο account θα μπορέσει να έχει πρόσβαση στο role (και ενδεχομένως να κάνει **privesc**). +Κάθε role δημιουργείται με ένα **role trust policy**· αυτή η πολιτική καθορίζει **who can assume the created role**. Εάν ένας role από τον **same account** δηλώνει ότι ένας account μπορεί να τον αναλάβει, τότε το account θα μπορεί να αποκτήσει πρόσβαση στον role (και ενδεχομένως να πραγματοποιήσει **privesc**). -For example, the following role trust policy indicates that anyone can assume it, therefore **any user will be able to privesc** to the permissions associated with that role. +Για παράδειγμα, το παρακάτω role trust policy υποδεικνύει ότι ο οποιοσδήποτε μπορεί να τον αναλάβει, επομένως **any user will be able to privesc** στα permissions που είναι συνδεδεμένα με αυτόν τον role. ```json { "Version": "2012-10-17", @@ -23,22 +23,22 @@ For example, the following role trust policy indicates that anyone can assume it ] } ``` -Μπορείτε να προσποιηθείτε έναν ρόλο που εκτελεί: +Μπορείτε να προσωποποιήσετε έναν ρόλο εκτελώντας: ```bash aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ``` -**Πιθανός Αντίκτυπος:** Privesc στο ρόλο. +**Πιθανός Αντίκτυπος:** Privesc στον ρόλο. > [!CAUTION] -> Σημειώστε ότι σε αυτή την περίπτωση η άδεια `sts:AssumeRole` πρέπει να **αναφέρεται στον ρόλο που θα καταχραστείτε** και όχι σε μια πολιτική που ανήκει στον επιτιθέμενο.\ -> Με μία εξαίρεση, για να **αναλάβει κανείς έναν ρόλο από διαφορετικό λογαριασμό** ο λογαριασμός του επιτιθέμενου **χρειάζεται επίσης** να έχει την **`sts:AssumeRole`** πάνω στον ρόλο. +> Σημειώστε ότι σε αυτήν την περίπτωση η άδεια `sts:AssumeRole` πρέπει να **αναφέρεται στον ρόλο που θα καταχραστείτε** και όχι σε μια policy που ανήκει στον επιτιθέμενο.\ +> Με μία εξαίρεση, για να **αναλάβει κανείς ρόλο από διαφορετικό λογαριασμό** ο λογαριασμός του επιτιθέμενου **επίσης χρειάζεται** να έχει το **`sts:AssumeRole`** πάνω στον ρόλο. ### `sts:AssumeRoleWithSAML` -Μια πολιτική εμπιστοσύνης για αυτόν τον ρόλο παρέχει **σε χρήστες που έχουν αυθεντικοποιηθεί μέσω SAML πρόσβαση να υποδυθούν τον ρόλο.** +Μια trust policy με αυτόν τον ρόλο δίνει τη δυνατότητα σε **χρήστες που αυθεντικοποιούνται μέσω SAML** να υποδυθούν τον ρόλο. -Ένα παράδειγμα πολιτικής εμπιστοσύνης με αυτή την άδεια είναι: +Ένα παράδειγμα trust policy με αυτήν την άδεια είναι: ```json { "Version": "2012-10-17", @@ -59,19 +59,19 @@ aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ] } ``` -Για να δημιουργήσετε credentials για να impersonate το role, γενικά μπορείτε να χρησιμοποιήσετε κάτι σαν: +Για να δημιουργήσετε διαπιστευτήρια για να προσποιηθείτε τον ρόλο, γενικά μπορείτε να χρησιμοποιήσετε κάτι σαν: ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` -Αλλά οι **πάροχοι** μπορεί να έχουν τα δικά τους **εργαλεία** για να το κάνουν πιο εύκολο, όπως το [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): +Αλλά οι **πάροχοι** μπορεί να έχουν τα **δικά τους εργαλεία** για να το κάνουν πιο εύκολο, όπως [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): ```bash onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 ``` -**Potential Impact:** Privesc to the role. +**Δυνητικός Αντίκτυπος:** Privesc στον ρόλο. ### `sts:AssumeRoleWithWebIdentity` -Αυτό το δικαίωμα παρέχει δυνατότητα απόκτησης ενός συνόλου προσωρινών διαπιστευτηρίων ασφαλείας για **users who have been authenticated in a mobile, web application, EKS...** με έναν web identity provider. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) +Αυτό το δικαίωμα επιτρέπει την απόκτηση ενός συνόλου προσωρινών διαπιστευτηρίων ασφαλείας για **χρήστες που έχουν πιστοποιηθεί σε κινητή εφαρμογή, εφαρμογή web, EKS...** με έναν πάροχο ταυτότητας web. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) Για παράδειγμα, αν ένας **EKS service account** πρέπει να μπορεί να **impersonate an IAM role**, θα έχει ένα token στο **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** και μπορεί να **assume the role and get credentials** κάνοντας κάτι σαν: ```bash @@ -86,9 +86,13 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ ### IAM Roles Anywhere Privesc -Το AWS IAM RolesAnywhere επιτρέπει σε υπολογιστικά φορτία εκτός AWS να αναλαμβάνουν IAM roles χρησιμοποιώντας πιστοποιητικά X.509. Ωστόσο, όταν οι πολιτικές εμπιστοσύνης δεν είναι σωστά περιορισμένες, μπορούν να καταχραστούν για privilege escalation. +AWS IAM RolesAnywhere επιτρέπει σε workloads εκτός AWS να αναλάβουν IAM roles χρησιμοποιώντας πιστοποιητικά X.509. Όταν όμως οι trust policies δεν ορίζονται σωστά, μπορούν να καταχραστούν για privilege escalation. -Αυτή η πολιτική δεν περιέχει περιορισμούς σχετικά με το ποιος trust anchor ή ποια χαρακτηριστικά πιστοποιητικού επιτρέπονται. Ως αποτέλεσμα, οποιοδήποτε πιστοποιητικό συνδεδεμένο με οποιονδήποτε trust anchor στον λογαριασμό μπορεί να χρησιμοποιηθεί για να αναλάβει αυτόν τον ρόλο. +Για να κατανοηθεί αυτή η επίθεση, είναι απαραίτητο να εξηγήσουμε τι είναι ένα trust anchor. Ένα trust anchor στο AWS IAM RolesAnywhere είναι η οντότητα ρίζα εμπιστοσύνης· περιέχει το δημόσιο πιστοποιητικό μιας Αρχής Πιστοποίησης (Certificate Authority, CA) που είναι καταχωρημένη στον λογαριασμό, ώστε το AWS να μπορεί να επαληθεύσει τα παρουσιαζόμενα πιστοποιητικά X.509. Με αυτόν τον τρόπο, αν το client certificate έχει εκδοθεί από αυτήν την CA και το trust anchor είναι ενεργό, το AWS το αναγνωρίζει ως έγκυρο. + +Επιπλέον, ένα profile είναι η διαμόρφωση που ορίζει ποια χαρακτηριστικά του πιστοποιητικού X.509 (όπως CN, OU ή SAN) θα μετατραπούν σε session tags, τα οποία στη συνέχεια θα συγκριθούν με τις συνθήκες της trust policy. + +Αυτή η policy δεν έχει περιορισμούς σχετικά με το ποιο trust anchor ή ποια attributes του πιστοποιητικού επιτρέπονται. Ως αποτέλεσμα, οποιοδήποτε πιστοποιητικό συνδεδεμένο με οποιοδήποτε trust anchor στον λογαριασμό μπορεί να χρησιμοποιηθεί για να αναλάβει αυτόν τον ρόλο. ```json { "Version": "2012-10-17", @@ -108,9 +112,9 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ } ``` -Για privesc, απαιτείται το `aws_signing_helper` από https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html +Για privesc, το `aws_signing_helper` απαιτείται από https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html -Στη συνέχεια, χρησιμοποιώντας ένα έγκυρο πιστοποιητικό, ο attacker μπορεί να pivot στον ρόλο με υψηλότερα προνόμια +Στη συνέχεια, χρησιμοποιώντας ένα έγκυρο πιστοποιητικό, ο attacker μπορεί να pivot σε higher privilege role ```bash aws_signing_helper credential-process \ --certificate readonly.pem \ @@ -119,11 +123,11 @@ aws_signing_helper credential-process \ --profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \ --role-arn arn:aws:iam::123456789012:role/Admin ``` -Η αγκύρωση εμπιστοσύνης επαληθεύει ότι το πιστοποιητικό πελάτη `readonly.pem` προέρχεται από την εξουσιοδοτημένη CA του. Όταν δημιουργήθηκε η αγκύρωση εμπιστοσύνης, το δημόσιο πιστοποιητικό της CA συμπεριλήφθηκε (και τώρα χρησιμοποιείται για να επαληθεύσει το `readonly.pem`). Στο `readonly.pem` περιέχεται το δημόσιο κλειδί, το οποίο η AWS χρησιμοποιεί για να επαληθεύσει ότι η υπογραφή έγινε με το αντίστοιχο ιδιωτικό κλειδί `readonly.key`. +Το trust anchor επαληθεύει ότι το πιστοποιητικό `readonly.pem` του client προέρχεται από την εξουσιοδοτημένη CA του, και μέσα στο πιστοποιητικό `readonly.pem` βρίσκεται το δημόσιο κλειδί που χρησιμοποιεί το AWS για να επαληθεύσει ότι η υπογραφή έγινε με το αντίστοιχο ιδιωτικό κλειδί `readonly.key`. -Το πιστοποιητικό επίσης αποδεικνύει ταυτότητα και παρέχει χαρακτηριστικά (όπως CN ή OU) που το προφίλ `default` μετατρέπει σε ετικέτες, τις οποίες η πολιτική εμπιστοσύνης του ρόλου μπορεί να χρησιμοποιήσει για να αποφασίσει εάν θα εξουσιοδοτήσει την πρόσβαση. Εάν δεν υπάρχουν προϋποθέσεις στην πολιτική εμπιστοσύνης, αυτές οι ετικέτες αγνοούνται και οποιοσδήποτε με έγκυρο πιστοποιητικό επιτρέπεται. +Το πιστοποιητικό παρέχει επίσης attributes (όπως CN ή OU) που το προφίλ `default` μετατρέπει σε tags, τα οποία η trust policy του role μπορεί να χρησιμοποιήσει για να αποφασίσει αν θα χορηγήσει πρόσβαση. Αν δεν υπάρχουν conditions στην trust policy, αυτά τα tags δεν έχουν χρήση και η πρόσβαση χορηγείται σε οποιονδήποτε έχει έγκυρο πιστοποιητικό. -Για να είναι δυνατή αυτή η επίθεση, τόσο η αγκύρωση εμπιστοσύνης όσο και το προφίλ `default` πρέπει να είναι ενεργά. +Για να είναι δυνατή αυτή η επίθεση, πρέπει να είναι ενεργά τόσο το trust anchor όσο και το προφίλ `default`. ### Αναφορές