PID Namespace
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)
Der PID (Process IDentifier) Namespace ist eine Funktion im Linux-Kernel, die Prozessisolierung bietet, indem sie einer Gruppe von Prozessen ermöglicht, ihren eigenen Satz von einzigartigen PIDs zu haben, die von den PIDs in anderen Namespaces getrennt sind. Dies ist besonders nützlich in der Containerisierung, wo Prozessisolierung für Sicherheit und Ressourcenmanagement entscheidend ist.
Wenn ein neuer PID-Namespace erstellt wird, erhält der erste Prozess in diesem Namespace die PID 1. Dieser Prozess wird zum "init"-Prozess des neuen Namespaces und ist verantwortlich für die Verwaltung anderer Prozesse innerhalb des Namespaces. Jeder nachfolgende Prozess, der innerhalb des Namespaces erstellt wird, hat eine einzigartige PID innerhalb dieses Namespaces, und diese PIDs sind unabhängig von PIDs in anderen Namespaces.
Aus der Perspektive eines Prozesses innerhalb eines PID-Namespaces kann dieser nur andere Prozesse im selben Namespace sehen. Er ist sich der Prozesse in anderen Namespaces nicht bewusst und kann nicht mit ihnen über traditionelle Prozessmanagement-Tools (z. B. kill
, wait
usw.) interagieren. Dies bietet ein Maß an Isolation, das hilft, zu verhindern, dass Prozesse sich gegenseitig stören.
Wenn ein neuer Prozess erstellt wird (z. B. durch Verwendung des clone()
-Systemaufrufs), kann der Prozess einem neuen oder bestehenden PID-Namespace zugewiesen werden. Wenn ein neuer Namespace erstellt wird, wird der Prozess zum "init"-Prozess dieses Namespaces.
Der Kernel verwaltet eine Zuordnung zwischen den PIDs im neuen Namespace und den entsprechenden PIDs im übergeordneten Namespace (d. h. dem Namespace, aus dem der neue Namespace erstellt wurde). Diese Zuordnung ermöglicht es dem Kernel, PIDs bei Bedarf zu übersetzen, z. B. beim Senden von Signalen zwischen Prozessen in verschiedenen Namespaces.
Prozesse innerhalb eines PID-Namespaces können nur andere Prozesse im selben Namespace sehen und mit ihnen interagieren. Sie sind sich der Prozesse in anderen Namespaces nicht bewusst, und ihre PIDs sind innerhalb ihres Namespaces einzigartig.
Wenn ein PID-Namespace zerstört wird (z. B. wenn der "init"-Prozess des Namespaces beendet wird), werden alle Prozesse innerhalb dieses Namespaces beendet. Dies stellt sicher, dass alle mit dem Namespace verbundenen Ressourcen ordnungsgemäß bereinigt werden.
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 Prozessinformationen hat, die spezifisch für diesen Namespace sind.
Beachten Sie, dass der Root-Benutzer aus dem ursprünglichen (Standard-)PID-Namespace alle Prozesse sehen kann, selbst die in neuen PID-Namensräumen, weshalb wir alle PID-Namensräume sehen können.
Wenn Sie von dem Standard-Namespace in einen PID-Namespace eintreten, können Sie weiterhin alle Prozesse sehen. Und der Prozess aus diesem PID-Namespace kann die neue Bash im PID-Namespace sehen.
Außerdem können Sie nur in einen anderen Prozess-PID-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/pid
)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)