Profilanwendbarkeit: Stufe 1
Erlauben Sie nicht generell, 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 übergeordnete Container-Sandbox
eingeschränkt sind und diese Einstellung nicht mit der Verwendung privilegierter Container
zusammenhängt.
Ein Container, der mit dem
allowPrivilegeEscalation-Flag auf true gesetzt läuft, 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 existiert (und ist standardmäßig
auf wahr gesetzt), um setuid-Binärdateien auszuführen.
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, um sicherzustellen, dass nur begrenzte Dienstkonten und Benutzer
die Berechtigung erhalten, diese Richtlinie zu verwenden.
HinweisStandardmäßig gibt es keine Einschränkungen für die 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 Rechteausweitung
erlauben, untersagt.
Dieser Befehl ruft alle Pods in allen Namespaces ab, gibt deren Details im JSON-Format
aus und verwendet jq, um die Ausgabe für Container zu parsen und zu filtern, bei denen
allowPrivilegeEscalation auf true gesetzt ist.Option 1
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(any(.spec.containers[]; .securityContext.allowPrivilegeEscalation == true)) | "\(.metadata.namespace)/\(.metadata.name)"'
Option 2
kubectl get pods --all-namespaces -o json | jq '.items[] |
select(.metadata.namespace != "kube-system" and .spec.containers[];
.securityContext.allowPrivilegeEscalation == true) | {pod:
.metadata.name, namespace: .metadata.namespace, container:
.spec.containers[].name}'
Beim Erstellen einer Pod-Sicherheitsrichtlinie sind
["kube-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 beliebiger
Container das
securityContext.privileged-Flag auf true gesetzt hat.
HinweisMöglicherweise müssen Sie den Befehl anpassen, je nach Ihren spezifischen Anforderungen
und der Struktur Ihrer Pod-Spezifikationen.
|
Wiederherstellung
Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzerarbeitslasten
enthält, um die Zulassung von Containern mit
.spec.allowPrivilegeEscalation auf true zu beschränken.
