Teil 1: Den Server kennenlernen
schroedi@emilie:~$ sudo apt-get install lshw Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: hwdata lshw-common The following NEW packages will be installed: hwdata lshw lshw-common 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 883kB of archives. After unpacking 3056kB of additional disk space will be used. Do you want to continue? [Y/n] y
Danach können Sie als root das Kommando lshw
starten und erhalten eine sehr ausgiebige Liste mit Server- und Hardware-Informationen. Am besten leiten Sie sich diese Ausgabe mit lshw >> /tmp/lshw_out.txt
in eine Datei um und sichern diese Ausgabedatei auf Ihrem lokalen Rechner.
Um mal schnell zu schauen, was im Server verbaut ist, erhalten Sie mit lshw -short
eine Ausgabe, wie es HP-UX mit einem IOScan anzeigen würde. Dies ist sicherlich besser als die umfangreiche Auswertung der gesamten LSHW-Ausgabe.
H/W path Device Class Description ===================================================== system VT8601 /0 bus 601-686B /0/0 memory BIOS /0/4 processor Intel(R) Celeron(TM) CPU 1200MHz /0/4/8 memory L1 cache /0/4/9 memory L2 cache /0/19 memory System Memory /0/19/0 memory None /0/19/1 memory None /0/e0000000 bridge VT8601 [Apollo ProMedia] /0/e0000000/1 bridge VT8601 [Apollo ProMedia AGP] /0/e0000000/1/0 display CyberBlade/i1 /0/e0000000/7 bridge VT82C686 [Apollo Super South] /0/e0000000/7.1 storage VT82C586A/B/VT82C686/A/B/VT823x/A/CPIPC Bus Master IDE /0/e0000000/7.1/0 ide0 bus IDE Channel 0 /0/e0000000/7.1/0/0 /dev/hda disk IC35L040AVVN07-0 /0/e0000000/7.4 bridge VT82C686 [Apollo Super ACPI] /0/e0000000/d eth0 network RTL-8139/8139C/8139C+
Dienste deaktivieren
In der Regel sind auf einem neu eingerichteten Server diverse Dienste aktiv. Dies erhöht natürlich das Interesse eines Angreifers, insbesondere, wenn die Dienste auf der einen Seite nicht genutzt werden, auf der anderen Seite dann auch nicht gepflegt und nicht den regelmäßigen Sicherheitspatches unterzogen werden. Sie können sich mit dem Befehl netstat
die Verbindungen von und auf Ihren Server und die derzeit offenen Sockets anzeigen lassen.
Serververbindungen via TCP
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 48 120.18.37.37:22 84.182.150.220:62333 ESTABLISHED tcp 0 0 120.18.37.37:22 84.182.150.220:62328 ESTABLISHED udp 0 0 0.0.0.0:68 0.0.0.0:* udp 0 0 120.18.37.37:123 0.0.0.0:* udp 0 0 127.0.0.1:123 0.0.0.0:* udp 0 0 0.0.0.0:123 0.0.0.0:*
Die 1. Spalte zeigt das Protokoll an. In unserem Fall TCP. Die 2. Spalte kann außer Acht gelassen und getrost übersprungen werden. Die 3. Spalte zeigt die IP-Adresse des Senders, in diesem Fall unseren Server und nach dem Doppelpunkt den Port. In der 4. Spalte finden wir die Adresse des Kommunikationspartners. Überschrieben ist die Zeile mit »Foreign Address«. Wie in Spalte 3 ist sie wieder mit IP-Adresse und Port gekennzeichnet.
An dieser Stelle sei gesagt, dass bis zum jetzigen Zeitpunkt eigentlich »nur« der Port 22 für SSH auf dem Server geöffnet sein sollte.
Die letzte Spalte zeigt den Zustand der Verbindungen an. In unserem Fall haben wir »Listen«, was soviel bedeutet wie, dass der SSH-Daemon auf dem Port, der in der Zeile angegeben ist, hört. In diesem Fall wäre es Port 22. Unsere beiden Verbindungen auf dem Server werden mit »ESTABLISHED« angezeigt.
Offene Socket-Verbindungen
Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 5 [ ] DGRAM 1102 /dev/log unix 3 [ ] STREAM CONNECTED 138994 unix 3 [ ] STREAM CONNECTED 138993 unix 3 [ ] STREAM CONNECTED 138607 unix 3 [ ] STREAM CONNECTED 138606 unix 2 [ ] DGRAM 27966 unix 2 [ ] DGRAM 1161 unix 2 [ ] DGRAM 1113
Auf diesen Bereich werden wir zu einem späteren Zeitpunkt eingehen.
In der Regel sollte auf einem »frischen« System nicht mehr als der Port 22 geöffnet sein.
Mit den Waffen des Gegners kämpfen
Um noch einen anderen Blickwinkel zu erhalten, scannen wir mit dem Portscanner NMAP unseren Server von unserem Client aus. Ich muss nicht dazu sagen, dass Sie bitte nur ihren eigenen Server scannen.
Mit dem Befehl nmap [Servername]
erhalten Sie dann eine Ausgabe wie die folgende:
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2006-01-15 17:53 CET Interesting ports on (120.18.37.37): (The 1661 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 22/tcp open ssh 445/tcp filtered microsoft-ds Nmap finished: 1 IP address (1 host up) scanned in 7.681 seconds
Um jetzt einen unerwünschten Dienst zu deaktivieren und zu entfernen, ist es am besten, ihn komplett zu deinstallieren, denn ein nicht vorhandenes Programm kann keinen Schaden anrichten: apt-get remove [Paketname]
. Sollte der Dienst danach immer noch laufen, müssen Sie ihn von Hand killen oder neu booten. Normalerweise sollte das nicht der Fall sein, aber prüfen sollte man es. Verwenden Sie die Option --purge
, um auch gleich alle zugehörigen Konfigurationsdateien loszuwerden.
Einen Dienst, der über (x)inetd gestartet wird, können Sie auch deaktivieren, ohne ihn gleich zu deinstallieren. Verwenden Sie dazu update-inetd -remove [Dienst]
(zum Beispiel Telnet, wenn dieser laufen würde).
update-inetd --remove telnet
Und danach müssen Sie den Superserver inetd neu starten. Dies können Sie mit dem Befehl /etc/init.d/inetd restart
tun:
/etc/init.d/inetd restart Restarting internet superserver: inetd.
Nun sollten nur noch die Dienste laufen, die auch wirklich erwünscht sind.
Ausblick
Im kommenden Teil unseres Workshops werden wir uns mit dem Absichern des Servers beschäftigen. Hierzu werden wir mit dem GRSECURITY-Patch unseren Kernel patchen und diesen nach erfolgreichem Kompilieren in unserem System installieren und nach einem kurzen Ausflug über Grub und LILO erfolgreich booten. Außerdem werden wir an dieser Stelle noch auf Troubleshooting eingehen, was zu tun ist, wenn der Kernel nicht bootet.