Der Befehl chroot erstellt eine isolierte Umgebung unter Linux, indem er das Stammverzeichnis für alle laufenden Prozesse ändert.

Möchten Sie Anwendungen oder Dienste in einem isolierten Bereich unter Linux ausführen? Oder möchten Sie eine Anwendung testen und debuggen, ohne dass sie den Rest Ihres Systems beeinträchtigt? Wenn ja, möchten Sie etwas über Chroot erfahren, einen leistungsstarken, in Linux integrierten Mechanismus, der es Ihnen ermöglicht, eine separate Umgebung in Ihrem System zu erstellen.

Lassen Sie uns Chroot im Detail erkunden, seine Vorteile und Anwendungsfälle kennenlernen, wie man es auf einem Linux-System einrichtet und, falls nötig, wie man es umgeht.

Was ist Chroot unter Linux?

Chroot oder Change-Root ist wohl eine der einfachsten und ältesten Formen der Containerisierungssoftware, die es einem Benutzer ermöglicht, Anwendungen und Dienste sicher zu sandboxen. Unter Sandboxing versteht man in der Informatik den Prozess, ein Programm auf engstem Raum mit vordefinierten Ressourcen zu isolieren.

Wenn Sie damit vertraut sind Docker und wie es funktioniert, können Sie sich chroot als eine stark abgespeckte Version davon vorstellen. Chroot funktioniert, indem es das Stammverzeichnis eines Programms ändert, den Zugriff und die Sichtbarkeit einschränkt und so eine zusätzliche Isolations- und Sicherheitsebene bietet.

Im Wesentlichen erstellen Sie ein separates Verzeichnis, kopieren alle Abhängigkeiten des Programms in das neue Verzeichnis und führen dann den Befehl chroot aus. Dadurch kann das Programm ordnungsgemäß funktionieren, ohne auf das Basisdateisystem zugreifen zu müssen.

Das Chrooten eines Programms ist eine großartige Möglichkeit, seine Zuverlässigkeit an einem sicheren Ort zu testen, ohne die Dateien des tatsächlichen Systems zu verändern. Darüber hinaus können Sie auch das Sicherheitsrisiko verringern, das durch ein kompromittiertes Paket verursacht wird, da das kompromittierte Paket in einer Chroot-Umgebung nicht auf vertrauliche Systemdateien zugreifen und diese ändern kann.

Das Programm kann nur auf Dateien zugreifen und diese anzeigen, die in das Chroot-Verzeichnis importiert wurden, das auch als „Chroot-Gefängnis“ bezeichnet wird. Dadurch wird verhindert, dass das Programm und seine Unterprozesse das Basissystem stören.

Was ist ein Chroot-Gefängnis?

Ein Chroot-Gefängnis ist eine isolierte Umgebung, in der sich Chroot-Programme befinden und ausgeführt werden. Der Begriff Chroot-Jail leitet sich von dem Konzept ab, dass sich der Prozess und seine Unterprozesse innerhalb der Chroot-Umgebung befinden haben keinen Zugriff oder keine Sichtbarkeit auf das Basisdateisystem und sind innerhalb der Grenzen von Chroot mit vordefinierten Bedingungen gefangen Ressourcen.

Da Ihnen nun das Konzept von Chroot klar ist, können wir uns an die Arbeit machen und lernen, wie Sie ein Chroot-Gefängnis erstellen und Prozesse darin erzeugen können.

So erstellen Sie ein Chroot-Gefängnis und führen darin Programme aus

Ein Chroot-Gefängnis ist im Wesentlichen ein Verzeichnis, das alle erforderlichen Ressourcen, Dateien, Binärdateien und anderen Abhängigkeiten enthält, die ein Programm benötigen würde, um ordnungsgemäß zu funktionieren.

Anders als in einer normalen Linux-Umgebung ist die Umgebung des Chroot-Gefängnisses jedoch stark eingeschränkt und das Programm kann nicht auf externe oder zusätzliche Dateien und Systemressourcen zugreifen.

Um beispielsweise die Bash-Shell in einem Chroot-Gefängnis auszuführen, müssten Sie die Bash-Binärdatei und alle ihre Abhängigkeiten in das Chroot-Verzeichnis kopieren.

