Zpedia 

/ Che cos'è la sicurezza dell'IaC?

Che cos'è la sicurezza dell'IaC?

La sicurezza dell'infrastruttura come codice (Infrastructure as Code, IaC) consiste nell'integrazione di una copertura di sicurezza sul cloud coerente e scalabile che aiuta a rilevare gli errori di configurazione nel codice sin dalle prime fasi del ciclo di sviluppo dei software, per prevenire le vulnerabilità durante la fase di esecuzione. In questo modo, le organizzazioni possono applicare misure di sicurezza nei modelli IaC durante tutto il loro ciclo di vita: nei repository di codice, negli strumenti di integrazione/consegna continua (CI/CD) o già nell'IDE degli sviluppatori.

Perché la sicurezza dell'infrastruttura come codice (IaC) è importante?

Le esigenze aziendali e l'adozione dei cicli di DevOps fanno sì che le applicazioni vengano distribuite e implementate molto più rapidamente. Questa tendenza può avere effetti negativi sia sul fronte della conformità alle normative che su quello della sicurezza, in un contesto in cui regolamenti e minacce informatiche sono in continua evoluzione.

Se gli sviluppatori non sono a conoscenza dei requisiti di conformità, oppure tali requisiti non sono accessibili, è possibile che vengano introdotte vulnerabilità nell'ambiente di produzione. Le organizzazioni devono contrastare questo fenomeno colmando il divario tra i team di sicurezza e DevOps, in quanto la responsabilità della sicurezza si sta rapidamente spostando verso gli ingegneri di DevOps.

Il problema nasce dalla dipendenza da processi manuali e strumenti isolati, che non riescono a stare al passo con la velocità dello sviluppo e i continui cicli di rilascio. È necessario offrire ai propri sviluppatori una piattaforma collaborativa e fluida che consenta loro di identificare e risolvere rapidamente i problemi, in modo da poter applicare policy di sicurezza e conformità coerenti senza sacrificare la velocità.

La sicurezza dell'IaC dovrebbe:

  • Scansionare il codice per individuare errori di configurazione, vulnerabilità e distribuzioni non sicure che potrebbero violare gli standard di sicurezza
  • Verificare la configurazione di riferimento rispetto alle best practice di sicurezza e ai controlli di conformità
  • Fornire allerte e indicazioni a sviluppatori e ingegneri per una correzione efficace e assicurare distribuzioni sicure
  • Applicare limitazioni, bloccando le richieste pull e le compilazioni CI/CD che contengono vulnerabilità critiche direttamente all'interno degli strumenti utilizzati dai team, impedendo le potenziali violazioni

Prima di approfondire l'importanza della sicurezza dell'IaC, diamo un'occhiata a cosa è esattamente questo modello e perché è importante per le operazioni moderne.

Che cosa è l'infrastruttura come codice (IaC)?

L'infrastruttura come codice (Infrastructure as Code, IaC) è un codice descrittivo, solitamente scritto in linguaggio markup (JSON, YAML, ecc.) o proprietario (ad esempio, Terraform HCL), utilizzato per la distribuzione e la gestione delle configurazioni delle risorse dell'infrastruttura cloud. L'infrastruttura come codice garantisce maggiori livelli di produttività e agilità, riduce l'errore umano, consente la standardizzazione nell'implementazione ed esegue il controllo delle versioni della configurazione dell'infrastruttura.

Gli strumenti IaC sono disponibili in molte forme, come piattaforme dedicate alla gestione delle infrastrutture, strumenti di gestione delle configurazioni e persino open source; le opzioni disponibili sono innumerevoli. Tra le scelte più diffuse troviamo HashiCorp Terraform, AWS CloudFormation e Azure Resource Manager.

Vantaggi dell'IaC

