Netcat
aus Wikipedia, der freien Enzyklopädie
Netcat, auch nc genannt, ist ein einfaches Werkzeug, um Daten von der Standardein- oder -ausgabe über Netzwerkverbindungen zu transportieren. Es arbeitet als Client oder Server mit den Protokollen TCP und UDP. Die Manpage bezeichnet es als TCP/IP swiss army knife (Schweizer Armeemesser für TCP/IP).
Das ursprüngliche Programm wurde 1996 von einer unbekannten Person mit dem Pseudonym Hobbit für die UNIX-Plattform geschrieben und ist inzwischen auf praktisch alle Plattformen portiert worden.
Inhaltsverzeichnis |
[Bearbeiten] Anwendung
Netcat ist ein typisches Unix-Programm, das die grundlegende Unix-Philosophie implementiert. Insbesondere arbeitet Netcat mit der universellen Schnittstelle von Datenströmen, ohne dabei deren Inhalt weiter klassifizieren zu müssen. Da Netcat ganz abstrakt mit sämtlichen Datenströmen arbeiten kann, lassen sich beliebig komplexe Arbeitsabläufe mit Netcat realisieren, vom einfachen Kopieren von Dateien über Streamen von Datenbeständen bis hin zu komplexen Proxy- oder Gateway-Diensten über Netzwerkgrenzen hinweg.
[Bearbeiten] Syntax
Grundsätzlich unterscheidet Netcat zwischen zwei verschiedenen Modi: Dem Arbeiten als Client-Anwendung und als Server-Anwendung. Im ersten Fall lautet ein typischer Netcat-Aufruf
netcat zielserver zielport
wobei zielserver eine Domain oder eine IP-Adresse eines Hosts ist, mit dem netcat sich verbinden soll, während zielport im Allgemeinen ein TCP-Port, d.h. eine Zahl wie 1280 ist. Unter Angabe des Flags -u verwendet Netcat statt TCP das verbindungslose UDP. Ein typischer Netcat-Aufruf im zweiten Fall lautet
netcat -l -p lokalport
wobei lokalport einen lokalen TCP-Port angibt. In beiden Fällen gibt Netcat über Netzwerk einkommende Daten auf der Standardausgabe aus, während per Standardeingabe eingelesene Daten über das Netzwerk an den Kommunikationspartner geschickt werden. Daher ist die rechts dargestellte Illustration allgemeingültig: Netcat kann unter Verwendung von Pipes oder FiFos in vielen Fällen Netzwerkkommunikationsfähigkeiten ermöglichen, wo sie nicht implementiert sind, z.B. in Shells.
[Bearbeiten] Einfaches Anwendungsbeispiel: Dateien kopieren
Die Datei mit dem Namen original vom Computer start soll unter dem Namen kopie auf einem Computer ziel abgelegt werden, wobei der Transfer via TCP-Port 2000 abgewickelt wird. Auf einer Shell am Computer ziel wird dafür Netcat im Server-Modus gestartet. Die Standardausgabe wird mittels dem Umleitungsoperator in die Datei kopie umgeleitet:
netcat -l -p 2000 > kopie
Nachdem der Server auf Computer ziel läuft, kann auf Computer start in einer Shell Netcat im Client-Modus gestartet werden. Mithilfe eines Umleitungsoperators liest die Shell den Inhalt der Datei original aus und schreibt ihn in die Standardeingabe des aufgerufenen netcat-Programms.
netcat ziel 2000 < original
Im fehlerlosen Fall erzeugt weder die Netcat-Instanz auf Computer start, noch auf Computer ziel irgendwelche Ausgaben auf der Shell; die Instanz auf dem Computer start beendet sich nach Fertigstellung des Transfers (da die Shell durch den Operator bedingt automatisch ein EOF-Zeichen sendet), während die Instanz auf dem Computer ziel z.B. per Tastenkombination Strg + C beendet werden muss, da sie auf weitere eingehende Daten wartet. Würde vor dem Beenden dieser Server-Instanz ein anderer Client zu dem Server Kontakt aufnehmen und Daten senden, so würde dieser die Daten an die bereits nach kopie geschriebenen Daten anhängen und damit die Integrität der Datei zerstören.
Nach demselben Schema laufen die meisten Dateiübertragungsszenarien, die sich Netcat zunutze machen. Eine alltäglichere Abwandlung dieses Szenarios ist die zusätzliche Verwendung des Packerprogramms tar, mit welchem komplette Verzeichnisstrukturen über Netzwerk kopiert werden können. Typischerweise kommt es in diesen Szenarien zu regelrechten Kaskaden von Programmen, die mittels Pipes miteinander verbunden sind, z.B. in Anlehnung an das obige Beispiel ein Kommando auf dem Client-Rechner
tar vc * | gzip | netcat ziel 2000
sowie dazugehörig ein analoges Kommando auf dem Zielrechner
netcat -l -p 2000 | gunzip | tar vx
In diesem Beispiel werden alle Dateien im aktuellen Arbeitsverzeichnis von tar zu einem Stream gepackt, der über die Standardausgabe ausgegeben wird, von dem Kompressionsprogramm gzip komprimiert wird und dann über Netcat an eine Netcat-Serverinstanz auf dem Zielrechner geschickt wird, von gzip wieder dekomprimiert wird und von tar wieder zu einer Verzeichnisstruktur entpackt wird.
[Bearbeiten] Komplexes Anwendungsbeispiel: Firewalls umgehen
Netcat lässt sich ähnlich leicht dazu verwenden, Ports umzuleiten und so beispielsweise gezielt unzureichende Firewalls zu umgehen. Solche Anwendungsszenarien können schnell in eine rechtliche Grauzone gelangen, siehe dazu Missbrauch durch Netcat.
Die obige Grafik illustriert die Verwendung von Netcat als offenen Proxyserver, in Kombination mit inetd[1]. Wenn beispielsweise der mit Client beschriftete Host keine direkte Verbindung mit einem speziellen TCP-Port des mit Server beschrifteten Hosts aufbauen kann, so kann er sich den obigen Aufbau zunutze machen, in dem er statt der direkten Verbindung zum Server eine Verbindung zu einem speziellen TCP-Ports des mit Proxy beschrifteten Host aufbaut, an dem inetd lauscht. Dieser ruft daraufhin eine Netcat-Clientinstanz auf, die ihrerseits (voreingestellt) eine Verbindung zu dem TCP-Port des eigentlichen Servers aufbaut. Nun werden alle Ausgaben des eigentlichen Servers unverändert über Netcat und Inetd an den Client durchgereicht und andersrum. Auf diese Weise kann der Client völlig transparent mit dem eigentlichen Server kommunizieren, als wäre der Proxy gar nicht vorhanden.
[Bearbeiten] Sicherheit
Netcat wird oft mit sicherheitsrelevanten Fragen in Verbindung gebracht. Hierbei treten üblicherweise zwei essentielle Fragestellungen auf.
[Bearbeiten] Verschlüsselung
Netcat ändert grundsätzlich nicht die Streams, die das Programm verarbeitet. Daher verschlüsselt Netcat auch die zu übertragenden Daten nicht, bevor sie den Computer verlassen. Eine Verschlüsselung lässt sich im Anwendungsszenario beispielsweise durch Pipes vorschalten (siehe oben), alternativ muss zu Programmen gegriffen werden, bei denen Verschlüsselung ein zentraler Bestandteil ist, z.B. der OpenSSL-Client/Server als SSL-Implementierung oder SSH bzw. Secure Copy (SCP) zum sicheren Streamen oder Kopieren von Daten.
[Bearbeiten] Missbrauch
Durch seine Universalität kann Netcat auch verwendet werden, um beispielsweise Backdoors auf einem System einzurichten. So stufen diverse Antivirenprogramme, unter anderem Ikarus, Avira AntiVir, Norton AntiVirus, Kaspersky Anti-Virus, Sophos AntiVirus und G Data AntiVirus, das Programm nc.exe als Werkzeug zur Sicherheitsüberprüfung oder als potentiell unerwünschtes Programm ein und verhindern dessen Ausführung.[2]
[Bearbeiten] Ports und Weiterentwicklungen
Chris Wysopal hat netcat es auf Windows portiert. GNU Netcat ist eine komplette reimplementierung und vollständig POSIX-kompatibel und wird von Giovanni Giacobbi betreut[3]. Andreas Bischoff hat die Windows-Version auf Windows CE (Pocket PC und Handheld PC) portiert[4].
Cryptcat ist eine Weiterentwicklung von netcat die Verschlüsselung implementiert.
[Bearbeiten] Quellen
- ↑ Angemerkt sei, dass die Verwendung von inetd in dem Beispiel nicht notwendig wäre, eine (zweite) Netcat-Serverinstanz könnte die gleiche Aufgabe übernehmen
- ↑ Symantec: Signatur von netcat
- ↑ GNU Netcat – Projekthomepage
- ↑ http://prt.fernuni-hagen.de/~bischoff/wince/Andreas_WINCE_stuff.html#netcat
[Bearbeiten] Weblinks
nc(1)– Linux-Manpage (Englisch)- Johannes Franken: Netcat: Anwendungsbeispiele. 12.08.2006. Abgerufen am 03.03.2009. (Vortrag)

