Terraform Security
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)
HashiCorp Terraform is 'n infrastruktuur as kode hulpmiddel wat jou toelaat om beide cloud en op-premisse hulpbronne in menslike leesbare konfigurasiefiles te definieer wat jy kan weergawe, hergebruik en deel. Jy kan dan 'n konsekwente werksvloei gebruik om al jou infrastruktuur deur sy lewensiklus te voorsien en te bestuur. Terraform kan lae-vlak komponente soos rekenaar, stoor en netwerk hulpbronne bestuur, sowel as hoë-vlak komponente soos DNS inskrywings en SaaS kenmerke.
Terraform skep en bestuur hulpbronne op cloud platforms en ander dienste deur hul toepassingsprogrammeringsinterfaces (API's). Verskaffers stel Terraform in staat om met feitlik enige platform of diens met 'n toeganklike API te werk.
HashiCorp en die Terraform gemeenskap het reeds meer as 1700 verskaffers geskryf om duisende verskillende tipes hulpbronne en dienste te bestuur, en hierdie getal hou aan om te groei. Jy kan al die publiek beskikbare verskaffers op die Terraform Registry vind, insluitend Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, en nog baie meer.
Die kern Terraform werksvloei bestaan uit drie fases:
Skryf: Jy definieer hulpbronne, wat oor verskeie cloud verskaffers en dienste mag wees. Byvoorbeeld, jy mag 'n konfigurasie skep om 'n toepassing op virtuele masjiene in 'n Virtuele Privaat Wolk (VPC) netwerk met sekuriteitsgroepe en 'n laaibalans te ontplooi.
Beplan: Terraform skep 'n uitvoeringsplan wat die infrastruktuur beskryf wat dit sal skep, opdateer of vernietig gebaseer op die bestaande infrastruktuur en jou konfigurasie.
Toepas: Met goedkeuring voer Terraform die voorgestelde operasies in die korrekte volgorde uit, terwyl enige hulpbron afhanklikhede gerespekteer word. Byvoorbeeld, as jy die eienskappe van 'n VPC opdateer en die aantal virtuele masjiene in daardie VPC verander, sal Terraform die VPC weer skep voordat dit die virtuele masjiene skaal.
Installeer net terraform op jou rekenaar.
Hier het jy 'n gids en hier het jy die beste manier om terraform af te laai.
Terraform het nie 'n platform wat 'n webblad of 'n netwerkdiens blootstel wat ons kan opnoem nie, daarom is die enigste manier om terraform te kompromitteer om in staat te wees om terraform konfigurasiefiles by te voeg/wysig.
Egter, terraform is 'n baie sensitiewe komponent om te kompromitteer omdat dit bevoorregte toegang tot verskillende plekke sal hê sodat dit behoorlik kan werk.
Die hoofmanier vir 'n aanvaller om in staat te wees om die stelsel waar terraform loop te kompromitteer, is om die repo wat terraform konfigurasies stoor te kompromitteer, omdat dit op 'n sekere punt geïterpreteer gaan word.
Werklik, daar is oplossings daar buite wat automaties terraform plan/toepas uitvoer nadat 'n PR geskep is, soos Atlantis:
Atlantis SecurityAs jy in staat is om 'n terraform lêer te kompromitteer, is daar verskillende maniere waarop jy RCE kan uitvoer wanneer iemand terraform plan
of terraform apply
uitvoer.
Terraform plan is die mees gebruikte opdrag in terraform en ontwikkelaars/oplossings wat terraform gebruik, noem dit heeltyd, so die gemaklikste manier om RCE te kry is om te verseker dat jy 'n terraform konfigurasielêer vergiftig wat arbitrêre opdragte in 'n terraform plan
sal uitvoer.
Gebruik 'n eksterne verskaffer
Terraform bied die external
verskaffer wat 'n manier bied om tussen Terraform en eksterne programme te kommunikeer. Jy kan die external
databron gebruik om arbitrêre kode tydens 'n plan
uit te voer.
Om iets soos die volgende in 'n terraform konfigurasielêer in te voeg, sal 'n rev shell uitvoer wanneer jy terraform plan
uitvoer:
Gebruik van 'n pasgemaakte verskaffer
'n Aanvaller kan 'n pasgemaakte verskaffer na die Terraform Registry stuur en dit dan by die Terraform-kode in 'n kenmerk tak voeg (voorbeeld hier):
Die verskaffer word afgelaai in die init
en sal die kwaadwillige kode uitvoer wanneer plan
uitgevoer word.
Jy kan 'n voorbeeld vind in https://github.com/rung/terraform-provider-cmdexec
Gebruik van 'n eksterne verwysing
Albei genoemde opsies is nuttig, maar nie baie stil nie (die tweede is stilser, maar meer kompleks as die eerste een). Jy kan hierdie aanval selfs op 'n stilser manier uitvoer deur hierdie voorstelle te volg:
In plaas daarvan om die rev shell direk in die terraform-lêer by te voeg, kan jy 'n eksterne hulpbron laai wat die rev shell bevat:
You can find the rev shell code in https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
In die eksterne hulpbron, gebruik die ref kenmerk om die terraform rev shell kode in 'n tak binne die repo te verberg, iets soos: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Terraform apply sal uitgevoer word om al die veranderinge toe te pas, jy kan dit ook misbruik om RCE te verkry deur 'n kwaadwillige Terraform-lêer met local-exec** in te spuit.**
Jy moet net seker maak dat 'n payload soos die volgende in die main.tf
lêer eindig:
Volg die voorstelle van die vorige tegniek om hierdie aanval op 'n stealthier manier met eksterne verwysings uit te voer.
Jy kan geheime waardes wat deur terraform gebruik word, laat dump deur terraform apply
te loop en iets soos die volgende aan die terraform-lêer toe te voeg:
In die geval dat jy skryfreëls oor terraform toestand lêers het, maar nie die terraform kode kan verander nie, hierdie navorsing bied 'n paar interessante opsies om voordeel te trek uit die lêer:
Daar is 2 maniere om hulpbronne te vernietig:
Voeg 'n hulpbron met 'n ewekansige naam in die toestand lêer in wat na die werklike hulpbron verwys om te vernietig
Omdat terraform sal sien dat die hulpbron nie behoort te bestaan nie, sal dit dit vernietig (volgens die werklike hulpbron ID wat aangedui word). Voorbeeld van die vorige bladsy:
Wysig die hulpbron om te verwyder op 'n manier dat dit nie moontlik is om op te dateer nie (sodat dit verwyder en weer geskep sal word)
Vir 'n EC2-instantie is dit genoeg om die tipe van die instantie te wysig sodat terraform dit verwyder en weer skep.
Dit is ook moontlik om n pasgemaakte verskaffer te skep en net een van die verskaffers in die terraform staatlêer te vervang met die kwaadwillige een of 'n leë hulpbron met die kwaadwillige verskaffer by te voeg. Voorbeeld uit die oorspronklike navorsing:
In die geval dat jy 'n situasie teëkom waar hashicorp/external
geblacklisted was, kan jy die external
verskaffer weer implementeer deur die volgende te doen. Let wel: Ons gebruik 'n fork van die eksterne verskaffer wat gepubliseer is deur https://registry.terraform.io/providers/nazarewk/external/latest. Jy kan jou eie fork of herimplementering ook publiseer.
Dan kan jy external
soos normaal gebruik.
tfsec: tfsec gebruik statiese analise van jou terraform kode om potensiële miskonfigurasies op te spoor.
terascan: Terrascan is 'n statiese kode-analiseerder vir Infrastruktur as Kode.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)