mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 03:16:37 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -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}}
|
||||
|
||||
@@ -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 role’s 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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user