Kubernetes Hardening

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Strumenti per analizzare un cluster

Kubescape è un tool open-source per K8s che fornisce una visione unificata multi-cloud di K8s, inclusa l'analisi dei rischi, la conformità alla sicurezza, la visualizzazione di RBAC e la scansione delle vulnerabilità delle immagini. Kubescape analizza i cluster K8s, i file YAML e le chart HELM, rilevando errori di configurazione secondo diversi framework (come NSA-CISA, MITRE ATT&CK®), vulnerabilità del software e violazioni di RBAC (role-based-access-control) nelle prime fasi del processo CI/CD, calcola istantaneamente il punteggio di rischio e mostra le tendenze dei rischi nel tempo.

kubescape scan --verbose

Lo strumento kube-bench è uno strumento che verifica se Kubernetes è implementato in modo sicuro eseguendo i controlli documentati nel CIS Kubernetes Benchmark. Puoi scegliere di:

  • eseguire kube-bench da dentro un container (condividendo lo spazio dei processi con l'host)

  • eseguire un container che installa kube-bench sull'host e poi eseguire kube-bench direttamente sull'host

  • installare gli ultimi binari dalla pagina delle versioni

  • compilarlo dal codice sorgente.

Lo strumento kubeaudit è uno strumento da linea di comando e un pacchetto Go per verificare le preoccupazioni di sicurezza di diversi cluster Kubernetes.

Kubeaudit può rilevare se viene eseguito all'interno di un container in un cluster. In tal caso, cercherà di verificare tutte le risorse Kubernetes in quel cluster:

kubeaudit all

Questo strumento ha anche l'argomento autofix per correggere automaticamente i problemi rilevati.

Lo strumento kube-hunter cerca vulnerabilità di sicurezza nei cluster Kubernetes. Lo strumento è stato sviluppato per aumentare la consapevolezza e la visibilità dei problemi di sicurezza negli ambienti Kubernetes.

kube-hunter --remote some.node.com

Kubei è uno strumento di scansione delle vulnerabilità e del benchmark CIS Docker che consente agli utenti di ottenere una valutazione accurata e immediata del rischio dei loro cluster Kubernetes. Kubei scansiona tutte le immagini utilizzate in un cluster Kubernetes, inclusi le immagini dei pod dell'applicazione e dei pod di sistema.

KubiScan è uno strumento per la scansione del cluster Kubernetes per le autorizzazioni rischiose nel modello di autorizzazione basato sui ruoli (RBAC) di Kubernetes.

Audit del codice IaC

Popeye è un'utilità che analizza il cluster Kubernetes in tempo reale e segnala potenziali problemi con le risorse e le configurazioni implementate. Pulisce il cluster in base a ciò che è implementato e non a ciò che è presente sul disco. Scansionando il cluster, rileva le configurazioni errate e ti aiuta a garantire che siano in atto le migliori pratiche, prevenendo così futuri problemi. Si propone di ridurre il sovraccarico cognitivo che si affronta quando si opera un cluster Kubernetes in ambiente reale. Inoltre, se il tuo cluster utilizza un metric-server, segnala le potenziali sovra/infra-allocazioni delle risorse e cerca di avvisarti nel caso in cui il cluster si esaurisca.

KICS individua vulnerabilità di sicurezza, problemi di conformità e configurazioni errate dell'infrastruttura nelle seguenti soluzioni Infrastructure as Code: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM e specifiche OpenAPI 3.0.

Checkov è uno strumento di analisi statica del codice per l'infrastruttura come codice.

Scansiona l'infrastruttura cloud fornita utilizzando Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless o ARM Templates e rileva configurazioni errate di sicurezza e conformità utilizzando la scansione basata su grafi.

kube-score è uno strumento che esegue l'analisi statica del codice delle definizioni degli oggetti Kubernetes.

Per installare:

DistribuzioneComando / Link

Binari precompilati per macOS, Linux e Windows

Docker

docker pull zegl/kube-score (Docker Hub)

Homebrew (macOS e Linux)

brew install kube-score

Krew (macOS e Linux)

kubectl krew install score

Suggerimenti

Kubernetes PodSecurityContext e SecurityContext

È possibile configurare il contesto di sicurezza dei pod (con PodSecurityContext) e dei container che verranno eseguiti (con SecurityContext). Per ulteriori informazioni, leggere:

pageKubernetes SecurityContext(s)

Harden di Kubernetes API

È molto importante proteggere l'accesso al server API di Kubernetes, poiché un attore malintenzionato con sufficienti privilegi potrebbe abusarne e danneggiare l'ambiente in molti modi. È importante proteggere sia l'accesso (autorizzare solo le origini specificate ad accedere al server API e negare qualsiasi altra connessione) che l'autenticazione (seguendo il principio del privilegio minimo). E sicuramente non consentire richieste anonime.

Processo di richiesta comune: Utente o K8s ServiceAccount -> Autenticazione -> Autorizzazione -> Controllo di ammissione.

Suggerimenti:

  • Chiudere le porte.

  • Evitare l'accesso anonimo.

  • NodeRestriction; Nessun accesso da nodi specifici all'API.

  • Fondamentalmente impedisce ai kubelet di aggiungere/rimuovere/aggiornare etichette con un prefisso node-restriction.kubernetes.io/. Questo prefisso di etichetta è riservato agli amministratori per etichettare i loro oggetti Node per scopi di isolamento del carico di lavoro e ai kubelet non sarà consentito di modificare le etichette con quel prefisso.

  • E inoltre, consente ai kubelet di aggiungere/rimuovere/aggiornare queste etichette e prefissi di etichetta.

  • Assicurarsi con le etichette l'isolamento sicuro del carico di lavoro.

  • Evitare l'accesso API di pod specifici.

  • Evitare l'esposizione di ApiServer su Internet.

  • Evitare l'accesso non autorizzato RBAC.

  • Porta ApiServer con firewall e whitelist degli indirizzi IP.

Harden di SecurityContext

Per impostazione predefinita, l'utente root verrà utilizzato quando viene avviato un pod se non viene specificato un altro utente. È possibile eseguire l'applicazione all'interno di un contesto più sicuro utilizzando un modello simile al seguente:

apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: true

Hardenizzazione generale

Dovresti aggiornare l'ambiente Kubernetes con la frequenza necessaria per avere:

  • Dipendenze aggiornate.

  • Patch per bug e sicurezza.

Cicli di rilascio: Ogni 3 mesi c'è un nuovo rilascio minore -- 1.20.3 = 1(Major).20(Minor).3(patch)

Il modo migliore per aggiornare un cluster Kubernetes è (da qui):

  • Aggiorna i componenti del nodo master seguendo questa sequenza:

  • etcd (tutte le istanze).

  • kube-apiserver (tutti gli host del control plane).

  • kube-controller-manager.

  • kube-scheduler.

  • cloud controller manager, se ne usi uno.

  • Aggiorna i componenti del nodo worker come kube-proxy, kubelet.

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated