![]() ![]() ![]() |
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |
chroot() ist eine Funktion von UNIX, die im Falle eines erfolgreichen Buffer Overflows daf�r sorgt, da� der Zugriff nur auf ein Unterverzeichnis der Festplatte erfolgen kann. Ein Angreifer, der also mit den Rechten des D�mons versucht, auf das Verzeichnis /etc/ zuzugreifen, der wird unweigerlich scheitern. Hierzu bietet der LINUX Firewallkernel verschiedene Sicherheitslevel (security level) an, die sich allerdings in der Version 2.0 noch stark von den m�chtigen Security Leveln von Free/Net/OpenBSD/Trusted Solaris unterscheiden. Erst mit der LINUX Kernelversion 2.2 wurden diese Mechanismen nachgebildet, leider reichen diese aber nicht an die der BSD UNIXe heran, weil hierzu neue Flags bei den Dateirechten hinzugef�gt werden m��ten (Stichwort append-only flag).
Es ist z.B. somit einem gew�hnlichen User nicht mehr m�glich, �berhaupt Supervisor zu werden, oder einem Administrator nicht m�glich, Logdateien einzusehen oder zu ver�ndern. Man sieht, die sogenannten Trusted Kernel von Solaris oder den freien BSD-UNIXen haben durchaus ihren Sinn. Wer nun �berlegt, ob er Trusted Solaris oder Open/Net/FreeBSD einsetzen soll, der ist mit FreeBSD 3.1 oder Open/NetBSD besser beraten. Inzwischen sind alle BSD und Solaris Systeme auf Intel-Basis auch zu LINUX bin�r kompatibel.
Zur�ck zu der chroot() Funktion. Einige D�monen f�hren automatisch ein CHROOT() aus, indem sie chroot() ausf�hren, eine Kopie von sich selber in der chroot() Umgebung starten, und dann den Ursprungsproze� beenden. Zu diesen geh�rt z.B. der CERN-HTTPD, der APACHE-Server und dessen Clone, der Netscape Enterprise Server, und der BSD FTP-D�mon.
Wer sich nicht sicher ist, ob sein Dienst oder D�mon automatisch chroot() ausf�hrt, gen�gt ein Blick in den Quellcode oder die Dokumentation. Falls der D�mon nicht selber diese Funktion unterst�tzt, dann kann man aus der BASH - Shell heraus ein kleines Programm starten, welches ein chroot() ausf�hrt und dann erst den D�mon startet (system()). Dieser l�uft dann in der chroot() Umgebung, welche von dem kleinen Shellprogramm vorgegeben wurde. So ist es m�glich, unter allen UNIX�en Programme sicher zu betreiben, von denen nicht bekannt ist, ob diese chroot() ausf�hren. Man kann auch chroot() in einer chroot() Umgebung ausf�hren, also von dieser Seite her keine Unw�gbarkeiten.Warum unter Standard LINUX nicht generell alles in einer chroot() Umgebung l�uft ? Das ist einfach zu beantworten: Viele D�monen, wie z.B. POP3 oder IMAP4 ben�tigen Zugriff auf die Dateien /etc/passwd oder /etc/shadow, um das Pa�wort zu �berpr�fen. Nach dem Wechsel in eine chroot() Umgebung, z.B. in /home/userxy/chroot/ verlangt dann der POP3 D�mon den Zugriff auf eine Pa�wortdatei, die also dann im Verzeichnis /etc/userxy/chroot/etc/ liegen mu�. Man mu� also die Pa�wortdatei aus /etc/ in dieses Verzeichnis kopieren, damit der D�mon korrekt arbeiten kann. Dasselbe betrifft auch die Logdateien des D�mons. Diese m��ten dann in dem Verzeichnis /home/userxy/var/log/ zu finden sein. Falls der D�mon mit dynamischen Bibliotheken (shared libraries) kompiliert wurde (was viel RAM sparen kann), so mu� er auch auf die entsprechenden Libraries in den Verzeichnissen /home/userxy/lib/ oder /home/userxy/chroot/usr/lib/ Zugriff haben. Das bedeutet, da� man den D�mon entweder mit der Option -static in der Datei Makefile neu kompiliert, und dann in der chroot() Umgebung startet, oder man alle Libraries in die chroot() Umgebung kopieren mu�. Aber keine Panik, ein einfaches Kopieren mit dem Befehl cp -p -r reicht aus, damit die Dateirechte auch original mit �bertragen werden.
Die Firma SUN hat seit einiger Zeit fast alle wichtigen D�monen statisch kompiliert und mit einer chroot() Funktion ausgestattet. In sofern ist SUN allen anderen UNIXen, zumindest LINUX jedenfalls, weit voraus. Programme von Fremdherstellern jedenfalls sind noch nicht so weit. Das bedeutet, da� auch beim Einsatz von Trusted Solaris dieselben Probleme auftreten, wie mit LINUX. Man kommt um eine �berpr�fung der UNIX D�monen bei keinem UNIX herum. Mit dem Kernel 2.2 hat sich LINUX aber sehr an BSD-UNIX angepa�t. Es lassen sich alle BSD-UNIX D�monen von Open/Net/FreeBSD ganz einfach auf LINUX portieren. Angesichts der hohen Qualitat der BSD D�monen sollte man als Systemadministrator im Bedarfsfall auf diese D�momen zur�ckgreifen. Das chroot() Skript findet sich �berall im Internet oder auf dem Server des DFN-CERT, der wirklich eine viel untersch�tzte Resource ist...
Windows NT 4.0 im �brigen unterst�tzt im Prinzip aufgrund seiner POSIX - Kompatibilit�t auch chroot(). Wenn Windows NT in der Version 6.0 dann irgendwann einmal alle Funktionen von UNIX beherrscht, und ein echtes Multiuser/Multitasking Betriebssystem sein wird, dann wird das Thema dort sicher top aktuell werden.
![]() ![]() ![]() |
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |