diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md index e83c1ee8c..90d8dc1fe 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md @@ -1,12 +1,12 @@ -# Kubernetes Hardening +# Hardening di Kubernetes {{#include ../../../banners/hacktricks-training.md}} ## Strumenti per analizzare un cluster -### [**Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) +### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) -Esegue **diversi controlli di conformità sul cluster Kubernetes**. Include supporto per CIS, National Security Agency (NSA) e Cybersecurity and Infrastructure Security Agency (CISA) rapporto tecnico sulla cybersecurity per il rafforzamento di Kubernetes. +Esegue **diversi controlli di conformità sul cluster Kubernetes**. Include il supporto per CIS, la National Security Agency (NSA) e il Cybersecurity technical report della Cybersecurity and Infrastructure Security Agency (CISA) per l'hardening di Kubernetes. ```bash # Install Steampipe brew install turbot/tap/powerpipe @@ -27,30 +27,30 @@ powerpipe server ``` ### [**Kubescape**](https://github.com/armosec/kubescape) -[**Kubescape**](https://github.com/armosec/kubescape) è uno strumento open-source K8s che fornisce un'unica interfaccia multi-cloud K8s, inclusi analisi dei rischi, conformità alla sicurezza, visualizzatore RBAC e scansione delle vulnerabilità delle immagini. Kubescape scansiona i cluster K8s, i file YAML e i grafici HELM, rilevando configurazioni errate secondo diversi framework (come il [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo), [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), vulnerabilità software e violazioni RBAC (controllo degli accessi basato sui ruoli) nelle fasi iniziali della pipeline CI/CD, calcola istantaneamente il punteggio di rischio e mostra le tendenze di rischio nel tempo. +[**Kubescape**](https://github.com/armosec/kubescape) è uno strumento open-source per K8s che fornisce un pannello unico multi-cloud per K8s, inclusi analisi del rischio, conformità alla sicurezza, visualizzatore RBAC e scansione delle vulnerabilità delle immagini. Kubescape esegue la scansione di cluster K8s, file YAML e HELM charts, rilevando misconfigurazioni secondo più framework (come [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) , [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), vulnerabilità software e violazioni RBAC (role-based-access-control) nelle prime fasi della pipeline CI/CD, calcola istantaneamente il punteggio di rischio e mostra l'andamento del rischio nel tempo. ```bash curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash kubescape scan --verbose ``` ### [**Popeye**](https://github.com/derailed/popeye) -[**Popeye**](https://github.com/derailed/popeye) è un'utilità che scansiona i cluster Kubernetes attivi e **riporta potenziali problemi con le risorse e le configurazioni distribuite**. Sanitizza il tuo cluster in base a ciò che è distribuito e non a ciò che è memorizzato su disco. Scansionando il tuo cluster, rileva le misconfigurazioni e ti aiuta a garantire che le migliori pratiche siano in atto, prevenendo così futuri mal di testa. Mira a ridurre il carico cognitivo che si affronta quando si opera un cluster Kubernetes nel mondo reale. Inoltre, se il tuo cluster utilizza un metric-server, riporta potenziali sovra/sotto allocazioni delle risorse e cerca di avvisarti nel caso in cui il tuo cluster esaurisca la capacità. +[**Popeye**](https://github.com/derailed/popeye) è un'utilità che scansiona cluster Kubernetes attivi e **segnala potenziali problemi con le risorse e le configurazioni distribuite**. Pulisce il tuo cluster basandosi su ciò che è distribuito e non su ciò che è presente su disco. Scansionando il cluster, rileva misconfigurazioni e ti aiuta a garantire che le best practice siano applicate, prevenendo così problemi futuri. Mira a ridurre il sovraccarico\_cognitivo che si affronta quando si opera un cluster Kubernetes in ambiente reale. Inoltre, se il tuo cluster impiega un metric-server, segnala potenziali sovraallocazioni o sottoallocazioni di risorse e cerca di avvisarti nel caso in cui il cluster esaurisca la capacità. ### [**Kube-bench**](https://github.com/aquasecurity/kube-bench) -Lo strumento [**kube-bench**](https://github.com/aquasecurity/kube-bench) è uno strumento che verifica se Kubernetes è distribuito in modo sicuro eseguendo i controlli documentati nel [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\ +The tool [**kube-bench**](https://github.com/aquasecurity/kube-bench) is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\ Puoi scegliere di: -- eseguire kube-bench all'interno di un container (condividendo lo spazio dei nomi PID con l'host) +- eseguire kube-bench da dentro un container (condividendo il PID namespace 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 Release](https://github.com/aquasecurity/kube-bench/releases), -- compilarlo dal sorgente. +- installare i binari più recenti dalla [Releases page](https://github.com/aquasecurity/kube-bench/releases), +- compilarlo da sorgente. ### [**Kubeaudit**](https://github.com/Shopify/kubeaudit) -**[DEPRECATO]** Lo strumento [**kubeaudit**](https://github.com/Shopify/kubeaudit) è uno strumento da riga di comando e un pacchetto Go per **auditare i cluster Kubernetes** per vari problemi di sicurezza. +**[DEPRECATED]** The tool [**kubeaudit**](https://github.com/Shopify/kubeaudit) is a command line tool and a Go package to **eseguire audit su cluster Kubernetes** per varie problematiche di sicurezza. -Kubeaudit può rilevare se sta girando all'interno di un container in un cluster. Se sì, cercherà di auditare tutte le risorse Kubernetes in quel cluster: +Kubeaudit può rilevare se è in esecuzione all'interno di un container in un cluster. In tal caso, proverà a eseguire un audit di tutte le risorse Kubernetes in quel cluster: ``` kubeaudit all ``` @@ -64,44 +64,44 @@ kube-hunter --remote some.node.com ``` ### [Trivy](https://github.com/aquasecurity/trivy) -[Trivy](https://github.com/aquasecurity/trivy) ha scanner che cercano problemi di sicurezza e obiettivi dove possono trovare tali problemi: +[Trivy](https://github.com/aquasecurity/trivy) ha scanner che cercano problemi di sicurezza e obiettivi dove può trovare questi problemi: -- Immagine del Container -- File System +- Immagine del container +- File system - Repository Git (remoto) -- Immagine della Macchina Virtuale +- Immagine della macchina virtuale - Kubernetes ### [**Kubei**](https://github.com/Erezf-p/kubei) -**[Sembra non essere mantenuto]** +**Sembra non mantenuto** -[**Kubei**](https://github.com/Erezf-p/kubei) è uno strumento di scansione delle vulnerabilità e benchmark CIS Docker che consente agli utenti di ottenere una valutazione del rischio accurata e immediata dei loro cluster kubernetes. Kubei scansiona tutte le immagini utilizzate in un cluster Kubernetes, comprese le immagini dei pod delle applicazioni e dei pod di sistema. +[**Kubei**](https://github.com/Erezf-p/kubei) è uno strumento di scansione delle vulnerabilità e di benchmark CIS Docker che permette 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, incluse le immagini dei pod applicativi e dei pod di sistema. ### [**KubiScan**](https://github.com/cyberark/KubiScan) -[**KubiScan**](https://github.com/cyberark/KubiScan) è uno strumento per la scansione del cluster Kubernetes per permessi rischiosi nel modello di autorizzazione Role-based access control (RBAC) di Kubernetes. +[**KubiScan**](https://github.com/cyberark/KubiScan) è uno strumento per scansionare i cluster Kubernetes alla ricerca di permessi rischiosi nel modello di autorizzazione Role-based access control (RBAC) di Kubernetes. ### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) -[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) è uno strumento costruito per testare altri tipi di controlli ad alto rischio rispetto agli altri strumenti. Ha principalmente 3 modalità diverse: +[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) è uno strumento progettato per testare altri tipi di controlli ad alto rischio rispetto agli altri strumenti. Ha principalmente 3 modalità differenti: -- **`find-role-relationships`**: Che troverà quali ruoli AWS sono in esecuzione in quali pod -- **`find-secrets`**: Che cerca di identificare segreti nelle risorse K8s come Pods, ConfigMaps e Secrets. -- **`test-imds-access`**: Che cercherà di eseguire pod e tentare di accedere ai metadati v1 e v2. ATTENZIONE: Questo eseguirà un pod nel cluster, fai molta attenzione perché potresti non volerlo fare! +- **`find-role-relationships`**: Che individua quali ruoli AWS sono in esecuzione in quali pod +- **`find-secrets`**: Che cerca di identificare secret nelle risorse K8s come Pods, ConfigMaps e Secrets. +- **`test-imds-access`**: Che cercherà di eseguire pod e tentare di accedere ai metadata v1 e v2. ATTENZIONE: Questo avvierà un pod nel cluster, fai molta attenzione perché potresti non volerlo fare! -## **Audit IaC Code** +## **Audit del codice IaC** ### [**KICS**](https://github.com/Checkmarx/kics) -[**KICS**](https://github.com/Checkmarx/kics) trova **vulnerabilità di sicurezza**, problemi di conformità e misconfigurazioni dell'infrastruttura nelle seguenti **soluzioni Infrastructure as Code**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM e specifiche OpenAPI 3.0 +[**KICS**](https://github.com/Checkmarx/kics) trova vulnerabilità di sicurezza, problemi di conformità e errori di configurazione dell'infrastruttura nelle seguenti soluzioni Infrastructure as Code: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM e specifiche OpenAPI 3.0 ### [**Checkov**](https://github.com/bridgecrewio/checkov) -[**Checkov**](https://github.com/bridgecrewio/checkov) è uno strumento di analisi statica del codice per l'infrastructure-as-code. +[**Checkov**](https://github.com/bridgecrewio/checkov) è uno strumento di analisi statica del codice per infrastructure-as-code. -Scansiona l'infrastruttura cloud fornita utilizzando [Terraform](https://terraform.io), piano Terraform, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) o [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) e rileva misconfigurazioni di sicurezza e conformità utilizzando la scansione basata su grafi. +Scansiona l'infrastruttura cloud provisioningata usando [Terraform](https://terraform.io), Terraform plan, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) o [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) e rileva problemi di sicurezza e conformità usando la scansione basata su grafi. ### [**Kube-score**](https://github.com/zegl/kube-score) @@ -109,48 +109,94 @@ Scansiona l'infrastruttura cloud fornita utilizzando [Terraform](https://terrafo Per installare: -| Distribuzione | Comando / Link | +| Distribuzione | Comando / Link | | --------------------------------------------------- | --------------------------------------------------------------------------------------- | -| Binaries precompilati per macOS, Linux e Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) | +| Binarie precompilate per macOS, Linux, e Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) | | Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) | | Homebrew (macOS e Linux) | `brew install kube-score` | -| [Krew](https://krew.sigs.k8s.io/) (macOS e Linux) | `kubectl krew install score` | +| [Krew](https://krew.sigs.k8s.io/) (macOS e Linux) | `kubectl krew install score` | -## Tips +## Tools to analyze YAML files & Helm Charts -### Kubernetes PodSecurityContext e SecurityContext +### [**Kube-linter**](https://github.com/stackrox/kube-linter) +```bash +# Install Kube-linter +brew install kube-linter -Puoi configurare il **contesto di sicurezza dei Pods** (con _PodSecurityContext_) e dei **container** che verranno eseguiti (con _SecurityContext_). Per ulteriori informazioni leggi: +# Run Kube-linter +## lint ./path/to/yaml/or/chart +``` +### [Checkov](https://github.com/bridgecrewio/checkov) +```bash +# Install Checkov +pip install checkov + +# Run Checkov +checkov -d ./path/to/yaml/or/chart +``` +### [kube‑score](https://github.com/zegl/kube-score) +```bash +# Install kube-score +brew install kube-score + +# Run kube-score +kube-score score ./path/to/yaml +# or +helm template chart /path/to/chart | kube-score score - +# or if the chart needs some values +helm template chart /path/to/chart \ +--set 'config.urls[0]=https://dummy.backend.internal' \ +| kube-score score - +``` +### [Kubesec](https://github.com/controlplaneio/kubesec) +```bash +# Install Kubesec +## Download from https://github.com/controlplaneio/kubesec/releases + +# Run Kubesec in a yaml +kubesec scan ./path/to/yaml +# or +helm template chart /path/to/chart | kubesec scan - +# or if the chart needs some values +helm template chart /path/to/chart \ +--set 'config.urls[0]=https://dummy.backend.internal' \ +| kubesec scan - +``` +## Suggerimenti + +### Kubernetes PodSecurityContext and SecurityContext + +Puoi configurare il **security context dei Pod** (con _PodSecurityContext_) e dei **container** che verranno eseguiti (con _SecurityContext_). Per maggiori informazioni leggi: {{#ref}} kubernetes-securitycontext-s.md {{#endref}} -### Indurimento dell'API Kubernetes +### Kubernetes API Hardening -È molto importante **proteggere l'accesso al Kubernetes Api Server** poiché un attore malintenzionato con privilegi sufficienti potrebbe abusarne e danneggiare l'ambiente in molti modi.\ -È importante garantire sia l'**accesso** (**whitelist** delle origini per accedere all'API Server e negare qualsiasi altra connessione) sia la [**autenticazione**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (seguendo il principio del **minimo** **privilegio**). E sicuramente **mai** **consentire** **richieste** **anonime**. +È molto importante **proteggere l'accesso al Kubernetes Api Server** poiché un attore malintenzionato con privilegi sufficienti potrebbe abusarne e danneggiare in molti modi l'ambiente.\ +È importante mettere in sicurezza sia l'**accesso** (**whitelist** degli origin che possono raggiungere l'API Server e negare qualsiasi altra connessione) sia la [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (seguendo il principio del **minimo** **privilegio**). E assolutamente **non** **consentire** **richieste** **anonime**. -**Processo di richiesta comune:**\ -Utente o K8s ServiceAccount –> Autenticazione –> Autorizzazione –> Controllo di ammissione. +**Processo tipico di una richiesta:**\ +Utente o K8s ServiceAccount –> Authentication –> Authorization –> Admission Control. -**Suggerimenti**: +**Consigli**: - Chiudere le porte. - Evitare l'accesso anonimo. -- NodeRestriction; Nessun accesso da nodi specifici all'API. +- NodeRestriction; nessun accesso da nodi specifici all'API. - [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) -- 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 i kubelet non saranno autorizzati a modificare le etichette con quel prefisso. -- E inoltre, consente ai kubelet di aggiungere/rimuovere/aggiornare queste etichette e prefissi di etichetta. -- Assicurati con le etichette l'isolamento sicuro del carico di lavoro. -- Evitare che pod specifici accedano all'API. -- Evitare l'esposizione dell'ApiServer a Internet. -- Evitare l'accesso non autorizzato RBAC. -- Porta dell'ApiServer con firewall e whitelist IP. +- In pratica impedisce ai kubelets di aggiungere/rimuovere/aggiornare labels con il prefisso node-restriction.kubernetes.io/. Questo prefisso di labels è riservato agli amministratori per etichettare i Node objects a scopi di isolamento dei workload, e ai kubelets non sarà permesso modificare labels con quel prefisso. +- E inoltre, consente ai kubelets di aggiungere/rimuovere/aggiornare queste labels e i relativi prefissi. +- Garantire l'isolamento sicuro dei workload tramite labels. +- Evitare l'accesso all'API da pod specifici. +- Evitare che l'ApiServer sia esposto a internet. +- Prevenire accessi non autorizzati tramite RBAC. +- Proteggere la porta dell'ApiServer con firewall e whitelist di IP. -### Indurimento del SecurityContext +### Hardening di SecurityContext -Per impostazione predefinita, l'utente root verrà utilizzato quando un Pod viene avviato se non viene specificato alcun altro utente. Puoi eseguire la tua applicazione all'interno di un contesto più sicuro utilizzando un modello simile al seguente: +Per default verrà utilizzato l'utente root quando un Pod viene avviato se non è specificato un altro utente. Puoi eseguire la tua applicazione in un contesto più sicuro usando un template simile al seguente: ```yaml apiVersion: v1 kind: Pod @@ -179,30 +225,30 @@ allowPrivilegeEscalation: true - [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) - [https://kubernetes.io/docs/concepts/policy/pod-security-policy/](https://kubernetes.io/docs/concepts/policy/pod-security-policy/) -### Indurimento Generale +### Hardening generale Dovresti aggiornare il tuo ambiente Kubernetes con la frequenza necessaria per avere: - Dipendenze aggiornate. -- Correzioni di bug e di sicurezza. +- Patch per bug e sicurezza. -[**Cicli di rilascio**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Ogni 3 mesi c'è un nuovo rilascio minore -- 1.20.3 = 1(Maggiore).20(Minore).3(patch) +[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Ogni 3 mesi esce una nuova minor release -- 1.20.3 = 1(Major).20(Minor).3(patch) -**Il modo migliore per aggiornare un Cluster Kubernetes è (da** [**qui**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** +**Il modo migliore per aggiornare un Kubernetes Cluster è (da** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** -- Aggiorna i componenti del nodo Master seguendo questa sequenza: +- Aggiorna i componenti del Master Node seguendo questa sequenza: - etcd (tutte le istanze). -- kube-apiserver (tutti gli host del piano di controllo). +- kube-apiserver (tutti gli host del control plane). - kube-controller-manager. - kube-scheduler. -- cloud controller manager, se ne utilizzi uno. -- Aggiorna i componenti del nodo Worker come kube-proxy, kubelet. +- cloud controller manager, se lo usi. +- Aggiorna i componenti dei Worker Node come kube-proxy, kubelet. ## Monitoraggio e sicurezza di Kubernetes: - Kyverno Policy Engine -- Cilium Tetragon - Sicurezza basata su eBPF, osservabilità e applicazione in tempo reale -- Politiche di Sicurezza della Rete -- Falco - Monitoraggio e rilevamento della sicurezza in tempo reale +- Cilium Tetragon - osservabilità della sicurezza e enforcement a runtime basati su eBPF +- Policy di sicurezza di rete +- Falco - monitoraggio e rilevamento della sicurezza a runtime {{#include ../../../banners/hacktricks-training.md}}