Kubernetes (noto anche come K8s) è un sistema open source che offre un elevato livello di flessibilità e automazione, oltre al bilanciamento del carico. Si tratta di una piattaforma creata per distribuire, scalare e gestire applicazioni containerizzate. È uno dei sistemi open source in più rapida evoluzione che offre ai propri utenti numerosi vantaggi. Tuttavia, essendo un sistema che offre così tanti benefici ai propri utenti, Kubernetes presenta anche diversi rischi e vulnerabilità. L'audit di sicurezza di Kubernetes viene utilizzato per rivelare le possibili vulnerabilità nella configurazione, nelle politiche di rete e nell'impostazione. Lo scopo di questo blog è quello di aiutarti a comprendere l'intero processo di audit di sicurezza di K8 e come dovrebbe essere eseguito.
Che cos'è l'audit di sicurezza Kubernetes?
Kubernetes Security Audit è un processo che consente di verificare il livello di sicurezza della configurazione del cluster K8s. Aiuta a delineare tutte le possibili minacce e vulnerabilità che l'impostazione del cluster potrebbe presentare. Identifica tutte le configurazioni errate esistenti e valuta la conformità agli standard di settore e alle normative aziendali.
In altre parole, l'audit si concentra su quasi tutti gli aspetti della progettazione di un sistema K8s. La configurazione del cluster include la valutazione della configurazione dei componenti del piano di controllo, dei nodi e della rete. Pertanto, copre la configurazione del server API, kubelet e kube-proxy, insieme a tutte le impostazioni di rete e DNS applicate. Per quanto riguarda il controllo degli accessi, l'audit riguarda l'autenticazione degli endpoint, la politica di autorizzazione e l'RBAC.
L'audit delle politiche di rete include la valutazione delle configurazioni delle politiche di rete, delle regole in entrata e in uscita per l'ingress e l'egress e della configurazione delle regole di comunicazione da pod a pod. La sicurezza del carico di lavoro viene misurata attraverso la valutazione del contesto di sicurezza dei pod, delle opzioni di runtime dei container e delle vulnerabilità delle immagini.
Perché è necessario un audit di sicurezza Kubernetes?
L'audit di sicurezza Kubernetes è una necessità per qualsiasi organizzazione. Aiuta le aziende in alcuni aspetti cruciali.
Identificazione e mitigazione dei rischi
Gli ambienti Kubernetes sono estremamente complessi. Sono costituiti da un gran numero di componenti e configurazioni. Di conseguenza, queste configurazioni possono portare a un gran numero di vulnerabilità che possono essere sfruttate contro il sistema. Un audit di sicurezza K8s aiuta a identificare e stimare i potenziali rischi nell'ambiente Kubernetes.
Conformità alle normative
La maggior parte dei settori industriali ha requisiti rigorosi in materia di protezione e sicurezza dei dati. Ad esempio, le organizzazioni sanitarie sono tenute a rispettare la normativa HIPAA e le organizzazioni che gestiscono dati relativi alle carte di pagamento devono aderire allo standard PCI DSS. Gli audit di sicurezza Kubernetes aiutano a garantire il rispetto di questi standard di conformità.
Miglioramento continuo e prevenzione degli incidenti
La probabilità di incidenti e attacchi diminuisce quando è possibile prevenire l'esposizione delle vulnerabilità. Indipendentemente dalla complessità e dalla sofisticatezza delle applicazioni, gli audit di sicurezza possono prevenire gli incidenti identificando implementazioni difettose/configurazioni errate delle pratiche di sicurezza.
Convalida da parte di terzi e creazione di fiducia
Alcuni settori richiedono alle organizzazioni di confermare le loro misure di sicurezza. Ad esempio, l'adozione diffusa del cloud nativo crea la necessità di confermare la sicurezza delle applicazioni dei clienti nel proprio ambiente Kubernetes.
Concetti di sicurezza fondamentali e architettura di K8s
Esaminiamo i componenti e i concetti chiave di Kubernetes per condurre audit di sicurezza efficaci.
-
Il piano di controllo e i componenti dei nodi
L'architettura di Kubernetes è suddivisa in due parti principali: il piano di controllo e i nodi di lavoro. Entrambi hanno componenti specifici, ciascuno dei quali svolge un ruolo fondamentale nel funzionamento e nella sicurezza del cluster.
I componenti del piano di controllo includono kube-Episerver, che è essenzialmente il front-end del piano di controllo di Kubernetes e gestisce e convalida tutte le richieste API. Un altro è etched, un archivio distribuito di chiavi-valori per tutti i dati del cluster.
Il Kube scheduler è responsabile della pianificazione dei pod appena creati sui nodi. Kube-controller-manager esegue i processi di controllo per garantire che lo stato effettivo del sistema corrisponda a quello desiderato. Infine, il cloud controller manager è responsabile dell'integrazione con i provider cloud sottostanti.
Sui nodi di lavoro abbiamo kubelet, un agente che gira sul nodo e garantisce il funzionamento dei container in un pod. Kube-proxy si occupa di mantenere le regole di rete sui nodi e permette la comunicazione tra pod. Infine, il runtime dei container è il software usato per far girare i container come Docker.
-
Oggetti chiave di Kubernetes (pod, distribuzioni, servizi)
Diversi oggetti vengono utilizzati per rappresentare lo stato del cluster e le implicazioni di sicurezza ad essi associate. I pod, la più piccola unità distribuibile, necessitano di contesti di sicurezza e isolamento adeguati. La gestione della distribuzione e del ridimensionamento dei pod richiede un accesso controllato alle loro varianti e strategie di aggiornamento sicure. I servizi che consentono l'accesso alle applicazioni in esecuzione sui pod devono disporre di politiche di sicurezza ben configurate e di un accesso esterno controllato.
I namespace forniscono l'incapsulamento dell'uso delle risorse, fondamentale per la sicurezza multi-tenancy. I segreti consentono l'archiviazione di informazioni sensibili nel cluster. Il loro utilizzo deve essere gestito con attenzione, crittografato e ruotato regolarmente (il che può essere ottenuto utilizzando KMS) per mantenere la sicurezza.
-
Autenticazione, autorizzazione e RBAC
Kubernetes offre supporto per il controllo dell'accesso al cluster. L'autenticazione viene utilizzata per verificare l'identità degli utenti o dei processi che tentano di interagire con il cluster. Ciò avviene con l'aiuto di certificati client, token bearer e provider di autenticazione esterni. L'autorizzazione viene utilizzata per determinare quali azioni gli utenti autenticati sono autorizzati a eseguire all'interno del cluster.
RBAC è il tipo più comune di tecnica di autorizzazione. Consente di definire quali operazioni gli utenti o gli account di servizio possono eseguire sulle risorse del cluster. È importante che sia l'autenticazione che l'autorizzazione siano impostate correttamente perché, se gli oggetti sono configurati in modo errato, tutti gli algoritmi utilizzati per proteggere il cluster diventano inutili.
Inoltre, un controllo regolare delle politiche RBAC aiuta a garantire che nessun utente o account di servizio abbia privilegi eccessivi, riducendo così i rischi di accessi non autorizzati o di escalation dei privilegi tra i processi software.
-
Criteri di rete e sicurezza dei pod
I criteri di rete e i criteri di sicurezza dei pod sono tipi importanti di standard di sicurezza all'interno di Kubernetes. Le politiche di rete definiscono in un cluster Kubernetes cosa costituisce il flusso di traffico verso i pod che appartengono a gruppi diversi e cosa è consentito e cosa non lo è. Essenzialmente funzionano in modo simile a un firewall e controllano i flussi di traffico in entrata e in uscita eseguiti all'interno del cluster.
La sicurezza dei pod è una funzionalità che garantisce il funzionamento regolare e sicuro dei pod. Include diverse API che possono essere utilizzate per regolare ciò che ogni pod è autorizzato a eseguire. Attualmente, l'approccio migliore è quello di utilizzare Pod Security Admission (PSA).
Preparazione per un audit di sicurezza Kubernetes
La pianificazione e l'esecuzione di un audit di sicurezza Kubernetes è un processo critico che deve essere preparato con cura ed eseguito in modo sistematico. Un audit ben strutturato aiuta a identificare potenziali vulnerabilità, valutare i rischi e garantire la conformità alle best practice di sicurezza. Questa sezione delinea i passaggi chiave per pianificare e condurre in modo efficace un audit di sicurezza Kubernetes completo.
1. Definire l'ambito e gli obiettivi dell'audit
Per avviare l'audit di sicurezza, è necessario innanzitutto definirne l'ambito e gli obiettivi. Gli obiettivi possono consistere nell'identificare configurazioni errate, verificare la conformità con gli standard e le normative pertinenti o valutare l'efficienza delle misure già in atto. È importante coinvolgere in questa fase i principali stakeholder, come i team DevOps e di sicurezza, nonché il management, per garantire che gli obiettivi siano in linea con quelli generali dell'organizzazione e con il livello di rischio. Un ambito e degli obiettivi chiaramente definiti costituiscono la base dell'intero processo di audit.
2. Raccogliere la documentazione necessaria e ottenere l'accesso
Il passo successivo dopo aver determinato l'ambito e gli obiettivi dell'audit di sicurezza è quello di raccogliere tutta la documentazione necessaria e garantire l'accesso pertinente all'ambiente Kubernetes. I documenti che devono essere forniti sono la configurazione del cluster, il diagramma di rete, la politica di sicurezza e qualsiasi requisito di conformità.
L'accesso all'ambiente K8s deve essere fornito agli auditor/tester in modo che possano testare le impostazioni del cluster e le politiche RBAC ed esaminare i log alla ricerca di eventuali informazioni sensibili. L'accesso deve essere di sola lettura in modo da non influire sugli ambienti di produzione. La documentazione deve inoltre fornire informazioni sulla versione K8s e sulle sue configurazioni personalizzate. I documenti devono anche fornire informazioni sull'infrastruttura sottostante.
3. Selezionare strumenti e metodologie appropriati
La scelta di strumenti e metodologie pertinenti è importante per condurre un audit di sicurezza Kubernetes. Sono disponibili molti strumenti open source e commerciali per assistere nel processo di audit, ciascuno con vantaggi e punti focali specifici.
La scelta degli strumenti e dei metodi dovrebbe basarsi sull'ambito e sugli obiettivi dell'audit e sulla configurazione Kubernetes specifica dell'organizzazione. Inoltre, spesso è utile utilizzare una combinazione di strumenti e metodi per avere una visione completa dello stato di sicurezza del cluster.
Come condurre l'audit di sicurezza di Kubernetes?
Per completare facilmente un audit di sicurezza K8 è necessario seguire i passaggi riportati di seguito.
- Valutazione iniziale: iniziare con un'analisi completa della documentazione, delle pratiche di sicurezza in atto e di eventuali problemi già individuati relativi alla sicurezza del cluster.
- Revisione della configurazione del cluster: Questa fase prevede la revisione della configurazione dei componenti del piano di controllo, delle impostazioni o dei profili di sicurezza delle configurazioni dei nodi, delle politiche RBAC, delle politiche di rete, delle politiche di sicurezza dei pod o dei controller di ammissione in uso.
- Scansione automatizzata: gli strumenti da eseguire come parte di questa fase includono scansioni kube-bench per la conformità ai benchmark CIS, scanner di vulnerabilità sia per le immagini dei container che per i vari componenti Kubernetes e analizzatori di campo delle politiche di rete.
- Controlli di sicurezza manuali: eseguire ispezioni manuali mirate delle configurazioni critiche e degli script personalizzati.
- Controllo degli accessi e valutazione della sicurezza della rete: esaminare il registro di audit delle autorizzazioni degli utenti e degli account di servizio in uso nel cluster, nonché i metodi di autenticazione utilizzati da tali account di servizio. Dal punto di vista della rete, verificare l'efficacia delle politiche di rete in uso nel bloccare il traffico che non dovrebbe essere consentito.
- Valutazione della sicurezza dei dati e del carico di lavoro: controllare le immagini utilizzate per eseguire i container, i contesti di sicurezza dei pod, i limiti delle risorse in vigore e la gestione delle informazioni sensibili. Assicurarsi che i dati siano crittografati sia inattivi che durante il trasferimento.
- Registrazione, monitoraggio e verifica della conformità: esaminare la configurazione standard di monitoraggio, registrazione e avviso. Controllare gli avvisi, i canali Slack e i registri aggregati in una posizione centrale. Se del caso, verificare la conformità del cluster agli standard di settore o alle best practice o a normative specifiche.
Azioni post-audit e rimedi
Una volta completato l'audit di sicurezza K8, è necessario adottare alcune misure post-audit, che includono l'attuazione dei risultati e l'implementazione dei miglioramenti necessari. In questa sezione tratteremo tutte queste misure:
Come documentare i risultati e dare priorità ai rischi
Dopo aver condotto un audit di sicurezza Kubernetes, tutti i risultati devono essere adeguatamente documentati e i rischi ad essi associati devono essere classificati in ordine di priorità al fine di attuare i miglioramenti necessari. Un rapporto dettagliato e chiaro deve coprire tutte le vulnerabilità identificate, le configurazioni errate e le potenziali minacce e deve includere tutti i dettagli tecnici e il loro impatto.
Per valutare i rischi, è necessario assegnare loro un punteggio utilizzando un sistema integrato di valutazione del rischio che tenga conto di fattori quali la probabilità, l'impatto potenziale e il possibile sfruttamento. Al fine di bilanciare la gravità di ciascun rischio e lo sforzo e le risorse necessarie, i risultati devono essere raggruppati e deve essere creata una matrice di prioritizzazione. Come risultato di questa fase, i risultati possono essere convertiti in un elenco di miglioramenti attuabili.
Fasi per la correzione delle vulnerabilità identificate
Una volta documentati e classificati in ordine di priorità i rischi, sviluppare un piano di correzione dettagliato che delinei le misure specifiche per affrontare ciascuna vulnerabilità. Iniziare con correzioni ad alto impatto e basso sforzo per dimostrare progressi immediati, quindi affrontare sistematicamente le vulnerabilità, iniziando dalle questioni con la massima priorità. Ciò potrebbe comportare l'applicazione di patch e l'aggiornamento dei componenti, il perfezionamento delle politiche RBAC, l'implementazione di politiche di rete, il miglioramento della gestione dei segreti e il rafforzamento dei meccanismi di autenticazione.
Testare accuratamente ogni rimedio in un ambiente di staging prima di applicarlo alla produzione ed eseguire scansioni mirate per verificare che le vulnerabilità siano state risolte con successo.
Importanza del monitoraggio e del miglioramento continui
È importante tenere sempre presente che la sicurezza di Kubernetes è un processo continuo. È necessario implementare solide soluzioni di monitoraggio per rilevare in tempo reale le anomalie di sicurezza ed essere in grado di segnalare le deviazioni riscontrate nei casi d'uso più comuni. È necessario programmare regolari routine di valutazione della sicurezza, nonché scansioni di sicurezza delle app e della pipeline CI/CD. Tenete sempre d'occhio le attuali vulnerabilità di Kubernetes e le minacce emergenti e aggiornate periodicamente il vostro piano di risposta agli incidenti.
Assicuratevi di stabilire un ciclo di feedback all'interno del vostro team per raccogliere e utilizzare le conoscenze sui rischi di sicurezza di Kubernetes e prestate sufficiente attenzione all'apprendimento e alla formazione.
Best practice per l'audit di sicurezza di Kubernetes
Di seguito sono riportate alcune delle best practice da seguire per un audit efficiente:
1. Utilizzare gli spazi dei nomi per isolare le risorse e applicare i confini
Gli spazi dei nomi forniscono una separazione logica delle risorse all'interno di un cluster Kubernetes. Gli spazi dei nomi configurati correttamente possono isolare i carichi di lavoro, limitare il raggio d'azione di potenziali violazioni da parte di un aggressore e semplificare controllo degli accessi. Verificare regolarmente le configurazioni degli spazi dei nomi e l'allocazione delle risorse importanti per garantire un isolamento adeguato.
2. Crittografare i dati etcd inattivi e in transito
etcd è un archivio chiave-valore coerente e altamente disponibile utilizzato come archivio di supporto di Kubernetes per tutti i dati del cluster. Poiché etcd memorizza dati cruciali del cluster, inclusi segreti e token di accesso, è un obiettivo molto allettante per un aggressore. Implementare la crittografia a riposo per etcd per proteggere i dati da accessi non autorizzati. Assicurarsi che tutte le comunicazioni con etcd siano crittografate in transito utilizzando il protocollo TLS per impedire intercettazioni o attacchi man-in-the-middle.
3. Implementare politiche di rete per la comunicazione tra pod
Utilizzare politiche di rete che fungano da firewall per la comunicazione tra pod all'interno del cluster. Verificare e aggiornare regolarmente le politiche di rete per garantire che sia consentito solo il traffico necessario tra i pod utilizzando il principio del privilegio minimo. Ciò limita la potenziale violazione e il movimento laterale dopo un attacco.
4. Utilizzare i controller di ammissione per applicare le politiche di sicurezza
I controller di ammissione intercettano una richiesta a un server API Kubernetes prima che un oggetto venga memorizzato. Implementare controller di ammissione personalizzati seguendo le best practice e controllare regolarmente la loro configurazione per applicare le politiche di sicurezza, ad esempio rifiutando la creazione di container privilegiati o accettando solo le immagini provenienti dai registri approvati.
5. Implementare la sicurezza runtime con strumenti come Falco o Seccomp
Controllare la configurazione e l'allocazione delle risorse per gli strumenti di sicurezza runtime per i container. Questi strumenti rilevano potenziali violazioni della sicurezza durante il runtime dei container utilizzando chiamate di sistema o analizzando il comportamento dei container.
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 demoConclusione
In questo blog comprendiamo l'importanza degli audit di sicurezza Kubernetes nel processo di mantenimento di ambienti containerizzati sicuri. La pratica di audit viene utilizzata per determinare e risolvere le vulnerabilità esistenti nell'architettura Kubernetes, che possono verificarsi nel pannello di controllo, RBAC, carichi di lavoro e politiche di rete. È necessario seguire le best practice per evitare rischi significativi durante l'implementazione, e deve trattarsi di un processo continuo piuttosto che di un'attività una tantum.
Con il crescente utilizzo di Kubernetes nelle infrastrutture moderne, la pratica di audit accurati e tempestivi diventa sempre più critica. Sulla base della presente guida, le organizzazioni saranno in grado di ridurre sostanzialmente i rischi e proteggere le applicazioni e i dati nei container.
FAQs
L'auditing in Kubernetes si riferisce al processo di acquisizione e analisi delle richieste API al cluster. L'audit fornisce una panoramica completa di tutte le attività sul cluster, inclusi chi ha effettuato quali richieste, quando le ha effettuate e quali richieste sono state effettuate. Questi log vengono in genere utilizzati per il monitoraggio della sicurezza, la verifica della conformità e il debug.
Per monitorare la sicurezza del cluster K8s, è necessario abilitare e configurare la registrazione degli audit, impostare il monitoraggio in tempo reale, applicare il monitoraggio delle politiche di rete, eseguire regolarmente la scansione delle vulnerabilità e impostare avvisi per attività sospette. Per un monitoraggio più completo della sicurezza del cluster, prendere in considerazione l'utilizzo di piattaforme di sicurezza Kubernetes speciali.
Per abilitare l'auditing di Kubernetes, è necessario configurare il server API con un file di criteri di auditing e specificare il percorso del log di auditing utilizzando il parametro –audit-log-path. È anche possibile impostare la rotazione dei log definendo i parametri –audit-log-manage, –audit-log-max size e –audit-log-maxbackup. In alternativa, è possibile configurare il backend webhook per la registrazione esterna se si memorizzano i dati di audit con un sistema esterno. Dopo aver effettuato tutte le impostazioni, ricaricare il server API per applicare la configurazione e avviare l'acquisizione dei dati di auditing.
Per controllare il log di audit di Kubernetes, è possibile visualizzare il file audit.log, che di solito si trova in /var/log/kubernetes/audit.log, con strumenti come cat, grep o tail. Per un sistema di registrazione più avanzato, puoi utilizzare lo stack ELK integrato con Kubernetes.
