Kubernetes SecurityContext(s)
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Beim Festlegen des Sicherheitskontexts eines Pods kannst du mehrere Attribute verwenden. Aus der Sicht der defensiven Sicherheit solltest du Folgendes berücksichtigen:
runASNonRoot auf True setzen
runAsUser konfigurieren
Wenn möglich, Berechtigungen einschränken, indem du seLinuxOptions und seccompProfile angibst
Gib keinen Privilegien Gruppen-Zugriff über runAsGroup und supplementaryGroups.
fsGroup integer | Eine spezielle ergänzende Gruppe, die auf alle Container in einem Pod angewendet wird. Einige Volumentypen erlauben es dem Kubelet, die Eigentümerschaft dieses Volumens auf den Pod zu ändern: 1. Die besitzende GID wird die FSGroup sein 2. Das setgid-Bit ist gesetzt (neue Dateien, die im Volumen erstellt werden, gehören der FSGroup) 3. Die Berechtigungsbits werden mit rw-rw---- OR'd. Wenn nicht gesetzt, wird das Kubelet die Eigentümerschaft und Berechtigungen des Volumens nicht ändern. |
fsGroupChangePolicy string | Dies definiert das Verhalten beim Ändern der Eigentümerschaft und Berechtigung des Volumens, bevor es innerhalb des Pods exponiert wird. |
runAsGroup integer | Die GID, unter der der Einstiegspunkt des Containerprozesses ausgeführt wird. Verwendet den Standard zur Laufzeit, wenn nicht gesetzt. |
runAsNonRoot boolean | Gibt an, dass der Container als ein Nicht-Root-Benutzer ausgeführt werden muss. Wenn wahr, validiert das Kubelet das Image zur Laufzeit, um sicherzustellen, dass es nicht als UID 0 (Root) ausgeführt wird, und schlägt fehl, den Container zu starten, wenn dies der Fall ist. |
runAsUser integer | Die UID, unter der der Einstiegspunkt des Containerprozesses ausgeführt wird. Standardmäßig wird der Benutzer verwendet, der in den Metadaten des Images angegeben ist, wenn nicht angegeben. |
seLinuxOptions SELinuxOptions Weitere Informationen über seLinux | Der SELinux-Kontext, der auf alle Container angewendet werden soll. Wenn nicht angegeben, wird der Containerlaufzeit ein zufälliger SELinux-Kontext für jeden Container zugewiesen. |
seccompProfile SeccompProfile Weitere Informationen über Seccomp | Die seccomp-Optionen, die von den Containern in diesem Pod verwendet werden sollen. |
supplementalGroups integer array | Eine Liste von Gruppen, die auf den ersten Prozess angewendet werden, der in jedem Container ausgeführt wird, zusätzlich zur primären GID des Containers. |
Sysctls halten eine Liste von namespaced sysctls, die für den Pod verwendet werden. Pods mit nicht unterstützten Sysctls (durch die Containerlaufzeit) könnten beim Starten fehlschlagen. | |
Die Windows-spezifischen Einstellungen, die auf alle Container angewendet werden. Wenn nicht angegeben, werden die Optionen innerhalb des Sicherheitskontexts eines Containers verwendet. |
Dieser Kontext wird innerhalb der Containerdefinitionen festgelegt. Aus der Sicht der defensiven Sicherheit solltest du Folgendes berücksichtigen:
allowPrivilegeEscalation auf False
Füge keine sensiblen Capabilities hinzu (und entferne die, die du nicht benötigst)
privileged auf False
Wenn möglich, setze readOnlyFilesystem auf True
Setze runAsNonRoot auf True und setze eine runAsUser
Wenn möglich, erwäge, Berechtigungen einzuschränken, indem du seLinuxOptions und seccompProfile angibst
Gib keinen Privilegien Gruppen-Zugriff über runAsGroup.
Beachte, dass die in SecurityContext und PodSecurityContext festgelegten Attribute, der in SecurityContext angegebene Wert Vorrang hat.
allowPrivilegeEscalation boolean | AllowPrivilegeEscalation steuert, ob ein Prozess mehr Privilegien als sein übergeordneter Prozess erlangen kann. Dieses Bool steuert direkt, ob das no_new_privs-Flag für den Containerprozess gesetzt wird. AllowPrivilegeEscalation ist immer wahr, wenn der Container als Privileged ausgeführt wird oder CAP_SYS_ADMIN hat. |
capabilities Capabilities Weitere Informationen über Capabilities | Die Capabilities, die beim Ausführen von Containern hinzugefügt/entfernt werden sollen. Standardmäßig wird das Standardset von Capabilities verwendet. |
privileged boolean | Führe den Container im privilegierten Modus aus. Prozesse in privilegierten Containern sind im Wesentlichen äquivalent zu Root auf dem Host. Standardmäßig ist dies falsch. |
procMount string | procMount bezeichnet den Typ des proc-Mounts, der für die Container verwendet werden soll. Der Standard ist DefaultProcMount, der die Standardwerte der Containerlaufzeit für schreibgeschützte Pfade und maskierte Pfade verwendet. |
readOnlyRootFilesystem boolean | Ob dieser Container ein schreibgeschütztes Root-Dateisystem hat. Standard ist falsch. |
runAsGroup integer | Die GID, unter der der Einstiegspunkt des Containerprozesses ausgeführt wird. Verwendet den Standard zur Laufzeit, wenn nicht gesetzt. |
runAsNonRoot boolean | Gibt an, dass der Container als ein Nicht-Root-Benutzer ausgeführt werden muss. Wenn wahr, validiert das Kubelet das Image zur Laufzeit, um sicherzustellen, dass es nicht als UID 0 (Root) ausgeführt wird, und schlägt fehl, den Container zu starten, wenn dies der Fall ist. |
runAsUser integer | Die UID, unter der der Einstiegspunkt des Containerprozesses ausgeführt wird. Standardmäßig wird der Benutzer verwendet, der in den Metadaten des Images angegeben ist, wenn nicht angegeben. |
seLinuxOptions SELinuxOptions Weitere Informationen über seLinux | Der SELinux-Kontext, der auf den Container angewendet werden soll. Wenn nicht angegeben, wird der Containerlaufzeit ein zufälliger SELinux-Kontext für jeden Container zugewiesen. |
Die seccomp-Optionen, die von diesem Container verwendet werden sollen. | |
Die Windows-spezifischen Einstellungen, die auf alle Container angewendet werden. |
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)