Das Internet ist ein rauer Ort – vor allem für öffentlich erreichbare Rechner. Das kleine Programm Portspoof macht für Angreifer den unabdingbaren Portscan zu einer echten Herausforderung.
In aller Herren Länder – allen voran in Rotchina, der USA, Thailand und Deutschland – scheint es ein Volkssport zu sein, Server zu scannen und zu versuchen, sie auch gleich zu kapern (Abbildung 1). Dagegen helfen Firewalls sowie Intrusion-Detection/Prevention-Systeme, doch wer sich dermaßen schützt, verrät potenziellen Angreifern mitunter immer noch eine Menge über das System.

Abbildung 1: Unter Beschuss: Die Standorte der Rechner, von denen innerhalb zweier Monate unautorisierte Login-Versuche auf den Server des Autors ausgingen.
Jedem Angriff gehen in der Regel Reconnaissance und Scanning voraus, also die Phasen, in denen die Angreifer Informationen über ein System sammeln. Viele scannen ausschließlich, was dank neckischer Werkzeuge wie Nmap gut automatisiert funktioniert. Wer hier auf Firewall und Konsorten trifft, kann in der Regel gut erraten, auf welche Ports und Dienste eine Attacke lohnt.
An dieser Stelle lassen sich Bösewichte mit dem kleinen Werkzeug Portspoof (http://portspoof.org) aufhalten und verwirren. Das Tool wird seit Mitte 2012 von Piotr Duszynski entwickelt, der sein Programm ein “Service Emulator und Frontend Exploitation Framework” nennt. Die Anwendung steht unter der GPLv2 und wurde in C++ implementiert.
Portspoof konzentriert sich darauf, Angreifer zu verwirren, die einen Netzwerkrechner systematisch abklopfen. Dazu präsentiert es an einigen oder allen verfügbaren Ports verschiedene Dienstesignaturen, sodass sich aus der Ferne nur schwierig feststellen lässt, welche Dienste auf dem Rechner wirklich laufen. Die Anwendung kann zur Zeit auf über 8000 Signaturen zurückgreifen und verfügt über die Möglichkeit, einem scannenden Rechner einige Exploits in den Rachen zu werfen.
Nach dem Start lauscht Portspoof nur an einem Port, in der Vorgabe am Port 4444. Alle anderen Ports, denen Angreifer auf den Leim gehen sollen, leitet es mithilfe einer Iptables-Regel um.
Installation
Portspoof liegt momentan in der Version++1.0 vor. Sie laden es als ZIP-Archiv oder via Git (Listing 1, Zeile 1) auf den heimischen Rechner.
Nach dem Entpacken beziehungsweise Klonen wechseln Sie in das neu entstandene Verzeichnis portspoof[-master], um die Anwendung per Dreisatz (Listing 1, Zeile 2) zu installieren. Standardmäßig landet Portspoof dabei in /usr/local/. Um hier ein anderes Ziel anzusteuern, übergeben Sie ./configure den Parameter --prefix samt Wunschverzeichnis.
Listing 1
$ git clone https://github.com/drk1wi/portspoof.git $ ./configure && make && sudo make install
Nach der Installation prüfen Sie kurz mittels portspoof -h, ob bisher alles geklappt hat. Ist das der Fall, können Sie Portspoof nun in Betrieb nehmen.
Kleben und kleben lassen
Vor dem Start von Portspoof müssen Sie Iptables noch klarmachen, welche Ports zukünftig “klebrig” ausfallen sollen. Um alle Ports am fröhlichen Treiben teilnehmen zu lassen, verwenden Sie folgende Direktive:
# iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 1:65535 -j REDIRECT --to-ports 4444
Laufen dagegen seriöse Dienste auf dem Rechner, lassen Sie die entsprechenden Ports tunlichst aus, indem Sie die Option --dport durch --match multiport --dports ersetzen. Beispielsweise würde folgendes Kommando alle Ports bis auf 22 und 80 weiterleiten:
# iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp -m multiport --dports 1:21,23:79,81:65535 -j REDIRECT --to-ports 4444
Iptables Multiport-Feature kann maximal mit 15 Port-Bereichen umgehen. Nun kommt es gelegentlich vor, dass es gut beschäftigte Server gibt – etwa solche in kleinen Unternehmen, denen alles von DNS, FTP und SSH über Mail und Web bis hin zu Filesharing aufgehalst wurde. Hier ist möglicherweise eine kleine Schleife nötig, um die IP-Bereiche komfortabel setzen und verwalten zu können.
Ein Beispiel liefert set-spoofports.sh (Listing 2). Sie müssen das Skript mit chmod 755 set-spoofports.sh ausführbar machen, um es bequem aufrufen zu können. Mittels iptables -L -t nat kontrollieren Sie anschließend kurz, ob es die Firewall-Regeln auch brav eingetragen hat.
Listing 2
# set-spoofports.sh
# Firewall-Regeln für Portspoof
#! /bin/bash
# Ports 20-22, 25, 53, 80, 110, 111, 123, 443, 465, 587, 892, 2049, 8080, 32803 sind "vernünftig", alle anderen "klebrig"
spoofPorts="1:19 23:24 26:52 54:79 81:109 112:122 124:442 444:464 466:586 588:891 893:2048 2050:8079 8081:32800 32801:65535"
for prange in ${spoofPorts}; do
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport ${prange} -j REDIRECT --to-ports 4444
done
Sobald Iptables alle Ports an den Zielport weiterleitet, können Sie Portspoof starten. Das kleine Werkzeug bietet eine Menge Funktionen an. So setzen Sie Portspoof beispielsweise mit der Option -v im quasselsüchtigen Verbose-Modus in Gang und erfreuen sich live, wenn “Besuch” kommt. Alternativ starten Sie das Programm mit -D als Daemon, der seine Arbeit im Hintergrund verrichtet.
Rufen Sie Portspoof ohne zusätzliche Parameter auf, arbeitet es im sogenannten Open-Port-Modus. Wie der Name schon vermuten lässt, zeigt es dann lediglich alle weitergeleiteten Ports als offen an. Das ist zwar schön, aber es geht deutlich fieser. Probieren Sie einmal folgenden Befehl aus:
# portspoof -c /Pfad/zu/portspoof.conf -s /Pfad/zu/portspoof_signatures -D
Nun liefert der “Service Emulator” auf Anfragen hin haufenweise Signaturen oder gar Exploits zurück, die dem Angreifer das Auswerten der Ergebnisse erheblich erschweren (Abbildung 2). Sowohl portspoof.conf als auch portspoof_signatures liegen standardmäßig im Verzeichnis /usr/local/etc. Die Datei portspoof_signatures enthält vorbereitete Signaturen.

Abbildung 2: Dienst oder kein Dienst? Portspoof greift auf 8000 Signaturen zurück, um Portscanner gründlich zu verwirren.
Kleine Gemeinheiten
Das File portspoof.conf lässt sich mit Signaturen und gar Exploits füllen, die Portspoof dann ausliefert, sobald eine Gegenstelle einen bestimmten Port oder Port-Bereich abfragt. Die Angabe der Signaturdatei würde in der Regel bereits genügen; die portspoof.conf brauchen Sie nur, um für ausgewählte Ports genau festgelegte Rückmeldungen auszugeben.
In der portspoof.conf geben Sie zeilenweise an, für welchen Port der folgende Inhalt (“Payload”) gedacht ist. Beim Payload kann es sich um einfache ASCII-Wörter handeln, aber auch um hexadezimale Zeichenangaben oder reguläre Ausdrücke. Sogar Exploits lassen sich zurückliefern (Vorsicht: siehe Kasten “Computersabotage”). Die vorgegebene portspoof.conf hat der Portspoof-Entwickler gut kommentiert, sodass es wenig Mühe bereitet, sie um eigene Mitteilungen und Nettigkeiten zu ergänzen.
Computersabotage
Der Paragraf 303b des deutschen Strafgesetzbuchs sanktioniert unter dem Titel “Computersabotage” das Übermitteln von Daten “mit der Absicht, einem anderen Nachteil zuzufügen”, mit Freiheitsstrafen von (im Extremfall) bis zu 10 Jahren. Daher sollten Sie der Versuchung, mittels Portspoof Exploits an anfragende Rechner auszuliefern, lieber widerstehen.
Die Legalität von Portscans per se ist zwar umstritten, da diese bei einer massenhaften Portabfrage so gut wie immer der Angriffsvorbereitung dienen. Zudem können viele Verbindungsanfragen durchaus die Verfügbarkeit eines Rechners herabsetzen und damit selbst unter §303b StGB fallen.
Einzelne Port-Anfragen jedoch sind völlig legitim und für eine Verbindungsaufnahme in vielen Fällen erforderlich, sodass es wenig Sinn ergibt, sie grundsätzlich als Attacke zu werten und mit einem “Gegenschlag” darauf zu antworten. (jlu)
Damit ist der Spaß für die Gescannten noch lange nicht vorbei: Piotr Duszynski scheint Portspoof unter dem Motto entwickelt zu haben, dass für Angreifer nichts gemein genug ist, und baute daher zusätzlich mehrere Fuzzing-Funktionen ein. Diese ähneln dem schon erwähnten Ausliefern von Signaturen oder Payloads. Sie unterscheiden sich davon jedoch dadurch, dass sie mehrere der in den Dateien angegebenen Payloads an einzelnen Ports zurückliefern oder dass Portspoof gar bei Abfragen völlig willkürliche Payloads generiert.
So macht der Aufruf portspoof -f /Pfad/zu/rotkaeppchen.txt -D den Scanner mit dem beliebten Märchen Rotkäppchen bekannt (Abbildung 3), während portspoof -1 -D zufällige Signaturen erzeugt (Abbildung 4).
Ein dritter Fuzzer lässt sich aktivieren, indem Sie neben -1 oder -f /Pfad/zu/text.txt mit -n /pfad/zu/signaturen.txt eine Signaturdatei einbinden. Jetzt liefert Portspoof nicht nur unterhaltsame, lehrreiche oder wild zusammengewürfelte Payloads aus, sondern mischt auch noch Dienstesignaturen unter, die sich tatsächlich in der freien Wildbahn antreffen lassen (Abbildung 5).
Indem Portspoof willkürliche oder vordefinierte Signaturen und Payloads zurückliefert, bremst es Netzwerkscanner erheblich aus. Nur mit der Service-Emulation betrug im Test die Zeit für einen Scan über den kompletten Port-Bereich knapp zehn Stunden, ohne Portspoof wäre er in etwas mehr als 90 Sekunden erledigt gewesen (Abbildung 6). Bringen Sie noch Fuzzing ins Spiel, muss ein Angreifer noch einmal spürbar mehr Geduld aufbringen: Ein Scan über sämtliche Ports kann dann durchaus 30 Stunden und länger währen.

Abbildung 6: Der Portscanner Nmap brauchte knappe zehn Stunden, um den vollständigen Portbereich zu scannen, wenn Portspoof im Service-Emulations-Modus lief. Normalerweise erledigt Nmap einen derartigen Scan in ein bis zwei Minuten.
Weitere Funktionen
Neben den schon beschriebenen Funktionen können Sie Portspoof auch noch anweisen, erkannte Scans zu protokollieren. Dazu geben Sie beim Start den Parameter -l /Pfad/zur/Log-Datei an. Nötig ist das nicht unbedingt, denn standardmäßig protokolliert die Anwendung sämtliche Aktivitäten in der /var/log/syslog. Um hier Ressourcen zu sparen, lässt sich das Syslog-Logging mit dem Parameter -d ausschalten.
Mit den Parametern -p Port und -i IP legen Sie Port und IP-Adresse fest, an denen Portspoof Anfragen entgegennehmen soll. Um Portspoof beim Systemstart automatisch mitzuladen, liefert Piotr Duszynski auch ein Init-Skript mit, das im Quelltextordner im Verzeichnis system_files liegt. Sie müssen die dort lagernde Datei portspoof.sh eventuell noch anpassen und auf jeden Fall in das passende /etc/rcRunlevel.d-Verzeichnis kopieren. Gewöhnlich startet Portspoof mit Service-Emulation und angepassten Payloads.
Meistens läuft Portspoof problemlos, als noch recht junges Programm wurde es aber noch nicht in allen Kombinationen und Facetten hinreichend getestet. Beispielsweise stürzte es in unserem Test beim Fuzzing mit Rotkäppchen und Signaturen wiederholt ab, während es mit zufälligen Payloads und Dienstesignaturen problemlos seine Arbeit verrichtete. Hier bietet es sich an, einen Cronjob aufzusetzen, der regelmäßig prüft, ob der Daemon noch läuft, und gegebenenfalls den Admin benachrichtigt sowie Portspoof neu startet.
Fazit
Mit Portspoof ist Duszynski ein kleines feines Programm gelungen, das sich als zäher und vor allem endloser Morast für Portscanner herausstellen könnte. Installation und Einrichtung gestalten sich einfach, der Service-Emulator belegt im laufenden Betrieb kaum Systemressourcen, und durch viele Beispieldateien und Skripte nimmt Duszynski dem Anwender noch einmal Arbeit ab. Die bisher schon recht umfangreiche Signaturdatenbank dürfte noch wachsen, sobald mehr Anwender das Programm für sich entdecken und anreichern.








