In un'interpretazione indiretta del principio di Kerckhoff nella crittografia – un sistema crittografico dovrebbe rimanere sicuro anche se tutto ciò che riguarda il sistema, tranne la chiave, è noto all'aggressore.
Questo principio è alla base di un'importante verità sulla sicurezza moderna, ovvero che l'oscurità non è necessariamente protezione. Allo stesso modo, la containerizzazione, un potente strumento nella distribuzione moderna di software, può impedire movimenti laterali all'interno di una rete se implementata correttamente, ma non impedisce che un'applicazione all'interno del container venga compromessa.
I container offrono praticità, ma senza una sicurezza elevata comportano anche dei rischi. Non sorprende che il 60% delle immagini dei container in esecuzione in ambienti di produzione siano piene di vulnerabilità note che creano una porta aperta alle minacce informatiche.
Quindi, come proteggere i container da potenziali violazioni? La risposta inizia con una checklist completa per la sicurezza dei container che affronti le vulnerabilità a ogni livello, assicurando che non rimangano lacune esposte.
In questo post condividiamo con voi una checklist per la sicurezza dei container e alcune delle migliori pratiche che vi aiuteranno a creare una fortezza impenetrabile per proteggere i vostri container.
Che cos'è la sicurezza dei container?
La sicurezza dei container è il processo di protezione delle applicazioni containerizzate, insieme all'infrastruttura che le supporta, dalle vulnerabilità e dalle minacce durante il loro ciclo di vita.
Ciò include la protezione dell'intero stack, dal motore del container, al sistema operativo host e alla piattaforma di orchestrazione (come Kubernetes) fino ai container stessi.
Una parte fondamentale della sicurezza dei container è la scansione continua, a partire dalle immagini di base fino al codice dell'applicazione all'interno dei container.
È necessario monitorare attivamente i rischi di runtime che potrebbero indicare un attacco, assicurandosi al contempo che le immagini dei container utilizzate provengano da fonti affidabili e siano prive di vulnerabilità note.
È inoltre necessario eseguire l'isolamento del container in modo impeccabile. Verificare attentamente la presenza di eventuali punti deboli, come l'escalation dei privilegi, reti configurate in modo errato e così via.
Esistono diverse altre misure che è possibile adottare per eliminare attivamente le minacce dal proprio ambiente. Con una solida serie di protocolli di sicurezza dei container o liste di controllo che includono una serie di pratiche, strumenti e politiche, è possibile salvaguardare l'intero ciclo di vita dei container, dallo sviluppo e l'implementazione al runtime e alla dismissione.
Importanza di una checklist di sicurezza dei container
Gli ambienti container sono un labirinto di parti in movimento. E se si desidera gestirne la sicurezza, è necessario un sistema. Tenere a portata di mano linee guida o checklist può ridurre il tempo necessario per distribuire con successo un container Docker o Kubernetes completamente protetto.
Oltre a far risparmiare tempo, una lista di controllo per la sicurezza offre diversi altri vantaggi:
- Standardizzazione: standardizzare ogni fase del ciclo di vita del container è fondamentale per garantire l'uniformità e prevenire errori critici. Quando le persone lavorano insieme, c'è sempre la possibilità di errori umani. Avere linee guida chiare sulle attività mantiene tutti sulla stessa lunghezza d'onda e aiuta a far funzionare tutto senza intoppi.
 - Copertura completa: Gli ambienti containerizzati hanno diversi elementi costitutivi, come immagini, registri, reti e runtime. È obbligatorio eseguire un controllo prima che questi elementi vengano introdotti nel sistema. Ciò può includere la scansione delle immagini, i controlli di accesso, la segmentazione della rete e il monitoraggio del runtime.
 - Efficienza e coerenza: Una checklist è solo un ulteriore passo per garantire la sicurezza dei container, offrendo alle vostre operazioni un vantaggio in termini di efficacia e coerenza. Inoltre, i vostri team avranno un punto di riferimento sulle migliori pratiche di sicurezza, riducendo così le possibilità di tralasciare un passaggio.
 - Conformità: dato il numero crescente di minacce informatiche e violazioni dei dati, i governi e gli organismi di regolamentazione hanno stabilito requisiti normativi rigorosi. Una checklist ben definita per la sicurezza dei container aiuta a garantire la conformità applicando best practice come controllo degli accessi basato sui ruoli (RBAC), la scansione delle immagini e l'adesione ai benchmark CIS per Docker e Kubernetes. Assicura inoltre la registrazione e il monitoraggio per gli audit e soddisfa i requisiti di framework come GDPR, HIPAA o PCI-DSS.
 - Mitigazione proattiva delle minacce: è sempre una buona idea esaminare due volte l'intero ciclo di vita del container prima di distribuirlo, e una checklist aiuta a raggiungere questo obiettivo. Il primo passaggio garantisce che tutte le misure di sicurezza siano implementate, mentre il secondo serve come fase di convalida per individuare eventuali configurazioni mancanti o minacce emergenti prima che diventino problemi critici.
 
Le 10 checklist chiave per la sicurezza dei container
Ora che abbiamo stabilito l'importanza della checklist per la sicurezza dei container, è il momento di approfondire e capire quali controlli di sicurezza è necessario implementare.
Ecco una lista di controllo per la sicurezza di Docker e Kubernetes che elenca in modo conciso tutti i passaggi che il vostro protocollo di sicurezza deve prevedere:
-  
Sicurezza delle immagini
 
- Utilizza immagini di base affidabili e verificate provenienti da repository ufficiali.
 - Limita chi può inviare/prelevare immagini dal/al registro
 - Esegui regolarmente la scansione delle immagini dei container alla ricerca di vulnerabilità.
 - Blocca la distribuzione di immagini vulnerabili o limita il loro accesso alla rete
 - Rilevare dati sensibili come chiavi o token prima di trasferire le immagini
 - Assicurarsi che le immagini siano minime e contengano solo le dipendenze necessarie.
 - Implementare patch e aggiornamenti automatici delle immagini.
 
-  
Accesso e autorizzazioni
 
- Evitare di eseguire container con privilegi di root.
 - Impedire ai container di ottenere privilegi eccessivi o di effettuare chiamate di sistema non necessarie.
 - Implementare il principio del privilegio minimo per container e utenti.
 - Controllare quali container possono modificare file o directory specifici.
 - Utilizzare PodSecurity Admission per limitare l'accesso a funzionalità e risorse sensibili.
 -  Utilizza il controllo degli accessi basato sui ruoli (RBAC) per limitare l'accesso agli endpoint API critici e alle azioni sulle risorse dei container come 
`get`, `list`, `watch`, o `secrets.` - Utilizza l'autenticazione a più fattori (MFA) per accedere agli ambienti container.
 
-  
Sicurezza di rete
 
- Isolare i container utilizzando la segmentazione di rete (ad esempio, politiche di rete Docker).
 - Proteggere i servizi rivolti al pubblico filtrando il traffico su varie porte e protocolli.
 - Utilizzare comunicazioni crittografate (ad esempio TLS) per i dati in transito.
 - Utilizzare controlli di livello 7 con un service mesh e un'ispezione approfondita dei pacchetti per applicare le politiche HTTP/HTTPS.
 - Limitare il traffico Layer 3 e 4 utilizzando il controllo dell'accesso basato su IP e porta per limitare l'accesso.
 - Certificare che il plugin Container Network Interface (CNI) scelto supporti le politiche di rete Kubernetes.
 - Applicare le politiche di rete in ingresso e in uscita a tutti i carichi di lavoro, con politiche predefinite che negano tutto il traffico.
 - Assicurarsi che i componenti critici (API Kubernetes, API Kubelet, ecc.) non siano esposti pubblicamente.
 - Crittografare il traffico e utilizzare Mutual TLS (mTLS) per autenticare la comunicazione dei carichi di lavoro all'interno dei cluster.
 
-  
Sicurezza runtime
 
- Monitorare il comportamento runtime dei container per individuare attività sospette.
 - Limitare l'accesso dei container alle risorse dell'host utilizzando i moduli di sicurezza Linux.
 - Implementare limiti di risorse (CPU, memoria) per prevenire attacchi denial-of-service.
 - Limitare l'accesso alle API di runtime e ai demoni per impedire la manomissione dei container attivi.
 - Registrare e controllare tutte le attività dei container in tempo reale.
 
-  
Gestione delle vulnerabilità e delle patch
 
- Esegui regolarmente la scansione dei container e dei sistemi host alla ricerca di vulnerabilità.
 - Eseguire la scansione dei file di configurazione per verificarne la conformità nella pipeline di integrazione continua e incorporare controlli automatici per individuare eventuali configurazioni di sicurezza errate.
 - Utilizzare la firma delle immagini (Docker Content Trust) per verificare l'integrità delle immagini dei container.
 - Eseguire analisi statiche del codice per identificare le vulnerabilità nel codice di un'applicazione e nelle sue dipendenze.
 
-  
Gestione dei segreti
 
