Docker --privileged
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)
Wenn du einen Container als privilegiert ausführst, deaktivierst du folgende Schutzmaßnahmen:
In einem privilegierten Container können alle Geräte in /dev/
zugegriffen werden. Daher kannst du entkommen, indem du die Festplatte des Hosts mountest.
Kernel-Dateisysteme bieten einen Mechanismus, um das Verhalten des Kernels durch einen Prozess zu ändern. Wenn es jedoch um Containerprozesse geht, wollen wir verhindern, dass sie Änderungen am Kernel vornehmen. Daher mounten wir Kernel-Dateisysteme als schreibgeschützt innerhalb des Containers, um sicherzustellen, dass die Containerprozesse den Kernel nicht ändern können.
Das /proc-Dateisystem ist selektiv beschreibbar, aber aus Sicherheitsgründen sind bestimmte Teile durch Überlagerung mit tmpfs vor Lese- und Schreibzugriff geschützt, sodass Containerprozesse nicht auf sensible Bereiche zugreifen können.
tmpfs ist ein Dateisystem, das alle Dateien im virtuellen Speicher speichert. tmpfs erstellt keine Dateien auf Ihrer Festplatte. Wenn Sie also ein tmpfs-Dateisystem aushängen, gehen alle darin befindlichen Dateien für immer verloren.
Container-Engines starten die Container mit einer begrenzten Anzahl von Fähigkeiten, um standardmäßig zu kontrollieren, was im Inneren des Containers geschieht. Privilegierte Container haben alle Fähigkeiten zugänglich. Um mehr über Fähigkeiten zu erfahren, lesen Sie:
Linux CapabilitiesSie können die verfügbaren Berechtigungen für einen Container manipulieren, ohne im --privileged
-Modus zu laufen, indem Sie die Flags --cap-add
und --cap-drop
verwenden.
Seccomp ist nützlich, um die syscalls zu beschränken, die ein Container aufrufen kann. Ein standardmäßiges Seccomp-Profil ist standardmäßig aktiviert, wenn Docker-Container ausgeführt werden, aber im privilegierten Modus ist es deaktiviert. Erfahren Sie hier mehr über Seccomp:
SeccompAuch zu beachten ist, dass wenn Docker (oder andere CRIs) in einem Kubernetes-Cluster verwendet werden, der seccomp-Filter standardmäßig deaktiviert ist.
AppArmor ist eine Kernel-Erweiterung, um Container auf eine begrenzte Menge von Ressourcen mit programm-spezifischen Profilen zu beschränken. Wenn Sie mit dem --privileged
-Flag ausführen, ist dieser Schutz deaktiviert.
Das Ausführen eines Containers mit dem --privileged
-Flag deaktiviert SELinux-Labels, wodurch er das Label der Container-Engine erbt, typischerweise unconfined
, was vollen Zugriff ähnlich der Container-Engine gewährt. Im rootlosen Modus wird container_runtime_t
verwendet, während im Root-Modus spc_t
angewendet wird.
Namespaces sind NICHT betroffen von dem --privileged
Flag. Auch wenn sie die Sicherheitsbeschränkungen nicht aktiviert haben, sehen sie beispielsweise nicht alle Prozesse im System oder im Host-Netzwerk. Benutzer können einzelne Namespaces deaktivieren, indem sie die --pid=host
, --net=host
, --ipc=host
, --uts=host
Container-Engine-Flags verwenden.
Standardmäßig nutzen Container-Engines keine Benutzer-Namensräume, außer für rootlose Container, die sie für die Dateisystemmontage und die Verwendung mehrerer UIDs benötigen. Benutzer-Namensräume, die für rootlose Container unerlässlich sind, können nicht deaktiviert werden und verbessern die Sicherheit erheblich, indem sie die Berechtigungen einschränken.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)