Terraform Security
Last updated
Last updated
HashiCorp Terraform is 'n infrastruktuur as kode hulpmiddel wat jou in staat stel om beide wolke en on-prem-bronne te definieer in mens-leesbare konfigurasie lêers wat jy kan weergawe, hergebruik, en deel. Jy kan dan 'n konsekwente werkstroom gebruik om al jou infrastruktuur deur sy lewensiklus te voorsien en te bestuur. Terraform kan laagvlak komponente bestuur soos rekenaars, stoorplek, en netwerkbronne, sowel as hoëvlak komponente soos DNS inskrywings en SaaS kenmerke.
Terraform skep en bestuur bronne op wolk platforms en ander dienste deur hul toepassingsprogrammeerinterfaces (API's). Verskaffers maak dit moontlik vir Terraform om met bykans 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 bronne en dienste te bestuur, en hierdie getal bly groei. Jy kan al die openlik beskikbare verskaffers vind op die Terraform Register, insluitend Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, en baie meer.
Die kern Terraform werkstroom bestaan uit drie fases:
Skryf: Jy definieer bronne, wat oor verskeie wolkverskaffers en dienste kan wees. Byvoorbeeld, jy kan 'n konfigurasie skep om 'n aansoek op virtuele masjiene in 'n Virtuele Privaat Wolke (VPW) netwerk met sekuriteitsgroepe en 'n vragbalansier te ontplooi.
Plan: Terraform skep 'n uitvoeringsplan wat die infrastruktuur beskryf wat dit sal skep, opdateer, of vernietig gebaseer op die bestaande infrastruktuur en jou konfigurasie.
Toepas: Op goedkeuring, voer Terraform die voorgestelde operasies in die korrekte volgorde uit, met inagneming van enige bronafhanklikhede. Byvoorbeeld, as jy die eienskappe van 'n VPW opdateer en die aantal virtuele masjiene in daardie VPW verander, sal Terraform die VPW herskep 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 webbladsy of 'n netwerkdienste blootstel wat ons kan opnoem nie, daarom is die enigste manier om terraform te kompromiteer om in staat te wees om terraform konfigurasie lêers by te voeg/te wysig.
Nietemin, terraform is 'n baie sensitiewe komponent om te kompromiteer omdat dit bevoorregte toegang tot verskillende plekke sal hê sodat dit behoorlik kan werk.
Die hoofmanier vir 'n aanvaller om die stelsel waar terraform loop te kan kompromiteer is om die bewaarplek wat terraform konfigurasies stoor te kompromiteer, omdat hulle op 'n stadium geïnterpreteer gaan word.
Eintlik is daar oplossings daar buite wat terraform plan/apply outomaties uitvoer nadat 'n PR geskep is, soos Atlantis:
Atlantis SecurityAs jy in staat is om 'n terraform lêer te kompromiteer, is daar verskillende maniere waarop jy RCE kan uitvoer wanneer iemand terraform plan
of terraform apply
uitvoer.
Terraform plan is die mees gebruikte bevel in terraform en ontwikkelaars/oplossings wat terraform gebruik, noem dit die hele tyd, so die maklikste manier om RCE te kry is om seker te maak dat jy 'n terraform konfigurasie lêer vergiftig wat arbitrêre bevele sal uitvoer in 'n terraform plan
.
Terraform bied die external
verskaffer aan wat 'n manier bied om tussen Terraform en eksterne programme te skakel. Jy kan die external
data bron gebruik om arbitrêre kode tydens 'n plan
uit te voer.
Deur iets soos die volgende in 'n terraform konfigurasie lêer in te spuit, sal dit 'n omgekeerde skul uitvoer wanneer 'n terraform plan
uitgevoer word:
'n Aanvaller kan 'n aangepaste verskaffer stuur na die Terraform Register en dit dan by die Terraform-kode in 'n kenmerktak voeg (voorbeeld van hier):
Die verskaffer word afgelaai in die init
en sal die skadelike kode hardloop wanneer plan
uitgevoer word
Jy kan 'n voorbeeld vind in https://github.com/rung/terraform-provider-cmdexec
Beide genoemde opsies is nuttig maar nie baie sluipend nie (die tweede is sluiperiger maar meer kompleks as die eerste). Jy kan hierdie aanval selfs op 'n sluiperiger 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 bron laai wat die rev shell bevat:
Jy kan die rev shell-kode vind in https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
In die eksterne bron, gebruik die ref funksie 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 toepassing 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 in te spuit met local-exec.
Jy moet net seker maak dat 'n payload soos die volgende in die main.tf
-lêer eindig:
Volg die aanbevelings van die vorige tegniek om hierdie aanval op 'n meer onopvallende manier met behulp van eksterne verwysings uit te voer.
Jy kan geheime waardes wat deur terraform gebruik word, laat uitlek deur terraform apply
uit te voer deur iets soos die volgende by die terraform-lêer te voeg:
In die geval jy skryftoegang het tot terraform-staat lêers maar kan nie die terraform-kode verander nie, hierdie navorsing bied interessante opsies om voordeel te trek uit die lêer:
Daar is 2 maniere om bronne te vernietig:
Voeg 'n bron met 'n lukrake naam by in die staat lêer wat na die werklike bron wys om te vernietig
Omdat terraform sal sien dat die bron nie behoort te bestaan nie, sal dit dit vernietig (volgens die werklike bron-ID aangedui). Voorbeeld van die vorige bladsy:
Wysig die hulpbron om te verwyder op 'n manier wat dit nie moontlik is om te werk (sodat dit verwyder en herskep sal word nie)
Vir 'n EC2-instantie is dit genoeg om die tipe van die instansie te wysig om terraform te dwing om dit te verwyder en herskep.
Dit is ook moontlik om 'n aangepaste verskaffer te skep en een van die verskaffers in die terraform statuslêer te vervang met die skadelike een of 'n leë hulpbron met die skadelike verskaffer by te voeg. Voorbeeld van die oorspronklike navorsing:
In die geval waar jy 'n situasie teëkom waar hashicorp/external
geswartlys is, kan jy die external
verskaffer herimplementeer deur die volgende te doen. Nota: Ons gebruik 'n vurk van die eksterne verskaffer wat gepubliseer is deur https://registry.terraform.io/providers/nazarewk/external/latest. Jy kan ook jou eie vurk of herimplementering publiseer.
Dan kan jy external
soos normaal gebruik.
tfsec: tfsec gebruik statiese analise van jou terraform-kode om potensiële verkeerde konfigurasies op te spoor.
terascan: Terrascan is 'n statiese kode-ontleder vir Infrastruktuur as Kode.