Kubernetes Hardening

Wsparcie HackTricks

Narzędzia do analizy klastra

Kubescape to narzędzie open-source K8s, które zapewnia jednolity widok K8s w wielu chmurach, w tym analizę ryzyka, zgodność z bezpieczeństwem, wizualizację RBAC i skanowanie podatności obrazów. Kubescape skanuje klastry K8s, pliki YAML i wykresy HELM, wykrywając błędne konfiguracje zgodnie z wieloma ramami (takimi jak NSA-CISA, MITRE ATT&CK®), podatności oprogramowania i 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 scan --verbose

Narzędzie 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. Możesz wybrać:

  • uruchomienie kube-bench z wnętrza kontenera (dzieląc przestrzeń nazw 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ń,

  • skompilowanie go ze źródła.

Narzędzie kubeaudit to narzędzie wiersza poleceń oraz pakiet Go do audytowania klastrów Kubernetes pod kątem różnych problemów 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 all

To narzędzie ma również argument autofix, aby automatycznie naprawić wykryte problemy.

Narzędzie 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.

kube-hunter --remote some.node.com

Kubei to narzędzie do skanowania luk 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.

KubiScan to narzędzie do skanowania klastra Kubernetes w poszukiwaniu ryzykownych uprawnień w modelu autoryzacji opartym na rolach (RBAC) Kubernetes.

Mkat 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 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ć!

Audyt kodu IaC

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 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 można się spotkać podczas obsługi klastra Kubernetes w terenie. Ponadto, jeśli twój klaster korzysta z serwera metryk, zgłasza potencjalne nadmiarowe/niedostateczne alokacje zasobów i próbuje ostrzec cię, jeśli twój klaster wyczerpie zasoby.

KICS znajduje luki w zabezpieczeniach, problemy z 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 i specyfikacje OpenAPI 3.0

Checkov to narzędzie do analizy statycznej kodu dla infrastruktury jako kodu.

Skanuje infrastrukturę chmurową dostarczoną za pomocą Terraform, planu Terraform, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless lub ARM Templates i wykrywa błędne konfiguracje zabezpieczeń i zgodności za pomocą skanowania opartego na grafach.

kube-score to narzędzie, które wykonuje statyczną analizę kodu definicji obiektów Kubernetes.

Aby zainstalować:

DystrybucjaKomenda / Link

Prekompilowane binaria dla macOS, Linux i Windows

Docker

docker pull zegl/kube-score (Docker Hub)

Homebrew (macOS i Linux)

brew install kube-score

Krew (macOS i Linux)

kubectl krew install score

Wskazówki

Kubernetes PodSecurityContext i SecurityContext

Możesz skonfigurować kontekst zabezpieczeń Podów (z PodSecurityContext) oraz kontenerów, które będą uruchamiane (z SecurityContext). Aby uzyskać więcej informacji, przeczytaj:

Kubernetes SecurityContext(s)

Wzmocnienie zabezpieczeń 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ł dostępu do serwera API i odrzucenie wszelkich innych połączeń), jak i uwierzytelniania (zgodnie z zasadą najmniejszych uprawnień). I zdecydowanie nigdy nie pozwalaj na anonimowe żądania.

Typowy proces żądania: Użytkownik lub K8s ServiceAccount –> Uwierzytelnianie –> Autoryzacja –> Kontrola przyjęć.

Wskazówki:

  • Zamknij porty.

  • Unikaj dostępu anonimowego.

  • NodeRestriction; Brak dostępu z określonych węzłów do API.

  • 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.

Wzmocnienie 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:

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

Ogólne Utwardzanie

Powinieneś aktualizować swoje środowisko Kubernetes tak często, jak to konieczne, aby mieć:

  • Zaktualizowane zależności.

  • Łatki błędów i zabezpieczeń.

Cykle wydania: Co 3 miesiące pojawia się nowe wydanie mniejsze -- 1.20.3 = 1(Major).20(Minor).3(patch)

Najlepszym sposobem na aktualizację klastra Kubernetes jest (z tutaj):

  • Zaktualizuj komponenty węzła głównego, postępując według tej sekwencji:

  • etcd (wszystkie instancje).

  • kube-apiserver (wszystkie hosty kontrolne).

  • kube-controller-manager.

  • kube-scheduler.

  • cloud controller manager, jeśli go używasz.

  • Zaktualizuj komponenty węzła roboczego, takie jak kube-proxy, kubelet.

Wsparcie dla HackTricks

Last updated