Hier sind die Schritte zum Erstellen eines Chroot-Gefängnisses und zum Erstellen einer Bash-Shell:

  1. Damit ein Programm erfolgreich ausgeführt werden kann, müssen Sie alle seine Abhängigkeiten in das Chroot-Verzeichnis kopieren. Suchen wir mit den Befehlen which und ldd nach der Binärdatei, in diesem Fall Bash, und dem Speicherort aller ihrer Abhängigkeiten:
    welche bash
    ldd /usr/bin/bash
  2. Nachdem Sie nun den Speicherort der Binärdatei und ihrer Abhängigkeiten kennen, kopieren Sie sie in das Verzeichnis, das Sie in ein Chroot-Gefängnis umwandeln möchten. Erstellen Sie mit dem Befehl mkdir die erforderlichen Verzeichnisse und verwenden Sie sie der cp-Befehl, kopieren Sie alle Dateien in die entsprechenden Verzeichnisse:
    mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
  3. Wenn Sie schließlich das Programm und seine Abhängigkeiten kopiert haben, können Sie den Befehl chroot mit erhöhten Rechten und dem Präfix sudo ausführen, um die Chroot-Umgebung im ausgewählten Verzeichnis zu erzeugen. Standardmäßig wird eine Bash-Shell erzeugt. Hier ist der Befehl zum Eintippen:
    sudo chroot-Verzeichnisname

Das sind alle Schritte, um ein Chroot-Gefängnis zu erstellen und darin ein Programm auszuführen.

Wie man aus einem Chroot-Gefängnis ausbricht

Während sich Chroot-Jails gut zum Testen instabiler Software eignen, sind sie auch beim Umgang mit SSH-Verbindungen nützlich, da das Chrooten verbundener Benutzer eine von vielen Möglichkeiten ist Möglichkeiten, Ihren SSH-Server zu sichern.

Wenn Sie hingegen ein Penetrationstester sind und sich beim SSH-Server Ihres Ziels angemeldet haben, kann es frustrierend sein und sich wie eine Sackgasse anfühlen, wenn Sie feststellen, dass es sich um eine Chroot-Umgebung handelt.

Es gibt jedoch viele Möglichkeiten, einem falsch konfigurierten Chroot-Gefängnis zu entkommen. Einige erfordern C-Programmierkenntnisse, während andere mit Tools automatisiert werden können. Einige einfache Möglichkeiten, Chroot zu entkommen, sind:

  • Verschachtelte Chroot-Aufrufe
  • Verschachtelte Chroot-Aufrufe mit gespeichertem Dateideskriptor
  • Mounten Sie die Root-Methode
  • procfs Escape
  • ptrace Escape

Beachten Sie, dass Sie zum Ausführen von Chroot-Escape mit einer dieser Methoden über erweiterte Berechtigungen im System verfügen müssen. Weitere Informationen zu diesen Fluchtmethoden finden Sie unter Das GitHub-Repository von chw00t, ein Chroot-Escape-Automatisierungstool.

Jetzt wissen Sie alles über Chroot unter Linux

Nachdem Sie nun wissen, was Chroot ist, wie es funktioniert und wie es implementiert wird, sollten Sie in der Lage sein, Anwendungen mühelos vom Terminal aus zu sandboxen. Bedenken Sie, dass es, wie Sie wissen, mehrere Möglichkeiten gibt, aus einer chroot-Umgebung auszubrechen.

Dies zeigt, dass Chroot in keiner Weise als Sicherheitsfunktion konzipiert wurde. Daher sollten Sie Chroot mit großer Vorsicht verwenden, da eine falsche Konfiguration nach hinten losgehen und die Sicherheit Ihres Systems gefährden kann.

Am besten bleiben Sie bei dedizierten Sandboxing-Lösungen wie Containerisierungssoftware oder virtuellen Maschinen. Bei beiden geht es um Sandboxing und Sicherheit. Wenn also kein neuer Zero-Day in der Stadt auftaucht, müssen Sie sich um die Sicherheit und Integrität Ihres Systems keine Sorgen machen.

Wenn Sie sich nicht sicher sind, welche Containerisierungs- und Virtualisierungssoftware Sie wählen sollen, sollten Sie beide ausprobieren und selbst herausfinden, welche besser ist.