Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an dieHackTricks und HackTricks Cloud GitHub-Repositories senden.
Grundlegende Informationen
Der Zeit-Namespace in Linux ermöglicht pro-Namespace-Offsets zu den System-Monoton- und Boot-Zeituhren. Er wird häufig in Linux-Containern verwendet, um das Datum/ die Uhrzeit innerhalb eines Containers zu ändern und die Uhren nach dem Wiederherstellen aus einem Checkpoint oder Snapshot anzupassen.
Labor:
Erstellen Sie verschiedene Namespaces
CLI
sudounshare-T [--mount-proc] /bin/bash
Durch das Einbinden einer neuen Instanz des /proc-Dateisystems mit dem Parameter --mount-proc stellen Sie sicher, dass der neue Mount-Namespace eine genaue und isolierte Ansicht der prozessspezifischen Informationen für diesen Namespace hat.
Fehler: bash: fork: Kann keinen Speicher zuweisen
Wenn unshare ohne die Option -f ausgeführt wird, tritt ein Fehler aufgrund der Art und Weise auf, wie Linux neue PID (Process ID)-Namespaces behandelt. Die wichtigsten Details und die Lösung sind wie folgt:
Problem Erklärung:
Der Linux-Kernel ermöglicht es einem Prozess, neue Namespaces mit dem Systemaufruf unshare zu erstellen. Der Prozess, der die Erstellung eines neuen PID-Namespaces initiiert (als "unshare"-Prozess bezeichnet), tritt jedoch nicht in den neuen Namespace ein; nur seine Kindprozesse tun dies.
Die Ausführung von %unshare -p /bin/bash% startet /bin/bash im selben Prozess wie unshare. Folglich befinden sich /bin/bash und seine Kindprozesse im ursprünglichen PID-Namespace.
Der erste Kindprozess von /bin/bash im neuen Namespace wird PID 1. Wenn dieser Prozess beendet wird, löst er die Bereinigung des Namespaces aus, wenn keine anderen Prozesse vorhanden sind, da PID 1 die besondere Rolle hat, verwaiste Prozesse zu übernehmen. Der Linux-Kernel deaktiviert dann die PID-Zuweisung in diesem Namespace.
Konsequenz:
Das Beenden von PID 1 in einem neuen Namespace führt zur Bereinigung des PIDNS_HASH_ADDING-Flags. Dadurch schlägt die Funktion alloc_pid beim Erstellen eines neuen Prozesses fehl, da kein neuer PID zugewiesen werden kann, was den Fehler "Kann keinen Speicher zuweisen" verursacht.
Lösung:
Das Problem kann behoben werden, indem die Option -f zusammen mit unshare verwendet wird. Diese Option bewirkt, dass unshare nach der Erstellung des neuen PID-Namespaces einen neuen Prozess forkt.
Die Ausführung von %unshare -fp /bin/bash% stellt sicher, dass der unshare-Befehl selbst PID 1 im neuen Namespace wird. /bin/bash und seine Kindprozesse sind dann sicher in diesem neuen Namespace enthalten, was das vorzeitige Beenden von PID 1 verhindert und eine normale PID-Zuweisung ermöglicht.
Durch die Gewährleistung, dass unshare mit der -f-Flag ausgeführt wird, wird der neue PID-Namespace korrekt beibehalten, sodass /bin/bash und seine Unterprozesse ohne den Speicherzuweisungsfehler ausgeführt werden können.
Überprüfen Sie, in welchem Namespace sich Ihr Prozess befindet
Um festzustellen, in welchem Namespace sich Ihr Prozess befindet, können Sie den Befehl lsns verwenden. Dieser Befehl listet alle Namespaces auf, die auf Ihrem System vorhanden sind, sowie die Prozesse, die in jedem Namespace ausgeführt werden.
lsns
Die Ausgabe zeigt die verschiedenen Namespaces und die zugehörigen Prozesse an. Sie können den Namespace-Typ anhand der Spalte "Type" identifizieren. Der Namespace-Typ für die Zeit ist time.
sudofind/proc-maxdepth3-typel-nametime-execreadlink{} \; 2>/dev/null|sort-u# Find the processes with an specific namespacesudofind/proc-maxdepth3-typel-nametime-execls-l{} \; 2>/dev/null|grep<ns-number>
```bash nsenter -T TARGET_PID --pid /bin/bash ``` 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 darauf verweisenden Deskriptor (wie z.B. `/proc/self/ns/net`) zu haben.