AWS - EC2 Privesc
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Vir meer inligting oor EC2 kyk:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
'n Aanvaller kan 'n instansie skep wat 'n IAM rol aanheg en dan toegang tot die instansie verkry om die IAM rol geloofsbriewe van die metadata eindpunt te steel.
Toegang via SSH
Voer 'n nuwe instansie uit met 'n geskepte ssh sleutel (--key-name
) en ssh dan daarin (as jy 'n nuwe een wil skep, mag jy die toestemming ec2:CreateKeyPair
nodig hê).
Toegang via rev shell in gebruikersdata
Jy kan 'n nuwe instansie gebruik deur 'n gebruikersdata (--user-data
) wat vir jou 'n rev shell sal stuur. Jy hoef nie 'n sekuriteitsgroep op hierdie manier te spesifiseer nie.
Wees versigtig met GuradDuty as jy die akrediteer van die IAM-rol buite die instansie gebruik:
AWS - GuardDuty EnumPotensiële Impak: Direkte privesc na enige EC2-rol wat aan bestaande instansieprofiele geheg is.
Met hierdie stel toestemmings kan jy ook 'n EC2-instansie skep en dit binne 'n ECS-kluster registreer. Op hierdie manier sal ECS dienste uitgevoer word binne die EC2-instansie waartoe jy toegang het en dan kan jy daardie dienste (docker houers) penetreer en hulle ECS-rolle wat geheg is steel.
Om te leer hoe om ECS-dienste te dwing om in hierdie nuwe EC2-instantie te loop, kyk:
AWS - ECS PrivescAs jy nie 'n nuwe instansie kan skep nie maar die toestemming ecs:RegisterContainerInstance
het, kan jy dalk die instansie binne die kluster registreer en die kommentaar aanval uitvoer.
Potensiële Impak: Direkte privesc na ECS-rolle wat aan take gekoppel is.
iam:PassRole
, iam:AddRoleToInstanceProfile
Soos in die vorige scenario, kan 'n aanvaller met hierdie toestemmings die IAM-rol van 'n gecompromitteerde instansie verander sodat hy nuwe akrediteer kan steel.
Aangesien 'n instansieprofiel slegs 1 rol kan hê, as die instansieprofiel reeds 'n rol het (gewone geval), sal jy ook iam:RemoveRoleFromInstanceProfile
benodig.
As die instansieprofiel 'n rol het en die aanvaller dit nie kan verwyder nie, is daar 'n ander omweg. Hy kan vind 'n instansieprofiel sonder 'n rol of 'n nuwe een skep (iam:CreateInstanceProfile
), voeg die rol by daardie instansieprofiel (soos voorheen bespreek), en koppel die instansieprofiel wat gecompromitteer is aan 'n gecompromitteerde instansie:
As die instansie nie enige instansieprofiel het nie (ec2:AssociateIamInstanceProfile
) *
Potensiële Impak: Direkte privesc na 'n ander EC2-rol (jy moet 'n AWS EC2-instantie gekompromitteer het en 'n paar ekstra toestemmings of spesifieke instansieprofielstatus hê).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Met hierdie toestemmings is dit moontlik om die instansieprofiel wat aan 'n instansie gekoppel is, te verander, so as die aanval reeds toegang tot 'n instansie gehad het, sal hy in staat wees om akrediteer te steel vir meer instansieprofielrolle deur die een wat daarmee geassosieer is, te verander.
As dit 'n instansieprofiel het, kan jy die instansieprofiel verwyder (ec2:DisassociateIamInstanceProfile
) en dit assosieer *
of vervang die instansprofiel van die gecompromitteerde instansie (ec2:ReplaceIamInstanceProfileAssociation
). *
Potensiële Impak: Direkte privesc na 'n ander EC2-rol (jy moet 'n AWS EC2-instantie gekompromitteer het en 'n paar ekstra toestemmings of spesifieke instansieprofielstatus hê).
ec2:RequestSpotInstances
,iam:PassRole
'n Aanvaller met die toestemmings ec2:RequestSpotInstances
eniam:PassRole
kan versoek 'n Spot Instantie met 'n EC2-rol aangeheg en 'n rev shell in die gebruikersdata.
Sodra die instansie gedraai word, kan hy die IAM-rol steel.
ec2:ModifyInstanceAttribute
'n Aanvaller met die ec2:ModifyInstanceAttribute
kan die instansies se eienskappe verander. Onder hulle kan hy die gebruikersdata verander, wat impliseer dat hy die instansie kan arbitraire data laat loop. Dit kan gebruik word om 'n rev shell na die EC2 instansie te kry.
Let daarop dat die eienskappe slegs gewysig kan word terwyl die instansie gestop is, so die toestemmings ec2:StopInstances
en ec2:StartInstances
.
Potensiële Impak: Direkte privesc na enige EC2 IAM Rol wat aan 'n geskepte instansie geheg is.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
'n Aanvaller met die regte ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
en ec2:ModifyLaunchTemplate
kan 'n nuwe Launch Template weergawe met 'n rev shell in die gebruikersdata en enige EC2 IAM Rol daarop skep, die standaard weergawe verander, en enige Autoscaler groep wat daardie Launch Template gebruik wat gekonfigureer is om die nuutste of die standaard weergawe te gebruik, sal die instansies weer herbegin met behulp van daardie template en die rev shell uitvoer.
Potensiële Impak: Direkte privesc na 'n ander EC2-rol.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
'n Aanvaller met die regte autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
kan 'n Launch Configuration skep met 'n IAM Rol en 'n rev shell binne die gebruikersdata, dan 'n autoscaling-groep skep vanaf daardie konfigurasie en wag vir die rev shell om die IAM Rol te steel.
Potensiële Impak: Direkte privesc na 'n ander EC2-rol.
!autoscaling
Die stel van toestemmings ec2:CreateLaunchTemplate
en autoscaling:CreateAutoScalingGroup
is nie genoeg om bevoegdhede na 'n IAM-rol te verhoog nie, omdat jy om die rol wat in die Launch Configuration of in die Launch Template gespesifiseer is aan te heg jy die toestemmings iam:PassRole
en ec2:RunInstances
benodig (wat 'n bekende privesc is).
ec2-instance-connect:SendSSHPublicKey
'n Aanvaller met die toestemming ec2-instance-connect:SendSSHPublicKey
kan 'n ssh-sleutel aan 'n gebruiker voeg en dit gebruik om toegang te verkry (as hy ssh-toegang tot die instansie het) of om bevoegdhede te verhoog.
Potensiële Impak: Direkte privesc na die EC2 IAM rolle wat aan lopende instansies gekoppel is.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
'n Aanvaller met die toestemming ec2-instance-connect:SendSerialConsoleSSHPublicKey
kan 'n ssh-sleutel by 'n seriële verbinding voeg. As die seriële nie geaktiveer is nie, het die aanvaller die toestemming ec2:EnableSerialConsoleAccess
nodig om dit te aktiveer.
Om met die seriële poort te verbind, moet jy ook die gebruikersnaam en wagwoord van 'n gebruiker binne die masjien weet.
Hierdie manier is nie baie nuttig vir privesc nie, aangesien jy 'n gebruikersnaam en wagwoord moet weet om dit te ontgin.
Potensiële Impak: (Hooglik onbewysbaar) Direkte privesc na die EC2 IAM rolle wat aan lopende instansies gekoppel is.
describe-launch-templates
,describe-launch-template-versions
Aangesien lanseringsjablone weergawebeheer het, kan 'n aanvaller met ec2:describe-launch-templates
en ec2:describe-launch-template-versions
regte hierdie gebruik om sensitiewe inligting te ontdek, soos akrediteer wat in gebruikersdata teenwoordig is. Om dit te bereik, loop die volgende skrip deur al die weergawes van die beskikbare lanseringsjablone:
In die bogenoemde opdragte, alhoewel ons sekere patrone spesifiseer (aws_|password|token|api
), kan jy 'n ander regex gebruik om ander tipes sensitiewe inligting te soek.
As ons aws_access_key_id
en aws_secret_access_key
vind, kan ons hierdie akrediteer om by AWS aan te meld.
Potensiële Impak: Direkte privilige-escalasie na IAM gebruiker(s).
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)