Terraform Security
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)
HashiCorp Terraform je alat za infrastrukturu kao kod koji vam omogućava da definišete resurse u oblaku i on-prem u konfiguracionim datotekama koje su čitljive za ljude, a koje možete verzionisati, ponovo koristiti i deliti. Zatim možete koristiti dosledan radni tok za obezbeđivanje i upravljanje svim vašim infrastrukturnim resursima tokom njihovog životnog ciklusa. Terraform može upravljati niskonivo komponentama kao što su resursi za računanje, skladištenje i umrežavanje, kao i visok nivo komponentama kao što su DNS unosi i SaaS funkcije.
Terraform kreira i upravlja resursima na cloud platformama i drugim uslugama putem njihovih API-ja (interfejsa za programiranje aplikacija). Provajderi omogućavaju Terraform-u da radi sa praktično bilo kojom platformom ili uslugom koja ima dostupan API.
HashiCorp i Terraform zajednica su već napisali više od 1700 provajdera za upravljanje hiljadama različitih tipova resursa i usluga, a ovaj broj se nastavlja povećavati. Sve javno dostupne provajdere možete pronaći na Terraform Registry, uključujući Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i mnoge druge.
Osnovni Terraform radni tok se sastoji od tri faze:
Write: Definišete resurse, koji mogu biti raspoređeni preko više cloud provajdera i usluga. Na primer, možete kreirati konfiguraciju za implementaciju aplikacije na virtuelnim mašinama u mreži Virtual Private Cloud (VPC) sa sigurnosnim grupama i balansirnikom opterećenja.
Plan: Terraform kreira plan izvršenja koji opisuje infrastrukturu koju će kreirati, ažurirati ili uništiti na osnovu postojeće infrastrukture i vaše konfiguracije.
Apply: Nakon odobrenja, Terraform izvršava predložene operacije u ispravnom redosledu, poštujući sve zavisnosti resursa. Na primer, ako ažurirate svojstva VPC-a i promenite broj virtuelnih mašina u tom VPC-u, Terraform će ponovo kreirati VPC pre nego što skalira virtuelne mašine.
Samo instalirajte terraform na vašem računaru.
Ovde imate vodič i ovde imate najbolji način za preuzimanje terraforma.
Terraform nema platformu koja izlaže web stranicu ili mrežnu uslugu koju možemo enumerisati, stoga je jedini način da se kompromituje terraform može dodati/izmeniti terraform konfiguracione datoteke.
Međutim, terraform je veoma osetljiva komponenta za kompromitovanje jer će imati privilegovan pristup različitim lokacijama kako bi mogao pravilno raditi.
Glavni način na koji napadač može kompromitovati sistem na kojem se terraform izvršava je da kompromituje repozitorij koji čuva terraform konfiguracije, jer će u nekom trenutku biti interpretirane.
U stvari, postoje rešenja koja automatski izvršavaju terraform plan/apply nakon što je PR kreiran, kao što je Atlantis:
Ako ste u mogućnosti da kompromitujete terraform datoteku, postoje različiti načini na koje možete izvršiti RCE kada neko izvrši terraform plan
ili terraform apply
.
Terraform plan je najčešće korišćena komanda u terraformu i programeri/rešenja koja koriste terraform je stalno pozivaju, tako da je najlakši način da dobijete RCE da se pobrinete da otrovate terraform konfiguracionu datoteku koja će izvršiti proizvoljne komande u terraform plan
.
Using an external provider
Terraform nudi external
provider koji pruža način za interakciju između Terraforma i eksternih programa. Možete koristiti external
izvor podataka za izvršavanje proizvoljnog koda tokom plana
.
Umetanje u terraform konfiguracionu datoteku nešto poput sledećeg će izvršiti rev shell kada se izvrši terraform plan
:
Korišćenje prilagođenog provajdera
Napadač bi mogao poslati prilagođenog provajdera na Terraform Registry i zatim ga dodati u Terraform kod u funkcionalnoj grani (primer odavde):
Provajder se preuzima u init
i izvršiće maliciozni kod kada se izvrši plan
Možete pronaći primer na https://github.com/rung/terraform-provider-cmdexec
Korišćenje spoljnog reference
Obe pomenute opcije su korisne, ali nisu baš diskretne (druga je diskretnija, ali složenija od prve). Ovaj napad možete izvesti čak i na diskretniji način, prateći ove sugestije:
Umesto da direktno dodate rev shell u terraform datoteku, možete učitati spoljnji resurs koji sadrži rev shell:
Možete pronaći rev shell kod na https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
U spoljnim resursima, koristite ref funkciju da sakrijete terraform rev shell kod u grani unutar repozitorijuma, nešto poput: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Terraform apply će biti izvršen da primeni sve promene, takođe ga možete zloupotrebiti da dobijete RCE injektovanjem malicioznog Terraform fajla sa local-exec.
Samo treba da se pobrinete da neki payload poput sledećih završi u main.tf
fajlu:
Sledite preporukama iz prethodne tehnike da izvršite ovaj napad na diskretniji način koristeći spoljne reference.
Možete imati tajne vrednosti koje koristi terraform izvučene pokretanjem terraform apply
dodavanjem nečega poput:
U slučaju da imate pristup za pisanje nad terraform state fajlovima, ali ne možete da menjate terraform kod, ova istraživanja nude neke zanimljive opcije za korišćenje fajla:
Postoje 2 načina da uništite resurse:
Umetnite resurs sa nasumičnim imenom u state fajl koji pokazuje na pravi resurs koji treba uništiti
Pošto će terraform videti da resurs ne bi trebao da postoji, uništiće ga (prateći pravi ID resursa koji je naznačen). Primer sa prethodne strane:
Izmenite resurs za brisanje na način da nije moguće ažurirati (tako da će biti obrisan i ponovo kreiran)
Za EC2 instancu, izmena tipa instance je dovoljna da terraform obriše i ponovo je kreira.
Takođe je moguće napraviti prilagođeni provajder i jednostavno zameniti jednog od provajdera u terraform state datoteci za zlonamerni ili dodati prazan resurs sa zlonamernim provajderom. Primer iz originalnog istraživanja:
U slučaju da naiđete na situaciju gde je hashicorp/external
stavljen na crnu listu, možete ponovo implementirati external
provajder na sledeći način. Napomena: Koristimo fork external provajdera objavljen od strane https://registry.terraform.io/providers/nazarewk/external/latest. Takođe možete objaviti svoj fork ili ponovnu implementaciju.
Тада можете користити external
као и обично.
Snyk nudi sveobuhvatno rešenje za skeniranje Infrastructure as Code (IaC) koje otkriva ranjivosti i pogrešne konfiguracije u Terraformu, CloudFormationu, Kubernetesu i drugim IaC formatima.
Features:
Skeniranje u realnom vremenu za sigurnosne ranjivosti i probleme usklađenosti.
Integracija sa sistemima za kontrolu verzija (GitHub, GitLab, Bitbucket).
Automatizovani zahtevi za ispravke.
Detaljna uputstva za otklanjanje problema.
Sign Up: Kreirajte nalog na Snyk.
Checkov je alat za statičku analizu koda za infrastrukturu kao kod (IaC) i takođe alat za analizu sastava softvera (SCA) za slike i open source pakete.
Skeneruje cloud infrastrukturu obezbeđenu korišćenjem Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, ili OpenTofu i otkriva bezbednosne i usklađenosti greške u konfiguraciji koristeći skeniranje zasnovano na grafu.
Izvodi analizu sastava softvera (SCA) skeniranje koja je skeniranje open source paketa i slika za zajedničke ranjivosti i izloženosti (CVE).
From the docs: terraform-compliance
je lagan, bezbednosno orijentisan test okvir za terraform koji omogućava negativno testiranje za vašu infrastrukturu kao kod.
usaglašenost: Osigurajte da implementirani kod prati bezbednosne standarde, vaše sopstvene prilagođene standarde
razvoj vođen ponašanjem: Imamo BDD za gotovo sve, zašto ne i za IaC?
prenosiv: samo ga instalirajte putem pip
ili ga pokrenite putem docker
. Pogledajte Instalacija
pre-deploy: validira vaš kod pre nego što bude implementiran
lako za integraciju: može se pokrenuti u vašem pipeline-u (ili u git hook-ovima) kako bi se osiguralo da su sve implementacije validirane.
razdvajanje dužnosti: možete čuvati svoje testove u drugom repozitorijumu gde je odgovorna posebna ekipa.
Nažalost, ako kod koristi neke provajdere kojima nemate pristup, nećete moći da izvršite terraform plan
i pokrenete ovaj alat.
From the docs: tfsec koristi statičku analizu vašeg terraform koda da bi uočio potencijalne pogrešne konfiguracije.
☁️ Proverava pogrešne konfiguracije kod svih glavnih (i nekih manjih) provajdera u oblaku
⛔ Stotine ugrađenih pravila
🪆 Skenira module (lokalne i udaljene)
➕ Evaluira HCL izraze kao i literalne vrednosti
↪️ Evaluira Terraform funkcije npr. concat()
🔗 Evaluira odnose između Terraform resursa
🧰 Kompatibilan sa Terraform CDK
🙅 Primena (i obogaćivanje) korisnički definisanih Rego politika
📃 Podržava više formata izlaza: divno (podrazumevano), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif.
🛠️ Konfigurisanje (putem CLI zastavica i/ili konfiguracione datoteke)
⚡ Veoma brzo, sposobno da brzo skenira ogromne repozitorijume
Pronađite sigurnosne ranjivosti, probleme usklađenosti i pogrešne konfiguracije infrastrukture rano u razvoju vaše infrastrukture kao koda uz KICS od Checkmarx.
KICS označava Keeping Infrastructure as Code Secure, otvorenog je koda i neophodan je za svaki cloud native projekat.
Iz dokumentacije: Terrascan je statički analizator koda za Infrastrukturu kao Kod. Terrascan vam omogućava da:
Besprekorno skenirate infrastrukturu kao kod za pogrešne konfiguracije.
Pratite obezbeđenu cloud infrastrukturu za promene konfiguracije koje uvode promene u posturi, i omogućava vraćanje na sigurnu posturu.
Otkrivate sigurnosne ranjivosti i kršenja usklađenosti.
Ublažavate rizike pre nego što obezbedite cloud native infrastrukturu.
Nudi fleksibilnost za lokalno pokretanje ili integraciju sa vašim CI\CD.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)