L'IaC offre una serie di vantaggi che si concentrano principalmente su flessibilità e velocità. Consente di:

  • Fornire e gestire in modo rapido e semplice le risorse cloud
  • Automatizzare i processi di distribuzione utilizzando il codice per gestire l'infrastruttura cloud
  • Adattare l'infrastruttura grazie al cloud

Questi vantaggi eliminano la necessità di una configurazione manuale, che richiede molto tempo, e riducono il rischio di errore umano. Inoltre, consentono agli ingegneri di istituire un controllo delle versioni per supportare i team di DevOps, ma approfondiremo questo aspetto più avanti.

Perché l'IaC è importante per i cicli di DevOps?

L'IaC consente ai team IT di gestire e configurare i data center tramite file scritti. Questo non solo riduce i costi di compilazione ed esecuzione delle applicazioni, ma semplifica anche la condivisione dei dati tra team di diversi reparti e favorisce l'automazione della scrittura degli script, alleggerendo il carico dei team di DevOps quando devono creare delle app cloud.

Inoltre, l'IaC consente ai team di DevOps di predisporre ed eseguire una moltitudine di ambienti di test e, se necessario, consente agli sviluppatori di diversificare ulteriormente il linguaggio utilizzato. Grazie a questa maggiore flessibilità, i team possono concentrarsi sulla compilazione, sul testing e sull'esecuzione di applicazioni di alta qualità in tempi più rapidi e a costi inferiori.

Paradossalmente, le stesse qualità che rendono l'IaC efficace possono anche introdurre nuove vulnerabilità nell'infrastruttura.

Quali sono i rischi per la sicurezza associati all'IaC?

L'IaC offre vantaggi operativi come, ad esempio, la distribuzione rapida dell'infrastruttura IT con un approccio dichiarativo, anziché imperativo. Il suo impatto sulla sicurezza rappresenta però una sfida importante per via del suo potenziale impatto sulle risorse.

Se una singola risorsa viene configurata manualmente in modo errato, la portata dell'errore rimane circoscritta a questa sola risorsa, ma se viene commesso un errore nel codice utilizzato per distribuire automaticamente 100 o più risorse, allora il rischio è di gran lunga maggiore.

Ottenere una sicurezza IaC completa rappresenta una vera e propria sfida per le organizzazioni. L'infrastruttura come codice può apportare moltissimi benefici, ma può anche creare pericolose vulnerabilità. 

5 rischi dell'IaC

L'IaC potrebbe esporre la tua organizzazione a rischi come:

  • Superficie di attacco estesa: gli errori di configurazione dell'IaC possono estendere la superficie di attacco (come ad esempio errori di configurazione del gruppo di sicurezza che espongono inavvertitamente le risorse a Internet).
  • Esposizione dei dati: i modelli IaC potrebbero contenere vulnerabilità e configurazioni predefinite non sicure che potrebbero portare all'esposizione dei dati (come segreti incorporati nel codice Terraform sottoposti al controllo del codice sorgente).
  • Privilegi eccessivi: gli sviluppatori spesso utilizzano account con privilegi per eseguire il provisioning delle app cloud e delle risorse infrastrutturali sottostanti, e questo può comportare un accesso non autorizzato ai dati sensibili o una potenziale violazione.
  • Violazioni della conformità: le organizzazioni devono rispettare una serie di standard normativi, come RGPD, HIPAA, PCI DSS e SOC2. Se nelle procedure dell'IaC non vengono applicate misure di sicurezza nel rispetto di tali standard, si possono verificare problemi di conformità.
  • Attriti tra team con funzioni diverse: gli sviluppatori accelerano le distribuzioni per fornire prodotti di qualità con scadenze più stringenti. Tuttavia, i responsabili della sicurezza dispongono di una visibilità minima sul codice e di un controllo limitato sulle modifiche che vengono apportate. Per questo motivo, applicare le giuste linee guida per la sicurezza, siano esse basate sulla conformità alle normative, sulle best practice o sulle policy aziendali, diventa una vera e propria sfida se non si colma il divario tra DevOps e SecOps.

