Die Unix-Bordmittel erweisen sich in Sachen Netzwerkkommunikation als recht flexibel. Bei Bedarf setzen Sie mit einfachen Mitteln sogar einen kleinen Server auf.
Als Schweizer Taschenmesser unter den Netzwerk-Tools gilt schon seit 1996 Netcat [1]. Es ist etwas in die Jahre gekommen und lässt daher inzwischen einige Funktionen vermissen, wie etwa das verschlüsselte Übertragen von Daten oder das immer populärer werdende IPv6.
So existieren inzwischen etliche neue Implementationen, wie Ncat [2] oder Cryptcat [3], die einen beträchtlich erweiterten Umfang an Funktionen mitbringen. Ncat, das Netcat für das 21. Jahrhundert, kommt von den Machern des populären Netzwerk-Scanners Nmap. Cryptcat stammt aus der Schmiede mehreren Entwicklern rund um Farm9.
Installation
Sowohl Netcat (oft auch nc) als auch Ncat und Cryptcat finden sich in den Repositories der meisten Distributionen. Bei Bedarf spielen Sie die Tools also mithilfe des Paketmanagers ein. Einige Distributionen installieren zumindest Netcat sogar standardmäßig. Ncat zählt zum Fundus von Nmap gehört und findet seinen Weg auf die Platte, sobald Sie diesen Portscanner installieren.
Suchen und Finden
Wie bereits oben erwähnt, eignen sich die in diesem Beitrag vorgestellten Werkzeuge für ein breites Spektrum an Aufgaben. Netcat dient beispielsweise als Werkzeug zur Diagnose, wenn sich ein Rechner im Netz anders verhält als erwartet. Mit dem Befehl nc -vz Host 1-1024 klopfen Sie alle Ports bis 1024 ab. Auf diesen laufen die meisten bekannten Dienste, wie Mail, FTP oder SSH.
Findet das Programm einen offenen Port, quittiert es dies mit einer entsprechenden Nachricht. Die Portnummer dient dann als Grundlage für weitere Analysen. Verbindet sich Netcat direkt mit einem offenen Port, plaudern viele der dahinter laufenden Anwendungen Name und Versionsnummer aus.
Mit Netcat haben Sie nicht nur die Möglichkeit, zu prüfen, welche Dienste hinter einem Port laufen, sondern zusätzlich, ob sie korrekt funktionieren. Angenommen, ein Mailclient verweigert seinen Dienst und konfrontiert den Nutzer mit Nachrichten wie Der SMTP-Server hat keine korrekte Begrüßung gesendet. Ein Überprüfen des Ports zeigt zunächst, dass dieser offen steht. Dann wäre der nächste Schritt, den Mailserver direkt zu kontaktieren und die Begrüßung manuell vorzunehmen (Abbildung 2).
Dabei zeigt sich dann, ob der Datenaustausch mit dem Server reibungslos funktioniert oder eine zu scharf eingestellte Firewall, eine falsche Konfiguration oder eine fehlerhafte Implementation des SMTP-Handshakes im Mail-Client als Ursache infrage kommt.
Allrounder
Möchten Sie Daten von einem Rechner auf einen anderen übertragen oder mit einem anderen Anwender via Kommandozeile plaudern, hilft Netcat ebenfalls weiter. Der Befehl nc -l -p 11111 veranlasst Netcat, in den Server-Modus zu gehen und auf Port 11111 zu lauschen.
Verbindet sich jetzt ein Client via nc Host> 11111 von einem anderen Rechner mit dem fraglichen Port, erscheinen die Eingaben auf dem einen Rechner als Ausgabe auf dem Anderen, und zwar so lange, bis eine der beiden Netcat-Instanzen endet. Um auf einem Port kleiner oder gleich 1024 zu lauschen, müssen Sie Netcat mit Root-Rechten starten.
Auf diesem Weg können Sie auch Dateien mithilfe von Netcat übers Netzwerk kopieren: Dazu gilt es lediglich jeweils die Standardeingabe und die Standardausgabe umzubiegen. Um das zu bewerkstelligen erweitern Sie den Befehl auf dem Server um > Ausgabedatei, während Sie auf dem Client < Eingabedatei anhängen.
Mit ein einigen Hilfsmitteln wie etwa Tar und Pipes kopieren Sie auf diesem Weg sogar ganze Verzeichnisse. Vertauschen Sie die Ein- und Ausgabe, sorgen Sie auf diese Weise für einen Transfer der Daten vom Server zum Client. Das ermöglicht es, mit wenig Aufwand blitzschnell einfache Server einzurichten.
Netcat stellt so beispielsweise Webseiten bereit oder verschickt Audio- und Video-Dateien. Dabei stört es jedoch, dass sich Netcat beendet, sobald das Übertragen der Daten abgeschlossen ist. Dem schieben Sie einen Riegel vor, indem Sie Netcat in ein kleines Skript verpacken, das sofort eine neue Instanz startet, sobald eine sich beendet (Listing 1).
Listing 1
#! /bin/bash while true ; do nc -l -p 11111 < Ausgabedatei done
Zum Angriff
Netcat eignet sich für viel Gutes, hat aber ebenso Potenzial für einen Angriff. Neben Lauschen und Daten austauschen vermag es zusätzliche Anwendungen zu starten. Das eröffnet die Möglichkeit, in einem Netzwerk eine Backdoor-Shell zu öffnen, die Verbindungen von außen zulässt.
Um Netcat für derart finstere Szenarien einzusetzen, genügt der Parameter -e gefolgt von der favorisierten Shell. Mit nc -l -e /bin/bash -p 11111 wartet Netcat am Port 11111 und bietet jedem Vorbeikommenden ohne weitere Authentifizierung eine Bash mit den Rechten desjenigen Nutzers an, der Netcat gestartet hat (Abbildung 2).

