Torna al Blog
11 aprile 2026

Proteggi i cluster Kubernetes con il Cloud Penetration Testing

Probabilmente hai sentito la frase "Kubernetes è il sistema operativo del cloud." Per molti di noi in DevOps e sicurezza, è praticamente vero. È potente, si adatta come un sogno e gestisce l'orchestrazione dei container in un modo che rende la distribuzione di app complesse gestibile. Ma ecco il punto: Kubernetes è anche incredibilmente complesso. Quando hai un sistema con così tante parti mobili—pod, nodi, servizi, ingressi e un enorme server API—la superficie per un errore è enorme.

La maggior parte dei team inizia con una configurazione predefinita o segue una guida rapida. Funziona per mettere online l'app, ma raramente funziona per tenere fuori i cattivi. Una singola policy di controllo degli accessi basato sui ruoli (Role-Based Access Control, RBAC) configurata in modo errato o un container in esecuzione come root può dare a un aggressore un percorso diretto da un server web rivolto al pubblico ai segreti dell'intero cluster. È uno scenario da incubo, ma accade più spesso di quanto si voglia ammettere.

Questo è dove il Penetration Testing cloud entra in gioco. Non puoi semplicemente eseguire uno scanner di rete standard e considerarlo sufficiente. I cluster moderni hanno bisogno di un tipo specifico di esame—uno che comprenda come i container comunicano tra loro e come lo strato di orchestrazione può essere ingannato. Simulando attacchi reali in modo controllato, trovi i buchi prima che lo faccia qualcun altro.

In questa guida, approfondiremo come proteggere i tuoi cluster Kubernetes. Esamineremo le vulnerabilità specifiche che affliggono gli ambienti K8s e perché un approccio cloud-native al Penetration Testing è l'unico modo per stare al passo con i tempi.

Comprendere la superficie di attacco di Kubernetes

Prima di parlare di come testare, dobbiamo capire cosa stiamo effettivamente testando. Kubernetes non è solo un software; è un ecosistema. Se lo tratti come una VM tradizionale, ti stai perdendo la maggior parte del rischio.

Il piano di controllo: il cervello dell'operazione

Il piano di controllo è la parte più sensibile del tuo cluster. Se un aggressore ottiene l'accesso al server API, è finita. Può creare pod, rubare segreti e spegnere l'intera infrastruttura. I rischi comuni qui includono:

  • Accesso API non autenticato: a volte il server API è accidentalmente esposto alla rete internet pubblica senza una corretta autenticazione.
  • Configurazioni Kubelet non sicure: se il Kubelet (l'agente su ciascun nodo) non è protetto, un aggressore può eseguire comandi direttamente sul nodo.
  • Vulnerabilità Etcd: Etcd è dove K8s memorizza tutti i suoi dati. Se il database etcd non è crittografato o limitato, i segreti del tuo cluster sono fondamentalmente seduti in chiaro.

Il piano dati: dove avviene il lavoro

Qui è dove vivono i tuoi pod e container. Mentre il piano di controllo è il cervello, il piano dati è il muscolo—ed è dove si verificano la maggior parte delle violazioni iniziali.

  • Comunicazione Pod-to-Pod: per impostazione predefinita, K8s consente a qualsiasi pod di parlare con qualsiasi altro pod. Se un pod frontend è compromesso, l'aggressore può spostarsi lateralmente a un pod di database backend senza alcuna resistenza.
  • Container privilegiati: alcuni container vengono eseguiti come "privilegiati," il che significa che hanno quasi lo stesso accesso della macchina host. Se quel container viene violato, l'aggressore può "uscire" dal container e assumere il controllo del nodo effettivo.
  • Registri di immagini non sicuri: se stai estraendo immagini da un registro pubblico senza verificarle, potresti distribuire un container che ha già una backdoor installata.

Il livello di rete: l'autostrada invisibile

La rete Kubernetes è una bestia. Tra il CNI (Container Network Interface), i controller Ingress e i Service mesh, ci sono molti posti in cui le cose possono andare male. Un Ingress configurato in modo errato può esporre servizi interni al mondo e una mancanza di Network Policies significa che il tuo traffico "interno" è completamente aperto.

Perché la scansione di sicurezza tradizionale non è sufficiente

Se hai uno scanner di vulnerabilità che controlla le versioni software obsolete, stai facendo il minimo indispensabile. Va bene per la conformità, ma non è sicurezza. Ecco perché la scansione tradizionale fallisce in un mondo Kubernetes.

Rischio statico vs. dinamico

Una scansione statica ti dice che la tua immagine ha un CVE (Common Vulnerabilities and Exposures) noto. È utile, ma non ti dice se quella vulnerabilità è effettivamente raggiungibile. Ad esempio, una libreria potrebbe avere un difetto, ma se la tua applicazione non chiama mai quella libreria, il rischio è zero. Al contrario, il tuo software potrebbe essere aggiornato al 100%, ma le tue autorizzazioni RBAC potrebbero consentire a qualsiasi utente di eliminare l'intero namespace. Uno scanner statico non lo troverà mai.

La complessità del traffico "East-West"

La maggior parte dei firewall tradizionali si concentra sul traffico "North-South"—ciò che entra da internet e ciò che esce. Ma in K8s, il vero pericolo è il traffico "East-West"—la comunicazione tra i pod. Gli scanner tradizionali di solito si trovano al di fuori del cluster. Non possono vedere cosa sta succedendo all'interno della rete pod. Il Penetration Testing cloud, tuttavia, simula un aggressore che ha già guadagnato un punto d'appoggio, permettendoti di vedere esattamente quanto lontano può muoversi.

Effimero e deriva

I container sono pensati per essere di breve durata. Si avviano, fanno il loro lavoro e muoiono. Questo crea un problema di "deriva". Potresti scansionare la tua immagine nella pipeline CI/CD e scoprire che è pulita. Ma una volta che è in esecuzione nel cluster, un exploit di runtime potrebbe cambiare lo stato di quel container. Se non stai eseguendo test attivi basati sul cloud, ti stai affidando a un'istantanea della sicurezza di tre settimane fa.

Approfondimento: vulnerabilità comuni di Kubernetes e come testarle

Per proteggere veramente un cluster, devi pensare come un aggressore. Ecco i modi più comuni in cui i cluster vengono violati e come un penetration tester (o una piattaforma come Penetrify) li identificherebbe.

1. Eccessiva autorizzazione RBAC

Il Role-Based Access Control (RBAC) è il cuore della sicurezza di K8s. Il problema è che è difficile implementarlo correttamente. Molti team assegnano il ruolo cluster-admin agli account di servizio solo per "farlo funzionare".

Lo Scenario di Attacco: Un attaccante trova una vulnerabilità in una web app in esecuzione in un pod. Scopre che l'account di servizio del pod ha i permessi per list secrets su tutto il cluster. Lo usa per rubare il token API per un account più privilegiato, elevando di fatto i suoi privilegi ad amministratore del cluster.

Come Testare:

  • Verifica tutti i ClusterRoleBindings.
  • Cerca qualsiasi account di servizio con permessi * (wildcard).
  • Usa strumenti come kubectl auth can-i per controllare cosa può effettivamente fare un pod specifico.
  • Prova a spostarti da un pod a basso privilegio al server API per vedere se riesci a estrarre segreti da altri namespace.

2. Container Breakouts (Escape to Host)

Lo scopo principale di un container è l'isolamento. Ma se il container è configurato in modo errato, quell'isolamento è una bugia.

Lo Scenario di Attacco: Un container viene eseguito con mount hostPath, il che significa che può vedere il file system dell'host. L'attaccante ottiene l'accesso al pod e si rende conto di poter vedere /etc/shadow sul nodo fisico effettivo. Ruba la password di root del nodo e ora controlla l'hardware.

Come Testare:

  • Verifica la presenza di pod in esecuzione come privileged: true.
  • Cerca mount hostPath, specialmente quelli che puntano a directory sensibili come /etc o /var/run/docker.sock.
  • Prova a eseguire un processo nel container che possa accedere alle interfacce di rete o all'elenco dei processi dell'host.

3. Insecure API Server Access

Il server API è il "cervello". Se è esposto, il cluster è un bersaglio facile.

Lo Scenario di Attacco: Uno sviluppatore apre la porta del server API (6443) al mondo per semplificare il debug da casa. Si dimentica di disattivarla. Un attaccante trova la porta aperta, prova password predefinite comuni o scopre un endpoint non autenticato e inizia a manipolare il cluster.

Come Testare:

  • Esegui una scansione delle porte sugli indirizzi IP pubblici del cluster.
  • Verifica l'accesso non autenticato agli endpoint /api o /healthz.
  • Verifica che TLS sia implementato correttamente e che i certificati non siano scaduti o auto-firmati in modo da consentire attacchi man-in-the-middle.

4. Lack of Network Segmentation

Per impostazione predefinita, K8s è una rete "piatta". Il Pod A può comunicare con i Pod B, C e Z.

Lo Scenario di Attacco: Un pod frontend rivolto al pubblico viene compromesso. L'attaccante utilizza uno strumento come nmap all'interno del pod per scansionare il resto della rete interna. Trova una cache Redis non protetta contenente token di sessione e un database senza password perché "accetta solo traffico interno".

Come Testare:

  • Distribuisci un "attacker pod" in un namespace.
  • Prova a curl o ping i pod in altri namespace.
  • Verifica se le NetworkPolicies sono effettivamente applicate o se sono solo "raccomandate" in un documento da qualche parte.

Un Framework Passo-Passo per il Penetration Testing di Kubernetes

Se hai il compito di proteggere il tuo cluster, non limitarti a fare clic sui pulsanti. Hai bisogno di una metodologia. Ecco un approccio strutturato al cloud Penetration Testing per Kubernetes.

Fase 1: Ricognizione e Raccolta di Informazioni

Prima di attaccare, devi sapere con cosa hai a che fare.

  • Identifica la Distribuzione: È EKS, GKE, AKS o un cluster autogestito? Ognuno ha impostazioni di sicurezza predefinite diverse.
  • Mappa la Superficie: Elenca tutti i punti di ingresso pubblici, i LoadBalancer e l'indirizzo del server API.
  • Analizza le Immagini: Se hai accesso al registro, scansiona le immagini per individuare vulnerabilità note.

Fase 2: Accesso Iniziale

Come fa un malintenzionato a mettere piede all'interno?

  • Application Exploits: Cerca SQL Injection o Remote Code Execution (RCE) nelle app in esecuzione sul cluster.
  • Leaked Credentials: Cerca su GitHub, GitLab o wiki interni file kubeconfig o token di account di servizio trapelati.
  • Supply Chain Attacks: Verifica se eventuali grafici o immagini Helm di terze parti utilizzati non sono attendibili.

Fase 3: Post-Exploitation e Lateral Movement

Una volta dentro un pod, l'obiettivo è muoversi.

  • Service Account Token Theft: Cerca in /var/run/secrets/kubernetes.io/serviceaccount/token. Questo è il "biglietto d'oro" per muoversi all'interno del cluster.
  • Internal Scanning: Usa netcat o curl per trovare altri servizi in esecuzione sull'intervallo IP del cluster interno.
  • DNS Enumeration: Usa il CoreDNS interno per trovare i nomi di altri servizi nel cluster.

Fase 4: Privilege Escalation

Ora, passa da "Sono un pod" a "Sono l'amministratore".

  • RBAC Enumeration: Usa il token rubato per vedere quali permessi hai. Puoi creare pod? Puoi elencare i segreti?
  • Node Escape: Se sei in un container privilegiato, prova ad accedere al filesystem dell'host.
  • Token Impersonation: Verifica se puoi usare kubectl per impersonare altri utenti.

Fase 5: Data Exfiltration e Impact

Il passo finale è dimostrare il rischio.

  • Secret Stealing: Puoi estrarre la password del database o le chiavi API da un K8s Secret?
  • Resource Manipulation: Puoi distribuire un pod crypto-miner senza essere rilevato?
  • Denial of Service: Puoi mandare in crash il server API o eliminare namespace critici?

Implementing a a Continuous Security Model

I Penetration Test una tantum sono ottimi, ma rappresentano un'istantanea nel tempo. In un mondo in cui si effettuano decine di implementazioni al giorno, un test del mese scorso è praticamente inutile. È necessario un modo per rendere la sicurezza continua.

Integrazione dei test nel CI/CD

L'obiettivo è spostare la sicurezza "a sinistra". Ciò significa trovare i difetti prima ancora che il codice raggiunga il cluster di produzione.

  • Infrastructure as Code (IaC) Scanning: Utilizzare strumenti per scansionare i file Terraform o YAML alla ricerca di errori di configurazione (come i container privilegiati) prima che vengano applicati.
  • Image Signing: Utilizzare strumenti come Cosign per garantire che vengano implementate solo le immagini firmate dalla pipeline di build.
  • Admission Controllers: Implementare un Policy Engine (come OPA Gatekeeper o Kyverno) che rifiuti automaticamente qualsiasi pod che non soddisfi gli standard di sicurezza (ad esempio, "Nessun pod in esecuzione come root").

Il ruolo del Penetration Testing automatizzato nel cloud

È qui che l'equilibrio cambia. Non è realistico eseguire un Penetration Test manuale completo ogni volta che si esegue il push di un commit. Ma non ci si può nemmeno affidare esclusivamente agli scanner statici.

Questo è esattamente il motivo per cui abbiamo creato Penetrify. Invece di scegliere tra "test manuali lenti" e "scansioni automatizzate superficiali", Penetrify fornisce una piattaforma cloud-native che automatizza le parti complesse del Penetration Testing. Può simulare il movimento laterale e i percorsi di escalation dei privilegi di cui abbiamo discusso, ma lo fa in un modo che si adatta alla tua infrastruttura.

Utilizzando una piattaforma basata sul cloud, non è necessario passare settimane a configurare l'infrastruttura per testare il cluster. È possibile avviare valutazioni on-demand, vedere esattamente come un aggressore si muoverebbe attraverso i pod e ottenere un piano di correzione chiaro che indichi agli sviluppatori esattamente cosa correggere.

Confronto tra approcci di sicurezza: Scanner vs. Pentest vs. Penetrify

Può essere difficile sapere quale strumento utilizzare quando. Ecco una semplice suddivisione.

Funzionalità Vulnerability Scanner Pentest manuale Penetrify
Velocità Veloce / Istantaneo Lento / Settimane Veloce / On-Demand
Profondità Livello superficiale (CVE) Profondo (catene complesse) Alto (catene automatizzate)
Costo Basso / Abbonamento Alto / Per progetto Moderato / Scalabile
Frequenza Continuo Annuale / Trimestrale Continuo / On-Demand
Contesto Basso (non conosce la logica di K8s) Alto (intuizione umana) Alto (logica K8s-aware)
Correzione Generico "Aggiorna versione" Rapporto dettagliato Guida pratica

Errori comuni durante la protezione di Kubernetes

Anche i team esperti commettono questi errori. Se li vedi nel tuo ambiente, dovresti dare la priorità alla loro correzione immediata.

Errore 1: Fidarsi della rete interna

Molte persone pensano: "Una volta che il traffico è all'interno del cluster, è sicuro". Questo è l'errore più grande che si possa fare. Una volta che un aggressore irrompe in un pod, ha una posizione "affidabile". Se non si dispone di NetworkPolicies, si è essenzialmente fornito all'aggressore una chiave per ogni stanza della casa.

Errore 2: Eccessiva dipendenza dai namespace per la sicurezza

I namespace sono ottimi per l'organizzazione, ma non sono un confine di sicurezza. Per impostazione predefinita, i pod in namespace-a possono comunicare con i pod in namespace-b. Se si utilizzano i namespace per isolare "Prod" da "Dev" sullo stesso cluster, si sta giocando una partita pericolosa. Utilizzare cluster separati o NetworkPolicies molto rigide.

Errore 3: Ignorare Kubelet ed Etcd

Tutti si concentrano sull'API server, ma il Kubelet (sul nodo) e Etcd (il database) sono spesso lasciati completamente aperti. Se un aggressore accede a un nodo, può comunicare con il Kubelet localmente e spesso bypassare completamente le restrizioni dell'API server.

Errore 4: Esecuzione come root

È sorprendentemente comune vedere container in esecuzione come utente root. Se c'è una vulnerabilità nell'applicazione, l'aggressore ha immediatamente i privilegi di root all'interno del container, rendendo una breakout dell'host significativamente più facile. Specificare sempre un runAsUser nel SecurityContext.

Checklist di correzione: protezione del cluster

Hai trovato un sacco di falle durante il tuo ultimo test? Ecco una checklist pratica per riportare il tuo cluster in uno stato sicuro.

Vittorie immediate (basso sforzo, alto impatto)

  • Disabilita Root: imposta runAsNonRoot: true nei contesti di sicurezza dei pod.
  • Limita l'accesso API: posiziona l'API server dietro una VPN o utilizza l'allow-listing IP.
  • Abilita Network Policies: implementa una policy "nega tutto" ed esplicitamente consenti solo il traffico effettivamente necessario.
  • Pulisci RBAC: rimuovi qualsiasi ruolo cluster-admin dagli account di servizio che non ne hanno effettivamente bisogno.

Protezione a medio termine

  • Implementare un motore di policy: installa Kyverno o OPA per applicare automaticamente le regole di sicurezza.
  • Ruotare i segreti: configura un sistema per la rotazione regolare dei segreti K8s e dei token API.
  • Verifica delle immagini: implementa un processo di firma in modo che possano essere eseguite solo immagini verificate.
  • Hardening dei nodi: utilizza un sistema operativo ottimizzato per i container (come Talos o Bottlerocket) per ridurre la superficie di attacco del nodo.

Strategia a lungo termine

  • Architettura Zero Trust: passa a una service mesh (come Istio o Linkerd) per mutual TLS (mTLS) tra tutti i pod.
  • Valutazione continua: integra una piattaforma come Penetrify nel tuo ciclo di sicurezza mensile o trimestrale.
  • Chaos Security Engineering: inizia a interrompere intenzionalmente i controlli di sicurezza in un ambiente di staging per vedere se i tuoi avvisi vengono effettivamente attivati.

Scenario reale: la violazione "Hop-by-Hop"

Per illustrare perché il cloud Penetration Testing è così importante, esaminiamo uno scenario di violazione ipotetico (ma molto comune).

La configurazione: Un'azienda esegue un'applicazione di vendita al dettaglio su un cluster EKS. Hanno un frontend (React), un backend API (Node.js) e un database (MongoDB). Utilizzano un LoadBalancer standard per il frontend.

Il percorso di violazione:

  1. L'ingresso: l'aggressore trova un pacchetto NPM obsoleto nel backend Node.js che consente un attacco Server-Side Request Forgery (SSRF).
  2. Il primo hop: utilizzando SSRF, l'aggressore interroga il servizio di metadati K8s interno e trova il token dell'account di servizio per il pod backend.
  3. L'escalation: l'aggressore scopre che l'account di servizio del pod backend ha i permessi get secrets per l'intero namespace. Recupera la password di MongoDB.
  4. Il pivot: l'aggressore utilizza la password per accedere al database. Una volta dentro, trova un exploit nella versione del database che gli consente di eseguire codice sul nodo sottostante.
  5. La presa di controllo: dal nodo, l'aggressore accede all'API Kubelet e inizia a distribuire pod dannosi in tutto il cluster per estrarre criptovaluta e rubare i dati dei clienti.

Come un Penetration Test avrebbe fermato questo: Un cloud Penetration Test avrebbe segnalato la vulnerabilità SSRF nel backend. Anche se l'SSRF fosse sfuggito, il test avrebbe identificato che l'account di servizio aveva permessi get secrets eccessivi. Inoltre, la mancanza di una NetworkPolicy ha permesso al pod backend di comunicare con il database senza restrizioni. Trovando questi "anelli nella catena", Penetrify ti aiuta a spezzare la catena prima che l'aggressore possa completare il viaggio.

FAQ: Cloud Penetration Testing per Kubernetes

D: Il Penetration Testing rallenta le prestazioni del mio cluster? Generalmente no. Il cloud Penetration Testing professionale è progettato per non essere dirompente. Mentre alcune scansioni pesanti possono causare picchi minori, la maggior parte dei test si concentra su difetti di configurazione e logica piuttosto che su "stress test" dell'hardware. Tuttavia, consigliamo sempre di testare in un ambiente di staging che rispecchi la produzione.

D: Con quale frequenza devo eseguire una valutazione della sicurezza di Kubernetes? Se esegui la distribuzione quotidianamente, dovresti avere una scansione automatizzata ogni giorno. Ma un Penetration Test completo dovrebbe avvenire almeno trimestralmente o ogni volta che apporti una modifica significativa alla tua architettura (come il passaggio a un nuovo CNI o la modifica della tua struttura RBAC).

D: Non posso semplicemente utilizzare un "Security Group" in AWS/Azure/GCP per proteggere il mio cluster? I Security Group gestiscono solo il "perimetro", il traffico Nord-Sud. Non possono vedere cosa sta succedendo all'interno del tuo cluster. Se un pod è compromesso, un Security Group non impedirà a quel pod di attaccare altri pod nello stesso cluster. Hai bisogno di controlli interni come NetworkPolicies e RBAC.

D: Qual è la differenza tra una scansione delle vulnerabilità e un Penetration Test? Una scansione è come controllare se la porta d'ingresso è chiusa a chiave. Un Penetration Test è come cercare di forzare la serratura, arrampicarsi attraverso la finestra e vedere se riesci a trovare il portagioie nella camera da letto. Uno trova i difetti; l'altro dimostra come tali difetti possono essere utilizzati per causare danni reali.

D: Ho bisogno di un team di sicurezza dedicato per utilizzare una piattaforma come Penetrify? Non necessariamente. Sebbene avere esperienza aiuti, Penetrify è costruito per colmare il divario. Fornisce la profondità di un pentester professionista, ma fornisce i risultati in un modo che gli ingegneri DevOps e i responsabili IT possono comprendere e su cui possono agire senza aver bisogno di un dottorato in cybersecurity.

Mettendo tutto insieme

Proteggere Kubernetes non è un compito "una tantum". È un processo continuo di serraggio dei bulloni e controllo delle crepe. La complessità del cloud significa che gli errori sono inevitabili. L'obiettivo non è avere un cluster "perfetto", perché non esiste, ma averne uno resiliente.

Un cluster resiliente è uno in cui l'API è bloccata, in cui i pod hanno i permessi minimi necessari per funzionare e in cui la rete è segmentata in modo che una singola violazione non porti a un collasso totale.

La cosa più pericolosa che puoi fare è presumere di essere sicuro perché hai seguito una guida di installazione. L'unico modo per saperlo con certezza è provare a entrare tu stesso, o meglio ancora, utilizzare uno strumento progettato per farlo per te.

Se sei stanco di indovinare se il tuo cluster è effettivamente sicuro, è ora di andare oltre la scansione di base. Che tu abbia un piccolo team o un'enorme infrastruttura aziendale, hai bisogno di un modo per simulare attacchi reali senza il sovraccarico di un enorme progetto di consulenza.

Sei pronto a trovare i buchi nella tua sicurezza Kubernetes prima che lo facciano i cattivi?

Dai un'occhiata a Penetrify. Forniamo le funzionalità di Penetration Testing cloud-native di cui hai bisogno per identificare, valutare e correggere le vulnerabilità in tempo reale. Smetti di sperare che le tue configurazioni siano corrette e inizia ad averne la certezza. Proteggi la tua infrastruttura, proteggi i tuoi dati e dormi sonni tranquilli sapendo che il tuo cluster è effettivamente resiliente.

Torna al Blog