Kubernetes Hardening

Wesprzyj HackTricks

Narzędzia do analizy klastra

Kubescape to narzędzie open-source dla K8s zapewniające wielochmurowe spojrzenie na K8s, w tym analizę ryzyka, zgodność z zabezpieczeniami, wizualizację RBAC i skanowanie podatności obrazów. Kubescape skanuje klastry K8s, pliki YAML i wykresy HELM, wykrywając błędy konfiguracji zgodnie z wieloma ramami pracy (takimi jak NSA-CISA, MITRE ATT&CK®), podatności oprogramowania oraz naruszenia RBAC (kontroli dostępu opartej na rolach) we wczesnych etapach potoku CI/CD, oblicza wynik ryzyka natychmiast i pokazuje trendy ryzyka w czasie.

kubescape scan --verbose

Narzędzie kube-bench jest narzędziem, które sprawdza, czy Kubernetes jest wdrożony w sposób bezpieczny, uruchamiając sprawdzenia udokumentowane w CIS Kubernetes Benchmark. Możesz wybrać:

  • uruchomienie kube-bench wewnątrz kontenera (udostępniającego 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 binariów ze strony Releases page,

  • skompilowanie go ze źródeł.

Narzędzie kubeaudit to narzędzie wiersza poleceń i pakiet Go do audytowania klastrów Kubernetes pod kątem różnych zagrożeń związanych z bezpieczeństwem.

Kubeaudit może wykryć, czy działa wewnątrz kontenera w klastrze. Jeśli tak, spróbuje przeprowadzić audyt wszystkich zasobów Kubernetes w tym klastrze:

kubeaudit all

To narzędzie ma również argument autofix do automatycznego naprawiania wykrytych problemów.

Narzędzie kube-hunter poluje na słabości związane z bezpieczeństwem w klastrach Kubernetes. Narzędzie zostało opracowane w celu zwiększenia świadomości i widoczności problemów związanych z bezpieczeństwem w środowiskach Kubernetes.

kube-hunter --remote some.node.com

Kubei to narzędzie do skanowania podatności i benchmark 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 aplikacyjne i systemowe.

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

Mkat to narzędzie zaprojektowane do testowania innych rodzajów ryzykownych sprawdzeń w porównaniu z innymi narzędziami. Głównie posiada 3 różne tryby:

  • find-role-relationships: Znajduje, które role AWS są uruchamiane w których podach.

  • find-secrets: Próbuje zidentyfikować tajne informacje w zasobach K8s, takich jak Pody, ConfigMaps i Secrets.

  • test-imds-access: Próbuje uruchomić pody i uzyskać dostęp do metadanych v1 i v2. UWAGA: Spowoduje to uruchomienie poda w klastrze, bądź bardzo ostrożny, ponieważ może to być niepożądane!

Auditowanie kodu IaC

Popeye to narzędzie, które skanuje aktywny klaster Kubernetes i raportuje potencjalne problemy z zasobami i konfiguracjami wdrożonymi. Oczyszcza twój klaster na podstawie tego, co jest wdrożone, a nie tego, co znajduje się na dysku. Poprzez skanowanie klastra wykrywa błędy konfiguracji i pomaga zapewnić, że najlepsze praktyki są stosowane, zapobiegając tym samym przyszłym problemom. Ma na celu zmniejszenie obciążenia poznawczego, z którym boryka się osoba zarządzająca klastrami Kubernetes w środowisku produkcyjnym. Ponadto, jeśli twój klaster używa serwera metryk, raportuje potencjalne nadmierne/przeciążenia zasobów i próbuje ostrzec, gdy twój klaster zaczyna brakować zasobów.

KICS znajduje podatności bezpieczeństwa, problemy z zgodnością i błędy 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

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

Skanuje infrastrukturę chmurową wdrożoną za pomocą Terraform, planu Terraform, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless lub szablonów ARM i wykrywa błędy konfiguracji związane z bezpieczeństwem i zgodnością za pomocą skanowania opartego na grafie.

kube-score to narzędzie do wykonywania analizy statycznego kodu definicji obiektów Kubernetes.

Aby zainstalować:

DystrybucjaPolecenie / Link

Gotowe binaria dla macOS, Linuxa i Windowsa

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

Kontekst bezpieczeństwa Kubernetes PodSecurityContext i SecurityContext

Możesz skonfigurować kontekst bezpieczeństwa podów (za pomocą PodSecurityContext) oraz kontenery, które zostaną uruchomione (za pomocą SecurityContext). Aby uzyskać więcej informacji, przeczytaj:

Kubernetes SecurityContext(s)

Zabezpieczenia interfejsu API Kubernetes

Bardzo ważne jest zabezpieczenie dostępu do serwera API Kubernetes, ponieważ złośliwy podmiot posiadający wystarczające uprawnienia mógłby go nadużyć i wyrządzić szkody w środowisku. Ważne jest zabezpieczenie zarówno dostępu (ustawienie białej listy źródeł dostępu do serwera API i odrzucenie innych połączeń) jak i uwierzytelnienia (zgodnie z zasadą najmniejszych uprawnień). I zdecydowanie nigdy nie pozwalaj na anonimowe żądania.

Zwykły proces żądania: Użytkownik lub K8s ServiceAccount –> Uwierzytelnienie –> Autoryzacja –> Kontrola dostępu.

Wskazówki:

  • Zamknij porty.

  • Unikaj anonimowego dostępu.

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

  • W zasadzie zapobiega kubeletom dodawaniu/usuwaniu/aktualizowaniu etykiet z prefiksem node-restriction.kubernetes.io/. Ten prefiks etykiety jest zarezerwowany dla administratorów do etykietowania ich obiektów Node w celu izolacji obciążenia, a kubeletom nie będzie wolno modyfikować etykiet z tym prefiksem.

  • Pozwala kubeletom dodawać/usuwać/aktualizować te etykiety i prefiksy etykiet.

  • Zapewnij z etykietami bezpieczną izolację obciążenia.

  • Unikaj dostępu do określonych podów z interfejsu API.

  • Unikaj wystawiania ApiServera do internetu.

  • Unikaj nieautoryzowanego dostępu RBAC.

  • Port ApiServera z zapora sieciową i białą listą adresów IP.

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 zabezpieczenia

Należy aktualizować środowisko Kubernetes tak często, jak to konieczne, aby:

  • Zależności były aktualne.

  • Poprawki błędów i zabezpieczeń były zastosowane.

Cykle wydań: Co 3 miesiące pojawia się nowe wydanie mniejsze -- 1.20.3 = 1(Główne).20(Mniejsze).3(poprawka)

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

  • Zaktualizuj komponenty węzła głównego, postępując zgodnie z tą sekwencją:

  • etcd (wszystkie instancje).

  • kube-apiserver (wszystkie hosty płaszcza kontrolnego).

  • kube-controller-manager.

  • kube-scheduler.

  • menedżer kontrolera chmury, jeśli jest używany.

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

Wesprzyj HackTricks

Last updated