Remote einloggen mit Port Knocking

Klopf, klopf

SSH mit Passwörtern ist gegen Brute-Force-Angriffe nicht von Haus aus gesichert. Eine Alternative stellt Port Knocking dar, das geschlossene Ports nur bei einer Klopfsequenz öffnet. SPA überträgt das Prinzip auf ein speziell angefertigtes Datenpaket.

Mit SSH verschlüsselter Netzwerk-Traffic ist gegen Abhören gesichert und wenn man die Identität der verwendeten Schlüssel immer verifiziert auch gegen Man-in-the-Middle-Angriffe. Sehr selten gibt es einmal einem Fehler in einem SSH-Programm, das dann auch schnell geschlossen ist. Was normalerweise aber geht, sind Brute-Force-Angriffe, bei denen ein Angreifer mit Variationen von Passwörtern mit einem Script ausprobiert.

Wer nur wenige User-Accounts auf dem Server hat, dazu noch möglichst unbekannte und ungewöhnliche Benutzernamen und komplizierte Passwörter, ist gegen Brute-Force-Angriffe gut gewappnet. Wenn Anwender die Benutzernamen aber nach einem Schema gebildet sind, zum Beispiel dem ersten Buchstaben des Vornamens gefolgt vom Nachnamen, wird es für Hacker schon einfacher. Über eine Mitarbeiterliste auf der Website können sie so mögliche Benutzernamen erschließen. Wenn die User dann noch selber ihre Passwörter ändern dürfen, ohne dass eine Policy deren Komplexität sicherstellt, erhöhen sich die Einbruchschancen gewaltig.

Eine Lösung für das Problem stellt ein Passwort-Cracker wie John the Ripper [1] dar, den Sie lokal über die eigene Passwort-Datenbank laufen lassen können, bevor jemand andere das gleiche von außen mit schlechten Intentionen tut. Gegen Brute-Force-Angriffe auf SSH gibt es einige Pakete wie Fail2ban oder SSH-Guard, die Zugriffe von einer IP-Adresse mit Firewall-Regeln blocken, wenn von ihr aus in einem bestimmten Zeitraum zuviele gescheiterte Login-Versuche erfolgen. Je nach Konfiguration kann die Sperre permanent oder von einigen Minuten Dauer sein. Letzteres erfordert keinen Eingriff des Administrators zum Entsperren, erschwert Brute-Force-Angriffe aber trotzdem.

Eine weitere Alternative ist das so genannte Port Knocking, um das es im weitere Verlauf dieses Artikels gehen soll. In einer traditionellen Port-Knocking-Konfiguration sind alle Ports eines Servers geschlossen. Für einen Portscan sieht es so aus, als wäre kein Zugang zum Rechner möglich. Ein legitimer User initiiert dann nacheinander je eine Verbindung zu unterschiedlichen (geschlossenen) Ports auf dem Server. Diese schlagen fehl, aber eine spezielle Software auf dem Rechner registriert die Verbindungsversuche trotzdem und ändert die Firewall-Konfiguration so, dass der Benutzer sich schließlich einloggen kann.

Ein Secure-Shell-Port wird also nur unter gewissen Umständen geöffnet, statt die ganze Zeit auf Verbindungen aus aller Herren Länder zu warten. Damit kommt zur Authentifizierung per SSH-Passwort noch eine weitere Schutzhülle hinzu. Dennoch bringt das traditionelle Port Knocking auch einige Nachteile mit sich. Zum Beispiel braucht man für den Anklopf-Vorgang eine spezielle Software. Je nachdem wie technisch versiert die Anwender sind oder wie gut Sie selbst deren Client-Rechner konfigurieren können oder wollen, kann das ein großes Problem darstellen. Auf fremden Rechnern wie beispielsweise im Internet-Café kann man diese Option sowieso vergessen.

Wenn bei der Port-Knocking-Konfiguration auf dem Server etwas schiefgeht, ist man möglicherweise komplett ausgesperrt und muss sich dann lokal anmelden. Außerdem ist Port Knocking nicht völlig immun gegen Angriffe, denn wenn ein Hacker das Kopfmuster mitschneidet, kann er es anschließend selbst verwenden.

Nur ein Paket

Eine fortgeschrittene Variante der gleichen Idee ist die so genannte Single-Packet-Autorisierung (SPA). Im Gegensatz zum traditionellen Port Knocking dient dabei keine Klopf-Sequenz, sondern ein einziges verschlüsseltes Paket als Eintrittskarte.

Eine SSH-Sitzung kann nur dann aufgebaut werden, wenn der Server ein gültiges verschlüsseltes Paket empfangen hat, andernfalls ist von außen kein SSH-Dienst zu erkennen. Der größte Vorteil von SPA ist, dass ein Angreifer mitgeschnittenen Traffic nicht für eigene Zwecke missbrauchen kann. Außerdem ist SPA schneller und weniger leicht zu entdecken, weil es nur ein Paket verwendet.

Das beste Paket für Single-Packet-Autorisierung ist Fwknop, das auf der Cipherdyne-Website zum Download bereitsteht [2], die der Security-Spezialist Michael Rash betreibt. Fwknop beherrscht zwar auch traditionelles Port-Knocking, Rash empfiehlt jedoch dringend den SPA-Ansatz.

