AWS - S3 Post Exploitation

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

S3

Za više informacija pogledajte:

AWS - S3, Athena & Glacier Enum

Sensitive Information

Ponekad ćete uspeti da pronađete osetljive informacije koje su čitljive direktno u buckets. 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.

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.

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.

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.

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.

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.

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.

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č.

  • 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.
  • 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.

Example (conceptual) CLI usage:

# Upload/overwrite an object encrypted with attacker-provided SSE-C key
aws s3 cp ./file s3://<BUCKET>/<KEY> \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>

# Download requires providing the same key again
aws s3 cp s3://<BUCKET>/<KEY> ./file \
--sse-c AES256 \
--sse-c-key <BASE64_32_BYTES>
Adding Pressure: Lifecycle “Timer” Abuse

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:

  • 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.
Detection & Mitigations
  • 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.

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.

aws s3api restore-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--restore-request '{
"Days": <NUMBER_OF_DAYS>,
"GlacierJobParameters": { "Tier": "Standard" }
}'

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.

# Delete an object from a bucket
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY>

# Delete a specific version
aws s3api delete-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--version-id <VERSION_ID>

# Delete a bucket
aws s3api delete-bucket \
--bucket <BUCKET_NAME>

Za više informacija pogledajte originalno istraživanje.

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks