Tag: docker, kubernetes, security, trivy, namespaces, cgroups, rbac
Livello: intermedio
TL;DR: Proteggere l'intero ciclo di vita dei container, dalla build dell'immagine fino all'esecuzione a runtime, minimizzando i privilegi e riducendo la superficie di attacco.
Immagini base minimali (Distroless o Alpine) per ridurre le vulnerabilita e la superficie di attacco.
Non eseguire mai i container come root definendo un utente specifico nel Dockerfile.
Scansione continua delle immagini tramite tool automatizzati direttamente nella pipeline CI/CD.
Principio del privilegio minimo applicando policy RBAC rigorose all'interno del cluster.
Isolamento a livello di host tramite Namespaces per i processi e Cgroups per le risorse.
Utilizzo di filesystem in sola lettura a runtime per impedire la scrittura di file malevoli.
Firme crittografiche delle immagini per garantire l'integrita e prevenire manomissioni durante il deployment.
Gestione sicura dei secret tramite vault esterni, evitando hardcoding nel codice o nelle variabili d'ambiente.
Q: Come eviti che un container compromesso blocchi l'host?R: Imposto limiti di CPU e RAM tramite i Cgroups e prevengo l'escalation dei privilegi bloccando il flag --privileged.
Q: Cosa sono i container "distroless"?R: Sono immagini prive di shell e package manager che contengono solo l'applicazione e le sue dipendenze, riducendo drasticamente la superficie di attacco.
Q: Come gestisci le vulnerabilita nelle dipendenze?R: Integro tool come Trivy o Grype nella pipeline per bloccare le build che presentano CVE critiche con fix disponibile.
Usare il tag :latest che porta a build non deterministiche e vulnerabilita a sorpresa.
Montare il socket di Docker all'interno di un container, permettendo all'attaccante il controllo totale dell'host.
Dimenticare di aggiornare periodicamente l'immagine base, accumulando vulnerabilita note (CVE) nel tempo.
Eseguire container con flag --privileged disabilitando di fatto le protezioni di isolamento native.
# Esempio di best practice: utente non-root nel Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
# Creazione e utilizzo di un utente senza privilegi
USER node
CMD ["npm", "start"]
Bash
# Scansione di un'immagine con Trivy prima del push
trivy image --severity HIGH,CRITICAL my-app:v1.0.0
[ ] Implementazione avanzata di profili seccomp e AppArmor
[x] Configurazione di base dei Pod Security Standards in Kubernetes