Terraform Security
Last updated
Last updated
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
HashiCorp Terraform è uno strumento di infrastruttura come codice che ti consente di definire sia risorse cloud che on-prem in file di configurazione leggibili dall'uomo che puoi versionare, riutilizzare e condividere. Puoi quindi utilizzare un flusso di lavoro coerente per fornire e gestire tutta la tua infrastruttura durante il suo ciclo di vita. Terraform può gestire componenti a basso livello come risorse di calcolo, archiviazione e rete, così come componenti ad alto livello come voci DNS e funzionalità SaaS.
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 nel Terraform Registry, 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:
Scrivi: Definisci risorse, che possono essere distribuite su più provider e servizi cloud. 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.
Pianifica: Terraform crea un piano di esecuzione che descrive l'infrastruttura che creerà, aggiornerà o distruggerà in base all'infrastruttura esistente e alla tua configurazione.
Applica: Su approvazione, Terraform esegue le operazioni proposte nell'ordine corretto, rispettando eventuali 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 scalare le macchine virtuali.
Basta installare terraform sul tuo computer.
Qui hai una guida e qui hai il modo migliore per scaricare 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 i file di configurazione di terraform.
Tuttavia, terraform è un componente molto sensibile da compromettere perché avrà accesso privilegiato a diverse posizioni affinché possa funzionare correttamente.
Il modo principale per un attaccante di compromettere il sistema in cui terraform è in esecuzione è compromettere il repository che memorizza le configurazioni di terraform, perché a un certo punto verranno interpretate.
In realtà, ci sono soluzioni là fuori che eseguono automaticamente terraform plan/apply dopo che è stata creata una PR, come Atlantis:
Atlantis SecuritySe riesci a compromettere un file terraform, ci sono diversi modi in cui puoi eseguire RCE quando qualcuno esegue terraform plan
o terraform apply
.
Terraform plan è il comando più utilizzato in terraform e gli sviluppatori/soluzioni che utilizzano terraform lo chiamano continuamente, quindi il modo più semplice per ottenere RCE è assicurarsi di avvelenare un file di configurazione terraform che eseguirà comandi arbitrari in un terraform plan
.
Utilizzando un provider esterno
Terraform offre il provider esterno
che fornisce un modo per interfacciarsi tra Terraform e programmi esterni. Puoi utilizzare la sorgente dati esterno
per eseguire codice arbitrario durante un plan
.
Iniettando in un file di configurazione terraform qualcosa di simile al seguente eseguirà una rev shell quando si esegue terraform plan
:
Utilizzando un provider personalizzato
Un attaccante potrebbe inviare un provider personalizzato al Terraform Registry e poi aggiungerlo al codice Terraform in un branch di funzionalità (esempio da qui):
Il provider viene scaricato nell'init
e eseguirà il codice malevolo quando viene eseguito plan
.
Puoi trovare un esempio in https://github.com/rung/terraform-provider-cmdexec
Utilizzando un riferimento esterno
Entrambe le opzioni menzionate sono utili ma non molto furtive (la seconda è più furtiva ma più complessa della prima). Puoi eseguire questo attacco anche in un modo più furtivo, seguendo questi suggerimenti:
Invece di aggiungere direttamente la rev shell nel file terraform, puoi caricare una risorsa esterna che contiene la 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 funzione ref per nascondere il codice rev shell terraform in un branch all'interno del repo, qualcosa come: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Terraform apply verrà eseguito per applicare tutte le modifiche, puoi anche abusarne per ottenere RCE iniettando un file Terraform malevolo con local-exec.
Devi solo assicurarti che un payload come i seguenti termini nel file main.tf
:
Segui le suggerimenti della tecnica precedente per eseguire questo attacco in modo più furtivo utilizzando riferimenti esterni.
Puoi avere valori segreti utilizzati da terraform dumpati eseguendo terraform apply
aggiungendo al file terraform qualcosa come:
Nel caso in cui tu abbia accesso in scrittura ai file di stato di terraform ma non possa modificare il codice terraform, questa ricerca offre alcune opzioni interessanti per sfruttare il file:
Ci sono 2 modi per distruggere le risorse:
Inserire una risorsa con un nome casuale nel file di stato che punta alla vera risorsa da distruggere
Poiché terraform vedrà che la risorsa non dovrebbe esistere, la distruggerà (seguendo l'ID della vera risorsa indicato). Esempio dalla pagina precedente:
Modifica la risorsa da eliminare in un modo che non sia possibile aggiornare (quindi verrà eliminata e ricreata)
Per un'istanza EC2, modificare il tipo dell'istanza è sufficiente per far sì che terraform la elimini e la ricrei.
È anche possibile creare un provider personalizzato e semplicemente sostituire uno dei provider nel file di stato di terraform con quello malevolo o aggiungere una risorsa vuota con il provider malevolo. Esempio dalla ricerca originale:
In caso tu incontri una situazione in cui hashicorp/external
è stato messo in blacklist, puoi re-implementare 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 re-implementazione.
Poi puoi usare external
come al solito.
Snyk offre una soluzione completa di scansione per l'Infrastructure as Code (IaC) che rileva vulnerabilità e misconfigurazioni in Terraform, CloudFormation, Kubernetes e altri formati IaC.
Caratteristiche:
Scansione in tempo reale per vulnerabilità di sicurezza e problemi di conformità.
Integrazione con sistemi di controllo versione (GitHub, GitLab, Bitbucket).
Richieste di pull per correzioni automatiche.
Consigli dettagliati per la remediation.
Registrati: Crea un account su Snyk.
Checkov è uno strumento di analisi statica del codice per l'infrastruttura come codice (IaC) e anche uno strumento di analisi della composizione del software (SCA) per immagini e pacchetti open source.
Scansiona l'infrastruttura cloud fornita utilizzando Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates o OpenTofu e rileva configurazioni errate di sicurezza e conformità utilizzando la scansione basata su grafi.
Esegue la scansione dell'analisi della composizione del software (SCA), che è una scansione di pacchetti open source e immagini per Vulnerabilità e Esposizioni Comuni (CVE).
Dai docs: terraform-compliance
è un framework di test leggero, focalizzato sulla sicurezza e sulla conformità, contro terraform per abilitare la capacità di test negativi per la tua infrastruttura come codice.
conformità: Assicurati che il codice implementato segua gli standard di sicurezza, i tuoi standard personalizzati
sviluppo guidato dal comportamento: Abbiamo BDD per quasi tutto, perché non per IaC?
portabile: basta installarlo da pip
o eseguirlo tramite docker
. Vedi Installazione
pre-deploy: valida il tuo codice prima che venga distribuito
facile da integrare: può essere eseguito nella tua pipeline (o nei git hooks) per garantire che tutte le distribuzioni siano validate.
separazione dei doveri: puoi mantenere i tuoi test in un repository diverso dove un team separato è responsabile.
Sfortunatamente, se il codice utilizza alcuni provider a cui non hai accesso, non sarai in grado di eseguire il terraform plan
e utilizzare questo strumento.
Dalla docs: tfsec utilizza l'analisi statica del tuo codice terraform per individuare potenziali misconfigurazioni.
☁️ Controlla le misconfigurazioni su tutti i principali (e alcuni minori) fornitori di cloud
⛔ Centinaia di regole integrate
🪆 Scansione dei moduli (locali e remoti)
➕ Valuta le espressioni HCL così come i valori letterali
↪️ Valuta le funzioni Terraform ad es. concat()
🔗 Valuta le relazioni tra le risorse Terraform
🧰 Compatibile con il Terraform CDK
🙅 Applica (e arricchisce) le politiche Rego definite dall'utente
📃 Supporta più formati di output: lovely (predefinito), JSON, SARIF, CSV, CheckStyle, JUnit, testo, Gif.
🛠️ Configurabile (tramite flag CLI e/o file di configurazione)
⚡ Molto veloce, in grado di scansionare rapidamente enormi repository
Trova vulnerabilità di sicurezza, problemi di conformità e misconfigurazioni dell'infrastruttura precocemente nel ciclo di sviluppo della tua infrastruttura-as-code con KICS di Checkmarx.
KICS sta per Keeping Infrastructure as Code Secure, è open source ed è un must-have per qualsiasi progetto cloud native.
Dalla documentazione: Terrascan è un analizzatore di codice statico per l'Infrastructure as Code. Terrascan ti consente di:
Scansionare senza problemi l'infrastructure as code per configurazioni errate.
Monitorare l'infrastruttura cloud provisionata per cambiamenti di configurazione che introducono deriva della postura e consente di tornare a una postura sicura.
Rilevare vulnerabilità di sicurezza e violazioni di conformità.
Mitigare i rischi prima di provisionare l'infrastruttura cloud nativa.
Offrire flessibilità per eseguire localmente o integrarsi con il tuo CI\CD.
Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)