wildlife

Posts Tagged ‘Linux’

Teamspeak 3 – How to Chroot

// December 22nd, 2009 // 22 Comments » // IT, Tutorials

Viele Dienst sind oft Ziel eines Angriffs. Teamspeak ist einer davon. Gerade bei Diensten, die 24/7 laufen, sollte man entsprechende Sicherheitsmaßnahmen ergreifen, um bei einem erfolgreichen Angriff den Schaden zu minimieren. Dazu empfehle ich, Teamspeak 3 in einer chroot-Umgebung laufen zu lassen.

chroot steht für „change root“ und ist eine Funktion auf Unix-Systemen um das Rootverzeichnis zu ändern. Sie wirkt sich nur auf den aktuellen Prozess und seine Kindprozesse aus. „chroot“ selbst kann sich auf den Systemaufruf chroot(2) als auch das Dienstprogramm chroot(8) beziehen.

Ein Programm, das auf ein Verzeichnis re-rooted wurde, kann nicht mehr auf Dateien außerhalb dieses Verzeichnisses zugreifen. Chrooting bietet somit eine einfache Möglichkeit, nicht vertrauenswürdige, Test- oder sonstwie gefährliche Programme in eine Sandbox zu versetzen. Es ist auch ein einfacher Jail-Mechanismus. (via Wikipedia)

Da der Benutzer direkt nach dem Login in die chroot gesperrt werden soll, verwende ich das Programm chrlogin von Harald Weidner. Der Text dieses Scripts kann einfach in eine Datei kopiert werden (z.B. chrlogin.c). Anschließend ist noch eine Anpassung fällig. Abhängig von dem Verzeichnis, in welchen man den Benutzer chrooten möchte, muss die Zeile 45 angepasst werden (bei unserem Beispiel /home/chroot/ts3 wäre dies also Level 3):

#define CHROOT_LEVEL 3

Nun muss noch der Code kompiliert werden, um eine ausführbare Datei zu erhalten

gcc -Wall -O2 -s chrlogin.c -o chrlogin

Damit das Programm beim Aufruf ohne vollständigen Pfad gefunden wird, sollte man es in ein entsprechendes Verzeichnis kopieren:

cp chrlogin /usr/local/bin/

Jetzt noch die Datei mit den entsprechenden Berechtigungen versehen:

chown root:root /usr/local/bin/chrlogin
chmod 4755 /usr/local/bin/chrlogin

Nun sollte man den benötigten Verzeichnisbaum des Jails aufbauen. Ich habe hierbei /home/chroot/ts3 gewählt:

mkdir -p /home/chroot/ts3
cd /home/chroot/ts3
mkdir bin dev etc home lib usr var tmp
mkdir usr/bin usr/lib var/tmp
chmod 1777 tmp

Anschließend kopiert man die benötigten Binaries in das chroot, damit diese dort zur Verfügung stehen. Damit ein Angreifer im Falle einer Übernahme des Teamspeak Servers möglichst wenig Werkzeuge zur Anwendung vorfindet, kopiere ich nur die Shell selbst (hier /bin/bash) und nohup, mit welchem ich später den Teamspeak-Prozess im Hintergrund starten kann:

cp -p /bin/bash /home/chroot/ts3/bin/
cp -p /usr/bin/nohup /home/chroot/ts3/usr/bin/

Da die Programme / Binaries selbst noch diverse libraries benötigen, müssen wir diese in die /lib bzw. /usr/lib-Verzeichnisse des Chroot-Jails kopieren. Um herauszufinden, welche libs benötigt werden, kann man ldd nutzen. Hierbei muss jedoch der vollständige Pfad zu der Executable angegeben werden (z.B. ldd /bin/bash). Die verschiedenen libs notiert man sich und schaut, dass keine doppelt auftauchen. Anschließend kann man diese einfach an die benötigte Stelle kopieren:

cp -p /lib/libreadline.so.5 /home/chroot/ts3/lib/
cp -p /lib/libdl.so.2 /home/chroot/ts3/lib/
cp -p /lib/libc.so.6 /home/chroot/ts3/lib/
cp -p /lib/libncurses.so.5 /home/chroot/ts3/lib/
cp -p /lib/ld-linux.so.2 /home/chroot/ts3/lib/
cp -p /lib/librt.so.1 /home/chroot/ts3/lib/
cp -p /lib/libpthread.so.0 /home/chroot/ts3/lib/
cp -p /usr/lib/libstdc++.so.6 /home/chroot/ts3/usr/lib/
cp -p /lib/libm.so.6 /home/chroot/ts3/lib/
cp -p /lib/libgcc_s.so.1 /home/chroot/ts3/lib/
cp -p /lib/libresolv.so.2 /home/chroot/ts3/lib
cp -p /lib/libnss_dns.so.2 /home/chroot/ts3/lib

Danach sollte man noch ein paar Dateien aus /etc kopieren, die ggf. benötigt werden, um Hostnamen und ähnliches aufzulösen:

