Profilanwendbarkeit: Stufe 1
Erlauben Sie generell nicht, dass Container mit dem
allowPrivilegeEscalation-Flag auf "true" gesetzt ausgeführt werden. Das Gewähren dieses Rechts kann dazu führen,
dass ein Prozess, der einen Container ausführt, mehr Rechte erhält, als er ursprünglich
hatte.Es ist wichtig zu beachten, dass diese Rechte weiterhin durch die allgemeine Container-Sandbox
eingeschränkt sind und diese Einstellung nicht mit der Verwendung von privilegierten
Containern zusammenhängt.
Ein Container, der mit dem
allowPrivilegeEscalation-Flag auf "true" gesetzt ist, kann Prozesse haben, die mehr Privilegien als ihr übergeordnetes
Element erlangen können.Es sollte mindestens eine Zugriffssteuerungsrichtlinie definiert sein, die es Containern
nicht erlaubt, Rechteausweitung zuzulassen. Die Option, setuid-Binärdateien auszuführen,
existiert (und ist standardmäßig auf "true" gesetzt).
Wenn Sie Container ausführen müssen, die setuid-Binärdateien verwenden oder eine Rechteausweitung
erfordern, sollte dies in einer separaten Richtlinie definiert werden. Sie sollten
sorgfältig prüfen, dass nur begrenzte Dienstkonten und Benutzer die Berechtigung erhalten,
diese Richtlinie zu verwenden.
HinweisStandardmäßig gibt es keine Einschränkungen hinsichtlich der Fähigkeit des enthaltenen
Prozesses, innerhalb des Kontexts des Containers Privilegien zu erhöhen.
|
Auswirkung
Pods, die mit
spec.allowPrivilegeEscalation: true definiert sind, werden nicht zugelassen, es sei denn, sie werden unter einer spezifischen
Richtlinie ausgeführt.Prüfung
Listen Sie die Richtlinien auf, die für jeden Namespace im Cluster verwendet werden,
und stellen Sie sicher, dass jede Richtlinie die Zulassung von Containern, die eine
Rechteausweitung erlauben, untersagt.
Dieser Befehl ruft alle Pods über alle Namespaces ab, gibt deren Details im JSON-Format
aus und verwendet
jq, um die Ausgabe zu parsen und zu filtern, sodass nur Container mit allowPrivilegeEscalation auf true angezeigt werden.kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(any(.spec.containers[]; .securityContext.allowPrivilegeEscalation == true)) | "\(.metadata.namespace)/\(.metadata.name)"'
OR
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(any(.spec.containers[]; .securityContext.allowPrivilegeEscalation == true)) | select(.metadata.namespace != "kube-system" and .metadata.namespace != "gatekeeper-system" and .metadata.namespace != "azure-arc" and .metadata.namespace != "azure-extensions-usage-system") | "\(.metadata.name) \(.metadata.namespace)"'
Beim Erstellen einer Pod-Sicherheitsrichtlinie sind die
["kube-system", "gatekeeper-system", "azure-arc", "azure-extensions-usage-system"]-Namespaces standardmäßig ausgeschlossen.Dieser Befehl verwendet
jq, einen Kommandozeilen-JSON-Prozessor, um die JSON-Ausgabe von kubectl get pods zu analysieren und Pods herauszufiltern, bei denen ein Container das securityContext.privileged-Flag auf true gesetzt hat. Möglicherweise müssen Sie den Befehl an Ihre spezifischen
Anforderungen und die Struktur Ihrer Pod-Spezifikationen anpassen.Wiederherstellung
Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzer-Workloads
enthält, um die Zulassung von Containern mit
.spec.allowPrivilegeEscalation auf true zu beschränken.Pod-Sicherheitsrichtlinien und Zuweisungen können im Azure-Portal durch die Suche
nach Richtlinien gefunden werden. Eine detaillierte Schritt-für-Schritt-Anleitung
finden Sie in der Kubernetes-Richtliniendokumentation.