Abbildung 2: Kleiner Befehl, große Wirkung: Selbst eine primitive Backdoor mit Netcat liefert zahlreiche Informationen über einen Rechner.
Ebenso lässt sich eine Reverse Shell ins Leben rufen. Dazu starten Sie auf dem Rechner mit physischen Zugriff Netcat als Server. Dem Client übergeben Sie dann mit -e die gewünschte Shell. Sobald dieser sich mit dem Server verbunden hat, können Sie diesen von dort kontrollieren.
Verschlüsselter Transfer
Während es im heimischen Netzwerk nicht ganz so tragisch erscheint, wenn Daten unverschlüsselt von einem Rechner zum anderen rauschen, sieht das im Firmennetz oder Internet schon ganz anders aus: Hier leistet Cryptcat gute Dienste, eine Kombination aus Netcat und einer Funktion zum Verschlüsseln. Dabei kommt der Twofish-Algorithmus [4] zum Einsatz.
Der Einsatz von Cryptcat gleicht dem von Netcat. Cryptcat bringt jedoch den zusätzlichen Parameter -k Passwort mit, mit dem Sie das Passwort für die Verschlüsselung festlegen. Geben Sie kein Passwort an, dann greift Cryptcat auf das fest implementierte Passwort metallica zurück.
Cryptcat überträgt die Daten also in jedem Fall verschlüsselt. Setzen Sie also an einem Ende der Kommunikation auf Netcat, dann sendet Cryptcat an dieses chiffrierte Daten oder versucht, den eigentlich im Klartext übermittelten Datenstrom zu entschlüsseln. Beides führt unweigerlich zu Unsinn (Abbildung 3).
Ncat
Obwohl das traditionelle, aber betagte Netcat noch gute Dienste leistet, hat sich das Rad der Zeit weiter gedreht und zahlreiche neue Anforderungen hervorgebracht. Diese bewegten die Nmap-Entwickler 2005 dazu, die Software neu zu implementieren. Die neue Variante Ncat verfügt (bis auf das Portscanning) über alle Funktionen, die Netcat mitbringt, und verwendet sogar weitgehend die selben Parameter.
Darüber hinaus erweiterten die Entwickler die Software im Vergleich zum Original erheblich. Ncat versteht sich auf die gängigen Transportprotokolle TCP und SCTP sowie neben IPv4 auch auf IPv6. Bei Bedarf verwaltet die Software mehrere parallele Verbindungen und kontrolliert, ob anfragende Clients überhaupt eine Verbindung herstellen dürfen.
Wer Ncat bereits kennt, dem fällt der Umstieg auf Ncat nicht schwer. Mit ncat -l versetzen Sie die Software in den Server-Modus, der Parameter -p entfällt. Die Angaben für Host und Port sind optional: Geben Sie diese nicht mit, lauscht Ncat an allen Netzwerkschnittstellen auf Port 31337.
Mit der einfachen Eingabe des Befehls bauen Sie eine Verbindung zu einem anderen Rechner auf. Standardmäßig akzeptiert Ncat bis zu 100 gleichzeitige Verbindungen – ein Wert, den Sie mit der Option -m gefolgt von einem Zahlenwert anpassen.
Sobald sich einer der verbundenen Clients beendet, verabschiedet sich auch der Server. War bei Netcat noch ein kleines Skript nötig, das den Server nach dem Beenden sofort wieder startete, verhindert bei Ncat die Option -k (--keep-open), dass sich der Server zeitgleich mit einem Client davon macht.
Gut gesichert
Dank SSL kommunizieren Ncat-Instanzen miteinander, ohne dass Dritte die Datenströme im Klartext abgreifen können. Dazu erstellt der Ncat-Server mit dem zusätzlichen Schalter --ssl temporäre SSL-Zertifikate und -Schlüssel.
Diese chiffrieren zwar die Kommunikation, schützen aber nicht vor Man-in-the-Middle-Angriffen. Ist das erforderlich, schicken Sie mithilfe der in der Tabelle “Ncat: Zertifikate einbinden” gezeigten Optionen vorhandene (und eventuell sogar signierte) Zertifikate und Schlüssel ins Rennen.
Ncat: Zertifikate einbinden
| Ort | Zusatzoptionen |
|---|---|
| Auf dem Server | --ssl --ssl-cert Zertifikatsdatei --ssl-key Schlüsseldatei |
| Auf dem Client | --ssl-verify --ssl-trustfile Schlüsseldatei |
In der Regel wissen die bei einem Ncat-Server angemeldeten Clients nichts voneinander. Damit sich das ändert, schlüpft die moderne Netzkatze in die Rolle des Vermittlers: Die Option --broker sorgt dafür, dass der Ncat-Server zentral die Kommunikation zwischen den Clients abwickelt. Der Server kann eigene Nachrichten absetzen, aber er zeigt keine Mitteilungen an, die er an die anderen Clients weiterleitet (Abbildung 4).
Auf diese Weise verteilen Sie beispielsweise Datenströme aus der Standardeingabe über einen Broker an mehrere Hosts. Haben Sie erst einmal den Server mit ncat -l --broker gestartet, besteht auch die Möglichkeit, die empfangenden Clients zum Leben zu erwecken. Dazu geben Sie dort beispielsweise folgenden Befehl ein:
$ ncat Server > Ausgabedatei
Er leitet alle empfangenen Bits und Bytes in die Ausgabedatei um, so wie beim originalen Netcat.
Da Ncat nichts puffert, darf der sendende Client erst starten, wenn der Empfänger bereits läuft. Dann schicken Sie mit dem folgenden Befehl die Datei auf den Weg:
$ ncat Server < Eingabedatei
Einen empfangenden Clients müssen Sie manuell mit [Strg]+[C] herunterfahren. Mit --recv-only und --send-only verfügt Ncat über zwei Optionen, die Hosts befähigen, Daten entweder nur zu senden oder nur zu empfangen.
Wie Netcat unterstützt auch Ncat den direkten Dialog im Netzwerk. Dabei erhöht sich die Anzahl der möglichen Gesprächsteilnehmer dank der multiplen Verbindungen deutlich. Sobald allerdings mehr als zwei Anwender miteinander ins Gespräch kommen, fällt es schwer, Geschriebenes einer Person zuzuordnen.
Dennoch tauschen die Nmap-Entwickler offenbar des Öfteren Informationen auf diesem Weg aus – anders ist die Option --chat nicht zu erklären. Geben Sie diese beim Start des Servers an, verwandelt sich Ncat in einen einfachen Chat-Server (Abbildung 5). Dieser ordnet die Nutzer: Alle Ausgaben erhalten erhalten ein Präfix der Form <userZahl>. Meldet sich ein Anwender zwischendurch ab, passiert es unter Umständen, dass er später unter einem völlig anderen Namen wieder im Chat auftaucht.
Während andere Netcat-Implementierungen in vielen Features noch mit Ncat zusammenspielen, ist spätestens beim Chat Schluss: Anwender mit dem traditionellen Netcat dürfen sich noch anmelden, bleiben dann jedoch vom Gespräch ausgeschlossen.
Privilegierter Kreis
Schon bei Netcat zeigte sich die Gefahr, dass jeder beliebige Host sich mit dem Programm verbinden kann, sofern Sie keine Schutzmaßnahmen ergreifen. Ncat bringt zwar einige einfache Schutzmaßnahmen mit, ein Angreifer könnte diese jedoch im Zweifel schnell überwinden.
Mit den Anweisungen --allow beziehungsweise --deny bauen Sie eine einfache Zugriffskontrolle auf, die einzelne IP-Adressen, Subnetze oder Hostnamen umfasst (Abbildung 6). Ncat akzeptiert mehrere Hosts, die Sie durch Kommata getrennt auflisten müssen.
Starten Sie Ncat oft mit der Allow/Deny-Option, lohnt es sich, die betroffenen Hosts in einer Textdatei aufzulisten, um sie nicht immer neu eingeben zu müssen. Die entsprechende Datei geben Sie Ncat beim Start über die Parametern --allowfile Datei oder --denyfile Datei mit auf den Weg.
Protokoll
Ncat bietet die Möglichkeit, die komplette Kommunikation in eine Datei mitzuschneiden, ein sogenanntes Dump-File. Dazu leiten Sie die Daten mit der Option -o Datei um, und schon findet sich der gesamte Datenaustausch in dieser Datei wieder.
Verwenden Sie die Option -x anstelle von -o, wandert der Verkehr in Hexadezimal-Ausgabe in die Datei. Wollen Sie die Ausgabe an eine bestehende Datei anhängen, verwenden Sie die Option --append-output. Netcat kennt daneben die Option -o, schreibt aber direkt im Hexadezimalformat mit.
Ncat und Netcat plotten zwar den Verkehr mit, die durchaus ebenfalls interessanten Ereignisse – etwa, welcher Host sich mit der jeweiligen Software verbunden hat – tauchen jedoch nicht auf.
Optionen für Netcat und Ncat
| Option | Einsatzzweck |
|---|---|
-l Port, --listen Port |
Server-Modus, lauscht auf dem angegebenen Port nach eingehenden Verbindungen |
-p Port, --source-port Port |
legt den zu verwendenden Ausgangsport fest (in manchen Implementationen nicht in Kombination mit -l erlaubt) |
-u, --udp |
UDP anstelle von TCP verwenden |
-w Zahl, --wait Zahl |
Timeout auf Zahl Sekunden setzen |
-v, --verbose |
ausführliche Ausgabe (wiederholte Angabe erhöht den Umfang der Ausgabe) |
-e Befehl, --exec Befehl |
nach Aufbau der Verbindung Befehl ausführen |
-c Befehl, --sh-exec Befehl |
nach Aufbau der Verbindung Befehl in Shell /bin/sh ausführen |
-o, --output Datei |
Ausgabe in Datei umleiten |
-4, -6 |
ausschließlich IPv4 beziehungsweise IPv6 erlauben |
-n, --nodns |
IP-Adressen nicht zu Hostnamen auflösen |
| nur Netcat | |
-z |
kein Datenaustausch beim Scannen von Ports |
| nur Ncat | |
-k, --keep-open |
Server läuft weiter, wenn sich der Client beendet |
-m Zahl, --max-conns Zahl |
Anzahl simultaner Verbindungen (voreingestellt: 100) |
--send-only, --recv-only |
nur Daten senden beziehungsweise empfangen |
--allow, --deny |
Kontakt mit angegebenen Hosts erlauben beziehungsweise verbieten |
--broker |
Kommunikation zwischen per Ncat-Server verbundenen Hosts erlauben |
--chat |
einfacher Chat-Server |
--ssl |
Daten SSL-verschlüsselt übertragen |
Fazit
Von der Netzkatze existieren neben den drei genannten viele weitere Neu-Implementierungen wie Socat, Netcat6, OpenBSD Netcat oder GNU Netcat. Die einzelnen Vertreter gleichen sich in vielerlei Hinsicht, bringen aber oft eigene Funktionen mit oder unterscheiden sich in der Handhabung. Daher lohnt es sich auf jeden Fall, die einzelnen Varianten zu vergleichen und so den eigenen Favoriten zu ermitteln.
Netcat und Konsorten sind keinesfalls das beste beste Werkzeug für jede Aufgabe im Netz, erweisen sich aber in kundigen Händen als flexible Werkzeuge, mit denen Sie viele Herausforderungen schnell meistern.
Glossar
-
SCTP
-
Stream Control Transmission Protocol (RFC 4960). Zuverlässiges, verbindungsorientiertes Transportprotokoll, das auf einem potenziell unzuverlässigen verbindungslosen Paketdienst aufsetzt. Ursprünglich entwickelt, um Signalisierungsdaten von Telefonnetzen auch über IP-Netzwerke übertragen zu können.
Infos
[1] Netcat: http://nc110.sourceforge.net
[2] Ncat: http://nmap.org/ncat/
[3] Cryptcat: http://sourceforge.net/projects/cryptcat/
[4] Twofish: http://de.wikipedia.org/wiki/Twofish










