User Namespace
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ein Benutzer-Namespace ist eine Funktion des Linux-Kernels, die die Isolation von Benutzer- und Gruppen-ID-Zuordnungen bereitstellt, sodass jeder Benutzer-Namespace sein eigenes Set von Benutzer- und Gruppen-IDs haben kann. Diese Isolation ermöglicht es Prozessen, die in verschiedenen Benutzer-Namespaces ausgeführt werden, unterschiedliche Berechtigungen und Eigentum zu haben, selbst wenn sie numerisch dieselben Benutzer- und Gruppen-IDs teilen.
Benutzer-Namespaces sind besonders nützlich in der Containerisierung, wo jeder Container sein eigenes unabhängiges Set von Benutzer- und Gruppen-IDs haben sollte, was eine bessere Sicherheit und Isolation zwischen Containern und dem Host-System ermöglicht.
Wenn ein neuer Benutzer-Namespace erstellt wird, beginnt er mit einem leeren Set von Benutzer- und Gruppen-ID-Zuordnungen. Das bedeutet, dass jeder Prozess, der im neuen Benutzer-Namespace ausgeführt wird, anfänglich keine Berechtigungen außerhalb des Namespaces hat.
ID-Zuordnungen können zwischen den Benutzer- und Gruppen-IDs im neuen Namespace und denen im übergeordneten (oder Host-) Namespace hergestellt werden. Dies ermöglicht es Prozessen im neuen Namespace, Berechtigungen und Eigentum zu haben, die den Benutzer- und Gruppen-IDs im übergeordneten Namespace entsprechen. Die ID-Zuordnungen können jedoch auf bestimmte Bereiche und Teilmengen von IDs beschränkt werden, was eine feinkörnige Kontrolle über die Berechtigungen ermöglicht, die Prozessen im neuen Namespace gewährt werden.
Innerhalb eines Benutzer-Namespace können Prozesse volle Root-Berechtigungen (UID 0) für Operationen innerhalb des Namespaces haben, während sie außerhalb des Namespaces weiterhin eingeschränkte Berechtigungen haben. Dies ermöglicht es, Container mit root-ähnlichen Fähigkeiten innerhalb ihres eigenen Namespaces auszuführen, ohne volle Root-Berechtigungen auf dem Host-System zu haben.
Prozesse können zwischen Namespaces mit dem Systemaufruf setns()
wechseln oder neue Namespaces mit den Systemaufrufen unshare()
oder clone()
mit dem CLONE_NEWUSER
-Flag erstellen. Wenn ein Prozess zu einem neuen Namespace wechselt oder einen erstellt, beginnt er, die Benutzer- und Gruppen-ID-Zuordnungen zu verwenden, die mit diesem Namespace verbunden sind.
Durch das Einhängen einer neuen Instanz des /proc
-Dateisystems, wenn Sie den Parameter --mount-proc
verwenden, stellen Sie sicher, dass der neue Mount-Namespace eine genaue und isolierte Sicht auf die prozessspezifischen Informationen dieses Namensraums hat.
Um den Benutzernamespace zu verwenden, muss der Docker-Daemon mit --userns-remap=default
gestartet werden (In Ubuntu 14.04 kann dies durch Ändern von /etc/default/docker
und anschließendes Ausführen von sudo service docker restart
erfolgen)
Es ist möglich, die Benutzerzuordnung aus dem Docker-Container mit folgendem Befehl zu überprüfen:
Oder vom Host mit:
Außerdem können Sie nur in einen anderen Prozess-Namespace eintreten, wenn Sie root sind. Und Sie können nicht in einen anderen Namespace eintreten ohne einen Deskriptor, der darauf verweist (wie /proc/self/ns/user
).
Im Fall von Benutzer-Namensräumen gilt: Wenn ein neuer Benutzer-Namensraum erstellt wird, erhält der Prozess, der in den Namensraum eintritt, ein vollständiges Set von Berechtigungen innerhalb dieses Namensraums. Diese Berechtigungen ermöglichen es dem Prozess, privilegierte Operationen wie das Einhängen von Dateisystemen, das Erstellen von Geräten oder das Ändern des Eigentums von Dateien durchzuführen, jedoch nur im Kontext seines Benutzer-Namensraums.
Zum Beispiel, wenn Sie die Berechtigung CAP_SYS_ADMIN
innerhalb eines Benutzer-Namensraums haben, können Sie Operationen durchführen, die normalerweise diese Berechtigung erfordern, wie das Einhängen von Dateisystemen, jedoch nur im Kontext Ihres Benutzer-Namensraums. Alle Operationen, die Sie mit dieser Berechtigung durchführen, haben keine Auswirkungen auf das Host-System oder andere Namensräume.
Daher, selbst wenn das Erhalten eines neuen Prozesses in einem neuen Benutzer-Namensraum Ihnen alle Berechtigungen zurückgibt (CapEff: 000001ffffffffff), können Sie tatsächlich nur die verwenden, die mit dem Namensraum verbunden sind (zum Beispiel Einhängen), aber nicht jede. Daher ist dies für sich genommen nicht ausreichend, um aus einem Docker-Container zu entkommen.
hacking tricks by submitting PRs to the** HackTricks and HackTricks Cloud github repos.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)