- Le fughe dei container sfruttano bug del kernel, capacità eccessive o configurazioni errate per interrompere l'isolamento e ottenere l'accesso a livello di host.
- Il monitoraggio di basso livello delle chiamate di sistema, dell'accesso ai file, delle capacità e dei socket è essenziale per rilevare le tecniche di escape in tempo reale.
- I privilegi minimi, le immagini rafforzate e la rigida segmentazione della rete riducono significativamente i percorsi praticabili per la suddivisione dei container.
- Combinando le regole in stile Falco, la visibilità CNAPP/EDR e i manuali degli incidenti, la fuga dal container diventa un rischio controllabile, non catastrofico.
La fuga dai container è diventata uno di quegli argomenti che tengono svegli di notte i team cloud e delle piattaforme Perché un singolo pod mal configurato o un kernel obsoleto possono trasformare un carico di lavoro isolato in un ponte diretto verso l'host sottostante. Quando ciò accade, un aggressore non è più confinato in un unico contenitore: può spostarsi tra i nodi, accedere ai dati di altri tenant o persino assumere il controllo dell'intero cluster.
Capire come funzionano realmente le escape dei container, dagli interni di Linux ai segnali di runtime e ai rilevamenti EDR, è la differenza tra una parola d'ordine spaventosa e un rischio che puoi effettivamente gestireIn questa guida esamineremo cos'è un container a livello di sistema operativo, come si verificano le fughe nella pratica, le principali tecniche di exploit osservate in circolazione e come rilevarle e prevenirle con il monitoraggio delle capacità, le regole Falco, le piattaforme CNAPP e il buon vecchio rafforzamento e segmentazione.
Cos'è un container escape e perché è importante?
Un'escape del contenitore si verifica quando un aggressore riesce a rompere l'isolamento logico che dovrebbe separare un contenitore dall'host e dagli altri contenitoriInvece di essere confinato nei propri namespace e cgroup, l'aggressore ottiene la possibilità di eseguire codice con contesto a livello di host, spesso con privilegi elevati o completi.
I contenitori differiscono dalle macchine virtuali in un modo fondamentale: condividono tutti lo stesso kernel hostTecnologie come gli spazi dei nomi Linux (PID, mount, rete, ecc.), i cgroup e le funzionalità suddividono il kernel in numerose viste isolate, ma se una vulnerabilità o una configurazione errata consente a un aggressore di oltrepassare tali limiti, la compromissione può estendersi ben oltre il contenitore originariamente violato.
Da una prospettiva aziendale, il raggio d'azione di una fuga riuscita è ciò che la rende così pericolosaUn singolo contenitore vulnerabile rivolto verso Internet può portare al furto di dati sensibili, all'implementazione di cryptominer su larga scala, all'interruzione di servizi critici e a gravi problemi di conformità in ambienti multi-tenant o regolamentati.
Gli avversari in genere utilizzano l'escape del container come un passaggio in una catena di attacchi più ampia: finiscono in un contenitore con privilegi bassi (tramite bug dell'app, credenziali deboli o un problema della catena di fornitura), aumentano i privilegi all'interno del contenitore, quindi si diramano verso l'host per ruotare lateralmente, raccogliere credenziali o stabilire una persistenza durevole come un rootkit a livello di kernel.
Come funzionano i contenitori sotto il cofano
Per comprendere veramente le tecniche di escape, è necessario prima avere un modello mentale di come i container Linux isolano i processiUn contenitore è essenzialmente un albero di processi i cui attributi (spazi dei nomi, capacità, cgroup, profilo seccomp, ecc.) sono stati modificati da un runtime del contenitore come containerd, Docker o CRI-O e più in generale tecnologie di containerizzazione.
Quando un contenitore viene avviato, il runtime genera un processo e lo trasforma nel processo "init" del suo piccolo universo: ottiene il proprio namespace PID, il namespace di mount, il namespace di rete e altro ancora, tutti impostati dal kernel. Questo processo esegue quindi qualsiasi comando definito nella configurazione dell'immagine (ad esempio, ENTRYPOINT/CMD del Dockerfile).
Le capacità sono il modo di Linux di tagliare la tradizionale root onnipotente in parti più piccole con permessi. Invece di "root può fare tutto", il kernel definisce flag come CAP_SYS_ADMIN, CAP_NET_ADMIN, CAP_SYS_PTRACE, CAP_SYSLOG e decine di altre. Ogni thread ha una serie di capacità (permesse, effettive, ereditabili) che definiscono quali operazioni privilegiate può eseguire.
Gli spazi dei nomi rispondono alla domanda "dove può un processo esercitare i suoi poteri?"Ad esempio, lo spazio dei nomi PID rende il PID 1 all'interno del contenitore non correlato al PID 1 sull'host, e lo spazio dei nomi mount fornisce al contenitore una propria vista del file system. Anche se un processo ha una capacità come CAP_KILL, in uno spazio dei nomi PID limitato può solo uccidere i processi che esistono in quello spazio dei nomi.
I Cgroup completano tale isolamento controllando quante risorse un contenitore può bruciare – Condivisioni CPU, limiti di memoria, I/O e altro ancora. In combinazione con filtri seccomp (liste di autorizzazione/negazione delle chiamate di sistema) e LSM come AppArmor o SELinux, si ottiene l'isolamento a strati su cui si basa la moderna sicurezza dei container.
Perché gli aggressori cercano di fuggire dai container
Una volta che un avversario compromette un contenitore, scopre rapidamente che la vita al suo interno è piuttosto limitata: file system limitato, visualizzazione di rete limitata, forse non root e solitamente nessun accesso diretto ad altri carichi di lavoro.
La fuga verso l'host rimuove quelle barriere di sicurezzaSe possono eseguire comandi negli spazi dei nomi iniziali dell'host, possono vedere tutti i processi, montare qualsiasi file system, raccogliere credenziali da luoghi come /root/.ssh o agenti di metadati cloud e passare ad altri contenitori o VM.
Le fughe consentono anche una persistenza difficile da sradicareInvece di rilasciare una backdoor solo in un contenitore temporaneo, un aggressore potrebbe installare un modulo kernel, manomettere i runtime del contenitore come runc o containerd o distribuire un daemonset che garantisca l'esecuzione di un pod con backdoor su ogni nodo in un cluster Kubernetes.
Dal punto di vista del rilevamento, molti segnali rivelatori di fuga dal contenitore si sovrappongono ai classici comportamenti di escalation dei privilegi e di movimento laterale – caricamento del modulo kernel, sospetto mount/unshare/setns utilizzo, accesso diretto ai socket di runtime, sfruttamento SUID e accessi anomali ai file nei percorsi host esposti all'interno dei container.
Percorsi principali per l'uscita dai container: vulnerabilità, privilegi e configurazioni errate
La maggior parte degli scenari di fuga dai container nel mondo reale rientrano in tre ampie categorie: sfruttando vulnerabilità (del kernel o runtime), abusando di contenitori eccessivamente privilegiati o traendo vantaggio da configurazioni errate come mount pericolosi e socket esposti.
Vulnerabilità del kernel e del runtime del contenitore
Poiché ogni contenitore condivide il kernel host, un singolo bug del kernel può offrire una via di fuga direttaProblemi noti come Dirty COW (CVE‑2016‑5195) e Dirty Pipe (CVE‑2022‑0847) sono bug di escalation dei privilegi locali che consentono agli aggressori di scrivere su mapping di sola lettura e file arbitrari, spesso consentendo loro di manomettere i binari o la configurazione dell'host dall'interno di un contenitore.
Un bug particolarmente critico specifico del contenitore era CVE-2019-5736 in runcPermetteva a un processo in un container di sovrascrivere il binario runc sull'host all'avvio o all'esecuzione del container, consentendo all'aggressore di eseguire il codice a livello di host. Poiché runc è alla base di Docker, Kubernetes e altre piattaforme, l'impatto è stato di vasta portata.
Più recentemente, divulgazioni come “Leaky Vessels” (ad esempio, CVE‑2024‑21626) hanno dimostrato che anche i sistemi di build e i percorsi di avvio sono un terreno fertileLe vulnerabilità nella logica di inizializzazione di BuildKit o runc consentono agli aggressori di sfondare durante la creazione dell'immagine o l'avvio anticipato del container, prima che altre difese possano essere completamente applicate.
I daemon di runtime dei container come containerd, Docker Engine o CRI‑O hanno avuto la loro quota di bugAd esempio, CVE‑2022‑23648 nel plugin CRI di containerd consentiva agli avversari che potevano creare container di montare percorsi host sensibili (come /root/.ssh) in un contenitore e leggono dati che non dovrebbero mai vedere, fornendo il trampolino di lancio per una fuga completa.
CVE notevoli di fuga dai container e come mitigarli
-
CVE‑2019‑5736 (runc): consentito riscrivere il binario runc dell'host da un contenitore, con un impatto su Docker, Kubernetes e altri stack basati su runc. Le misure di rafforzamento includono patching aggressive, scansione delle immagini per strumenti di exploit e monitoraggio in fase di esecuzione delle modifiche ai binari runc.
-
CVE‑2016‑5195 (mucca sporca): una condizione di competizione nella copia su scrittura che consente ai processi non privilegiati di ottenere l'accesso in scrittura alle mappature di sola letturaDall'interno di un contenitore, potrebbe essere utilizzato in modo improprio per alterare i file host se fossero esposti tramite mount.
-
CVE‑2022‑0847 (Tubo sporco): un altro bug del kernel che consente scritture non autorizzate sui file, compresi quelli montati in sola lettura nei contenitoriNon garantisce automaticamente un escape, ma si concatena bene con mount privilegiati o configurazioni errate in fase di esecuzione.
-
CVE‑2024‑21626 e problemi correlati ai “vasi che perdono”: difetti in BuildKit e runc che esponevano le risorse host durante la compilazione dell'immagine o l'avvio del contenitore, dimostrando che la pipeline di build stessa può essere parte della superficie di attacco.
Le mitigazioni per questa intera classe di problemi ruotano attorno all'igiene delle patch e alle scelte architettoniche: mantenere i kernel host aggiornati, utilizzare immagini di base minime o senza distribuzione per ridurre la superficie di attacco, preferire runtime sandbox o supportati da VM per carichi di lavoro ad alta sensibilità e monitorare costantemente chiamate di sistema sospette e scritture di file che sembrano tentativi di exploit del kernel.
Capacità eccessive e contenitori privilegiati
Sono state inventate delle capacità per ridurre la potenza della radice, ma in pratica i “piccoli pezzi” spesso vengono ricomposti insiemeGli sviluppatori sotto pressione per "far funzionare le cose" spesso concedono CAP_SYS_ADMIN o semplicemente eseguire i contenitori come --privileged, ripristinando efficacemente il potere delle radici all'interno del contenitore.
CAP_SYS_ADMIN è notoriamente troppo potente: consente di montare file system, creare o unire namespace (unshare, setns), modificando i cgroup e altro ancora. Con la giusta combinazione di mount e namespace, un aggressore con questa capacità può accedere allo spazio dei nomi iniziale dell'host e ottenere visibilità globale.
CAP_NET_ADMIN è altrettanto ampio da una prospettiva di networkingPuò essere utilizzato per riconfigurare le interfacce, manipolare le regole di iptables e abilitare la modalità promiscua. In una escape chain, potrebbe essere utilizzato impropriamente per intercettare il traffico, bypassare le policy di rete o aggirare la segmentazione.
Eseguire un contenitore in modalità completamente privilegiata equivale sostanzialmente a dire "trattalo come parte dell'host"Ottiene tutte le funzionalità, può accedere ai dispositivi host e spesso bypassa i profili seccomp. Per molte catene di attacco, il passo più difficile è semplicemente trovare un container mal configurato e utilizzarlo come trampolino di lancio.
Gli strumenti moderni come Falco hanno iniziato a esporre capacità a livello di thread per il rilevamentoOra puoi ispezionare campi come thread.cap_effective, thread.cap_permitted e thread.cap_inheritable in fase di esecuzione e attivano avvisi ogni volta che un processo con capacità rischiose esegue azioni sospette.
Configurazioni errate: montature, socket e trucchi di registro
Una quota sorprendentemente ampia di fughe di container non si basa su 0-day esotici ma su semplici configurazioni errateQuando gli operatori montano percorsi host sensibili nei container o espongono socket Unix interni, gli aggressori possono spesso accedervi senza problemi.
Un classico esempio sono i mount hostPath o volumi pericolosiSe un contenitore ottiene l'accesso in lettura-scrittura a directory come /etc, /proc, /sys or /var/run dall'host, il modello di isolamento crolla in gran parte. Scrivendo a /proc/sys o sysfs può modificare i parametri del kernel; accesso ai file di configurazione dell'host come /etc/shadow può far trapelare le credenziali.
Il socket Docker (/var/run/docker.sock) e altri socket di runtime sono un'altra configurazione errata dolorosaMontandolo all'interno di un contenitore, chiunque controlli il contenitore ottiene il controllo quasi completo del demone Docker. Tramite semplice curl --unix-socket chiamate, un aggressore può elencare i contenitori, creare un nuovo contenitore privilegiato che monta la radice host e uscire da quel contenitore helper.
In Kubernetes, anche la gestione dei log di kubelet e i mount dei log degli host sono stati abusatiSe un pod ha l'host /var/log bind-mounted e un aggressore può manipolare i collegamenti simbolici del log e leggere i log tramite l'API, potrebbe essere in grado di puntare un collegamento simbolico del log a file host arbitrari e indurre kubelet a restituire, ad esempio, /etc/shadow contenuto.
Anche un comportamento SUID apparentemente semplice può svolgere un ruoloNegli ambienti in cui il contenitore condivide lo spazio dei nomi utente con l'host, l'impostazione del bit SUID su un binario in una directory condivisa dall'interno del contenitore può essere utilizzata in seguito da un utente host con privilegi bassi per eseguire tale programma con privilegi di root sull'host.
Tecniche di fuga dai contenitori di cemento osservate in natura
L'ingrandimento dalle categorie alle tecniche specifiche aiuta a riconoscere i modelli nei report di telemetria e nelle minacceDiverse famiglie di metodi sono state ripetutamente dimostrate dai ricercatori e utilizzate in test di penetrazione o attacchi reali.
Helper in modalità utente e release_agent trucco
Il kernel Linux espone una funzione, call_usermodehelper, per avviare programmi userland con privilegi elevati in risposta agli eventi dello spazio kernelNelle giuste condizioni, i file controllati dall'utente possono influenzare il programma da eseguire, trasformando un meccanismo legittimo in un vettore di fuga.
Cgroups v1 release_agent è l'esempio più noto di questo schemaQuando un cgroup diventa vuoto e notify_on_release è abilitato, il kernel esegue il binario puntato da release_agent file. Se un aggressore all'interno di un contenitore può montare e manipolare il file system cgroup con privilegi sufficienti, può puntare release_agent in un eseguibile arbitrario sull'host.
Una tipica sequenza di exploit si svolge più o meno così:: crea e monta una directory cgroup, abilita notify_on_release, impostato release_agent al percorso di uno script dannoso nello spazio dei nomi dell'host, quindi svuota l'elenco dei processi del cgroup. Il kernel esegue cortesemente lo script dell'attaccante con privilegi di root sull'host.
Il rilevamento richiede sia la comprensione semantica dei percorsi di supporto in modalità utente sia il contesto relativo all'origine delle modificheUn approccio robusto mappa tutti call_usermodehelper chiama i siti, identifica quali possono essere influenzati dai file in modalità utente e quindi monitora le scritture su tali file quando provengono dai contenitori, segnalando le modifiche sospette.
Escalation dei privilegi all'host tramite bit SUID
La tecnica SUID non è una fuga di container "pura" perché presuppone che l'attaccante abbia già un accesso all'host, ma è spesso concatenato con l'accesso al contenitore per passare dagli utenti host con restrizioni alla root.
Il trucco si basa su directory condivise tra host e contenitore e su uno spazio dei nomi utente condivisoDall'interno di un contenitore in esecuzione come root, un aggressore rilascia un eseguibile in una directory visibile su entrambi i lati (ad esempio, un volume condiviso) e imposta il bit SUID con chmod u+s.
Successivamente, un utente non root sull'host esegue quel binario e ottiene i privilegi di root sull'host, poiché il bit SUID viene interpretato nel contesto host. Il contenitore viene utilizzato come luogo pratico per preparare il payload SUID senza le restrizioni che potrebbero esistere per quell'utente host.
La visibilità dell'abuso di SUID si concentra su tre momenti: creazione di un eseguibile in un percorso condiviso, impostazione dei bit SUID/SGID da un contenitore ed esecuzione di tale file sull'host da parte di un account non root. Gli strumenti di sicurezza EDR e runtime possono correlare questi passaggi per generare avvisi ad alta fedeltà.
Abuso di socket in fase di esecuzione: Docker e containerd
Gli ambienti container spesso si basano su un'architettura client/server, in cui gli strumenti CLI o gli orchestratori comunicano con i daemon tramite socket Unix. Esempi inclusi /var/run/docker.sock per Docker o /run/containerd/containerd.sock per containerd.
Se questi file socket vengono montati all'interno di un contenitore, tale contenitore può effettivamente fungere da client di amministrazioneUn aggressore che compromette il contenitore può inviare richieste API direttamente al runtime, elencando i contenitori, avviando e arrestando i carichi di lavoro o creando un contenitore privilegiato completamente nuovo con montaggi host.
Utilizzando uno strumento generico come curl, è banale raggiungere l'API remota Docker tramite un socket Unix: domanda /containers/json per enumerare i contenitori, inviare a /containers/create con una definizione JSON per creare un helper privilegiato, quindi chiamare /containers/{id}/start per avviarlo. Quel contenitore helper può montare il file system root dell'host e fornire all'aggressore un accesso interattivo.
I difensori possono cercarlo in diversi modi: monitoraggio dell'accesso ai socket Unix runtime dai processi containerizzati, rilevamento di processi sospetti curl --unix-socket o invocazioni CLI runtime che prendono di mira tali socket e avvisano su modelli di creazione di contenitori insoliti (ad esempio, hostPath monta su /, --privileged nelle specifiche di Kubernetes).
Trucchi specifici di Kubernetes: log mount e pod escape
In Kubernetes, alcuni attacchi prendono di mira i comportamenti kubelet e le astrazioni di Kubernetes piuttosto che i concetti Docker grezziPod che montano directory host come /var/log or /var/lib/docker sono particolarmente interessanti per gli avversari.
Un metodo dimostrato abusa del modo in cui kubelet risolve i collegamenti simbolici quando restituisce i logOgni pod riceve un file di registro sotto /var/log che crea un collegamento simbolico nella directory del contenitore sotto /var/lib/docker/containersSe un aggressore può creare o modificare i collegamenti simbolici in /var/log tramite un mount hostPath, possono reindirizzare un "log" per puntare a un file arbitrario (ad esempio, /etc/shadow).
Quando un account utente o di servizio con autorizzazioni di lettura del registro chiama kubectl logs o l'API corrispondente, kubelet segue il collegamento simbolico e restituisce il contenuto di tale destinazioneCon un po' di creatività, l'aggressore può esporre ampie porzioni del file system host tramite una serie di "log" collegati tramite collegamenti simbolici.
Le rilevazioni qui combinano obiettivi di rete e file system: monitora le richieste HTTP di lettura dei log di Kubernetes per individuare modelli di percorso anomali e contemporaneamente controlla la creazione o la modifica di collegamenti simbolici nell'host /var/log che hanno origine da processi containerizzati.
Montaggi di host sensibili e furto diretto di dati
A volte un escape consiste semplicemente nella lettura o modifica dei dati host dall'interno di un contenitore senza mai eseguire codice a livello di hostI mount non configurati correttamente che espongono directory sensibili sono sufficienti a provocare gravi conseguenze.
Ad esempio, un contenitore potrebbe avere un montaggio come /host_etc indicando l'host /etc elencoUn aggressore che inciampa su questo percorso può semplicemente aprire /host_etc/passwd or /host_etc/shadow e stanno effettivamente leggendo i file di autenticazione dell'host dall'interno del contenitore.
Rilevare l'uso improprio di tali mount è complicato perché molti modelli di accesso sembrano simili alle normali operazioni sui fileNon puoi semplicemente guardare /etc/shadow all'interno dei container, perché di solito si riferisce al file del container stesso, non a quello dell'host. È necessario un livello di mappatura che converta il "percorso del container" nel "percorso dell'host sottostante" per ogni mount.
Gli strumenti EDR e CNAPP avanzati affrontano questo problema risolvendo i punti di montaggio e monitorando gli accessi in base al percorso lato hostIn questo modo, qualsiasi lettura o scrittura che in ultima analisi tocca un file sensibile all'host, anche tramite un percorso apparentemente innocuo all'interno del contenitore, può essere segnalata in tempo reale.
Rilevamento dei tentativi di escape del contenitore in fase di esecuzione
Il rafforzamento preventivo è essenziale, ma è anche necessario tenere d'occhio ciò che accade mentre i container sono in funzioneGli attacchi moderni spesso concatenano più fasi e un solido monitoraggio in fase di esecuzione offre la possibilità di intercettare la catena prima che raggiunga l'host.
Il rilevamento all'avanguardia in genere combina la telemetria di basso livello (ad esempio, tracce di syscall basate su eBPF) con analisi comportamentali e contesto cloudI segnali grezzi provengono da chiamate di sistema, operazioni sui file, alberi dei processi e attività dei socket; il livello di analisi li correla con identità, esposizione di rete e risorse cloud per distinguere le azioni amministrative benigne dai veri e propri tentativi di fuga.
Indicatori chiave a livello di chiamata di sistema
Alcune chiamate di sistema sono fortemente associate ad attività di superamento dei limiti e dovrebbe essere sottoposto a un controllo più approfondito quando richiamato dai contenitori:
-
mount,umount,pivot_root– manipolazione dei mount del file system o pivot delle directory radice, spesso utilizzati per unire i percorsi host in un contenitore o per uscire dai chroot. -
setns,unshare– unione o creazione di nuovi namespace, che è un passaggio fondamentale nelle tecniche che si inseriscono nel namespace iniziale dell'host. -
ptrace– debug o iniezione in altri processi; sospetto quando si attraversano i confini del contenitore o si prendono di mira i daemon di sistema. -
capset– modifica delle capacità in fase di esecuzione, potenzialmente utilizzata per ottenere nuovi potenti flag a metà esecuzione. -
init_module,finit_module– caricare moduli kernel da un contenitore è un comportamento ad alto rischio raramente necessario nei carichi di lavoro legittimi.
I motori di regole come Falco consentono di esprimere la logica di rilevamento su queste chiamate di sistema in un modo consapevole del contenitoreAd esempio, è possibile ricevere un avviso ogni volta che un processo containerizzato con CAP_SYS_ADMIN apre un file denominato release_agent per la scrittura, che è un indicatore estremamente forte di un tentativo di escape basato sull'helper in modalità utente.
Modelli di accesso ai file sospetti
Il monitoraggio dell'integrità dei file e degli accessi integra le chiamate di sistema mostrando esattamente quali percorsi sta toccando un aggressoreSe osservato attraverso la lente della mappatura contenitore/host, questo diventa un potente rilevatore di fuga.
-
Scrive a
/proc/sysor/sysda un segnale contenitore tenta di alterare i parametri del kernel o le impostazioni del dispositivo. -
Accesso ai socket di runtime del contenitore come
/var/run/docker.sockor/run/containerd/containerd.sockè un segnale d'allarme quando proviene da contenitori di applicazioni generali. -
Cambia in
/etc/passwd,/etc/shadowor/etc/sudoerssull'host tramite percorsi visibili al contenitore sembrano passaggi di escalation dei privilegi e di persistenza. -
Legge da
/proc/*/environor/proc/*/cmdlineattraverso gli spazi dei nomi può indicare l'enumerazione dei processi e la raccolta delle credenziali oltre l'albero dei processi del contenitore stesso.
Gli avvisi più affidabili combinano più fattori: percorso, syscall, capacità e metadati del contenitore. Ad esempio, a mount chiamata di sistema proveniente da un contenitore di app non amministratore esposto a Internet con CAP_SYS_ADMIN e targeting /proc/sys è molto più allarmante della stessa operazione da un noto lavoro di manutenzione privilegiato.
Segnali a livello di processo e comportamentali
Oltre alle chiamate di sistema e agli eventi dei file, il comportamento dei processi di livello superiore dipinge una storia su ciò che sta accadendoAlcune attività sono estremamente rare nei normali microservizi, ma comuni nelle fasi successive allo sfruttamento.
-
Gusci interattivi generati da contenitori non interattivi (per esempio,
/bin/bashche compaiono sotto un processo del server web) suggeriscono un'attività pratica sulla tastiera. -
Utilizzo di strumenti di escalation dei privilegi come
sudo,suornewgrpall'interno dei contenitori, in particolare quelli non destinati all'uso interattivo, è altamente sospetto. -
Scansione di rete, strumenti di movimento laterale e connessioni in uscita insolite da contenitori che dovrebbero comunicare solo con un piccolo insieme di servizi indicano tentativi di ricognizione o propagazione.
-
Firme di Cryptominer, processi inaspettati e di lunga durata legati alla CPU o picchi di utilizzo della GPU può rivelare che l'aggressore ha già utilizzato il proprio accesso a livello di host per monetizzare le risorse.
Qui brillano le piattaforme EDR e CNAPP che mantengono una “catena di causalità” (albero dei processi con ascendenza e ambiente)Consentono agli analisti di risalire alle operazioni sospette risalendo all'immagine del contenitore di origine, al carico di lavoro Kubernetes, all'account cloud o alla pipeline CI/CD, rendendo più efficaci l'analisi delle cause principali e le correzioni a lungo termine.
Prevenire le fughe dai container: difesa in profondità
Nessun singolo controllo può garantire che non dovrai mai affrontare un tentativo di fuga dal container, quindi hai bisogno di difese a strati dal codice al cloudCiò include l'igiene delle immagini, i privilegi minimi, le configurazioni rafforzate, i controlli di rete e una solida protezione in fase di esecuzione.
Esegui i contenitori con il minimo privilegio
Inizia eliminando spietatamente i privilegi non necessari dai contenitoriEvita la modalità privilegiata, tranne in casi molto rari e rigorosamente controllati, e preferisci contenitori o namespace utente senza root, in modo che "root inside" venga mappato a un utente senza privilegi sull'host.
Su Kubernetes, usa in modo intelligente le impostazioni di securityContext come runAsNonRoot, runAsUser, allowPrivilegeEscalation: false e readOnlyRootFilesystem: trueQuesti vincoli limitano ciò che un aggressore può fare anche se compromette completamente il runtime dell'applicazione.
Le capacità dovrebbero essere strettamente limitate: elimina tutto per impostazione predefinita e aggiungi solo il set minimo richiesto per il carico di lavoro. Se un contenitore ha davvero bisogno CAP_SYS_ADMIN or CAP_NET_ADMIN, trattarlo come un asset ad alto rischio e circondarlo con monitoraggio aggiuntivo e isolamento di rete.
Le regole di rilevamento che sfruttano i campi di capacità di Falco possono fungere da rete di sicurezza per le configurazioni errate che sfuggonoAd esempio, una regola potrebbe attivarsi ogni volta che un thread containerizzato con CAP_SYS_ADMIN e CAP_DAC_OVERRIDE scrive in un file denominato release_agent, catturando una vasta classe di exploit di fuga con un rumore molto basso.
Proteggere la catena di fornitura dei container
La maggior parte dei compromessi inizia prima dell'esecuzione, sotto forma di immagini vulnerabili o manomesseUna solida sicurezza delle immagini rende più difficile per gli aggressori ottenere un punto d'appoggio affidabile fin dall'inizio.
Utilizzare immagini di base minime e consolidate da registri attendibili e mantenerle aggiornateImmagini più piccole con meno pacchetti implicano meno librerie che potrebbero contenere CVE sfruttabili, e fornitori come Wiz o i responsabili delle distribuzioni ora forniscono basi "senza distribuzione" con solo ciò che è strettamente necessario.
Integrare la scansione delle vulnerabilità e le distinte base del software (SBOM) in CI/CDOgni build dovrebbe essere analizzata prima di essere inviata a un registro e le immagini con bug di gravità elevata o critica non corretti, rilevanti per la loro esposizione e i loro privilegi, dovrebbero essere bloccate dalla distribuzione.
Le policy di affidabilità delle immagini chiudono il cerchioFirma le immagini in modo crittografico, configura i controller di ammissione per rifiutare le immagini non firmate o non attendibili e mantieni la visibilità su quali immagini sono effettivamente in esecuzione nei cluster nel tempo, in modo da poter eliminare tempestivamente gli artefatti rischiosi.
Infine, dare priorità alla bonifica in base al rischio reale, non ai conteggi CVE grezziUna vulnerabilità critica in un processo batch inattivo, non in rete e in esecuzione senza funzionalità extra è meno urgente di un bug "medio" in un pod privilegiato e connesso a Internet che gestisce dati sensibili.
Segmentazione della rete e protezione in fase di esecuzione
Anche se un aggressore atterra in un contenitore, una progettazione intelligente della rete può impedirgli di trasformarlo in una violazione completa del clusterLe policy di rete granulari, i firewall e le reti di servizi aiutano a limitare i movimenti laterali.
Implementare criteri di rete in stile elenco consentito in Kubernetes, in modo che i pod possano comunicare solo con i servizi di cui hanno realmente bisogno. Questo limita la capacità di un aggressore di scansionare il cluster o di chiamare API di gestione interne come il socket Docker o il server API di Kubernetes.
I sistemi di protezione in tempo reale aggiungono i freni in tempo realeQuando rilevano un comportamento coerente con un'uscita del contenitore (ad esempio, sospetto nsenter utilizzo, hostPath monta su / o manomissione del socket containerd), possono bloccare o interrompere processi, isolare container o aprire automaticamente incidenti con una traccia forense completa.
Piattaforme come Wiz CNAPP combinano questi rilevamenti runtime con il contesto cloud e un grafico di sicurezzaMappando le relazioni tra container, host, identità e archivi dati, mostrano non solo che si sta verificando una fuga, ma anche quali risorse sensibili si trovano nel raggio d'azione dell'esplosione, in modo che i team possano stabilire le priorità di risposta.
Monitoraggio continuo e prontezza agli incidenti
I contenitori hanno una vita breve, il che rende più difficili le analisi forensi e dei log classicheSe non si pianifica in anticipo, le prove necessarie per comprendere la via di fuga potrebbero scomparire quando la missione verrà riprogrammata.
Stabilire una raccolta centralizzata di metriche e di log per runtime di container, orchestratori e hostStrumenti come ELK, Prometheus e servizi di log nativi del cloud garantiscono che l'attività dei processi, gli eventi di sicurezza e le modifiche alla configurazione vengano acquisiti anche per carichi di lavoro effimeri.
Creare playbook specifici per scenari di escape dei containerDovrebbero definire come isolare rapidamente i nodi, creare snapshot dei dischi, raccogliere metadati dei container e coordinarsi con i provider cloud o i team di risposta agli incidenti quando si sospetta una fuga o una compromissione a livello di host.
Fornitori come Palo Alto Networks (Cortex XDR, Prisma Cloud) e altri hanno creato ampi contenuti di rilevamento attorno alle tecniche descritte qui, dall'abuso dell'helper in modalità utente allo sfruttamento del socket runtime e all'accesso sensibile al mount, fornendo ai difensori avvisi concreti e di alto contesto anziché generici rumori di "attività sospetta".
Mettere insieme tutti questi elementi (solidi fondamenti di isolamento Linux, privilegi rigorosi, immagini rafforzate, controlli di rete e profonda visibilità in fase di esecuzione) trasforma la fuga dei container da una minaccia esistenziale in un rischio gestibile che il tuo team può rilevare in anticipo, contenere efficacemente e da cui imparare per rafforzare ulteriormente la tua postura di sicurezza cloud-native nel tempo..