diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md index 153eff3a8..5a5a4c31d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md @@ -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**.
-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 \ +--access-key-id AKIAIOSFODNN7EXAMPLE + +## Remove ssh key of a user +aws iam delete-ssh-public-key \ +--user-name \ +--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 + +# Delete a group +aws iam delete-group \ +--group-name + +# Delete a role +aws iam delete-role \ +--role-name +``` +### +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 \ +--policy-name + +# Delete a role policy +aws iam delete-role-policy \ +--role-name \ +--policy-name +``` +### 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 \ +--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 \ +--ssh-public-key-id APKAEIBAERJR2EXAMPLE \ +--status Inactive + +aws iam update-server-certificate \ +--server-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) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md index c26cb2c94..fb92c328f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md @@ -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**.
### 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 +``` +### 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/ +# Update Alias +aws kms update-alias \ +--alias-name alias/ \ +--target-key-id +``` +### 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 + +## Second enable the key +aws kms enable-key \ +--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 +``` +### 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 \ +--public-key fileb:/// \ +--key-agreement-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 \ +--message fileb:// \ +--signing-algorithm \ +--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 + +aws kms disconnect-custom-key-store --custom-key-store-id + +aws kms update-custom-key-store --custom-key-store-id --new-custom-key-store-name --key-store-password +```
{{#include ../../../banners/hacktricks-training.md}}