Come funziona la sicurezza dell'IaC?

La sicurezza IaC adotta un approccio "shift-left" per proteggere il codice. Questo significa che gli sviluppatori e gli ingegneri di DevOps ricevono feedback sulla sicurezza del loro codice in una fase iniziale del processo. La sicurezza dell'IaC offre agli sviluppatori questo grado di visibilità tramite:

  • Scansione dei modelli IaC prima che vengano inviati al controllo del codice sorgente
  • Configurazioni di riferimento
  • Identificazione di errori di configurazione, vulnerabilità e violazioni delle policy

Grazie a questi processi, i team di SecOps vengono informati tempestivamente degli eventuali problemi da risolvere, prima ancora che un'app venga distribuita.

Le best practice per la sicurezza dell'IaC

Ecco alcune delle best practice per la sicurezza dell'IaC che possono essere facilmente integrate nel ciclo di sviluppo:

Ottenere la massima visibilità nell'inventario delle risorse

Durante le operazioni relative all'IaC, è necessario identificare, contrassegnare, monitorare e gestire un inventario delle risorse distribuite. Le risorse non contrassegnate devono essere monitorate attentamente, perché sono difficili da tracciare e possono causare scostamenti. Ogni volta che vengono eliminate risorse, la relativa configurazione deve essere cancellata, e anche i relativi dati devono essere messi in sicurezza o eliminati.

Identificare e correggere gli scostamenti nell'ambiente

Idealmente, le configurazioni nei vari ambienti degli sviluppatori dovrebbero essere uniformi. Tuttavia, i proprietari delle applicazioni a volte hanno bisogno di apportare modifiche alle proprie app e all'infrastruttura sottostante. Senza un monitoraggio o strumenti adeguati, l'accumulo incontrollato di queste variazioni porta a uno scostamento della configurazione, che può esporre l'infrastruttura e creare lacune nella sicurezza e nella conformità.

Proteggere le risorse a codifica fissa

Dati sensibili come chiavi segrete, chiavi private, chiavi SSH, chiavi di accesso e chiavi delle API con codifica fissa nell'IaC possono facilitare l'accesso ai servizi o alle operazioni sottostanti e permettere agli aggressori di muoversi lateralmente. Avere credenziali esposte diffuse attraverso il codice dell'IaC, che viene caricato in un sistema di controllo delle versioni (ad esempio GitHub) può rappresentare un rischio critico per le organizzazioni.

Proteggere gli account degli sviluppatori

Gli account degli sviluppatori devono essere protetti dagli aggressori. È importante rafforzare e monitorare gli account degli sviluppatori, tenere traccia delle modifiche delle configurazioni dell'IaC e verificare che siano autorizzate e intenzionali. Le modifiche non autorizzate possono causare la manomissione del modello IaC o della configurazione, comportando una potenziale fuga di codice.

Limitare l'accesso agli ambienti

I team responsabili della sicurezza devono disporre di un unico punto di controllo che consenta una gestione coerente degli account con privilegi, delle credenziali e dei segreti in tutti gli ambienti di sviluppo e di elaborazione. Questo permette loro di gestire l'utilizzo attuale e futuro delle credenziali con privilegi, di rilevare i problemi nella configurazione dell'accesso con la valutazione del contesto richiesto, di adeguare l'accesso in base a identità e autorizzazioni e di applicare in modo coerente le policy sui privilegi minimi.

Applicazione di limitazioni

I team responsabili della sicurezza dovrebbero applicare limitazioni tramite le policy native del cloud, con controlli per proteggere le infrastrutture multicloud dagli scostamenti nella configurazione, allerte in caso di violazioni, policy di sicurezza coerenti per la fase di compilazione ed esecuzione e indicazioni chiare per gli sviluppatori su come risolvere vulnerabilità e rischi. Ad esempio, si può scegliere di bloccare le compilazioni CI/CD nel caso in cui non venga rispettata una determinata soglia di sicurezza.

