Pentesting Kubernetes Services
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kubernetes używa kilku specyficznych usług sieciowych, które możesz znaleźć wystawione na Internet lub w sieci wewnętrznej, gdy już skompromitujesz jeden pod.
Jednym ze sposobów może być wyszukiwanie Identity LIKE "k8s.%.com"
w crt.sh, aby znaleźć subdomeny związane z kubernetes. Innym sposobem może być wyszukiwanie "k8s.%.com"
w githubie i szukanie plików YAML zawierających ten ciąg.
Może być dla Ciebie przydatne zrozumienie, jak Kubernetes może wystawiać usługi publicznie, aby je znaleźć:
Exposing Services in KubernetesNastępujące porty mogą być otwarte w klastrze Kubernetes:
Port | Process | Description |
---|---|---|
443/TCP | kube-apiserver | Port API Kubernetes |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | Metryki kontenerów |
6443/TCP | kube-apiserver | Port API Kubernetes |
8443/TCP | kube-apiserver | Port API Minikube |
8080/TCP | kube-apiserver | Niezabezpieczony port API |
10250/TCP | kubelet | HTTPS API, który pozwala na pełny dostęp w trybie pełnym |
10255/TCP | kubelet | Niezautoryzowany port HTTP tylko do odczytu: pod, działające pody i stan węzła |
10256/TCP | kube-proxy | Serwer sprawdzania stanu Kube Proxy |
9099/TCP | calico-felix | Serwer sprawdzania stanu dla Calico |
6782-4/TCP | weave | Metryki i punkty końcowe |
30000-32767/TCP | NodePort | Proxy do usług |
44134/TCP | Tiller | Usługa Helm nasłuchująca |
To jest usługa API Kubernetes, z którą administratorzy zazwyczaj komunikują się za pomocą narzędzia kubectl
.
Typowe porty: 6443 i 443, ale także 8443 w minikube i 8080 jako nieszyfrowany.
Sprawdź następującą stronę, aby dowiedzieć się, jak uzyskać dostęp do wrażliwych danych i wykonywać wrażliwe działania, rozmawiając z tym serwisem:
Kubernetes EnumerationTen serwis działa na każdym węźle klastra. To serwis, który kontroluje podsy w węźle. Komunikuje się z kube-apiserver.
Jeśli znajdziesz ten serwis wystawiony, możesz mieć do czynienia z nieautoryzowanym RCE.
Jeśli odpowiedź to Unauthorized
, oznacza to, że wymagana jest autoryzacja.
Jeśli możesz wylistować węzły, możesz uzyskać listę punktów końcowych kubeletów za pomocą:
Możesz nadużyć tej usługi, aby eskalować uprawnienia w Kubernetes:
Usługa przydatna do zbierania metryk.
Gdy port jest wystawiony na wszystkich węzłach za pomocą NodePort, ten sam port jest otwierany na wszystkich węzłach, przekierowując ruch do zadeklarowanej Usługi. Domyślnie ten port będzie w zakresie 30000-32767. Tak więc nowe, niekontrolowane usługi mogą być dostępne przez te porty.
Dostęp anonimowy do kube-apiserver API endpoints nie jest dozwolony. Ale możesz sprawdzić niektóre punkty końcowe:
ETCD przechowuje sekrety klastra, pliki konfiguracyjne i inne wrażliwe dane. Domyślnie ETCD nie może być dostępny anonimowo, ale zawsze warto to sprawdzić.
Jeśli ETCD może być dostępny anonimowo, możesz potrzebować użyć etcdctl narzędzia. Następujące polecenie pobierze wszystkie klucze przechowywane:
Dokumentacja Kubelet wyjaśnia, że domyślnie dostęp anonimowy do usługi jest dozwolony:
Umożliwia anonimowe żądania do serwera Kubelet. Żądania, które nie są odrzucane przez inną metodę uwierzytelniania, są traktowane jako żądania anonimowe. Anonimowe żądania mają nazwę użytkownika
system:anonymous
oraz nazwę grupysystem:unauthenticated
Aby lepiej zrozumieć, jak działa uwierzytelnianie i autoryzacja API Kubelet, sprawdź tę stronę:
Kubelet Authentication & AuthorizationUsługa Kubelet API nie jest udokumentowana, ale kod źródłowy można znaleźć tutaj, a znalezienie wystawionych punktów końcowych jest tak proste jak uruchomienie:
Wszystkie z nich brzmią interesująco.
Możesz użyć narzędzia Kubeletctl do interakcji z Kubeletami i ich punktami końcowymi.
Ten punkt końcowy wyświetla listę podów i ich kontenerów:
Ten punkt końcowy pozwala na bardzo łatwe wykonywanie kodu wewnątrz dowolnego kontenera:
Aby uniknąć tego ataku, usługa kubelet powinna być uruchamiana z --anonymous-auth false
, a usługa powinna być segregowana na poziomie sieci.
Gdy port kubelet tylko do odczytu jest ujawniony, możliwe jest, aby nieautoryzowane osoby uzyskały dostęp do informacji z API. Ujawnienie tego portu może prowadzić do ujawnienia różnych elementów konfiguracji klastra. Chociaż informacje, w tym nazwy podów, lokalizacje plików wewnętrznych i inne konfiguracje, mogą nie być krytyczne, ich ujawnienie nadal stanowi ryzyko bezpieczeństwa i powinno być unikane.
Przykład, jak ta luka może być wykorzystana, polega na tym, że zdalny atakujący uzyskuje dostęp do konkretnego URL. Przechodząc do http://<external-IP>:10255/pods
, atakujący może potencjalnie uzyskać wrażliwe informacje z kubelet:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)