Um Fwknop zu installieren, benötigen Sie das Entwicklungs-Paket der Packet-Capture-Bibliothek Libpcap, die zum Beispiel unter Ubuntu/Debian »libpcap-dev« heißt. Zusätzlich setzt Fwknop einen Mailserver wie Sendmail oder Postfix voraus. Laden Sie sich dann das neueste Tar-Paket von [3] herunter und entpacken Sie es. Derzeit gibt es einen Release-Kandidate von Fwknop 2, der in der Programmiersprache C geschrieben ist. Die stabile Version 1.x, auf die sich dieser Artikel konzentriert, benutzt die Skriptsprache Perl.

Die Installation startet, wenn Sie »./install.pl« ausführen. Wählen Sie bei der Konfiguration »server« für den lokalen Ausführungsmodus aus, und »pcap« als Methode zum Datensammeln. Geben Sie das richtige Netzwerk-Device (zum Beispiel »eth0« ) an und eine E-Mail-Adresse, an die Fwknop Benachrichtigungen schickt. Am Ende können Sie auswählen, ob Fwknop beim Booten automatisch startet.

Die Konfiguration editieren Sie in »/etc/fwknop/access.conf« , die Datei »/etc/fwknop/fwknop.conf« können Sie im Regelfall so belassen. Alle Zugriffsregeln befinden sich in »access.conf« , per Default erlaubt Fwknop damit den SSH-Zugriff 30 Sekunden lang, nachdem es den zugelassenen Schlüssel erhalten hat. Normalerweise müssen Sie nur die eine Zeile mit dem »KEY« -Wert verändern und dort einen Schlüssel mit mindestens acht Zeichen vergeben.

Bevor Sie Fwknop starten, prüfen Sie noch, dass in der IPTables-Konfiguration bestehende und Loopback-Verbindungen erlaubt sind, aber alle anderen Pakete verworfen werden. Nehmen Sie sich zur IPTables-Konfiguration ruhig etwas Zeit, denn nur allzuschnell sperren Sie sich bei einem Fehler aus dem Server aus (Abbildung 1).

Abbildung 2: Fwknop im Einsatz mit einem einfachen Passwort, rechts die Analyse mit Tcpdump.

Wenn auf dem Server schon IPTables läuft, geben Sie »iptables -F« ein, um das Regelwerk zu leeren. Die Kommandos aus Listing 1 geben die Regeln für die Eingabe-Kette an. Die IP-Adresse »1.2.3.4« ersetzen Sie dabei durch die Adresse Ihres Servers.

Listing 1

Input-Chain

iptables -A INPUT -d 1.2.3.4 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP

Diese Konfiguration belässt bestehende Verbindungen (Zeile 1), Verbindungen über die Loopback-Schnittstelle (Zeile 2) und verwirft alles andere (Zeile 3). Die Output- und Forward-Chains von IPTables interessieren in diesem Zusammenhang nicht weiter. Starten Sie dann Fwknop mit »/etc/init.d/fwknop start« .

Test

Zum Testen brauchen Sie neben dem Server auch einen Client. Installieren Sie dazu wie oben beschrieben die Libpcap-Dev und das Fwknop-Paket, wählen Sie aber dieses Mal »client« aus. Versuchen Sie als erste, sich auf dem Server per SSH einzuloggen. Danke der oben erstellten Firewall-Regeln sollte der Versuch fehlschlagen. Erscheint dennoch ein Login-Prompt, müssen Sie ihre Firewall-Konfiguration überarbeiten. Zum Anklopfen geben Sie auf der Konsole ein:

fwknop -A tcp/22 -a 192.168.1.136 -D ↩
192.168.111.20

Hinter »-A« folgt der freizuschaltende Server, hinter »-a« den Hostnamen oder die IP-Adresse des Client-Rechners und hinter »-D« schließlich den Server. Fwknop fragt Sie nach dem Passwort, das Sie auf der Konsole eintippen, baut dann die SPA-Nachrciht zusammen und schickt Sie an den Server. Im Erfolgsfall haben Sie dann 30 Sekunden Zeit, um sich mit SSH einzuloggen. Diesen Zeitraum können Sie auf dem Server in »access.conf« ändern. Dass Fwknop noch einmal die Client-Adresse erwartet, soll verhindern, dass Angreifer gefälschte Pakete verschicken. Dazu dupliziert Fwknop die Adresse noch einmal im anschließend verschlüsselten Paket.

Wen sich zwischen Client und Server eine Firewall befindet, kommt das Klopf-Paket vielleicht nicht durch. Ist das der Fall, editieren Sie den Wert für »PCAP_FILTER« in »/etc/fwknop/fwknop.conf« und geben einen erlaubten Port an. Am Client verwenden Sie »--Server-port« , um die Portnummer anzugeben (Abbildung 2):

fwknop -A tcp/22 --Server-port 8080 ↩
-a 192.168.1.136 -D 192.168.111.20

Um einem Fehler in der Konfiguration auf die Spur zu kommen, starten Sie den Fwknop-Daemon im Debugging- und Verbose-Modus: »fwknop -d -v« . Damit zeigt Fwknop alle Verbindungsversuche und die Firewall-Aktionen an. Die IPTables-Chain »FWKNOP_INPUT« legt das Tool allerdings erst beim ersten Verbindungsversuch an. Wenn sie vorher fehlt, ist das also kein Fehler. Um die Veränderungen an der Firewall-Konfiguration zu beobachten, geben Sie in einem Terminalfenster »watch -n1 iptables -L -n« ein.

Abbildung 2: Fwknop im Einsatz mit einem einfachen Passwort, rechts die Analyse mit Tcpdump.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Ausgabe /2014

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit Rex
  • mit anderer Konfigurationsmanagement-Software