- Archivia i dati sensibili (chiavi API, password) in strumenti di gestione dei segreti.
 - Evita di codificare in modo rigido i segreti nelle immagini dei container o nelle variabili di ambiente.
 - Effettuare controlli periodici e verificare chi ha accesso all'API Secrets e ruotare le chiavi di crittografia.
 - Crittografare i dati inattivi configurando il server API Kubernetes per crittografare i dati segreti in etcd, per un ulteriore livello di protezione.
 - Configurare token con periodi di scadenza più brevi per ridurre l'impatto di un token compromesso.
 
-  
Sicurezza dell'orchestrazione
 
- Proteggi gli orchestratori di container (ad esempio Docker) con controlli di accesso rigorosi.
 - Abilita il controllo degli accessi basato sui ruoli (RBAC) e garantisci il privilegio minimo per gli utenti e gli account di servizio.
 - Implementare il controllo delle versioni (ad esempio Git) per le definizioni e le configurazioni dei servizi di orchestrazione.
 - Abilitare la registrazione di tutte le richieste API al piano di controllo dell'orchestratore (ad esempio, i log di audit in Kubernetes)
 
-  
Configurazione sicura
 
- Disabilitare servizi o porte non necessari nei container.
 - Utilizzare file system di sola lettura per i container che non richiedono l'accesso in scrittura.
 - Assicurarsi che i container siano stateless e immutabili, ove possibile.
 
-  
Backup e ripristino di emergenza
 
- Eseguire regolarmente il backup delle configurazioni dei container e dei dati delle applicazioni.
 - Garantire la coerenza dei backup utilizzando i comandi di salvataggio snapshot di etcd per eseguire un backup point-in-time.
 - Eseguire simulazioni di disastri in cui si provoca intenzionalmente un guasto a un componente del cluster e verificare che il processo di ripristino funzioni come previsto.
 
-  
Conformità e auditing
 
- Garantire la conformità agli standard di sicurezza del settore (ad esempio, GDPR, PCI-DSS).
 - Verificare regolarmente le politiche di sicurezza dei container, i registri e le configurazioni di controllo degli accessi.
 - Eseguire regolarmente test di penetrazione della sicurezza sugli ambienti dei container.
 
Guida al mercato CNAPP
La guida di mercato Gartner per le piattaforme di protezione delle applicazioni cloud-native fornisce informazioni chiave sullo stato del mercato delle CNAPP.
Leggi la guidaBest practice per la sicurezza dei container
Sebbene vi abbiamo fornito una checklist per la sicurezza dei container, ecco alcune best practice che rafforzano i vostri ambienti containerizzati:
- Utilizzate immagini di base affidabili: Le immagini costituiscono la base dei vostri container. Assicuratevi quindi di ottenerle da una fonte affidabile. Inoltre, optate per uno strumento di scansione automatica delle immagini e di applicazione regolare delle patch. Utilizzate strumenti che si integrano direttamente nella vostra pipeline CI/CD per controllare le immagini di base mentre passano attraverso ogni fase.
 - Implementa il principio del privilegio minimo: mantieni sotto controllo i privilegi dei container. Evita di eseguire i container come root e limita l'accesso alle risorse di sistema per prevenire potenziali vettori di minaccia. Utilizza i benchmark CIS per rafforzare il sistema operativo host assicurandoti che siano in esecuzione solo i servizi minimi e prendi in considerazione strumenti come SentinelOne per ridurre la superficie di attacco a livello di chiamate di sistema. Questo è importante poiché i container condividono il kernel host.
 - Infrastruttura sicura come codice (IaC): Per impedire che configurazioni rischiose raggiungano la produzione, è possibile utilizzare modelli IaC come i manifesti Kubernetes che eseguono la scansione alla ricerca di violazioni delle politiche e configurazioni errate (come ruoli IAM eccessivamente permissivi o porte esposte) prima della distribuzione.
 - Rafforzamento della configurazione cloud: Garantire l'isolamento delle risorse cloud tramite VPC e reti private e rafforzare i servizi cloud utilizzando il controllo degli accessi con privilegi minimi. Implementare il monitoraggio continuo delle configurazioni errate del cloud (come bucket S3 aperti o interfacce di gestione esposte).
 - Ridurre le vulnerabilità esterne: Le vulnerabilità nelle dipendenze di terze parti (rilevate principalmente durante la compilazione) possono introdurre punti deboli nelle applicazioni. È possibile automatizzare la scansione delle dipendenze per CVE noti sia nel sistema operativo che nelle dipendenze delle applicazioni. Aggiornare regolarmente le librerie e i pacchetti.
 - Controlli di benchmark dell'orchestratore e del runtime: Utilizzare controlli di sicurezza dell'orchestratore come i controller di ammissione Kubernetes per applicare le politiche di sicurezza prima della distribuzione. Implementare controlli benchmark runtime (ad esempio, benchmark CIS Kubernetes) per verificare regolarmente sia gli orchestratori che i container in esecuzione.
 - Segmentazione della rete: creare e applicare politiche per controllare il traffico dei container e ridurre la superficie di attacco. La microsegmentazione dei carichi di lavoro containerizzati limita l'impatto di una violazione e migliora la sicurezza della rete.
 - Limitazione delle risorse: Applicando limiti di risorse alla CPU, alla memoria e allo storage di ciascun container, è possibile impedire che qualsiasi container esaurisca le risorse di sistema. Se le risorse di sistema vengono esaurite, potrebbero verificarsi problemi con le condizioni di servizio e altre questioni operative.
 - Monitoraggio e registrazione delle attività: è necessario rispondere alle minacce alla sicurezza in tempo reale. È opportuno dotarsi di strumenti che forniscano visibilità sul comportamento dei container, consentendo di identificare e mitigare rapidamente le minacce.
 - Proteggi la pipeline CI/CD: Assicurati che la tua pipeline CI/CD sia sicura incorporando controlli di sicurezza in ogni fase del ciclo di vita dei container, dal commit del codice alla distribuzione. Ciò contribuisce a prevenire l'introduzione di vulnerabilità durante il processo di sviluppo.
 - Automatizza gli aggiornamenti di sicurezza: Utilizza strumenti di automazione per applicare patch di sicurezza e aggiornamenti ai container e agli orchestratori senza causare tempi di inattività.
 - Conformità e applicazione delle politiche: Controlla regolarmente i container per garantire la conformità alle politiche aziendali e normative. Utilizza strumenti di applicazione delle politiche per applicare le politiche di sicurezza in tutti gli ambienti e mantenere standard di sicurezza e conformità coerenti.
 
