Ansichten:
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 privilegierter Container 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, eine 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, dass nur begrenzte Dienstkonten und Benutzer die Berechtigung erhalten, diese Richtlinie zu verwenden.
Hinweis
Hinweis
Standardmäßig gibt es im Kontext des Containers keine Einschränkungen hinsichtlich der Fähigkeit des enthaltenen Prozesses, Privilegien zu eskalieren.

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 Namensraum 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 für Container zu parsen und zu filtern, bei denen allowPrivilegeEscalation auf true gesetzt ist.
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 werden ["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.
Hinweis
Hinweis
Mö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.
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 hier: https://learn.microsoft.com/en-us/azure/governance/policy/concepts/policy-for-kubernetes