Una guida per neofiti sulla sicurezza dei container
I team DevOps utilizzano i container sempre più spesso, ma solo in un secondo momento si preoccupano di metterli in sicurezza. Ecco cosa devi sapere sulla sicurezza dei container.
Nello sviluppo software odierno, vengono scelti sempre più spesso container che siano efficienti in termini di risosre ed altamente portatili. Secondo la società di ricerche di mercato Gartner, infatti, entro il 2023 oltre il 70% delle organizzazioni avrà in esecuzione più di due applicazioni containerizzate.
Ma i container presentano anche dei lati negativi, in particolare quando si tratta di sicurezza. Il sondaggio globale DevSecOps 2022 di GitLab ha rilevato che solo il 64% dei professionisti ha approntato un piano di sicurezza per i container e che molti team DevOps non prevedono piani neanche per altre tecnologie software all'avanguardia, tra cui cloud native/serverless, API e microservizi.
La soluzione, per i team DevOps, è adottare un approccio Shift Left e integrare le pratiche di sicurezza in ogni fase del processo di sviluppo software. Ecco un'illustrazione passo-passo di come i team possano raggiungere questo obiettivo.
Un container è un'unità leggera che contiene tutti i componenti necessari per eseguire un'applicazione, come il codice, il runtime, le librerie e le configurazioni associate; la sicurezza dei container si riferisce alle misure e alle pratiche adottate per garantire la sicurezza e l'integrità dei container. La sicurezza dei container riguarda ogni aspetto dello sviluppo, dalle applicazioni all'interno dei container all'infrastruttura su cui vengono eseguite. La sicurezza e la qualità delle immagini di base sono fondamentali per garantire che ogni immagine derivata provenga da una fonte attendibile. Puoi predisporre la sicurezza nella pipeline del tuo container raccogliendo immagini affidabili, gestendo l'accesso tramite un registro privato, integrando test di sicurezza, automatizzando i deploy e difendendo continuamente la tua infrastruttura. L'hardening del container è il processo che impiega strumenti di scansione dei container per rilevare possibili vulnerabilità e affrontarle al fine di ridurre al minimo il rischio di attacco.
Un approccio efficace alla sicurezza del container riduce il rischio di eseguire il deploy di un container contenente falle nella sicurezza o codice dannoso in un ambiente di produzione.
La sicurezza del container si differenzia dai metodi di sicurezza tradizionali a causa della maggiore complessità e dinamicità di tale ambiente. In poche parole, ci sono molti più fattori da tenere in considerazione e diversi rischi per la sicurezza.
Sebbene il funzionamento dei container sembri analogo, in piccolo, a quello delle macchine virtuali (VM), in realtà è differente e richiede pertanto l'adozione di una strategia di sicurezza diversa. Il traffico tra le applicazioni all'interno di un container non oltrepassa la sicurezza della rete perimetrale, ma andrebbe monitorato tra le applicazioni e le rispettive immagini per rilevare potenziali minacce. È possibile utilizzare l'agente di orchestrazione per impostare i criteri di sicurezza per processi e risorse, ma una strategia di sicurezza completa richiede di più.
Le immagini dei container definiscono ciò che viene eseguito in ciascun container. Gli sviluppatori dovrebbero assicurarsi che le immagini non contengano vulnerabilità di sicurezza o codice compromesso e dovrebbero evitare di creare immagini non pertinenti per ridurre al minimo la superficie di attacco del container. Gli strumenti di validazione delle immagini possono bloccare le immagini non attendibili, ma spesso non sono abilitati per impostazione predefinita. È anche possibile analizzare le immagini dopo la creazione, per rilevare immagini dipendenti che potrebbero a loro volta contenere vulnerabilità.
A differenza delle macchine virtuali, è possibile eseguire più container sullo stesso sistema operativo e può verificarsi un attacco ad entrambi i livelli. Un sistema operativo host vulnerabile mette a rischio i propri container, e un container vulnerabile può aprire la strada ad un attacco al sistema operativo host. Applica forzatamente l'isolamento dello spazio dei nomi per limitare l'interazione tra il container e il kernel del sistema operativo host, automatizzando l'applicazione della patch in modo da allinearla alla versione della patch del fornitore. Il sistema operativo dovrebbe anche essere il più semplice possibile e privo di componenti non necessari, come applicazioni o librerie che non sono effettivamente indispensabili per eseguire l'agente di orchestrazione.
L'orchestrazione dei container coordina e gestisce i container, consentendo alle applicazioni containerizzate di scalare e di supportare, in questo modo, migliaia di utenti. L'agente di orchestrazione potrebbe offrire funzionalità di sicurezza già pronte all'uso, per creare regole che Kubernetes applicherà automaticamente e in modo forzato su tutti i pod all'interno del cluster. Questo tipo di funzionalità di base è utile, ma è anche solo un primo passo verso criteri più solidi.
I container possono essere distribuiti su più sistemi e provider di servizi cloud. Ciò rende la gestione degli accessi ancora più importante. I segreti, che includono chiavi API, credenziali di accesso e token, devono essere gestiti in modo rigoroso per garantire che l'accesso al container sia limitato agli utenti che dispongono dei privilegi appropriati. L'accesso degli utenti può essere definito anche dal controllo degli accessi basato sui ruoli, che limita gli accessi in base alle necessità.
Una volta eseguito il deployment, l'attività del container dev'essere monitorata e i team devono poter rilevare e rispondere ad eventuali minacce alla sicurezza. Nordcloud suggerisce di monitorare comportamenti sospetti come chiamate di rete, chiamate API e tentativi di accesso insoliti. I team devono poter contare su procedure di mitigazione predefinite per i pod e devono essere in grado di isolare il container su una rete diversa, riavviarlo o arrestarlo fino a quando non viene individuata la minaccia. Tutto questo può rappresentare un ulteriore livello di sicurezza contro i malware.
I provider di servizi cloud contribuiscono alla sicurezza proteggendo l'hardware e le reti utilizzati per fornire i propri servizi, ma anche gli utenti condividono questa responsabilità per quanto riguarda le applicazioni (gestione degli accessi, configurazione e applicazione delle patch) e il sistema (gestione degli accessi e applicazione delle patch).
Nel 2017, il Dipartimento del Commercio degli Stati Uniti ha pubblicato la sua Application Container Security Guide. Sebbene questa guida abbia già qualche anno, i team che utilizzano i container possono ancora beneficiare delle seguenti raccomandazioni:
-
Adatta la cultura operativa e i processi tecnici dell'organizzazione per promuovere il nuovo modo di sviluppare, eseguire e supportare le applicazioni reso possibile grazie ai container: l'adozione di container potrebbe stravolgere la cultura e le metodologie di sviluppo esistenti, e le pratiche attuali potrebbero non essere idonee in un ambiente containerizzato. Offri al tuo team supporto, istruzione e formazione affinché sappia accogliere nuove modalità di programmazione e operative.
-
Utilizza sistemi operativi host specifici per i container anziché sistemi operativi generici per ridurre le superfici di attacco: un sistema operativo host specifico per i container è un sistema operativo minimalista progettato per eseguire solo container. L'utilizzo di questi sistemi operativi riduce notevolmente le superfici di attacco, offrendo meno occasioni durante le quali i container possono essere compromessi.
-
Raggruppa su un solo kernel del sistema operativo host solo i container con lo stesso scopo, la medesima sensibilità e la stessa esposizione alle minacce, per un ulteriore livello di difesa profonda: la segmentazione dei container offre esattamente questo. Raggruppare i container in questo modo rende molto più difficile, ad un utente malintenzionato, estendere potenziali compromissioni ad altri gruppi. Tutto ciò aumenta anche la probabilità di rilevare e contenere le compromissioni.
-
Adotta strumenti e processi di gestione delle vulnerabilità specifici per i container in modo da prevenire compromissioni delle immagini: le deduzioni degli strumenti tradizionali spesso non sono allineate con i modelli containerizzati e di frequente non riescono a rilevare le vulnerabilità all'interno dei container. Le organizzazioni devono adottare strumenti e processi per validare ed assicurare la conformità alle best practice di configurazione sicura per le immagini, ad esempio centralizzando i report, monitorando ogni immagine e prevenendo l'esecuzione di immagini non conformi.
-
Valuta l'uso di contromisure basate su hardware che forniscano la base per un'elaborazione affidabile: estendi le pratiche di sicurezza a tutti i livelli della tecnologia dei container basando la sicurezza su una radice di attendibilità hardware, come il Trusted Platform Module (TPM).
-
Utilizza strumenti di difesa a runtime compatibili con i container: esegui il deployment di una soluzione di sicurezza del container dedicata e utilizzala per monitorare l'ambiente del container e per rilevare con precisione le attività anomale e dannose al suo interno.
Scopri la terminologia e mettiti subito alla prova.
Scopri le nozioni di base sulla sicurezza DevSecOps.
Inizia ad utilizzare DevSecOps con GitLab.
Prova GitLab
Scopri cosa può fare il tuo team con un'unica piattaforma di distribuzione del software.
Ottieni la prova gratuita