Errori comuni da evitare nella sicurezza dei container
Nel febbraio 2019, il team Docker ha annunciato pubblicamente il CVE-2019-5736 . A causa di questa vulnerabilità, gli aggressori potevano sovrascrivere il binario dell'host, ottenere l'accesso al sistema host ed eseguire comandi come root all'interno di un container.
Diverse organizzazioni, tra cui AWS, RedHat e Microsoft Azure, hanno individuato questa vulnerabilità e applicato patch ai propri prodotti.
Nel 2021, la vulnerabilità CVE-2021-3490 ha sfruttato una falla nel kernel Linux relativa al filtro esteso Berkeley Packet Filter (eBPF)..
Questa debolezza ha consentito agli aggressori di eseguire codice arbitrario sull'host dall'interno di container compromessi che avevano accesso a eBPF tramite i profili seccomp predefiniti di Kubernetes. Questi profili non limitavano le chiamate di sistema richieste, lasciando esposte alcune configurazioni.
Questi incidenti dimostrano che una piccola svista nella sicurezza dei container può compromettere l'integrità delle applicazioni ed esporre l'ambiente a rischi.
Altri errori comuni da evitare nella sicurezza dei container sono:
- Presumere che le immagini pubbliche siano sicure può compromettere le distribuzioni. Non fidatevi mai delle immagini esterne senza un'attenta revisione da parte di sviluppatori esperti.
 - Esporre i container a troppi canali aperti aumenta la superficie di attacco. Evitate di lasciare i container esposti con permessi di root e controllate le interazioni di rete per individuare potenziali punti deboli.
 - Non verificare e scansionare le librerie di codice alla ricerca di vulnerabilità prima di integrarle nei container
 - La mancata conservazione di registrazioni accurate dei log può rendere difficile individuare rapidamente i problemi di sicurezza.
 - Ignorare la sicurezza della pipeline CI/CD, ad esempio saltando i controlli di sicurezza durante la compilazione e la distribuzione, può introdurre vulnerabilità nelle prime fasi dello sviluppo.
 
SentinelOne Cloud Workload Security for Containers
È necessaria una strategia unificata su tutti i nodi per proteggere efficacemente tutti gli ambienti containerizzati. Q2 è un fornitore leader di servizi finanziari per oltre 1200 banche, unioni e istituzioni finanziarie. Con oltre 22 milioni di utenti finali e 65.000 container nel cloud pubblico, Q2 ha implementato Cloud Workload Security for Containers di SentinalOne in tutti i suoi ambienti. E come Q2, anche voi potete usufruire di diverse funzionalità e vantaggi di questa soluzione, tenere sotto controllo eventuali anomalie e mantenere un elevato livello di sicurezza.
Caratteristiche e vantaggi principali
- Protezione completa dei carichi di lavoro ibridi in ambienti multi-cloud, inclusi AWS, Azure, GCP e data center on-premise
 - Blocca ransomware, exploit zero-day, crypto miner e attacchi senza file
 - L'architettura agente basata su eBPF offre visibilità in tempo reale a livello di processo del sistema operativo, fornendo una telemetria approfondita senza fare affidamento sui moduli del kernel.
 - Motore AI statico che analizza le architetture dei file sfruttando un set di dati di oltre 500 milioni di firme malware.
 - Motore AI comportamentale che utilizza l'analisi temporale, valutando i modelli nel tempo per rilevare comportamenti dannosi che potrebbero eludere il rilevamento statico
 - Rilevamento in tempo reale degli attacchi alla velocità della macchina su server VMS, container e Kubernetes
 - Ripristino automatico, per la massima disponibilità del carico di lavoro
 - Accelerazione delle indagini e dell'IR, potenziamento della ricerca delle minacce
 - Workload Flight Data RecorderTM.
 - Accelerazione dell'innovazione con una sicurezza runtime che non ostacola il lavoro.
 - Nessuna dipendenza dal kernel. Basso overhead di CPU e memoria.
 
- Architettura eBPF, per stabilità e prestazioni
 - Supporta Docker, container e runtime cri-o
 - Protezione con scalabilità automatica
 - CWPP in tempo reale
 - Supporta servizi K8s autogestiti e gestiti
 - Supporta 14 distribuzioni Linux leader, tra cui Amazon Linux 2023
 - Integrazione con Snyk (acquistabile separatamente)
 
Inoltre, la Cloud-Native Application Protection Platform (CNAPP) di SentinelOne consente di migliorare la sicurezza dei container con funzionalità quali Kubernetes Security Posture Management (KSPM) e Cloud Security Posture Management (CSPM), garantiscono la conformità e la sicurezza delle applicazioni cloud native.
Vedere SentinelOne in azione
Scoprite come la sicurezza del cloud basata sull'intelligenza artificiale può proteggere la vostra organizzazione con una demo individuale con un esperto dei prodotti SentinelOne.
Richiedi una demoFAQs
Per garantire la sicurezza dei container, è necessario adottare un approccio ampio che copra molti livelli. Iniziate con:
- Utilizzate immagini di base affidabili e scansionatele frequentemente alla ricerca di vulnerabilità, mantenendo le immagini al minimo per ridurre la superficie di attacco.
 - Applicare il principio del privilegio minimo limitando i container alle sole autorizzazioni necessarie e non eseguendoli mai come root.
 - Monitorare continuamente l'attività dei container in tempo reale per rilevare comportamenti sospetti ed eseguire scansioni delle vulnerabilità in ogni fase, dalla compilazione all'esecuzione.
 - Infine, assicurarsi che l'host e l'orchestratore siano adeguatamente protetti con patch di sicurezza e politiche di rete per limitare la comunicazione dei container e ridurre le potenziali minacce.
 
La Container Security Initiative (CSI) si compone di sette parti principali. Queste includono:
- Scansione delle immagini
 - Protezione del runtime
 - Controllo degli accessi
 - Protezione delle reti
 - Gestione della conformità
 - Monitoraggio
 - Risposta agli incidenti.
 
La piattaforma SentinelOne Singularity Cloud Workload Security (CWS) svolge un ruolo importante nella sicurezza dei container. Protegge le applicazioni containerizzate per tutta la loro durata. La piattaforma automatizza la protezione durante l'esecuzione, gestisce le vulnerabilità e garantisce la conformità. Funziona con Kubernetes e altri sistemi per monitorare e proteggere i container in tempo reale, sia nei cloud pubblici che in quelli privati.
Il ciclo di vita della sicurezza dei container prevede cinque passaggi principali:
- Sicurezza delle immagini: Inizia con immagini sicure e controllate e verificale spesso per individuare eventuali punti deboli.
 - Sicurezza della compilazione: Assicurati che il processo di compilazione dei container segua regole e metodi sicuri.
 - Sicurezza dell'implementazione: Utilizza regole di sicurezza, assegna i diritti minimi necessari e configura reti sicure quando distribuisci i container.
 - Sicurezza runtime: Tenere sotto controllo i container per individuare eventuali azioni anomale, utilizzare regole di sicurezza runtime e mantenere separate le reti.
 - Messa fuori servizio: Rimuovere i container dall'uso assicurandosi di cancellare tutti i dati privati.
 

