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 konfigurasie lêers 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 funksies.
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: Op 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 eenvoudig terraform op jou rekenaar.
Hier is 'n gids en hier is 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 konfigurasie lêers 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 stadium geïntpreteer gaan word.
Werklik, daar is oplossings daar buite wat automaties terraform plan/toepas uitvoer nadat 'n PR geskep is, soos Atlantis:
As 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 konfigurasie lê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
data bron gebruik om arbitrêre kode tydens 'n plan
uit te voer.
Om iets soos die volgende in 'n terraform konfigurasie lê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). 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.
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 by die toestand lêer 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.
Snyk bied 'n omvattende Infrastruktuur as Kode (IaC) skandeeroplossing wat kwesbaarhede en verkeerde konfigurasies in Terraform, CloudFormation, Kubernetes, en ander IaC-formate opspoor.
Kenmerke:
Regs-tyd skandering vir sekuriteitskwesbaarhede en nakomingskwessies.
Integrasie met weergawebeheer stelsels (GitHub, GitLab, Bitbucket).
Outomatiese regstelling trek versoeke.
Gedetailleerde hersteladvies.
Teken In: Skep 'n rekening op Snyk.
Checkov is 'n statiese kode analise hulpmiddel vir infrastruktuur as kode (IaC) en ook 'n sagteware samestelling analise (SCA) hulpmiddel vir beelde en oopbron pakkette.
Dit skandeer wolk infrastruktuur wat voorsien is met behulp van Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, of OpenTofu en detecteer sekuriteits- en nakomingsmisconfigurasies met behulp van graf-gebaseerde skandering.
Dit voer Sagteware Samestelling Analise (SCA) skandering uit wat 'n skandering van oopbron pakkette en beelde vir Algemene Kw vulnerabilities en Blootstellings (CVEs) is.
From the docs: terraform-compliance
is 'n liggewig, sekuriteit en nakoming gefokusde toetsraamwerk teen terraform om negatiewe toetsing vermoë vir jou infrastruktuur-as-kode moontlik te maak.
compliance: Verseker dat die geïmplementeerde kode sekuriteitsstandaarde en jou eie pasgemaakte standaarde volg
behaviour driven development: Ons het BDD vir byna alles, hoekom nie vir IaC nie?
portable: installeer dit net vanaf pip
of hardloop dit via docker
. Sien Installation
pre-deploy: dit valideer jou kode voordat dit ontplooi word
easy to integrate: dit kan in jou pyplyn (of in git hooks) loop om te verseker dat alle ontplooiings gevalideer word.
segregation of duty: jy kan jou toetse in 'n ander repository hou waar 'n aparte span verantwoordelik is.
Unfortunately if the code is using some providers you don't have access to you won't be able to perform the terraform plan
and run this tool.
From the docs: tfsec gebruik statiese analise van jou terraform kode om potensiële miskonfigurasies op te spoor.
☁️ Kontroleer vir miskonfigurasies oor alle groot (en sommige klein) wolkverskaffers
⛔ Honderde ingeboude reëls
🪆 Skandeer modules (lokale en afstandelike)
➕ Evalueer HCL-uitdrukkings sowel as letterlike waardes
↪️ Evalueer Terraform funksies bv. concat()
🔗 Evalueer verhoudings tussen Terraform hulpbronne
🧰 Kompatibel met die Terraform CDK
🙅 Pas (en versier) gebruiker-gedefinieerde Rego-beleide toe
📃 Ondersteun verskeie uitvoerformate: pragtig (verstek), JSON, SARIF, CSV, CheckStyle, JUnit, teks, Gif.
🛠️ Konfigureerbaar (via CLI-vlaggies en/of konfigurasie lêer)
⚡ Baie vinnig, in staat om vinnig groot repositories te skandeer
Vind sekuriteitskwesbaarhede, nakomingskwessies en infrastruktuur miskonfigurasies vroeg in die ontwikkelingsiklus van jou infrastruktuur-as-kode met KICS deur Checkmarx.
KICS staan vir Keeping Infrastructure as Code Secure, dit is oopbron en is 'n moet-hê vir enige wolk-natiewe projek.
From the docs: Terrascan is 'n statiese kode-analiseerder vir Infrastruktur as Kode. Terrascan laat jou toe om:
Naadloos infrastruktuur as kode te skandeer vir verkeerde konfigurasies.
Geprovisioneerde wolkinfrastruktuur te monitor vir konfigurasiewijzigings wat posisie-afwykings inbring, en stel jou in staat om na 'n veilige posisie terug te keer.
Sekuriteitskwesbaarhede en nakomingsoortredings te ontdek.
Risiko's te verminder voordat wolknatiewe infrastruktuur geprovisioneer word.
Bied buigsaamheid om plaaslik te loop of te integreer met jou CI\CD.
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)