AWS - EC2 Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kwa maelezo zaidi kuhusu EC2 angalia:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
Mshambuliaji anaweza kuunda na instance akihusisha IAM role kisha kufikia instance ili kuiba akidi za IAM role kutoka kwa metadata endpoint.
Fikia kupitia SSH
Kimbia instance mpya ukitumia ssh key iliyoundwa (--key-name
) kisha ssh ndani yake (ikiwa unataka kuunda mpya unaweza kuhitaji kuwa na ruhusa ec2:CreateKeyPair
).
Upatikanaji kupitia rev shell katika data ya mtumiaji
Unaweza kuendesha mfano mpya ukitumia data ya mtumiaji (--user-data
) ambayo itakutumia rev shell. Huhitaji kubaini kundi la usalama kwa njia hii.
Kuwa makini na GuradDuty ikiwa unatumia akreditivu za jukumu la IAM nje ya mfano:
AWS - GuardDuty EnumAthari Zinazoweza Kutokea: Privesc moja kwa moja kwa jukumu lolote la EC2 lililounganishwa na wasifu wa mfano uliopo.
Kwa seti hii ya ruhusa unaweza pia kuunda mfano wa EC2 na kujiandikisha ndani ya klasta ya ECS. Kwa njia hii, huduma za ECS zitakuwa zinakimbia ndani ya mfano wa EC2 ambapo una ufikiaji na kisha unaweza kuingia kwenye huduma hizo (mashine za docker) na kuchukua majukumu yao ya ECS yaliyounganishwa.
Ili kujifunza jinsi ya kulazimisha huduma za ECS kufanyika katika hii EC2 mpya angalia:
AWS - ECS PrivescIkiwa huwezi kuunda mfano mpya lakini una ruhusa ecs:RegisterContainerInstance
unaweza kuwa na uwezo wa kujiandikisha mfano ndani ya klasta na kutekeleza shambulio lililozungumziwa.
Athari Zinazoweza Kutokea: Privesc moja kwa moja kwa majukumu ya ECS yaliyounganishwa na kazi.
iam:PassRole
, iam:AddRoleToInstanceProfile
Kama ilivyo katika hali ya awali, mshambuliaji mwenye ruhusa hizi anaweza kubadilisha jukumu la IAM la mfano ulioathirika ili aweze kuiba akidi mpya.
Kama profaili ya mfano inaweza kuwa na jukumu 1 tu, ikiwa profaili ya mfano tayari ina jukumu (hali ya kawaida), utahitaji pia iam:RemoveRoleFromInstanceProfile
.
Ikiwa profaili ya mfano ina jukumu na mshambuliaji hawezi kuondoa hiyo, kuna njia nyingine. Anaweza kupata profaili ya mfano bila jukumu au kuunda mpya (iam:CreateInstanceProfile
), kuongeza jukumu kwa profaili hiyo ya mfano (kama ilivyojadiliwa hapo awali), na kuunganisha profaili ya mfano iliyovunjika kwa mfano uliovunjika:
Ikiwa mfano hauna profaili yoyote ya mfano (ec2:AssociateIamInstanceProfile
) *
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu tofauti la EC2 (unahitaji kuwa umepata udhibiti wa mfano wa AWS EC2 na ruhusa za ziada au hali maalum ya wasifu wa mfano).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Kwa ruhusa hizi inawezekana kubadilisha wasifu wa mfano uliohusishwa na mfano hivyo ikiwa shambulio tayari lilikuwa na ufikiaji wa mfano atakuwa na uwezo wa kuiba akidi za majukumu zaidi ya wasifu wa mfano kwa kubadilisha ule uliohusishwa nao.
Ikiwa ina wasifu wa mfano, unaweza kuondoa wasifu wa mfano (ec2:DisassociateIamInstanceProfile
) na kuunganisha hiyo *
au badilisha profaili ya mfano ya mfano ulioathiriwa (ec2:ReplaceIamInstanceProfileAssociation
). *
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu tofauti la EC2 (unahitaji kuwa umepata udhibiti wa mfano wa AWS EC2 na ruhusa za ziada au hali maalum ya wasifu wa mfano).
ec2:RequestSpotInstances
,iam:PassRole
Mshambuliaji mwenye ruhusa ec2:RequestSpotInstances
naiam:PassRole
anaweza kuomba Spot Instance yenye Jukumu la EC2 lililounganishwa na rev shell katika data ya mtumiaji.
Mara mfano unapokimbia, anaweza kuchukua jukumu la IAM.
ec2:ModifyInstanceAttribute
Mshambuliaji mwenye ec2:ModifyInstanceAttribute
anaweza kubadilisha sifa za mifano. Miongoni mwao, anaweza kubadilisha data ya mtumiaji, ambayo ina maana kwamba anaweza kufanya mfano kufanya kazi na data yoyote. Hii inaweza kutumika kupata rev shell kwa mfano wa EC2.
Kumbuka kwamba sifa zinaweza tu kubadilishwa wakati mfano umesimamishwa, hivyo idhini ec2:StopInstances
na ec2:StartInstances
.
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa yoyote EC2 IAM Role iliyoambatanishwa na mfano ulioanzishwa.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Mshambuliaji mwenye ruhusa ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
na ec2:ModifyLaunchTemplate
anaweza kuunda toleo jipya la Template ya Uzinduzi lenye rev shell katika data ya mtumiaji na EC2 IAM Role yoyote juu yake, kubadilisha toleo la kawaida, na kikundi chochote cha Autoscaler kilichotumia hiyo Template ya Uzinduzi ambayo ime pangwa kutumia toleo jipya au toleo la kawaida itafanya kurejesha mifano ikitumia template hiyo na itatekeleza rev shell.
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu tofauti la EC2.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Mshambuliaji mwenye ruhusa autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
anaweza kuunda Mkonfigu wa Uzinduzi na Jukumu la IAM na rev shell ndani ya data ya mtumiaji, kisha kuunda kundi la autoscaling kutoka kwa mkonfigu huo na kusubiri rev shell ili kuiba Jukumu la IAM.
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu tofauti la EC2.
!autoscaling
Seti ya ruhusa ec2:CreateLaunchTemplate
na autoscaling:CreateAutoScalingGroup
hazitoshi kupandisha mamlaka kwa jukumu la IAM kwa sababu ili kuunganisha jukumu lililoainishwa katika Mipangilio ya Uzinduzi au katika Kigezo cha Uzinduzi unahitaji ruhusa iam:PassRole
na ec2:RunInstances
(ambayo ni privesc inayojulikana).
ec2-instance-connect:SendSSHPublicKey
Mshambuliaji mwenye ruhusa ec2-instance-connect:SendSSHPublicKey
anaweza kuongeza ufunguo wa ssh kwa mtumiaji na kuutumia kuufikia (ikiwa ana ufikiaji wa ssh kwa mfano) au kupandisha mamlaka.
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa majukumu ya EC2 IAM yaliyounganishwa na mifano inayoendesha.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Mshambuliaji mwenye ruhusa ec2-instance-connect:SendSerialConsoleSSHPublicKey
anaweza kuongeza ufunguo wa ssh kwenye muunganisho wa serial. Ikiwa serial haijawashwa, mshambuliaji anahitaji ruhusa ec2:EnableSerialConsoleAccess
ili kuweza kuiwasha.
Ili kuungana na bandari ya serial unahitaji pia kujua jina la mtumiaji na nenosiri la mtumiaji ndani ya mashine.
Njia hii si ya manufaa sana kwa privesc kwani unahitaji kujua jina la mtumiaji na nenosiri ili kuweza kuifanyia shambulio.
Madhara Yanayoweza Kutokea: (Siyo rahisi kuthibitisha) Privesc moja kwa moja kwa EC2 IAM roles zilizounganishwa na mifano inayotumika.
describe-launch-templates
,describe-launch-template-versions
Kwa kuwa templates za uzinduzi zina toleo, mshambuliaji mwenye ruhusa ec2:describe-launch-templates
na ec2:describe-launch-template-versions
anaweza kuzitumia hizi kugundua taarifa nyeti, kama vile akidi zilizopo katika data ya mtumiaji. Ili kufanikisha hili, script ifuatayo inarudiarudia kupitia matoleo yote ya templates za uzinduzi zinazopatikana:
Katika amri zilizo hapo juu, ingawa tunabainisha mifumo fulani (aws_|password|token|api
), unaweza kutumia regex tofauti kutafuta aina nyingine za taarifa nyeti.
Kukisia tunapata aws_access_key_id
na aws_secret_access_key
, tunaweza kutumia akreditivu hizi kujiandikisha kwenye AWS.
Athari Zinazoweza Kutokea: Kuinua kibali moja kwa moja kwa mtumiaji wa IAM.
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)