cp -p /etc/HOSTNAME /home/chroot/ts3/etc/
cp -p /etc/resolv.conf /home/chroot/ts3/etc/
cp -p /etc/hosts /home/chroot/ts3/etc/
cp -p /etc/fstab /home/chroot/ts3/etc/

Nun benötige ich noch einen Benutzer und eine Gruppe, mit welchen ich in dem Chroot-Jail Teamspeak 3 starten werde. Das Passwort kann und sollte natürlich geändert werden:

groupadd ts3
useradd -g ts3 -d /home/chroot/ts3/home/ts3 -m -s /usr/local/bin/chrlogin -p testpasswort ts3

Damit der Benutzer, das Passwort, die Gruppe, etc. auch im Chroot-Jail bekannt sind, muss ich die entsprechenden Einträge dort hin bringen. Dazu nutze ich grep, um nur die einzelnen Einträge zu kopieren:

grep ts3 /etc/passwd >> /home/chroot/ts3/etc/passwd
grep ts3 /etc/group >> /home/chroot/ts3/etc/group

In /home/chroot/ts3/etc/passwd muss ich noch das Home-Verzeichnis und die Shell von /home/chroot/ts3/home/ts3:/usr/local/bin/chrlogin auf /home/ts3:/bin/bash ändern. Nach der Benutzer und die Gruppe bekannt ist, kann ich dem Benutzer den Besitz auf die tmp-Verzeichnisse übertragen:

chown ts3:ts3 /home/chroot/ts3/tmp
chown ts3:ts3 /home/chroot/ts3/var/tmp

Nun benötige ich noch die null-, zero-, random- und urandom-Devices. /dev/null und /dev/zero lege ich mit mknod an, /dev/random und /dev/urandom mounte ich auf die Originalverzeichnisse:

mknod /home/chroot/ts3/dev/null c 1 3
chmod 666 /home/chroot/ts3/dev/null
mknod /home/chroot/ts3/dev/zero c 1 5
chmod 666 /home/chroot/ts3/dev/zero

mount -o bind /dev/random /home/chroot/ts3/dev/random
mount -o bind /dev/urandom /home/chroot/ts3/dev/urandom

Wenn Teamspeak 3 nicht als root gestartet wird (was es definitv nicht sollte), muss noch das shm-Device angelegt und als tempfs gemounted werden:

mkdir /home/chroot/ts3/dev/shm
mount -t tmpfs tmpfs /home/chroot/ts3/dev/shm

Danach kann man Teamspeak 3 in das neue Home-Verzeichnis des Benutzers kopieren und die Berechtigungen setzen:

cp -R ~/downloads/teamspeak3-server_linux-x86 /home/chroot/ts3/home/ts3
chown -R ts3:ts3 /home/chroot/ts3/home/ts3

Nun wechselt man mit su - ts3 in den neu angelegten Benutzeraccount und kann feststellen, dass man sich bereits im Chroot-Jail befindet. Da ich mehrere IP-Adresse auf meinem Server habe, muss ich diese in der ini-Datei für Teamspeak 3 angeben. Um diese ini-Datei zu erstellen, welchselt man in das teamspeak-Verzeichnis und startet die Executable mit dem Parameter createinifile=1:

cd teamspeak3-server_linux-x86/
./ts3server_linux_x86 createinifile=1

Die Datei kann nun z.B. über den root-Account angepasst werden. Im Chroot-Jail ist dies nicht möglich, da ich keinen Editor rüber kopiert habe. Nach dem Anpassen kann der Server nun mit dem Parameter inifile=<namederinidatei> gestartet werden:

./ts3server_linux_x86 inifile=server.ini

Hierbei läuft der Teamspeak 3 Server jedoch nur so lange, bis die Konsole geschlossen wird. Aus diesem Grund sollte man den Dienst mit nohup und dem Parameter >/dev/null 2>&1 & starten, um diesen auch bei geschlossener Session im Hintergrund laufen zu lassen:

nohup ./ts3server_linux_x86 inifile=server.ini >/dev/null 2>&1 &

Viel Spaß mit Eurem sicheren Teamspeak 3 Server.

Dank geht an

PS: In Kürze wird es wohl auch ein Script geben, mit welchem die oben gezeigten Aufgaben automatisch durchgeführt werden können. Dieses werde ich dann hier zur Verfügung stellen.

UPDATE 22.12.2009 1855 Uhr
Nachdem ich meine Non-Profit-Lizenz bekommen habe und der Teamspeak 3 Server bei der Lizenzüberprüfung zu den Aktivierungsservern verbindet, trat ein Fehler auf. Grund waren hierfür folgende fehlende Dateien:

cp -p /lib/libresolv.so.2 /home/chroot/ts3/lib
cp -p /lib/libnss_dns.so.2 /home/chroot/ts3/lib

Ich habe diese oben ergänzt, so dass die Anleitung auch bei Nutzung einer Lizenz funktioniert.

Linux Notizen – 3 – SSH

// April 8th, 2009 // No Comments » // IT

ssh-keygen -l -f ssh_host_rsa_key.pub
zeigt den Fingerprint des öffentlichen SSH-RSA-Schlüssels an (in /etc/ssh)

