# AWS - S3 Post Exploitation

{{#include ../../../../banners/hacktricks-training.md}}

## S3

For more information check:

{{#ref}}
../../aws-services/aws-s3-athena-and-glacier-enum.md
{{#endref}}

### Sensitiewe Inligting

Soms sal jy sensitiewe inligting leesbaar in die buckets vind. Byvoorbeeld, terraform state secrets.

### Pivoting

Verskillende platforms kan S3 gebruik om sensitiewe assets te stoor.\
Byvoorbeeld, **airflow** kan **DAGs** **code** daar stoor, of **web pages** kan direk vanaf S3 bedien word. 'n aanvaller met write permissions kan die **code** in die bucket wysig om na ander platforms te **pivot**, of **takeover accounts** deur JS-lêers te wysig.

### S3 Ransomware

In hierdie scenario skep die **aanvaller 'n KMS (Key Management Service) key in hul eie AWS account** of in 'n ander gekompromitteerde account. Hulle maak dan hierdie **key toeganklik vir enigiemand in die wêreld**, wat enige AWS user, role, of account toelaat om objects met hierdie key te enkripteer. Die objects kan egter nie ontsleuteld word nie.

Die aanvaller identifiseer 'n teiken-**S3 bucket en verwerf write-level access** daartoe deur verskeie metodes. Dit kan wees as gevolg van swak bucket-konfigurasie wat dit publiek maak of dat die aanvaller toegang tot die AWS environment self verkry. Die aanvaller mik gewoonlik na buckets wat sensitiewe inligting bevat soos personally identifiable information (PII), protected health information (PHI), logs, backups, en meer.

Om te bepaal of die bucket 'n teiken vir ransomware kan wees, kontroleer die aanvaller die konfigurasie daarvan. Dit sluit in om te verifieer of **S3 Object Versioning** aangeskakel is en of **multi-factor authentication delete (MFA delete)** aangeskakel is. As Object Versioning nie aangeskakel is nie, kan die aanvaller voortgaan. As Object Versioning aangeskakel is maar MFA delete gedeaktiveer is, kan die aanvaller **Object Versioning uitskakel**. As beide Object Versioning en MFA delete aangeskakel is, word dit moeiliker vir die aanvaller om daardie spesifieke bucket te ransomware.

Deur die AWS API te gebruik, vervang die aanvaller **elke object in die bucket met 'n geënkripteerde kopie wat hul KMS key gebruik**. Dit enkripteer effektief die data in die bucket, wat dit ontoeganklik maak sonder die key.

Om meer druk te plaas, skeduleer die aanvaller die verwydering van die KMS key wat in die aanval gebruik is. Dit gee die teiken 'n 7-dag venster om hul data te herstel voordat die key verwyder word en die data permanent verlore raak.

Laastens kan die aanvaller 'n finale lêer oplaai, gewoonlik genaamd "ransom-note.txt," wat instruksies vir die teiken bevat oor hoe om hul lêers terug te kry. Hierdie lêer word sonder enkripsie opgelaai, waarskynlik om die teiken se aandag te trek en hulle bewus te maak van die ransomware-aanval.

#### SSE-C (Customer-Provided Key) Ransomware (Codefinger-like)

Nog 'n variant is die misbruik van **SSE-C** (S3 server-side encryption met **customer-provided keys**). Met SSE-C voorsien die **client die enkripsie-sleutel by elke versoek** en **AWS stoor nie die sleutel nie**. Dit beteken dat as 'n aanvaller bestaande objects herskryf met **hul eie SSE-C key**, raak die slagoffer se data onleesbaar tensy die slagoffer daardie aanvaller-gekontroleerde key kan verskaf.

- **Preconditions:** Gekomromitteerde AWS credentials (of enige principal met die regte permissions) en die vermoë om **objects te herskryf** (bv. `s3:PutObject` op die teiken keys/prefixes). Dit word dikwels gepaar met die vermoë om destruktiewe lifecycle policies te stel (kyk hieronder), bv. `s3:PutLifecycleConfiguration`.
- **Attack chain:**
1. Aanvaller genereer 'n ewekansige 256-bit key (AES-256) en hou dit.
2. Aanvaller **herskryf** bestaande objects (dieselfde object keys) met SSE-C headers sodat die gestoorde object nou geënkripteer is met die aanvaller se key.
3. Slagoffer kan nie download/ontsleutel sonder om die SSE-C key te verskaf nie (selfs al is IAM permissions reg).
4. Aanvaller kan die key verwyder (of eenvoudig nooit verskaf nie) om die data onherstelbaar te maak.

Example (conceptual) CLI usage:
```bash
# 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>
```
##### Verhoogde Druk: Lewensiklus "Timer" Misbruik

Om herstelopsies (soos ou weergawes) te verwyder, kan aanvallers SSE-C-omskrywings kombineer met **lewensiklusreëls** wat objekte laat verval en/of nie-aktuele weergawes na 'n kort periode verwyder:

- `s3:PutLifecycleConfiguration` op die bucket laat 'n aanvaller toe om verwyderings te skeduleer sonder om eksplisiete delete-operasies vir elke object/weergawe uit te voer.
- Dit is veral ingrypend wanneer **versioning is enabled**, omdat dit die "vorige goeie weergawe" kan verwyder wat andersins herstel sou moontlik maak.

##### Opsporing & Mitigasies

- Verkies **SSE-KMS** (of SSE-S3) bo SSE-C, tensy jy 'n sterk operasionele rede het om SSE-C toe te laat.
- Monitor/waarsku op `PutObject` versoeke wat SSE-C headers gebruik (CloudTrail data events vir S3).
- Monitor/waarsku op onverwagte `PutBucketLifecycleConfiguration` (lewensiklusveranderinge).
- Monitor/waarsku op skielike styging in oorskryfaktiwiteit (dieselfde keys wat vinnig bygewerk word) en delete-marker/weergaweverwyderings.
- Beperk hoë-risiko permissies: Beperk `s3:PutObject` tot nodige voorvoegsels; beperk sterk `s3:PutLifecycleConfiguration` en `s3:PutBucketVersioning`; oorweeg om MFA te vereis vir sensitiewe admin-aksies (waar toepaslik) en gebruik afsonderlike admin-rolle met goedkeurings.
- Herstelhouding: Gebruik **versioning**, **backups**, en onveranderlike/offline kopieë (S3 replicasie na 'n beskermde account, backup vaults, ens.); beskerm nie-aktuele weergawes teen aggressiewe verwydering en beveilig lewensiklusveranderinge met SCPs / guardrails.

### `s3:RestoreObject`

'n Aanvaller met die s3:RestoreObject permissie kan objekte wat in Glacier of Deep Archive gearchiveer is heraktiveer, en dit tydelik toeganklik maak. Dit maak herstel en exfiltration van histories gearchiveerde data (backups, snapshots, logs, sertifikate, ou geheime) moontlik wat normaalweg buite bereik sou wees. As die aanvaller hierdie permissie kombineer met leespermissies (bv. s3:GetObject), kan hulle volledige kopieë van sensitiewe data verkry.
```bash
aws s3api restore-object \
--bucket <BUCKET_NAME> \
--key <OBJECT_KEY> \
--restore-request '{
"Days": <NUMBER_OF_DAYS>,
"GlacierJobParameters": { "Tier": "Standard" }
}'
```
### `s3:Delete*`

An attacker met die s3:Delete* permission kan objects, versions en entire buckets uitvee, backups ontwrig en onmiddellike, onomkeerbare dataverlies veroorsaak, bewysvernietiging teweegbring en backup- of recovery-artifacts kompromitteer.
```bash
# 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>
```
**Vir meer info** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**

{{#include ../../../../banners/hacktricks-training.md}}
