Terraform Security
Informazioni di Base
HashiCorp Terraform è uno strumento di infrastruttura come codice che ti permette di definire risorse cloud e on-prem in file di configurazione leggibili dall'uomo che puoi versionare, riutilizzare e condividere. Puoi poi utilizzare un flusso di lavoro coerente per provvedere e gestire tutta la tua infrastruttura durante il suo ciclo di vita. Terraform può gestire componenti di basso livello come calcolo, archiviazione e risorse di rete, così come componenti di alto livello come voci DNS e funzionalità SaaS.
Come funziona Terraform?
Terraform crea e gestisce risorse su piattaforme cloud e altri servizi attraverso le loro interfacce di programmazione delle applicazioni (API). I provider consentono a Terraform di lavorare con praticamente qualsiasi piattaforma o servizio con un'API accessibile.
HashiCorp e la comunità di Terraform hanno già scritto più di 1700 provider per gestire migliaia di diversi tipi di risorse e servizi, e questo numero continua a crescere. Puoi trovare tutti i provider disponibili pubblicamente sul Registro di Terraform, inclusi Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog e molti altri.
Il flusso di lavoro principale di Terraform consiste in tre fasi:
Scrittura: Definisci risorse, che possono essere su più provider cloud e servizi. Ad esempio, potresti creare una configurazione per distribuire un'applicazione su macchine virtuali in una rete Virtual Private Cloud (VPC) con gruppi di sicurezza e un bilanciatore di carico.
Pianificazione: Terraform crea un piano di esecuzione descrivendo l'infrastruttura che creerà, aggiornerà o distruggerà in base all'infrastruttura esistente e alla tua configurazione.
Applicazione: Con l'approvazione, Terraform esegue le operazioni proposte nell'ordine corretto, rispettando le dipendenze delle risorse. Ad esempio, se aggiorni le proprietà di una VPC e cambi il numero di macchine virtuali in quella VPC, Terraform ricreerà la VPC prima di ridimensionare le macchine virtuali.
Laboratorio di Terraform
Basta installare terraform sul tuo computer.
Qui hai una guida e qui hai il modo migliore per scaricare terraform.
RCE in Terraform
Terraform non ha una piattaforma che espone una pagina web o un servizio di rete che possiamo enumerare, quindi, l'unico modo per compromettere terraform è essere in grado di aggiungere/modificare file di configurazione di terraform.
Tuttavia, terraform è un componente molto sensibile da compromettere perché avrà accesso privilegiato a diverse posizioni per poter funzionare correttamente.
Il modo principale per un attaccante di poter compromettere il sistema in cui viene eseguito terraform è compromettere il repository che memorizza le configurazioni di terraform, perché a un certo punto verranno interpretate.
Attualmente, ci sono soluzioni là fuori che eseguono automaticamente terraform plan/apply dopo la creazione di una PR, come Atlantis:
Atlantis SecuritySe sei in grado di compromettere un file terraform ci sono diversi modi in cui puoi eseguire RCE quando qualcuno esegue terraform plan
o terraform apply
.
Terraform plan
Terraform plan è il comando più utilizzato in terraform e sviluppatori/soluzioni che utilizzano terraform lo chiamano continuamente, quindi il modo più semplice per ottenere RCE è assicurarsi di iniettare un file di configurazione terraform che eseguirà comandi arbitrari in un terraform plan
.
Utilizzando un provider esterno
Terraform offre il provider external
che fornisce un modo per interfacciarsi tra Terraform e programmi esterni. Puoi utilizzare il data source external
per eseguire codice arbitrario durante una plan
.
Iniettare in un file di configurazione terraform qualcosa di simile a quanto segue eseguirà una shell reversa quando si esegue terraform plan
:
Utilizzo di un provider personalizzato
Un attaccante potrebbe inviare un provider personalizzato al Terraform Registry e quindi aggiungerlo al codice Terraform in un branch di sviluppo (esempio da qui):
Il provider viene scaricato nell'init
e eseguirà il codice dannoso quando viene eseguito plan
È possibile trovare un esempio in https://github.com/rung/terraform-provider-cmdexec
Utilizzo di un riferimento esterno
Entrambe le opzioni menzionate sono utili ma non molto stealthy (la seconda è più stealthy ma più complessa della prima). È possibile eseguire questo attacco in modo ancora più stealthy, seguendo questi suggerimenti:
Invece di aggiungere il rev shell direttamente nel file terraform, è possibile caricare una risorsa esterna che contiene il rev shell:
Puoi trovare il codice rev shell in https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
Nella risorsa esterna, utilizza la funzionalità ref per nascondere il codice rev shell di terraform in un branch all'interno del repository, qualcosa del genere:
git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Applicazione di Terraform
Terraform apply verrà eseguito per applicare tutte le modifiche, puoi anche abusarne per ottenere RCE iniettando un file Terraform maligno con local-exec.
Devi solo assicurarti che un payload come quelli seguenti finisca nel file main.tf
:
Segui i suggerimenti della tecnica precedente per eseguire questo attacco in modo più stealth utilizzando riferimenti esterni.
Dump delle Password
È possibile avere valori segreti utilizzati da terraform dumpati eseguendo terraform apply
aggiungendo al file terraform qualcosa del genere:
Abuso dei file di stato di Terraform
Nel caso in cui si abbia accesso in scrittura ai file di stato di Terraform ma non si possa modificare il codice di Terraform, questa ricerca offre alcune opzioni interessanti per sfruttare il file:
Eliminazione delle risorse
Ci sono 2 modi per eliminare le risorse:
Inserire una risorsa con un nome casuale nel file di stato che punta alla vera risorsa da eliminare
Poiché Terraform vedrà che la risorsa non dovrebbe esistere, la distruggerà (seguendo l'ID della risorsa reale indicata). Esempio dalla pagina precedente:
Modificare la risorsa da eliminare in modo che non sia possibile aggiornarla (quindi verrà eliminata e ricreata)
Per un'istanza EC2, modificare il tipo di istanza è sufficiente per fare in modo che terraform elimini e ricrei l'istanza.
RCE
È anche possibile creare un provider personalizzato e sostituire uno dei provider nel file di stato di terraform con quello dannoso o aggiungere una risorsa vuota con il provider dannoso. Esempio dalla ricerca originale:
Sostituire il provider dalla lista nera
Nel caso in cui ti trovi in una situazione in cui hashicorp/external
è stato messo nella lista nera, puoi reimplementare il provider external
facendo quanto segue. Nota: Utilizziamo un fork del provider esterno pubblicato da https://registry.terraform.io/providers/nazarewk/external/latest. Puoi pubblicare anche il tuo fork o la tua reimplementazione.
Quindi puoi utilizzare external
come al solito.
Strumenti di Audit
tfsec: tfsec utilizza l'analisi statica del tuo codice terraform per individuare potenziali errate configurazioni.
terascan: Terrascan è un analizzatore statico di codice per l'Infrastruttura come Codice.
Riferimenti
Last updated