ssh-keygen -t rsa
erstellen eines neuen SSH-Schlüssels

cat <keydateiname> >> .ssh/authorized_keys
anfügen eines SSH-Schlüssels an die authorized_keys

rsync -ave ssh <Host>:/etc .
synchronisieren des Verzeichnisses /etc von Rechner da46 in das lokale Verzeichnis

Realtek rtl8187se Treiber für Linux

// March 24th, 2009 // 3 Comments » // IT

Ich musste leider feststellen, dass unter vielen Linux-Distributionen (inkl. Backtrack) der Treiber für den Realtek rtl8187 Chipsatz bereits integriert ist. Bei dem rtl8187se-Chipsatz, welcher als WLAN-Adapter bei vielen Netbooks (u.a. MSI Wind und LG X110) verbaut ist, ist dies jedoch leider nicht der Fall. Um mir und anderen die Suche zu ersparen, hier nun der Treiber zum Download:

  Realtek rtl8187se Treiber für Linux (1.8 MiB, 898 hits)

Backtrack auf LG X110 von SD-Karte starten

// March 22nd, 2009 // 10 Comments » // IT, Tutorials

Bei den meisten Netbooks besteht das Problem, dass kein CD-Rom-Laufwerk integriert ist. Möchte man nun  ein anderes Betriebssystem installieren oder von einer Live-CD booten steht man vor einer größeren Schwierigkeit.

Allerdings haben viele Netbooks (einschließlich dem LG X110) einen SD-Card-Slot. Warum also nicht diesen als Installationsquelle bzw. Bootmedium nutzen? Da ich aus einem aktuellen Anlass mal wieder Backtrack benötige, möchte ich dies anhand dieses OS vorstellen.

Zuerst lädt man sich die aktuelle Version von Backtrack (vorzugsweise in der USB-Version) hier herunter. Das ISO entpackt in ein Verzeichnis seiner Wahl und kopiert dann die beiden Verzeichnisse Boot und BT3 auf die SD-Card. Diese sollte mit FAT32 formatiert sein, da dieses Dateisystem sowohl von Windows als auch von Linux ohne Probleme gelesen und beschrieben werden kann.

Nach dem Kopiervorgang startet man unter Windows die Datei bootinst.bat im Verzeichnis Boot. Mit diesem Script wird das Medium, auf welchem sich die Datei befindet, bootfähig gemacht und so konfiguriert, dass Backtrack startet.

Anschließend muss man nur noch im BIOS die Bootreihenfolge so ändern, dass von USB-Devices gebootet wird.

Linux Notizen – 1

// March 20th, 2009 // No Comments » // IT

Aufgrund der aktuellen SuSE Linux Enterprise Server Schulung hab ich mal ein paar Befehle, die ich mir notiert habe. Da ich so sozial bin (und ich natürlich hier mal schneller nachschlagen kann, als auf irgendeinem Blatt Papier) stelle ich hier die Befehle zur Verfügung.
Wer was damit anfangen kann, darf sich natürlich gerne bedienen. ;) (more...)

Interesse an Ubuntu?

// February 27th, 2009 // No Comments » // IT

Hallo, mein Name ist Domenic und ich bin seit über einem Jahr Blogger. Ich habe vor kurzem ein neues Projekt aus der Taufe gehoben, und zwar handelt es sich dabei um den Ubuntu-Blog.

Wie der Name schon verrät, behandele ich dort Themen, die sich rund um die Linux-Distribution Ubuntu drehen, aber auch andere Distributionen wie openSUSE, Kubuntu oder Mandriva finden Einzug auf meinem Blog.

Ich gehe auf Probleme ein, die ich mit dem Ubuntu-Betriebssystem habe und wie diese am besten bzw. schnellsten lösen konnte. Doch ich stelle auch regelmäßig Tools und Programme vor, die ich unter Ubuntu verwende und nur an andere weiterempfehlen kann. Diese Programme teste ich dann auf Herz und Nieren und schildere, zu welchem Zweck ich sie verwende.

Auch neue Versionen und Updates werden von mir thematisiert bzw. sofort nach dem Release in Augenschein genommen, sodass meine Leser gleich darüber im Bilde sind, was sich verändert hat und welche Auswirkungen damit verbunden sind.

Wenn Ihr Euch für Ubuntu interessiert bzw. Euch dafür begeistern lassen möchtet, dann würde ich mich sehr freuen, wenn Ihr mir einen Besuch abstattet und den einen oder anderen Kommentar dort hinterlasst.

[Software] Unter Windows auf Linux-Dateisysteme zugreifen

// April 16th, 2008 // No Comments » // IT

Mittels des IFS-Treiber für Windows ist es möglich, auf Linux-Dateisysteme wie ext2 zuzugreifen. Dabei wird der Treiber im reinen Kernelmodus installiert. Durch die Einbindung auf Softwareebene, stehen die eingebundenen Linuxpartitionen allen Windowsanwendungen zur Verfügung.

gefunden via.

Links vom 27.03.-10.04.08

// April 11th, 2008 // No Comments » // Allgemein, Blog / Website

(more...)