Kubernetes to platforma orkiestracji kontenerów typu open source, która automatyzuje wdrażanie, skalowanie, a także zarządzanie aplikacjami w kontenerach. Wraz ze wzrostem popularności rośnie zapotrzebowanie na narzędzia, które pomogą zabezpieczyć nie tylko platformę, ale również jej zasoby.
Oto niektóre z dostępnych narzędzi do skanowania bezpieczeństwa Kubernetes:
kube-hunter: narzędzie typu open source, które skanuje klastry Kubernetes pod kątem luk w zabezpieczeniach i błędnych konfiguracji.
kube-bench: narzędzie, które sprawdza, czy Kubernetes jest bezpiecznie wdrożony, uruchamiając testy CIS Kubernetes Benchmark.
kubesec: narzędzie do analizy zagrożeń bezpieczeństwa dla plików Kubernetes, które zapewnia ocenę ryzyka i zalecenia dotyczące środków zaradczych.
W poniższych paragrafach opiszę, jak zainstalować i używać każdego z tych narzędzi do skanowania bezpieczeństwa Kubernetes.
Wszystkie testy zostaną przeprowadzone na minikube.
Ostatni webinar w tym roku!
Zapraszamy na bezpłatny webinar poświęcony roli sztucznej inteligencji w zarządzaniu infrastrukturą IT, zarówno w dużych serwerowniach, jak i w środowiskach homelab.
W trakcie wydarzenia dowiesz się, jak AI może wspierać codzienną pracę administratora, pomagając w automatyzacji procesów, monitorowaniu zasobów, analizie danych oraz zwiększaniu efektywności operacyjnej.
Zapisy na: https://asdevops.pl/warsztaty/
Instalacja kube-hunter
W większości systemów Linux Python w wersji 3 jest zainstalowany, jednak pip3 służący instalacji narzędzi Pythona już nie. W związku z tym, że prezentowane narzędzie zostało opracowane na podstawie Pythona i wymaga instalacji za pomocą pip3, na początku zainstalujmy niezbędne paczki:
sudo apt install python3 python3-pip
Następnie po zainstalowaniu niezbędnych pakietów przystępujemy do instalacji samego narzędzia:
sudo pip3 install kube-hunter
Po chwili narzędzie powinno być już gotowe do użycia.
Skanowanie z użyciem kube-hunter
Wystarczy, że w wierszu poleceń wpiszesz:
kube-hunter
Choose one of the options below:
1. Remote scanning (scans one or more specific IPs or DNS names)
2. Interface scanning (scans subnets on all local network interfaces)
3. IP range scanning (scans a given IP range)
Otrzymasz listę tak jak w powyższym przykładzie. Możesz przeprowadzać trzy rodzaje skanowania. Pierwsze z nich jest to zdalne skanowanie, gdzie podajesz IP lub adres. Drugie skanuje twoją lokalną sieć. Dzięki ostatniej zeskanujesz cały zakres sieciowy.
W związku z tym, że korzystam z minikube, skanowanie przeprowadzę na lokalnej sieci, czyli wybiorę opcję 2:
Your choice: 2
2023-03-04 09:20:21,892 INFO kube_hunter.modules.report.collector Started hunting
2023-03-04 09:20:21,892 INFO kube_hunter.modules.report.collector Discovering Open Kubernetes Services
2023-03-04 09:20:34,022 INFO kube_hunter.modules.report.collector Found open service "Kubelet API" at 192.168.49.2:10250
2023-03-04 09:20:34,023 INFO kube_hunter.modules.report.collector Found open service "Etcd" at 192.168.49.2:2379
Nodes
+-------------+--------------+
| TYPE | LOCATION |
+-------------+--------------+
| Node/Master | 192.168.49.2 |
+-------------+--------------+
Detected Services
+-------------+--------------------+----------------------+
| SERVICE | LOCATION | DESCRIPTION |
+-------------+--------------------+----------------------+
| Kubelet API | 192.168.49.2:10250 | The Kubelet is the |
| | | main component in |
| | | every Node, all pod |
| | | operations goes |
| | | through the kubelet |
+-------------+--------------------+----------------------+
| Etcd | 192.168.49.2:2379 | Etcd is a DB that |
| | | stores cluster's |
| | | data, it contains |
| | | configuration and |
| | | current |
| | | state |
| | | information, and |
| | | might contain |
| | | secrets |
+-------------+--------------------+----------------------+
No vulnerabilities were found
W tym wypadku otrzymałem informację o braku luk w zabezpieczeniach mojego klastra.
Instalacja kube-bench
W tym wypadku wystarczy pobrać najnowszy pakiet binarny przeznaczony dla naszej dystrybucji i użyć polecenia do zainstalowania go. Robimy to w następujący sposób:
curl -L https://github.com/aquasecurity/kube-bench/releases/download/v0.6.12-rc/kube-bench_0.6.12-rc_linux_amd64.deb --output kube-bench.deb
Następnie przeprowadzamy instalację:
sudo dpkg -i kube-bench.deb
Po chwili narzędzie powinno być już gotowe do użycia.
Skanowanie z użyciem kube-bench
Skanowanie przeprowadzimy poprzez wpisanie nazwy lub jeżeli chcemy, możemy podać adres IP lub DNS wskazując, co ma dokładnie przeskanować:
sudo kube-bench
== Summary policies ==
0 checks PASS
0 checks FAIL
24 checks WARN
0 checks INFO
== Summary total ==
34 checks PASS
37 checks FAIL
51 checks WARN
0 checks INFO
Zostanie wyświetlony bardzo obszerny raport, którego pozwolę sobie tutaj nie wklejać.
Instalacja kubesec
Kubesec to narzędzie do analizowania plików yaml Kubernetesa i wykresów Helm pod kątem błędnych konfiguracji zabezpieczeń i luk w zabezpieczeniach. Może pomóc zidentyfikować potencjalne problemy z bezpieczeństwem i udzielić wskazówek, jak je naprawić.
W celu instalacji tego narzędzia pobieramy najnowszą wersję w następujący sposób:
curl -LO "https://github.com/controlplaneio/kubesec/releases/download/v2.12.0/kubesec_linux_amd64.tar.gz"
Następnie rozpakowujemy do katalogu systemowego, abyśmy mogli korzystać z nazwy bez specyfikacji położenia:
sudo tar -C /usr/local/bin -xzf kubesec-linux-amd64.tar.gz kubesec
Po chwili narzędzie powinno być już gotowe do użycia.
Skanowanie z użyciem kubesec
W przypadku tego oprogramowania przeskakujemy pliki yaml. Dla przykładu wklejam kod prostego deploymentu, który zapisuje w pliku pod nazwą deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: yaml
name: httpd-dep
labels:
app: httpd-app
spec:
replicas: 5
selector:
matchLabels:
app: httpd-app
template:
metadata:
labels:
app: httpd-app
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
Następnie po zapisaniu przeprowadzam jego skanowanie w następujący sposób:
kubesec scan deployment.yaml
[
{
"object": "Deployment/httpd-dep.yaml",
"valid": true,
"fileName": "deployment.yaml",
"message": "Passed with a score of 0 points",
"score": 0,
"scoring": {
"advise": [
{
"id": "ApparmorAny",
"selector": ".metadata .annotations .\"container.apparmor.security.beta.kubernetes.io/nginx\"",
"reason": "Well defined AppArmor policies may provide greater protection from unknown threats. WARNING: NOT PRODUCTION READY",
"points": 3
},
…dalsza część…
}
]
Raport, jaki otrzymałem, jest bardzo obszerny, dlatego większa jego część została pominięta.
Podsumowanie
Kubernetes posiada bardzo sporą ilość narzędzi, dzięki którym będziesz w stanie przeskanować całe środowisko, jak i same pliki yaml, z jakich tworzone są typy w nim. Sama instalacja nie należy do trudnych tak samo, jak i sposób korzystania z nich. Mam nadzieję, że za pomocą tego artykułu udało mi się namówić na korzystanie z tych narzędzi. Szczególnie, że oprócz poświęconego czasu na ich instalację, a także użycie nie musicie ponieść żadnych innych kosztów.
Chcesz wiedzieć więcej na temat konteneryzacji? Przeczytaj nasze artykuły, a także weź udział w kursach!