Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2025-09-29 22:49:16 +00:00
parent aedb45789e
commit 7502df2311
2 changed files with 41 additions and 44 deletions

View File

@@ -10,14 +10,14 @@
../aws-services/aws-iam-enum.md
{{#endref}}
### Από IAM Creds σε Κονσόλα
### From IAM Creds to Console
Εάν έχετε καταφέρει να αποκτήσετε κάποια IAM credentials, μπορεί να σας ενδιαφέρει να **πρόσβαση στην web κονσόλα** χρησιμοποιώντας τα παρακάτω εργαλεία.\
Εάν καταφέρατε να αποκτήσετε κάποια IAM credentials, ίσως σας ενδιαφέρει να αποκτήσετε πρόσβαση στην **web console** χρησιμοποιώντας τα παρακάτω εργαλεία.\
Σημειώστε ότι ο χρήστης/ρόλος πρέπει να έχει την άδεια **`sts:GetFederationToken`**.
#### Προσαρμοσμένο σενάριο
#### Προσαρμοσμένο script
Το παρακάτω σενάριο θα χρησιμοποιήσει το προεπιλεγμένο προφίλ και μια προεπιλεγμένη τοποθεσία AWS (όχι gov και όχι cn) για να σας δώσει ένα υπογεγραμμένο URL που μπορείτε να χρησιμοποιήσετε για να συνδεθείτε στην web κονσόλα:
Το ακόλουθο script θα χρησιμοποιήσει το default profile και μια default AWS location (not gov and not cn) για να σας δώσει ένα signed URL που μπορείτε να χρησιμοποιήσετε για να συνδεθείτε στο web console:
```bash
# Get federated creds (you must indicate a policy or they won't have any perms)
## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges
@@ -55,7 +55,7 @@ echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.co
```
#### aws_consoler
Μπορείτε να **δημιουργήσετε έναν σύνδεσμο web κονσόλας** με [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler).
Μπορείτε να **δημιουργήσετε έναν σύνδεσμο για την web κονσόλα** με [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler).
```bash
cd /tmp
python3 -m venv env
@@ -64,22 +64,22 @@ pip install aws-consoler
aws_consoler [params...] #This will generate a link to login into the console
```
> [!WARNING]
> Βεβαιωθείτε ότι ο χρήστης IAM έχει άδεια `sts:GetFederationToken`, ή παρέχετε έναν ρόλο για να αναληφθεί.
> Βεβαιωθείτε ότι ο IAM user έχει την άδεια `sts:GetFederationToken`, ή παρέχετε έναν role για να αναλάβει.
#### aws-vault
[**aws-vault**](https://github.com/99designs/aws-vault) είναι ένα εργαλείο για την ασφαλή αποθήκευση και πρόσβαση στα διαπιστευτήρια AWS σε ένα περιβάλλον ανάπτυξης.
[**aws-vault**](https://github.com/99designs/aws-vault) είναι ένα εργαλείο για την ασφαλή αποθήκευση και πρόσβαση σε διαπιστευτήρια AWS σε περιβάλλον ανάπτυξης.
```bash
aws-vault list
aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds
aws-vault login jonsmith # Open a browser logged as jonsmith
```
> [!NOTE]
> Μπορείτε επίσης να χρησιμοποιήσετε το **aws-vault** για να αποκτήσετε μια **συνεδρία κονσόλας προγράμματος περιήγησης**
> Μπορείτε επίσης να χρησιμοποιήσετε **aws-vault** για να αποκτήσετε μία **συνεδρία κονσόλας προγράμματος περιήγησης**
### **Παράκαμψη περιορισμών User-Agent από Python**
Εάν υπάρχει **περιορισμός για την εκτέλεση ορισμένων ενεργειών με βάση τον user agent** που χρησιμοποιείται (όπως ο περιορισμός της χρήσης της βιβλιοθήκης python boto3 με βάση τον user agent), είναι δυνατόν να χρησιμοποιήσετε την προηγούμενη τεχνική για να **συνδεθείτε στην κονσόλα ιστού μέσω ενός προγράμματος περιήγησης**, ή μπορείτε να **τροποποιήσετε απευθείας τον user-agent του boto3** κάνοντας:
Αν υπάρχει **περιορισμός στην εκτέλεση συγκεκριμένων ενεργειών βάσει του User-Agent** που χρησιμοποιείται (π.χ. περιορισμός της χρήσης της βιβλιοθήκης python boto3 με βάση τον User-Agent), είναι δυνατό να χρησιμοποιήσετε την προηγούμενη τεχνική για να **συνδεθείτε στην web console μέσω browser**, ή μπορείτε απευθείας να **τροποποιήσετε τον boto3 User-Agent** κάνοντας:
```bash
# Shared by ex16x41
# Create a client
@@ -92,4 +92,14 @@ client.meta.events.register( 'before-call.secretsmanager.GetSecretValue', lambda
# Perform the action
response = client.get_secret_value(SecretId="flag_secret") print(response['SecretString'])
```
### **`sts:GetFederationToken`**
Με αυτήν την άδεια είναι δυνατό να δημιουργηθεί μια ομοσπονδιακή ταυτότητα για τον χρήστη που την εκτελεί, περιορισμένη στις άδειες που διαθέτει αυτός ο χρήστης.
```bash
aws sts get-federation-token --name <username>
```
Το token που επιστρέφεται από sts:GetFederationToken ανήκει στην federated identity του χρήστη που το καλεί, αλλά με περιορισμένα δικαιώματα. Ακόμη κι αν ο χρήστης έχει administrator rights, ορισμένες ενέργειες, όπως το list IAM users ή το attach policies, δεν μπορούν να εκτελεστούν μέσω του federated token.
Επιπλέον, αυτή η μέθοδος είναι κάπως πιο stealthy, αφού ο federated user δεν εμφανίζεται στο AWS Portal — μπορεί να παρατηρηθεί μόνο μέσω CloudTrail logs ή εργαλείων παρακολούθησης.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -6,9 +6,9 @@
### `sts:AssumeRole`
Κάθε ρόλος δημιουργείται με μια **πολιτική εμπιστοσύνης ρόλου**, αυτή η πολιτική υποδεικνύει **ποιος μπορεί να αναλάβει τον δημιουργημένο ρόλο**. Αν ένας ρόλος από τον **ίδιο λογαριασμό** λέει ότι ένας λογαριασμός μπορεί να τον αναλάβει, σημαίνει ότι ο λογαριασμός θα μπορεί να έχει πρόσβαση στον ρόλο (και πιθανώς **privesc**).
Κάθε role δημιουργείται με μια **role trust policy**, αυτή η πολιτική υποδεικνύει **ποιος μπορεί να αναλάβει το δημιουργημένο role**. Αν ένα role από τον **same account** δηλώνει ότι ένας account μπορεί να το αναλάβει, αυτό σημαίνει ότι ο account θα μπορέσει να έχει πρόσβαση στο role (και ενδεχομένως να κάνει **privesc**).
Για παράδειγμα, η παρακάτω πολιτική εμπιστοσύνης ρόλου υποδεικνύει ότι οποιοσδήποτε μπορεί να τον αναλάβει, επομένως **οποιοσδήποτε χρήστης θα μπορεί να 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.
```json
{
"Version": "2012-10-17",
@@ -27,37 +27,18 @@
```bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
```
**Πιθανές Επιπτώσεις:** Privesc στον ρόλο.
**Πιθανός Αντίκτυπος:** Privesc στο ρόλο.
> [!CAUTION]
> Σημειώστε ότι σε αυτή την περίπτωση η άδεια `sts:AssumeRole` πρέπει να είναι **καθορισμένη στον ρόλο που θα εκμεταλλευτεί** και όχι σε μια πολιτική που ανήκει στον επιτιθέμενο.\
> Με μία εξαίρεση, προκειμένου να **αναλάβει έναν ρόλο από διαφορετικό λογαριασμό** ο λογαριασμός του επιτιθέμενου **πρέπει επίσης** να έχει την **`sts:AssumeRole`** πάνω στον ρόλο.
> Σημειώστε ότι σε αυτή την περίπτωση η άδεια `sts:AssumeRole` πρέπει να **αναφέρεται στον ρόλο που θα καταχραστείτε** και όχι σε μια πολιτική που ανήκει στον επιτιθέμενο.\
> Με μία εξαίρεση, για να **αναλάβει κανείς έναν ρόλο από διαφορετικό λογαριασμό** ο λογαριασμός του επιτιθέμενου **χρειάζεται επίσης** να έχει την **`sts:AssumeRole`** πάνω στον ρόλο.
### **`sts:GetFederationToken`**
Με αυτή την άδεια είναι δυνατό να δημιουργηθούν διαπιστευτήρια για να προσποιηθεί οποιοσδήποτε χρήστης:
```bash
aws sts get-federation-token --name <username>
```
Αυτή είναι η διαδικασία με την οποία μπορεί να δοθεί αυτή η άδεια με ασφάλεια χωρίς να παραχωρηθεί πρόσβαση για να προσποιηθεί άλλους χρήστες:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}
```
### `sts:AssumeRoleWithSAML`
Μια πολιτική εμπιστοσύνης με αυτόν τον ρόλο παρέχει **σε χρήστες που έχουν πιστοποιηθεί μέσω SAML πρόσβαση για να προσποιηθούν τον ρόλο.**
Μια πολιτική εμπιστοσύνης για αυτόν τον ρόλο παρέχει **σε χρήστες που έχουν αυθεντικοποιηθεί μέσω SAML πρόσβαση να υποδυθούν τον ρόλο.**
Ένα παράδειγμα πολιτικής εμπιστοσύνης με αυτήν την άδεια είναι:
Ένα παράδειγμα πολιτικής εμπιστοσύνης με αυτή την άδεια είναι:
```json
{
"Version": "2012-10-17",
@@ -78,26 +59,26 @@ aws sts get-federation-token --name <username>
]
}
```
Για να δημιουργήσετε διαπιστευτήρια για να προσποιηθείτε τον ρόλο, γενικά θα μπορούσατε να χρησιμοποιήσετε κάτι όπως:
Για να δημιουργήσετε credentials για να impersonate το role, γενικά μπορείτε να χρησιμοποιήσετε κάτι σαν:
```bash
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
```
Αλλά οι **πάροχοι** μπορεί να έχουν τα **δικά τους εργαλεία** για να διευκολύνουν αυτό, όπως το [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
```
**Πιθανές Επιπτώσεις:** Privesc στον ρόλο.
**Potential Impact:** Privesc to the role.
### `sts:AssumeRoleWithWebIdentity`
Αυτή η άδεια παρέχει την άδεια να αποκτηθούν ένα σύνολο προσωρινών διαπιστευτηρίων ασφαλείας για **χρήστες που έχουν αυθεντικοποιηθεί σε μια κινητή, διαδικτυακή εφαρμογή, EKS...** με έναν πάροχο διαδικτυακής ταυτότητας. [Μάθετε περισσότερα εδώ.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
Αυτό το δικαίωμα παρέχει δυνατότητα απόκτησης ενός συνόλου προσωρινών διαπιστευτηρίων ασφαλείας για **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)
Για παράδειγμα, αν ένας **λογαριασμός υπηρεσίας EKS** θα έπρεπε να μπορεί να **παριστάνει έναν ρόλο IAM**, θα έχει ένα διακριτικό στο **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** και μπορεί να **αναλάβει τον ρόλο και να αποκτήσει διαπιστευτήρια** κάνοντας κάτι όπως:
Για παράδειγμα, αν ένας **EKS service account** πρέπει να μπορεί να **impersonate an IAM role**, θα έχει ένα token στο **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** και μπορεί να **assume the role and get credentials** κάνοντας κάτι σαν:
```bash
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod
```
### Κατάχρηση Ομοσπονδίας
### Federation Abuse
{{#ref}}
../aws-basic-information/aws-federation-abuse.md
@@ -105,9 +86,9 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
### IAM Roles Anywhere Privesc
AWS IAM RolesAnywhere επιτρέπει σε φόρτους εργασίας εκτός AWS να αναλαμβάνουν IAM ρόλους χρησιμοποιώντας πιστοποιητικά X.509. Αλλά όταν οι πολιτικές εμπιστοσύνης δεν είναι σωστά καθορισμένες, μπορούν να καταχραστούν για αναβάθμιση δικαιωμάτων.
Το AWS IAM RolesAnywhere επιτρέπει σε υπολογιστικά φορτία εκτός AWS να αναλαμβάνουν IAM roles χρησιμοποιώντας πιστοποιητικά X.509. Ωστόσο, όταν οι πολιτικές εμπιστοσύνης δεν είναι σωστά περιορισμένες, μπορούν να καταχραστούν για privilege escalation.
Αυτή η πολιτική στερείται περιορισμών σχετικά με το ποιοι κόμβοι εμπιστοσύνης ή χαρακτηριστικά πιστοποιητικών επιτρέπονται. Ως αποτέλεσμα, οποιοδήποτε πιστοποιητικό συνδεδεμένο με οποιονδήποτε κόμβο εμπιστοσύνης στον λογαριασμό μπορεί να χρησιμοποιηθεί για να αναλάβει αυτόν τον ρόλο.
Αυτή η πολιτική δεν περιέχει περιορισμούς σχετικά με το ποιος trust anchor ή ποια χαρακτηριστικά πιστοποιητικού επιτρέπονται. Ως αποτέλεσμα, οποιοδήποτε πιστοποιητικό συνδεδεμένο με οποιονδήποτε trust anchor στον λογαριασμό μπορεί να χρησιμοποιηθεί για να αναλάβει αυτόν τον ρόλο.
```json
{
"Version": "2012-10-17",
@@ -129,7 +110,7 @@ AWS IAM RolesAnywhere επιτρέπει σε φόρτους εργασίας ε
```
Για privesc, απαιτείται το `aws_signing_helper` από https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
Στη συνέχεια, χρησιμοποιώντας ένα έγκυρο πιστοποιητικό, ο επιτιθέμενος μπορεί να μεταβεί στον ρόλο με υψηλότερα δικαιώματα.
Στη συνέχεια, χρησιμοποιώντας ένα έγκυρο πιστοποιητικό, ο attacker μπορεί να pivot στον ρόλο με υψηλότερα προνόμια
```bash
aws_signing_helper credential-process \
--certificate readonly.pem \
@@ -138,6 +119,12 @@ 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`.
Το πιστοποιητικό επίσης αποδεικνύει ταυτότητα και παρέχει χαρακτηριστικά (όπως CN ή OU) που το προφίλ `default` μετατρέπει σε ετικέτες, τις οποίες η πολιτική εμπιστοσύνης του ρόλου μπορεί να χρησιμοποιήσει για να αποφασίσει εάν θα εξουσιοδοτήσει την πρόσβαση. Εάν δεν υπάρχουν προϋποθέσεις στην πολιτική εμπιστοσύνης, αυτές οι ετικέτες αγνοούνται και οποιοσδήποτε με έγκυρο πιστοποιητικό επιτρέπεται.
Για να είναι δυνατή αυτή η επίθεση, τόσο η αγκύρωση εμπιστοσύνης όσο και το προφίλ `default` πρέπει να είναι ενεργά.
### Αναφορές
- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)