Abbiamo chiarito un punto fondamentale: l'IaC può portare grandi vantaggi a un'organizzazione, ma comporta anche rischi per la sicurezza che non possono essere ignorati. Per sfruttare al massimo l'IaC, hai bisogno di un partner per la sicurezza informatica che abbia sviluppato una soluzione tenendo conto dei cicli di DevSecOps, offra una solida protezione dei dati sul cloud e, soprattutto, possa aiutarti a ottenere il massimo dal tuo investimento. Il partner giusto è Zscaler.

Come può aiutare il controllo del profilo di sicurezza?

Posture Control è una piattaforma di protezione delle applicazioni native del cloud (CNAPP) progettata per aiutare i team responsabili di sviluppo e sicurezza a collaborare per creare da zero un programma di sicurezza completo per l'infrastruttura come codice (IaC).

Funzionalità principali

Visibilità e controllo

  • Identificare i problemi e visualizzare i profili di sicurezza e conformità del repository di codice
  • Indagare e risolvere facilmente le violazioni in base alla categoria, alla gravità delle policy, ai controlli di conformità, ai tag e allo stato
  • Ottenere la massima visibilità su violazioni del codice, repository del codice, richieste pull, compilazioni CI/CD e altre informazioni critiche per risalire alla fonte del problema

Valutazione continua

  • Scansioni continue dei modelli IaC (ad esempio, Terraform HCL, modelli AWS CloudFormation, file YAML del manifesto dell'applicazione Kubernetes e grafici Helm) mentre il codice viene aggiornato o inserito nei repository di codice oppure quando vengono avviati processi di compilazione nei sistemi CI/CD
  • Scansione del codice per individuare violazioni delle policy di sicurezza il prima possibile (IDE degli sviluppatori) per fornire un feedback immediato agli sviluppatori
  • Valutazione dei modelli IaC per individuare problemi di sicurezza, mancanza di conformità e altri errori di configurazione o configurazioni predefinite non sicure (ad esempio la mancanza di crittografia o l'assenza di tracciamento di identità e credenziali) per rilevare autorizzazioni eccessive, risorse esposte pubblicamente, come workload, bucket di archiviazione, ruoli deboli nei gruppi di sicurezza e altro
  • Confronto continuo della configurazione osservata con lo stato desiderato per segnalare, notificare e correggere gli scostamenti non previsti nella configurazione
  • Scansione del codice inviato ai repository di codice e blocco della compilazione nei sistemi CI/CD quando vengono identificate vulnerabilità critiche

Incremento della produttività

  • Miglioramento dell'esperienza degli sviluppatori identificando i problemi con il contesto giusto e fornendo linee guida integrate per la sicurezza e suggerimenti per risolvere i problemi in modo nativo direttamente nei relativi ecosistemi di DevOps, come IDE, repository di codice e sistemi CI/CD
  • Automatizzazione della sicurezza dell'IaC e integrazione della stessa nei processi esistenti, per ridurre l'attrito tra gli sviluppatori e i membri di team responsabili di sicurezza, operazioni e conformità (una best practice di DevSecOps)

Segnalazione

  • Integrazione con gli strumenti di ticketing per generare avvisi quasi in tempo reale, consentendo di notificare e avvisare i proprietari e i team giusti fornendo loro il contesto necessario per determinare i problemi, il relativo impatto e le azioni da intraprendere per risolverli

Risorse suggerite

Shift left e shift down con la CWPP
Leggi il blog
Proteggi l'infrastruttura integrando la sicurezza dell'IaC nei flussi di lavoro degli sviluppatori
Leggi il blog
La crescente importanza delle CNAPP (Cloud Native Application Protection Platform)
Leggi il blog
I 5 principali vantaggi di una piattaforma di protezione delle applicazioni native del cloud
Leggi il blog

01 / 02