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 komponenti 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 Virtuelne Privatne Oblasti (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 repozitorijum 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:
Atlantis SecurityAko 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 spoljašnjih 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 zlonamerni 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 stanja 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 stanje fajla 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 kreira.
Takođe je moguće napraviti prilagođeni provajder i jednostavno zameniti jednog od provajdera u terraform state datoteci za zlonamernog 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.
Zatim možete koristiti external
kao i obično.
tfsec: tfsec koristi statičku analizu vašeg terraform koda da otkrije potencijalne pogrešne konfiguracije.
terascan: Terrascan je statički analizator koda za infrastrukturu kao kod.
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)