|
1.
Chrooten
Einen Dienst zu chrooten stellt eine Möglichkeit dar einen Dienst (oder
Benutzer) auf für ihn vorgesehene Ressourcen zu beschränken und zu verhindern,
dass er Zugang zu Bereichen (oder Informationen) erlangt, die zu einem
unberechtigten Besitz von root-Rechten führen könnte. Indem man einen Dienst als
ein anderer Benutzer als root laufen lässt (nobody, apache,
named) kann ein Angreifer nur auf Dateien, mit den Berechtigungen des
Benutzers, zugreifen. Dies bedeutet, dass ein Angreifer nie root
Zugang erlangen kann, selbst wenn der entsprechende Dienst eine
Sicherheitslücke hätte.
Einige Dienste wie zum Beispiel pure-ftpd und bind haben
eingebaute Fähigkeiten für chroot, andere Dienste bieten dies nicht.
Wenn der Dienst es anbietet, dann benutzen Sie es, andernfalls müssen Sie in
die Materie einsteigen und einen eigenen Benutzer erstellen. Lassen Sie es uns
nun versuchen und eine eigene chroot-Umgebung aufbauen. Um einen Einstieg zu
finden und zu sehen wie chroot arbeitet versuchen wir es zuerst mit bash
(als einfachen Einstieg ins Lernen).
Erstellen Sie das /chroot Verzeichnis mittels
mkdir /chroot. Nun müssen wir herausfinden, mit welche dynamischen
Bibliotheken bash kompiliert wurde (wenn es mit -static
kompiliert wurde, dann ist dieser Schritt nicht nötig).
Der folgende Befehl wird eine Liste der von bash benutzten Bibliotheken
ausgeben.
Befehlsauflistung 1.1: Benutzte Bibliotheken auflisten |
# ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000)
libdl.so.2 => /lib/libdl.so.2 (0x40060000)
libc.so.6 => /lib/libc.so.6 (0x40063000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
|
Nun erstellen wir die Umgebung für bash.
Befehlsauflistung 1.1: chroot-Umgebung für Bash erstellen |
# mkdir /chroot/bash
# mkdir /chroot/bash/bin
# mkdir /chroot/bash/lib
|
Nun kopieren wir die von bash benutzten Dateien (/lib) in
das chrootete lib und kopieren den bash Befehl n das Verzeichnis
/bin im chroot. Dies wird dieselbe Umgebung erstellen - nur
eben mit weniger Funktionalität. Versuchen Sie nach dem kopieren:
chroot /chroot/bash /bin/bash. Wenn Sie ein Prompt bekommen, dass als
aktuelles Verzeichnis / angibt, dann hat alles funktioniert. Wenn
nicht, wird ordnungsgemäß eine Fehlermeldung erscheinen, welche die fehlende
Datei angibt. Manche dynamischen Bibliotheken bauen aufeinander auf.
Sie werden feststellen, dass innerhalb der chroot-Umgebung nichts anderes als
echo funktioniert. Dies ist deshalb so, weil wir keine anderen Befehle
in unserer chroot-Umgebung haben und echo ein in bash eingebauter Befehl
ist.
Dies ist in etwa der Weg den Sie gehen würden, um einen "ge-chrooteten" Dienst
zu erstellen. Der einzige Unterschied ist, dass Dienste manchmal auf Geräten
und Konfigurationsdateien in /etc basieren. Kopieren Sie diese
einfach in die chroot-Umgebung (Geräte können mit cp -a kopiert werden) und
editieren Sie das Init-Skript so dass es die chroot-Umgebung vor der Ausführung
verwendet. Es kann schwierig sein herauszufinden, welche Konfigurationsdateien
und Geräte ein Dienst benutzt. Dies ist der Punkt, an dem strace
nützlich wird. Starten Sie den Dienst mit /usr/bin/strace bash und
suchen Sie nach open, read, stat und vielleicht noch connect. Dies wird Ihnen
Aufschluss darüber geben, welche Dateien Sie kopieren müssen. Aber in den
meisten Fällen kopieren Sie einfach die passwd-datei (editieren sie die Kopie
und entfernen Sie die Benutzer, die mit dem Dienst nichts zu tun haben),
/dev/zero, /dev/log und /dev/random.
1.
User Mode Linux
Ein weiterer Weg eine besser gesicherte Umgebung zu erstellen besteht darin,
eine virtuelle Maschine zu verwenden. Eine virtuelle Maschine ist, wie der
Name schon sagt, ein Prozess der auf dem wirklichen Betriebssystem läuft und
eine Hardware- und Betriebssystemumgebung vorspiegelt, welche eine eigene
Maschine zu sein scheint. Der Sicherheitsgewinn hierbei ist, dass bei einer
Kompromittierung der virtuellen Maschine lediglich diese betroffen ist und
nicht die übergeordnete Installation.
Für weitere Informationen zum Aufsetzen von User Mode Linux können Sie den User Mode Linux Guide
(englisch) zu Rate ziehen.
|