Quali sono le pratiche più importanti?
Partire da immagini di base minime e affidabili
Utilizzare immagini di base adeguatamente mantenute che includano solo i pacchetti, le librerie e le utilità necessari all'applicazione. Ciò riduce la superficie di attacco e semplifica l'applicazione delle patch.
Eseguire la scansione di immagini e dipendenze prima della distribuzione
La scansione deve identificare vulnerabilità note, informazioni riservate esposte ed errori di configurazione evidenti prima che gli artefatti avanzino ulteriormente nella pipeline. Questa misura non esaurisce la sicurezza dei contenitori, ma rimane uno dei controlli più pratici per ridurre i rischi evitabili già nelle fasi iniziali.
Considerare i manifest Kubernetes e l'infrastruttura come codice (IaC) come artefatti critici per la sicurezza
Le definizioni dei carichi di lavoro (ad es. Kubernetes, pod e autorizzazioni), i chart Helm (configurazioni Kubernetes pacchettizzate), Terraform (provisioning dell'infrastruttura, ossia risorse cloud e reti) e altri artefatti di distribuzione (qualsiasi configurazione utilizzata per avviare sistemi) possono introdurre problemi relativi a privilegi, reti ed esposizione molto prima dell'esecuzione.
Applicare il principio del privilegio minimo nel cluster
Il controllo degli accessi RBAC di Kubernetes deve essere progettato attentamente per utenti, account di servizio e carichi di lavoro. Un accesso eccessivo aumenta il rischio di uso improprio e di escalation dei privilegi.
Utilizzare il controllo di ammissione e l'applicazione dei criteri
Le regole di sicurezza sono più efficaci quando vengono applicate automaticamente al momento della distribuzione. I controlli di ammissione possono bloccare le risorse che comportano rischi prima che vengano ammesse nel cluster, mentre i motori di gestione dei criteri possono contribuire a uniformare i requisiti tra team e ambienti.
Segmentare le reti per ridurre il raggio d'impatto
I criteri di rete devono riflettere il modo in cui le applicazioni comunicano effettivamente, limitando al contempo il traffico est-ovest non necessario.
Monitorare il comportamento in fase di esecuzione
La scansione in fase di compilazione non consente di rilevare tutti i problemi che si verificano durante l'esecuzione. I team devono comunque avere visibilità sul comportamento dei processi, sulle connessioni, sul consumo di risorse, sugli scostamenti dai criteri e sulle attività sospette all'interno dei contenitori in esecuzione. Per questo motivo, il monitoraggio in fase di esecuzione deve andare oltre lo stato delle immagini e coprire le applicazioni in esecuzione, le attività dell'orchestratore e le comunicazioni tra contenitori.
Registrare dati sufficienti per svolgere indagini
Gli ambienti basati su contenitori e Kubernetes generano registri a più livelli e questi dati di telemetria sono importanti per il rilevamento e le indagini successive agli incidenti.
In che modo i team DevSecOps devono applicare questi controlli senza rallentare la distribuzione?
L'approccio più efficace consiste nell'applicare il controllo giusto nella fase giusta.
Nella fase di compilazione, è opportuno concentrarsi sull'igiene delle immagini, sulla scansione delle dipendenze, sul rilevamento dei segreti e sulla provenienza del software.
Nella fase di distribuzione, è opportuno concentrarsi sulla convalida dei manifest, sull'applicazione dei criteri e sul controllo di ammissione.
In fase di esecuzione, è opportuno concentrarsi sul monitoraggio del comportamento, sulla generazione di avvisi, sul rilevamento degli scostamenti e sulla capacità di condurre indagini.
Un approccio per fasi è importante perché non tutti i problemi devono essere gestiti nello stesso punto di controllo. Alcuni controlli devono bloccare la distribuzione, mentre altri devono richiedere una verifica, un intervento correttivo o il monitoraggio in fase di esecuzione. I team più esperti distinguono le violazioni che devono essere corrette dai problemi a rischio inferiore, in modo che la sicurezza possa essere applicata senza diventare un collo di bottiglia. Un approccio per fasi è più efficace quando i team utilizzano controlli di qualità per le immagini e il codice dell'infrastruttura, combinandoli poi con controlli in fase di esecuzione e controlli di conformità lungo l'intero ciclo di vita.
Come si traducono le buone pratiche nelle attività quotidiane?
Negli ambienti gestiti in modo efficiente, la sicurezza dei contenitori non è un evento separato alla fine del ciclo di rilascio, ma è parte integrante del modo in cui il software viene sviluppato e distribuito. Gli sviluppatori sanno quali immagini di base sono approvate, le pipeline CI eseguono automaticamente i controlli, i team responsabili della piattaforma definiscono chiaramente le misure di protezione dei cluster e i team di sicurezza analizzano tendenze, eccezioni e vulnerabilità ricorrenti anziché affidarsi esclusivamente a verifiche occasionali.
Questo ritmo operativo è importante perché DevSecOps ha successo quando i controlli sono prevedibili. I team sono molto più propensi ad accettare i requisiti di sicurezza quando questi sono integrati negli strumenti e nei flussi di lavoro, anziché essere presentati come obiezioni nelle fasi finali.
Quali aspetti devono esaminare regolarmente i team?
I programmi efficaci per la sicurezza dei contenitori devono essere mantenuti, non semplicemente avviati. I team devono esaminare regolarmente:
- quali immagini sono approvate e ancora in uso
- se le vulnerabilità precedenti vengono trasferite nelle nuove build
- se le eccezioni ai criteri aumentano nel tempo
- se gli account di servizio e i ruoli continuano a disporre di privilegi eccessivi
- se i criteri di rete rispecchiano ancora il modo in cui comunicano effettivamente i carichi di lavoro
- se gli avvisi in fase di esecuzione generano indagini utili o soltanto rumore
- se la registrazione è sufficiente per la risposta agli incidenti e la relativa analisi successiva.
Questi aspetti da esaminare contribuiscono a prevenire la deriva dei controlli: senza tali verifiche, anche criteri di sicurezza adeguati possono diventare obsoleti o essere applicati in modo incoerente.
Gli errori commessi dalle organizzazioni
Un errore comune consiste nell'applicare in modo eccessivo l'approccio shift-left alla sicurezza, partendo dal presupposto che la fase di esecuzione non sia più importante. L'approccio shift-left è utile, ma i contenitori sono dinamici e la visibilità in fase di esecuzione rimane essenziale per rilevare comportamenti sospetti, autorizzazioni utilizzate in modo improprio e malfunzionamenti dei controlli che emergono solo dopo la distribuzione.
Un altro errore consiste nel considerare il criterio di sicurezza come una fase di revisione esterna anziché integrarlo nel processo di distribuzione. Se gli sviluppatori vengono informati delle violazioni soltanto alla fine del processo, la correzione diventa più lenta e conflittuale.
Un terzo errore consiste nel tentare di proteggere i contenitori senza proteggere la piattaforma che li circonda. I team DevSecOps possono migliorare la qualità delle immagini, ma il controllo degli accessi a livello di cluster, i criteri di ammissione, la registrazione e la segmentazione richiedono comunque uno stretto coordinamento con i team responsabili della piattaforma e della sicurezza.
Che cosa dovrebbe includere una checklist DevSecOps efficace?
Una checklist funzionale include in genere:
- Immagini di base approvate e provenienza delle immagini
- Scansione delle immagini e delle dipendenze nella CI
- Rilevamento dei segreti prima del merge o della build
- Revisione dei manifest e dell'IaC per le configurazioni di sicurezza
- Progettazione di RBAC e account di servizio secondo il principio del privilegio minimo
- Controllo di ammissione per applicare vincoli alla distribuzione
- Criteri di rete per l'isolamento dei carichi di lavoro
- Monitoraggio in fase di esecuzione delle attività di contenitori e cluster
- Registrazione centralizzata e preparazione alle indagini
- Revisione periodica di criteri, eccezioni e regole obsolete.
Punto chiave
Una best practice per la sicurezza dei contenitori per i team DevSecOps consiste in un modello operativo che prevede la protezione degli input, l'applicazione di vincoli alla distribuzione, il monitoraggio del comportamento in fase di esecuzione e un ciclo di feedback sufficientemente rapido da consentire ai team di sviluppo di risolvere i problemi prima che costituiscano un rischio per l'ambiente di produzione.
Integrare la sicurezza dei contenitori nella pipeline DevSecOps
L'efficacia di DevSecOps dipende da controlli di sicurezza integrati nel processo di sviluppo del software. Kaspersky Container Security consente ai team di controllare le immagini dei contenitori, rilevare le vulnerabilità nei contenitori in esecuzione, monitorare il consumo di risorse e le comunicazioni e automatizzare i controlli di sicurezza e conformità.
Fonti e approfondimenti:
