Terraform Security
Last updated
Last updated
HashiCorp Terraform je alat za infrastrukturu kao kod koji vam omogućava da definišete oblak i resurse na lokaciji u čitljivim konfiguracionim fajlovima koje možete verzionisati, ponovo koristiti i deliti. Zatim možete koristiti dosledan radni tok za obezbeđivanje i upravljanje celokupnom infrastrukturom tokom njenog životnog ciklusa. Terraform može upravljati komponentama niskog nivoa poput računanja, skladištenja i mrežnih resursa, kao i komponentama visokog nivoa poput DNS unosa i SaaS funkcija.
Terraform kreira i upravlja resursima na cloud platformama i drugim uslugama putem njihovih programskih interfejsa (API-ja). Provajderi omogućavaju Terraformu da radi sa gotovo bilo kojom platformom ili uslugom sa pristupačnim API-jem.
HashiCorp i Terraform zajednica već su napisali više od 1700 provajdera za upravljanje hiljadama različitih tipova resursa i usluga, a ovaj broj nastavlja da raste. Sve javno dostupne provajdere možete pronaći na Terraform Registru, uključujući Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i mnoge druge.
Osnovni Terraform radni tok sastoji se od tri faze:
Pisanje: Definišete resurse koji mogu biti na više cloud provajdera i usluga. Na primer, možete kreirati konfiguraciju za implementaciju aplikacije na virtuelnim mašinama u Virtualnoj privatnoj mreži (VPC) sa sigurnosnim grupama i balanserom opterećenja.
Planiranje: Terraform kreira izvršni plan koji opisuje infrastrukturu koju će kreirati, ažurirati ili uništiti na osnovu postojeće infrastrukture i vaše konfiguracije.
Primena: Po odobrenju, Terraform vrši predložene operacije u ispravnom redosledu, poštujući sve zavisnosti resursa. Na primer, ako ažurirate osobine VPC-a i promenite broj virtuelnih mašina u tom VPC-u, Terraform će ponovo kreirati VPC pre skaliranja virtuelnih mašina.
Jednostavno instalirajte Terraform na svom računaru.
Evo vodiča 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 kompromitujemo Terraform da budemo u mogućnosti da dodamo/izmenimo konfiguracione fajlove Terraforma.
Međutim, Terraform je vrlo osetljiva komponenta za kompromitovanje jer će imati privilegovani pristup do različitih lokacija kako bi mogla pravilno da funkcioniše.
Glavni način za napadača da bude u mogućnosti da kompromituje sistem na kojem se izvršava Terraform je da kompromituje repozitorijum koji čuva konfiguracije Terraforma, jer će u nekom trenutku biti interpretirane.
Zapravo, postoje rešenja koja automatski izvršavaju terraform plan/apply nakon što je napravljen PR, kao što je Atlantis:
Atlantis SecurityAko ste u mogućnosti da kompromitujete Terraform fajl, 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 developeri/rešenja koja koriste Terraform je često pozivaju, tako da je najlakši način za dobijanje RCE da se pobrinite da otrovate Terraform konfiguracioni fajl koji će izvršiti proizvoljne komande u terraform plan
.
Terraform nudi external
provajder koji pruža način za interfejs između Terraforma i spoljnih programa. Možete koristiti external
izvor podataka da pokrenete proizvoljni kod tokom plan
-a.
Ubacivanje nečega poput sledećeg u Terraform konfiguracioni fajl će izvršiti reverznu ljusku prilikom izvršavanja terraform plan
:
Napadač bi mogao poslati prilagođeni provajder na Terraform Registry i zatim ga dodati u Terraform kod u grani funkcije (primer odavde):
Provajder se preuzima u init
i pokrenuće zlonamerni kod kada se izvrši plan
Primer možete pronaći na https://github.com/rung/terraform-provider-cmdexec
Obe pomenute opcije su korisne ali nisu vrlo prikrivene (druga je prikrivenija ali složenija od prve). Možete izvesti ovaj napad čak na prikriveniji način, prateći ove sugestije:
Umesto dodavanja reverznog šela direktno u terraform fajl, možete učitati spoljni resurs koji sadrži reverzni šel:
Možete pronaći kod za rev shell na https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
U spoljnom resursu, koristite funkciju ref da biste sakrili 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 kako bi primenio sve promene, takođe ga možete zloupotrebiti da biste dobili RCE ubacivanjem zlonamernog Terraform fajla sa local-exec.
Samo se pobrinite da se neki payload poput sledećih završava u fajlu main.tf
:
Pratite predloge iz prethodne tehnike da biste izvršili ovaj napad na diskretniji način korišćenjem spoljnih referenci.
Možete imati vrednosti tajni korišćene od strane terraforma dumpovane pokretanjem terraform apply
dodavanjem nečega poput sledećeg u terraform fajl:
U slučaju da imate pristup za pisanje nad stanjem terraform datoteka, ali ne možete promeniti terraform kod, ova istraživanja pružaju neke zanimljive opcije za iskorišćavanje datoteke:
Postoje 2 načina za uništavanje resursa:
Umetnite resurs sa nasumičnim imenom u stanje datoteke koje pokazuje na pravi resurs za brisanje
Pošto će terraform videti da resurs ne bi trebao postojati, uništiće ga (prateći stvarni ID resursa koji je naznačen). Primer sa prethodne stranice:
Izmenite resurs za brisanje na način da nije moguće ažurirati (tako da će biti obrisan i ponovo kreiran)
Za EC2 instancu, dovoljno je izmeniti tip instance da bi terraform obrisao i ponovo kreirao.
Takođe je moguće kreirati prilagođenog provajdera i jednostavno zameniti jednog od provajdera u datoteci stanja terraforma zlonamernim ili dodati prazan resurs sa zlonamernim provajderom. Primer iz originalnog istraživanja:
U slučaju da se susretnete sa situacijom gde je hashicorp/external
stavljena na crnu listu, možete ponovo implementirati external
provajder sledeći ove korake. Napomena: Koristimo fork external
provajdera objavljen od strane https://registry.terraform.io/providers/nazarewk/external/latest. Takođe možete objaviti svoj sopstveni fork ili ponovnu implementaciju.
Tada možete koristiti external
kao i obično.
tfsec: tfsec koristi statičku analizu vašeg terraform koda kako bi otkrio potencijalne loše konfiguracije.
terascan: Terrascan je statički analizator koda za infrastrukturu kao kod.