Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2025-09-29 22:46:06 +00:00
parent 63ff5fac0b
commit 2aa8f96245
2 changed files with 41 additions and 45 deletions

View File

@@ -12,12 +12,11 @@ Za više informacija:
### Od IAM kredencijala do konzole
Ako ste uspeli da dobijete neke IAM kredencijale, možda ćete biti zainteresovani za **pristup web konzoli** koristeći sledeće alate.\
Napomena: korisnik/rola mora imati dozvolu **`sts:GetFederationToken`**.
Ako ste uspeli da dobijete neke IAM kredencijale, možda će vas zanimati **pristup web konzoli** koristeći sledeće alate.\ Napomena: korisnik/rola mora imati dozvolu **`sts:GetFederationToken`**.
#### Prilagođeni skript
Sledeći skript će koristiti podrazumevani profil i podrazumevanu AWS lokaciju (ne gov i ne cn) da vam da potpisanu URL adresu koju možete koristiti za prijavu u web konzolu:
Sledeći skript će koristiti podrazumevani profil i podrazumevanu AWS lokaciju (not gov and not cn) kako bi vam dao potpisani URL koji možete koristiti za prijavu u web konzolu:
```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 +54,7 @@ echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.co
```
#### aws_consoler
Možete **generisati link za web konzolu** sa [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler).
Možete **generisati link za web konzolu** pomoću [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler).
```bash
cd /tmp
python3 -m venv env
@@ -64,22 +63,22 @@ pip install aws-consoler
aws_consoler [params...] #This will generate a link to login into the console
```
> [!WARNING]
> Osigurajte da IAM korisnik ima `sts:GetFederationToken` dozvolu, ili obezbedite ulogu koju treba preuzeti.
> Obezbedite da IAM korisnik ima dozvolu `sts:GetFederationToken`, ili obezbedite rolu za preuzimanje.
#### aws-vault
[**aws-vault**](https://github.com/99designs/aws-vault) je alat za sigurno čuvanje i pristup AWS akreditivima u razvojnim okruženjima.
[**aws-vault**](https://github.com/99designs/aws-vault) je alat za sigurno čuvanje i pristup AWS credentials u razvojnom okruženju.
```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]
> Možete takođe koristiti **aws-vault** da dobijete **sesiju konzole pretraživača**
> Takođe možete koristiti **aws-vault** da biste dobili **browser console session**
### **Obilaženje ograničenja User-Agent iz Pythona**
### **Zaobiđite ograničenja User-Agent-a u Pythonu**
Ako postoji **ograničenje za izvođenje određenih akcija na osnovu korisničkog agenta** koji se koristi (kao što je ograničavanje korišćenja python boto3 biblioteke na osnovu korisničkog agenta), moguće je koristiti prethodnu tehniku da **se povežete na web konzolu putem pretraživača**, ili možete direktno **modifikovati boto3 korisnički agent** tako što ćete uraditi:
Ako postoji **restriction to perform certain actions based on the user agent** used (npr. ograničavanje korišćenja python boto3 library na osnovu user agent-a) moguće je upotrebiti prethodnu tehniku da **connect to the web console via a browser**, ili možete direktno **modify the boto3 user-agent** tako što ćete:
```bash
# Shared by ex16x41
# Create a client
@@ -92,4 +91,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`**
Sa ovom dozvolom moguće je kreirati federisani identitet za korisnika koji ga izvršava, ograničen na dozvole koje taj korisnik poseduje.
```bash
aws sts get-federation-token --name <username>
```
Token koji vraća sts:GetFederationToken pripada federisanom identitetu pozivajućeg korisnika, ali sa ograničenim dozvolama. Čak i ako korisnik ima administratorska prava, određene radnje kao što su listanje IAM korisnika ili prikačivanje politika ne mogu se izvršiti pomoću federisanog tokena.
Pored toga, ova metoda je donekle prikrivenija, jer se federisani korisnik ne pojavljuje u AWS Portalu; može se uočiti samo kroz CloudTrail logove ili alate za nadzor.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -6,9 +6,9 @@
### `sts:AssumeRole`
Svaka uloga se kreira sa **politikom poverenja uloge**, ova politika označava **ko može da preuzme kreiranu ulogu**. Ako uloga iz **iste račun** kaže da neki račun može da je preuzme, to znači da će taj račun moći da pristupi ulozi (i potencijalno **privesc**).
Svaka uloga se kreira sa **politikom poverenja u ulogu**, ova politika navodi **ko može da preuzme kreiranu ulogu**. Ako uloga iz **istog naloga** kaže da nalog može da je preuzme, to znači da će taj nalog moći da pristupi ulozi (i potencijalno izvrši **privesc**).
Na primer, sledeća politika poverenja uloge označava da bilo ko može da je preuzme, stoga **bilo koji korisnik će moći da privesc** na dozvole povezane sa tom ulogom.
Na primer, sledeća politika poverenja u ulogu pokazuje da svako može da je preuzme, dakle **bilo koji korisnik će moći da privesc** na dozvole povezane sa tom ulogom.
```json
{
"Version": "2012-10-17",
@@ -23,39 +23,20 @@ Na primer, sledeća politika poverenja uloge označava da bilo ko može da je pr
]
}
```
Možete se pretvarati da ste uloga koja se izvršava:
Možete preuzeti ulogu pokretanjem:
```bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
```
**Potential Impact:** Privesc do uloge.
**Potencijalni uticaj:** Privesc na rolu.
> [!CAUTION]
> Imajte na umu da u ovom slučaju dozvola `sts:AssumeRole` treba da bude **naznačena u ulozi koju treba zloupotrebiti** i ne u politici koja pripada napadaču.\
> Sa jednim izuzetkom, da bi se **preuzela uloga iz drugog naloga** napadačev nalog **takođe treba** da ima **`sts:AssumeRole`** nad ulogom.
> Imajte na umu da u ovom slučaju dozvola `sts:AssumeRole` mora biti **navedena u roli koju zloupotrebljavate** i ne u politici koja pripada attacker account.\
> Sa jednom izuzetkom, da biste **preuzeli rolu iz drugog naloga** attacker account **takođe mora** imati **`sts:AssumeRole`** nad tom rolom.
### **`sts:GetFederationToken`**
Sa ovom dozvolom moguće je generisati akreditive za impersonaciju bilo kog korisnika:
```bash
aws sts get-federation-token --name <username>
```
Ovo je kako se ova dozvola može dati sigurno bez davanja pristupa za imitaciju drugih korisnika:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}
```
### `sts:AssumeRoleWithSAML`
Politika poverenja sa ovom ulogom omogućava **korisnicima koji su autentifikovani putem SAML da se pretvaraju da su uloga.**
Politika poverenja sa ovom rolom daje **korisnicima autentifikovanim putem SAML-a pristup da se predstavljaju kao ta rola.**
Primer politike poverenja sa ovom dozvolom je:
```json
@@ -78,21 +59,21 @@ Primer politike poverenja sa ovom dozvolom je:
]
}
```
Da biste generisali akreditive za impersonaciju uloge, mogli biste koristiti nešto poput:
Da biste generisali kredencijale kako biste se predstavili kao uloga, uopšteno možete koristiti nešto poput:
```bash
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
```
Ali **provajderi** mogu imati **svoje alate** kako bi to olakšali, poput [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
Ali **provajderi** mogu imati sopstvene **alate** da to olakšaju, kao što je [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
```
**Potencijalni uticaj:** Privesc na ulogu.
**Potencijalni uticaj:** Privesc to the role.
### `sts:AssumeRoleWithWebIdentity`
Ova dozvola omogućava dobijanje skupa privremenih bezbednosnih kredencijala za **korisnike koji su autentifikovani u mobilnoj, web aplikaciji, EKS...** sa provajderom web identiteta. [Saznajte više ovde.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
Ovo dopuštenje omogućava dobijanje skupa privremenih bezbednosnih akreditiva za **korisnike koji su autentifikovani u mobilnoj aplikaciji, web aplikaciji, EKS...** kod provajdera web identiteta. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
Na primer, ako **EKS servisni nalog** treba da može da **imitira IAM ulogu**, imaće token u **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** i može **da preuzme ulogu i dobije kredencijale** radeći nešto poput:
Na primer, ako bi **EKS service account** trebalo da bude u mogućnosti da **preuzme IAM rolu**, imaće token u **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** i može **preuzeti rolu i dobiti akreditive** radeći nešto poput:
```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
@@ -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 omogućava radnim opterećenjima van AWS-a da preuzmu IAM uloge koristeći X.509 sertifikate. Međutim, kada politike poverenja nisu pravilno definisane, mogu se zloupotrebiti za eskalaciju privilegija.
AWS IAM RolesAnywhere omogućava workload-ima izvan AWS-a da preuzmu IAM roles koristeći X.509 sertifikate. Ali kada trust policies nisu pravilno ograničene, mogu se zloupotrebiti za privilege escalation.
Ova politika nema ograničenja o tome koji su trust anchor ili atributi sertifikata dozvoljeni. Kao rezultat, svaki sertifikat povezan sa bilo kojim trust anchor u nalogu može se koristiti za preuzimanje ove uloge.
Ova politika ne sadrži ograničenja koja definišu koji trust anchor ili certificate attributes su dozvoljeni. Kao rezultat, bilo koji sertifikat vezan za bilo koji trust anchor u nalogu može se koristiti da assume this role.
```json
{
"Version": "2012-10-17",
@@ -127,9 +108,9 @@ Ova politika nema ograničenja o tome koji su trust anchor ili atributi sertifik
}
```
Za privesc, `aws_signing_helper` je potreban sa https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
Za privesc, potreban je `aws_signing_helper` sa https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
Zatim, koristeći važeći sertifikat, napadač može preći u ulogu sa višim privilegijama.
Zatim, koristeći važeći sertifikat, attacker može pivot into the higher privilege role
```bash
aws_signing_helper credential-process \
--certificate readonly.pem \
@@ -138,7 +119,13 @@ aws_signing_helper credential-process \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin
```
### References
Trust anchor potvrđuje da klijentski sertifikat `readonly.pem` potiče od njegovog ovlašćenog CA; kada je trust anchor kreiran, javni sertifikat CA je bio uključen (i sada se koristi za validaciju `readonly.pem`). Unutar `readonly.pem` nalazi se javni ključ, koji AWS koristi da verifikuje da je potpis napravljen odgovarajućim privatnim ključem `readonly.key`.
Sertifikat takođe dokazuje identitet i pruža atribute (kao što su CN ili OU) koje `default` profil transformiše u tagove, koje roles trust policy može koristiti da odluči da li da odobri pristup; ako u trust policy nema uslova, ti tagovi se ignorišu i svako sa važećim sertifikatom može proći.
Da bi ovaj napad bio moguć, i trust anchor i `default` profil moraju biti aktivni.
### Reference
- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)