Umzug zur Sicherheit

Viele Angriffe auf Server werden von Skript-Kiddies ausgeführt, die dazu automatische Tools verwenden. Doch deren Scans kann man in vielen Fällen einfach ins Leere laufen lassen, wenn man Dienste nicht auf den Standard-Ports betreibt.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 5 Min.
Von
  • Johannes Endres
Inhaltsverzeichnis

"Security by Obscurity" ist in Verruf geraten – und das zu Recht. Zu oft versuchen Hersteller, Sicherheit zu gewährleisten, indem sie Informationen zurückzuhalten. Schwachstellen kommen meist trotzdem ans Licht, und in vielen Fällen stellte sich heraus, dass sich unter dem Mäntelchen der Geheimhaltung vor allem Schlamperei und Inkompetenz verbargen. Trotzdem empfiehlt es sich, Hackern die Informationen über die eigene (Netzwerk-)Infrastruktur nicht auf dem silbernen Tablett zu servieren. Nicht, weil Geheimhaltung die Sicherheit eines Dienstes tatsächlich erhöht, sondern weil sie dem Administrator im Fall eines Angriffs genau den Vorsprung verleiht, den er braucht, um angemessen zu reagieren.

Der Zeitraum zwischen der Veröffentlichung einer Sicherheitslücke und den ersten Skript-Kiddie-tauglichen Exploits wird immer kürzer. Wenn zum Beispiel am Freitag eine neue Lücke im SSH-Server auf Bugtraq erscheint, kann man davon ausgehen, dass sich spätestens Sonntag die ersten Kiddies mit automatischen Tools auf die Suche nach Opfern machen. Dazu scannen sie ganze Netze nach Rechnern, auf denen auf dem Standard-SSH-Port 22 ein verwundbarer SSH-Server aktiv ist. Läuft dieser stattdessen auf Port 52200, hat er gute Chancen, der ersten Angriffswelle zu entgehen. Ein versierter Angreifer, der sich diesen einen Rechner vornimmt, wird die Schwachstelle trotzdem identifizieren und auszunutzen wissen, sodass der Administrator gut daran tut, sobald wie möglich die Lücke im SSH-Dienst zu stopfen.

Ein öffentlicher Web-Server wie heise online wird mehrmals hoch und runter gescannt. Da gewinnt man nichts, wenn man den einen SSH-Server auf einen anderen Port umstellt. Doch bei Servern, die nicht so exponiert sind und Dienste für eine geschlossene Benutzergruppe anbieten, lohnt der minimale Aufwand. Neben dem bereits erwähnten Remote-Zugang via SSH bieten sich dafür vor allem Web- oder FTP-Server für den privaten Austausch von Dateien an.

Offizielle Port-Nummern für einzelne Dienste vergibt die Internet Assigned Numbers Authority (IANA). Die Ports 0 bis 1023 sind die "Well Known Ports" für verbreitete Dienste wie HTTP (Port 80), SSH (22) und Telnet (23). Zwischen 1024 und 49151 liegen die "Registered Ports", weniger übliche Dienste, bei denen sich jedoch jemand die Mühe gemacht hat, sie bei der IANA zu melden, beispielsweise Kazaa (1214) und nessus (1241). Der Bereich darüber schließlich steht zur allgemeinen Verfügung.

Die hohen Port-Nummern jenseits von 49151 verbergen die Dienste noch etwas besser, denn die meisten Scan-Programme untersuchen standardmäßig nicht alle 65.535 Portnummern, sondern nur die, die in der Port-Liste der IANA eingetragen sind.

Der Server sshd bezieht seine Einstellungen aus der Datei sshd_config, die je nach Unix-Variante und Distribution in /etc oder /etc/ssh liegt. Dort verschiebt die Konfigurationsanweisung Port 52200 den Dienst auf den Port 52200. Allerdings liest sshd die Datei nur beim Start ein. Damit die Änderung wirksam wird, muss der Administator den Prozess also neu starten.

Zum Log-in gibt man dem Programm ssh den Ziel-Port über die Option –p bekannt. ssh –p 52200 je@sshhost.ath.cx versucht, den User je auf dem Rechner sshhost.ath.cx über den Port 52200 anzumelden. Grafische Front-Ends wie Putty für Windows bieten ein Eingabefeld für die Port-Nummer.

Ähnlich einfach stellt der Admin den Server-Port beim Web-Server Apache ein. Das größte Problem ist meist, die Konfigurationsdatei httpd.conf zu finden. Auf vielen Linux- Systemen führt der Befehl locate auf die richtige Spur. Die Konfigurationszeile lautet dann Listen 58000. Apache liest die Konfiguration beim Start ein oder wenn man ihn ausdrücklich dazu auffordert. Bei den meisten Linux-Distributionen dient dazu der Parameter reload des Apache-Startskripts (z. B. /etc/init.d/apache).

Dem Browser, der standardmäßig auf Port 80 zugreift, bringt man die neue Hausnummer des Servers bei, indem man sie durch einen Doppelpunkt getrennt hinter den Server-Namen setzt: http://server.example.com:58000.

Wer seinen Server hinter einem Router betreibt, der die eingehenden Verbindungsanfragen per Port Forwarding weiterleitet, kann auf Änderungen am Server oft ganz verzichten. Denn gute Router können bei der Weiterleitung auch die Port-Nummer ändern, also beispielsweise auf Port 58000 eingehende Pakete direkt an den Port 80 des Servers weiterleiten. Auf Linux-Firewalls erzielt man denselben Effekt mit Destination-NAT. Wenn der Linux-Router zum Beispiel mit dem PPP-Interface ppp0 am Internet hängt und der interne Server 192.168.1.2 ist, lauten die Aufrufe dafür:

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 58000 -j DNAT --to 192.168.1.2:80
iptables -A FORWARD -i ppp0 -p tcp -d 192.168.1.2 --dport 80 -j ACCEPT

Wenn es der Server-Dienst erlaubt, empfiehlt es sich auch, die Ausgabe einer Versionskennung (Banner) zu unterdrücken. Vor allem die gefährlichen Buffer-Overflow-Exploits müssen jeweils exakt zur Programmversion passen. Ohne diese muss der Angreifer verschiedene Offsets durchprobieren, was neben Zeit auch ein gewisses Know-how erfordert. (je) ()