Skanowanie luk bezpieczeństwa w Kubernetes

Skanowanie luk bezpieczeństwa w Kubernetes

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.

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 

 

 

 

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!

 

 

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 
 
 

Lekcja demo kursu Grafany!

X