diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md index 610e61640..890689bbd 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 +# Zabezpieczanie Kubernetes {{#include ../../../banners/hacktricks-training.md}} ## Narzędzia do analizy klastra -### [**Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) +### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) -Wykona **kilka kontroli zgodności w klastrze Kubernetes**. Obejmuje wsparcie dla CIS, National Security Agency (NSA) oraz Cybersecurity and Infrastructure Security Agency (CISA) raportu technicznego dotyczącego bezpieczeństwa Kubernetes. +Będzie przeprowadzać **kilka kontroli zgodności w klastrze Kubernetes**. Zawiera wsparcie dla CIS, National Security Agency (NSA) oraz Cybersecurity and Infrastructure Security Agency (CISA) — w formie technicznego raportu dotyczącego zabezpieczania 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) to narzędzie open-source K8s, które zapewnia jednolity widok multi-cloud K8s, w tym analizę ryzyka, zgodność z bezpieczeństwem, wizualizator RBAC oraz skanowanie luk w obrazach. Kubescape skanuje klastry K8s, pliki YAML i wykresy HELM, wykrywając błędne konfiguracje zgodnie z wieloma ramami (takimi jak [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/)), luki w oprogramowaniu oraz naruszenia RBAC (kontrola dostępu oparta na rolach) na wczesnych etapach pipeline CI/CD, natychmiast oblicza wynik ryzyka i pokazuje trendy ryzyka w czasie. +[**Kubescape**](https://github.com/armosec/kubescape) to open-source narzędzie dla K8s zapewniające pojedynczy panel zarządzania dla środowisk multi-cloud K8s, w tym analizę ryzyka, zgodność z bezpieczeństwem, wizualizator RBAC i skanowanie podatności obrazów. Kubescape skanuje klastry K8s, pliki YAML i HELM charts, wykrywając błędne konfiguracje zgodnie z wieloma frameworkami (takimi jak [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/)), podatności oprogramowania oraz naruszenia RBAC (role-based-access-control) na wczesnych etapach CI/CD pipeline, natychmiast oblicza wynik ryzyka i pokazuje trendy ryzyka w czasie. ```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) to narzędzie, które skanuje aktywne klastry Kubernetes i **zgłasza potencjalne problemy z wdrożonymi zasobami i konfiguracjami**. Oczyszcza twój klaster na podstawie tego, co jest wdrożone, a nie tego, co znajduje się na dysku. Skanując twój klaster, wykrywa błędne konfiguracje i pomaga zapewnić, że najlepsze praktyki są wdrożone, co zapobiega przyszłym problemom. Ma na celu zmniejszenie obciążenia poznawczego, z którym boryka się operator klastra Kubernetes w rzeczywistości. Ponadto, jeśli twój klaster korzysta z serwera metryk, zgłasza potencjalne nadmiary/niedobory zasobów i stara się ostrzec cię, jeśli twój klaster wyczerpie swoją pojemność. +[**Popeye**](https://github.com/derailed/popeye) to narzędzie, które skanuje działający klaster Kubernetes i **zgłasza potencjalne problemy z wdrożonymi zasobami i konfiguracjami**. Oczyszcza Twój klaster na podstawie tego, co jest rzeczywiście wdrożone, a nie tego, co znajduje się na dysku. Przez skanowanie klastra wykrywa błędy konfiguracji i pomaga zapewnić stosowanie najlepszych praktyk, zapobiegając przyszłym problemom. Ma na celu zmniejszenie obciążenia poznawczego, z którym spotyka się operator klastra Kubernetes w rzeczywistych warunkach. Dodatkowo, jeśli klaster używa metric-server, raportuje potencjalne nad-/niedopasowania zasobów i próbuje ostrzec, gdy klaster zaczyna brakować pojemności. ### [**Kube-bench**](https://github.com/aquasecurity/kube-bench) -Narzędzie [**kube-bench**](https://github.com/aquasecurity/kube-bench) to narzędzie, które sprawdza, czy Kubernetes jest wdrożony w sposób bezpieczny, wykonując kontrole udokumentowane w [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\ -Możesz wybrać: +Narzędzie [**kube-bench**](https://github.com/aquasecurity/kube-bench) sprawdza, czy Kubernetes jest wdrożony bezpiecznie, uruchamiając kontrole udokumentowane w [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\ +Możesz wybrać, aby: -- uruchomienie kube-bench z wnętrza kontenera (dzieląc przestrzeń PID z hostem) -- uruchomienie kontenera, który instaluje kube-bench na hoście, a następnie uruchomienie kube-bench bezpośrednio na hoście -- zainstalowanie najnowszych binarek z [strony wydań](https://github.com/aquasecurity/kube-bench/releases), -- skompilowanie go ze źródła. +- uruchomić kube-bench z wnętrza kontenera (dzieląc przestrzeń nazw PID z hostem) +- uruchomić kontener, który instaluje kube-bench na hoście, a następnie uruchomić kube-bench bezpośrednio na hoście +- zainstalować najnowsze binaria ze strony [Releases](https://github.com/aquasecurity/kube-bench/releases), +- skompilować je ze źródeł. ### [**Kubeaudit**](https://github.com/Shopify/kubeaudit) -**[DEPRECATED]** Narzędzie [**kubeaudit**](https://github.com/Shopify/kubeaudit) to narzędzie wiersza poleceń i pakiet Go do **audytowania klastrów Kubernetes** pod kątem różnych problemów bezpieczeństwa. +**[DEPRECATED]** Narzędzie [**kubeaudit**](https://github.com/Shopify/kubeaudit) to narzędzie wiersza poleceń i pakiet Go służący do **audytu klastrów Kubernetes** pod kątem różnych zagadnień związanych z bezpieczeństwem. -Kubeaudit może wykryć, czy działa w kontenerze w klastrze. Jeśli tak, spróbuje audytować wszystkie zasoby Kubernetes w tym klastrze: +Kubeaudit potrafi wykryć, czy działa wewnątrz kontenera w klastrze. Jeśli tak, spróbuje przeaudytować wszystkie zasoby Kubernetes w tym klastrze: ``` kubeaudit all ``` @@ -58,13 +58,13 @@ To narzędzie ma również argument `autofix`, aby **automatycznie naprawić wyk ### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter) -**[DEPRECATED]** Narzędzie [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) poszukuje słabości bezpieczeństwa w klastrach Kubernetes. Narzędzie zostało opracowane w celu zwiększenia świadomości i widoczności problemów bezpieczeństwa w środowiskach Kubernetes. +**[DEPRECATED]** Narzędzie [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) wyszukuje luki bezpieczeństwa w klastrach Kubernetes. Narzędzie zostało opracowane, aby zwiększyć świadomość i widoczność problemów bezpieczeństwa w środowiskach Kubernetes. ```bash kube-hunter --remote some.node.com ``` ### [Trivy](https://github.com/aquasecurity/trivy) -[Trivy](https://github.com/aquasecurity/trivy) ma skanery, które szukają problemów z bezpieczeństwem oraz celów, w których mogą znaleźć te problemy: +[Trivy](https://github.com/aquasecurity/trivy) ma skanery, które wyszukują problemy bezpieczeństwa oraz cele, w których mogą znaleźć te problemy: - Obraz kontenera - System plików @@ -75,82 +75,128 @@ kube-hunter --remote some.node.com ### [**Kubei**](https://github.com/Erezf-p/kubei) -**[Wygląda na nieutrzymywane]** +**[Looks like unmantained]** -[**Kubei**](https://github.com/Erezf-p/kubei) to narzędzie do skanowania podatności i benchmarków CIS Docker, które pozwala użytkownikom uzyskać dokładną i natychmiastową ocenę ryzyka swoich klastrów kubernetes. Kubei skanuje wszystkie obrazy używane w klastrze Kubernetes, w tym obrazy aplikacji i systemów. +[**Kubei**](https://github.com/Erezf-p/kubei) to narzędzie do skanowania podatności i CIS Docker benchmark, które pozwala użytkownikom uzyskać dokładną i natychmiastową ocenę ryzyka ich klastrów Kubernetes. Kubei skanuje wszystkie obrazy używane w klastrze Kubernetes, w tym obrazy podów aplikacyjnych i podów systemowych. ### [**KubiScan**](https://github.com/cyberark/KubiScan) -[**KubiScan**](https://github.com/cyberark/KubiScan) to narzędzie do skanowania klastra Kubernetes w poszukiwaniu ryzykownych uprawnień w modelu autoryzacji opartym na rolach (RBAC) Kubernetes. +[**KubiScan**](https://github.com/cyberark/KubiScan) to narzędzie do skanowania klastra Kubernetes pod kątem ryzykownych uprawnień w modelu autoryzacji Role-based access control (RBAC) Kubernetes. ### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) -[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) to narzędzie stworzone do testowania innych typów kontroli wysokiego ryzyka w porównaniu z innymi narzędziami. Ma głównie 3 różne tryby: +[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) to narzędzie stworzone do przeprowadzania innych typów kontroli wysokiego ryzyka w porównaniu z innymi narzędziami. Posiada głównie 3 różne tryby: - **`find-role-relationships`**: Który znajdzie, które role AWS działają w których podach -- **`find-secrets`**: Który próbuje zidentyfikować sekrety w zasobach K8s, takich jak Pody, ConfigMapy i Sekrety. -- **`test-imds-access`**: Który spróbuje uruchomić pody i uzyskać dostęp do metadanych v1 i v2. OSTRZEŻENIE: To uruchomi pod w klastrze, bądź bardzo ostrożny, ponieważ być może nie chcesz tego robić! +- **`find-secrets`**: Który próbuje zidentyfikować sekrety w zasobach K8s, takich jak Pods, ConfigMaps i Secrets. +- **`test-imds-access`**: Który spróbuje uruchomić pody i spróbować uzyskać dostęp do metadata v1 i v2. UWAGA: To uruchomi pod w klastrze, bądź bardzo ostrożny, ponieważ możesz nie chcieć tego robić! ## **Audyt kodu IaC** ### [**KICS**](https://github.com/Checkmarx/kics) -[**KICS**](https://github.com/Checkmarx/kics) znajduje **podatności bezpieczeństwa**, problemy z zgodnością i błędy w konfiguracji infrastruktury w następujących **rozwiązaniach Infrastructure as Code**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM i specyfikacje OpenAPI 3.0 +[**KICS**](https://github.com/Checkmarx/kics) znajduje luki bezpieczeństwa, problemy ze zgodnością i błędne konfiguracje infrastruktury w następujących rozwiązaniach Infrastructure as Code: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM oraz specyfikacjach OpenAPI 3.0 ### [**Checkov**](https://github.com/bridgecrewio/checkov) -[**Checkov**](https://github.com/bridgecrewio/checkov) to narzędzie do analizy statycznej kodu dla infrastruktury jako kodu. +[**Checkov**](https://github.com/bridgecrewio/checkov) to narzędzie do statycznej analizy kodu dla infrastructure-as-code. -Skanuje infrastrukturę chmurową dostarczoną za pomocą [Terraform](https://terraform.io), planu 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) lub [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) i wykrywa błędy w konfiguracji bezpieczeństwa i zgodności za pomocą skanowania opartego na grafach. +Skanuje infrastrukturę chmurową provisioned using [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) lub [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) i wykrywa błędne konfiguracje bezpieczeństwa oraz zgodności przy użyciu skanowania opartego na grafie. ### [**Kube-score**](https://github.com/zegl/kube-score) [**kube-score**](https://github.com/zegl/kube-score) to narzędzie, które wykonuje statyczną analizę kodu definicji obiektów Kubernetes. -Aby zainstalować: +To install: -| Dystrybucja | Komenda / Link | +| Distribution | Command / Link | | --------------------------------------------------- | --------------------------------------------------------------------------------------- | -| Pre-zbudowane binaria dla macOS, Linux i Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) | +| Pre-built binaries for macOS, Linux, and 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 i Linux) | `brew install kube-score` | -| [Krew](https://krew.sigs.k8s.io/) (macOS i Linux) | `kubectl krew install score` | +| Homebrew (macOS and Linux) | `brew install kube-score` | +| [Krew](https://krew.sigs.k8s.io/) (macOS and Linux) | `kubectl krew install score` | +## Narzędzia do analizy plików YAML i Helm Charts + +### [**Kube-linter**](https://github.com/stackrox/kube-linter) +```bash +# Install Kube-linter +brew install kube-linter + +# 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 - +``` ## Wskazówki ### Kubernetes PodSecurityContext i SecurityContext -Możesz skonfigurować **kontekst bezpieczeństwa Podów** (z _PodSecurityContext_) oraz **kontenerów**, które będą uruchamiane (z _SecurityContext_). Aby uzyskać więcej informacji, przeczytaj: +Możesz skonfigurować **kontekst bezpieczeństwa Pods** (za pomocą _PodSecurityContext_) oraz **kontenerów**, które będą uruchamiane (za pomocą _SecurityContext_). Po więcej informacji przeczytaj: {{#ref}} kubernetes-securitycontext-s.md {{#endref}} -### Wzmocnienie bezpieczeństwa API Kubernetes +### Utwardzanie API Kubernetes -Bardzo ważne jest, aby **chronić dostęp do serwera API Kubernetes**, ponieważ złośliwy aktor z wystarczającymi uprawnieniami mógłby go nadużyć i wyrządzić wiele szkód w środowisku.\ -Ważne jest zabezpieczenie zarówno **dostępu** (**whitelist** źródeł do dostępu do serwera API i odrzucenie wszelkich innych połączeń), jak i [**uwierzytelniania**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (zgodnie z zasadą **najmniejszych** **uprawnień**). I zdecydowanie **nigdy** **nie** **pozwalaj** **na** **anonimowe** **żądania**. +Bardzo ważne jest, aby **chronić dostęp do Kubernetes Api Server**, ponieważ złośliwy aktor z wystarczającymi uprawnieniami może go nadużyć i w różny sposób uszkodzić środowisko.\ +Ważne jest zabezpieczenie zarówno **dostępu** (**whitelist** originów mających dostęp do API Server i odrzucenie pozostałych połączeń), jak i [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (zgodnie z zasadą **najmniejszych** **uprawnień**). I zdecydowanie **nigdy** **nie** **zezwalaj** na **anonimowe** **żądania**. **Typowy proces żądania:**\ -Użytkownik lub K8s ServiceAccount –> Uwierzytelnianie –> Autoryzacja –> Kontrola przyjęcia. +User or K8s ServiceAccount –> Authentication –> Authorization –> Admission Control. **Wskazówki**: - Zamknij porty. - Unikaj dostępu anonimowego. -- NodeRestriction; Brak dostępu z określonych węzłów do API. +- NodeRestriction; brak dostępu z określonych węzłów do API. - [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) -- Zasadniczo zapobiega kubeletom w dodawaniu/usuwaniu/aktualizowaniu etykiet z prefiksem node-restriction.kubernetes.io/. Ten prefiks etykiety jest zarezerwowany dla administratorów do etykietowania obiektów Node w celu izolacji obciążenia, a kubeletom nie będzie dozwolone modyfikowanie etykiet z tym prefiksem. -- A także pozwala kubeletom dodawać/usuwać/aktualizować te etykiety i prefiksy etykiet. -- Zapewnij za pomocą etykiet bezpieczną izolację obciążenia. -- Unikaj dostępu do API dla określonych podów. -- Unikaj wystawiania ApiServer na internet. -- Unikaj nieautoryzowanego dostępu RBAC. -- Port ApiServer z zaporą i białą listą IP. +- W praktyce zapobiega to kubeletom dodawania/usuwania/aktualizowania labeli z prefiksem node-restriction.kubernetes.io/. Ten prefiks labeli jest zarezerwowany dla administratorów do oznaczania obiektów Node w celach izolacji workloadów i kubeletom nie będzie wolno modyfikować labeli z tym prefiksem. +- A także umożliwia kubeletom dodawanie/usuwanie/aktualizowanie tych labeli i prefiksów labeli. +- Zapewnij za pomocą labeli bezpieczną izolację workloadów. +- Zabroń dostępu do API dla konkretnych Pods. +- Unikaj wystawiania ApiServer do internetu. +- Unikaj nieautoryzowanego dostępu przez RBAC. +- Zabezpiecz port ApiServer za pomocą firewalla i whitelisty adresów IP. -### Wzmocnienie SecurityContext +### Utwardzanie SecurityContext -Domyślnie użytkownik root będzie używany, gdy pod jest uruchamiany, jeśli nie zostanie określony inny użytkownik. Możesz uruchomić swoją aplikację w bardziej bezpiecznym kontekście, używając szablonu podobnego do poniższego: +Domyślnie, jeśli nie określono innego użytkownika, podczas uruchamiania Pod będzie używany użytkownik root. Możesz uruchomić swoją aplikację w bezpieczniejszym kontekście, używając szablonu podobnego do poniższego: ```yaml apiVersion: v1 kind: Pod @@ -183,26 +229,26 @@ allowPrivilegeEscalation: true Powinieneś aktualizować swoje środowisko Kubernetes tak często, jak to konieczne, aby mieć: -- Zaktualizowane zależności. -- Łatki błędów i zabezpieczeń. +- Zależności aktualne. +- Poprawki błędów i bezpieczeństwa. -[**Cykle wydania**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Co 3 miesiące pojawia się nowe wydanie mniejsze -- 1.20.3 = 1(duża).20(mała).3(łatka) +[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Co 3 miesiące pojawia się nowe wydanie minorowe -- 1.20.3 = 1(Major).20(Minor).3(patch) -**Najlepszym sposobem na aktualizację klastra Kubernetes jest (z** [**tutaj**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** +**Najlepszy sposób aktualizacji klastra Kubernetes (zgodnie z** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** -- Zaktualizuj komponenty węzła głównego, postępując według tej sekwencji: +- Zaktualizuj komponenty Master Node w następującej kolejności: - etcd (wszystkie instancje). -- kube-apiserver (wszystkie hosty kontrolne). +- kube-apiserver (wszystkie hosty control plane). - kube-controller-manager. - kube-scheduler. -- menedżer kontrolera chmury, jeśli go używasz. -- Zaktualizuj komponenty węzła roboczego, takie jak kube-proxy, kubelet. +- cloud controller manager, jeśli go używasz. +- Zaktualizuj komponenty Worker Node, takie jak kube-proxy, kubelet. -## Monitorowanie i bezpieczeństwo Kubernetes: +## Monitoring i bezpieczeństwo Kubernetes: -- Silnik polityki Kyverno -- Cilium Tetragon - oparte na eBPF monitorowanie bezpieczeństwa i egzekwowanie w czasie rzeczywistym +- Kyverno Policy Engine +- Cilium Tetragon - obserwacja bezpieczeństwa i egzekwowanie w czasie wykonania oparte na eBPF - Polityki bezpieczeństwa sieci -- Falco - monitorowanie i wykrywanie bezpieczeństwa w czasie rzeczywistym +- Falco - monitorowanie bezpieczeństwa w czasie wykonywania i wykrywanie {{#include ../../../banners/hacktricks-training.md}}