„Netcat“ – Versionsunterschied
[ungesichtete Version] | [gesichtete Version] |
Quiorm (Diskussion | Beiträge) Linkvorschlag-Funktion: 2 Links hinzugefügt. |
|||
(181 dazwischenliegende Versionen von mehr als 100 Benutzern, die nicht angezeigt werden) | |||
Zeile 1: | Zeile 1: | ||
[[Datei:Netcat.png|mini|hochkant=1.5|[[Screenshot]] einer Anwendungsmöglichkeit von Netcat]] |
|||
'''Netcat''', auch '''nc''' genannt, ist ein einfaches Werkzeug um Daten von der Standardein- und -ausgabe über Netzwerkverbindungen zu transportieren. Es arbeitet als Client oder Server mit den Protokollen [[Transmission Control Protocol|TCP]] und [[User Datagram Protocol|UDP]]. Die [[Manpage]] bezeichnet es als ''TCP/IP swiss army knife'' ([[Schweizer Messer]] für [[TCP/IP]]). |
|||
'''Netcat''', auch '''nc''' genannt, ist ein einfaches Werkzeug, um Daten von der [[Standard-Datenströme|Standardein- oder -ausgabe]] über [[Rechnernetz|Netzwerkverbindungen]] zu transportieren. Es arbeitet als [[Server]] oder [[Client]] mit den Protokollen [[Transmission Control Protocol|TCP]] und [[User Datagram Protocol|UDP]]. Die [[Manpage]] bezeichnet es als ''TCP/IP swiss army knife'' ([[Schweizer Taschenmesser]] für [[TCP/IP]]). |
|||
Das ursprüngliche Programm wurde von einer unbekannten Person mit dem Pseudonym ''Hobbit'' für die [[Unix |
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 [[Plattform (Computer)|Plattformen]] portiert worden. |
||
== |
== 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. |
|||
Die Datei "original" vom Computer "start" soll unter dem Namen "kopie" auf einem Computer "ziel" abgelegt werden, wobei der Transfer via Port 2000 abgewickelt wird: <br> |
|||
Da Netcat ganz abstrakt mit sämtlichen Datenströmen arbeiten kann, lassen sich beliebig komplexe Arbeitsabläufe mit Netcat realisieren, vom einfachen Kopieren von [[Datei]]en über [[Datenstrom|Streamen]] von Datenbeständen bis hin zu komplexen [[Proxy (Rechnernetz)|Proxy]]- oder [[Gateway (Informatik)|Gateway]]-Diensten über Netzwerkgrenzen hinweg. |
|||
ziel: $ netcat -l -p 2000 > kopie </br> |
|||
start: $ cat original | netcat ziel 2000 |
|||
== Syntax == |
|||
Bitte beachten Sie das dieses Beispiel keinerleich Absicherungen enthält, jeder kann diese Datei schreiben. Für einen sicheren Dateitransport zwischen zwei Computern siehe [[Secure_Copy|Secure Copy Program (SCP)]] |
|||
[[Datei:Netcat simple.svg|mini|hochkant=1.5|Netcat kann beliebigen Anwendungen zu „Netzwerkfähigkeit“ verhelfen]] |
|||
Es gibt unterschiedliche Implementierungen von netcat, welche sich unter anderem in der Syntax unterscheiden. Im Folgenden ist die ursprüngliche Variante von ''Hobbit'' beschrieben. |
|||
Grundsätzlich unterscheidet Netcat zwischen zwei verschiedenen Modi: |
|||
== Weblinks == |
|||
; Server |
|||
*[http://netcat.sourceforge.net/ GNU Netcat] |
|||
: <code>netcat -l -p ''lokalport''</code> (''lokalport'' ist ein lokaler [[Port (Protokoll)|Port]]) |
|||
*[http://www.vulnwatch.org/netcat/readme.html Ursprüngliches README] (Englisch) |
|||
: Nach dem Aufruf wartet („lauscht“: -l) Netcat auf dem mit -p angegebenen Port für unbegrenzte Zeit auf eine eingehende Verbindung. Nachdem eine Verbindung aufgebaut und wieder geschlossen wurde, beendet Netcat sich. |
|||
*[http://www.vulnwatch.org/netcat/ Netcat für Windows] |
|||
; Client |
|||
*[http://www.jfranken.de/homepages/johannes/vortraege/netcat.de.html Netcat-Anwendungsbeispiele] (Vortrag von Johannes Franken) |
|||
: <code>netcat ''zielserver'' ''zielport''</code> |
|||
: Hier ist ''zielserver'' der [[Hostname]] oder die [[IP-Adresse]] eines [[Hostrechner|Hosts]], mit dem Netcat sich verbinden soll, und ''zielport'' eine Portnummer, zum Beispiel 80 bei [[HTTP]]-Server. Unter Angabe des [[Flag (Informatik)|Flags]] -u verwendet Netcat statt TCP das verbindungslose UDP. In diesem ''Client''-Modus muss auf dem Zielrechner und -port schon eine ''Server''-Anwendung warten, andernfalls beendet sich Netcat mit einem Fehler. |
|||
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. Werden diese Ein- und Ausgaben nicht umgeleitet, kann der Anwender diese eingeben und lesen, d. h. hier fungieren die zwei Netcat-Aufrufe als ein einfaches Chat-Programm. |
|||
Durch Umleitung oder Verwendung von [[Pipe (Informatik)|Pipes]] oder [[First In – First Out|FIFOs]] kann Netcat in vielen Fällen Netzwerkkommunikationsfähigkeiten ermöglichen, wo sie nicht implementiert sind, zum Beispiel in [[Betriebssystem-Shell|Shells]]. So ist die oben rechts dargestellte Illustration allgemein gültig, da ''stdin'' und ''stdout'' beliebig angepasst werden können. |
|||
== Anwendungsbeispiele == |
|||
[[Kategorie:Unix-Programm]] |
|||
=== Einfaches Dateikopieren === |
|||
Die Datei mit dem Namen <code>original</code> vom Computer ''start'' soll unter dem Namen <code>kopie</code> auf einem Computer ''ziel'' abgelegt werden, wobei der Transfer via TCP-[[Port (Protokoll)|Port]] 2000 abgewickelt wird. Auf einer Shell am Computer ''ziel'' wird dafür Netcat im Server-Modus gestartet. Die Standardausgabe wird mit dem Umleitungsoperator in die Datei <code>kopie</code> umgeleitet: |
|||
<syntaxhighlight lang="bash"> |
|||
$ netcat -l -p 2000 > kopie |
|||
</syntaxhighlight> |
|||
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 <code>original</code> aus und schreibt ihn in die Standardeingabe des aufgerufenen ''netcat''-Prozesses: |
|||
<syntaxhighlight lang="bash"> |
|||
$ netcat ziel 2000 < original |
|||
</syntaxhighlight> |
|||
Im fehlerlosen Fall erzeugt weder die Netcat-Instanz auf Computer ''start'', noch auf Computer ''ziel'' irgendwelche Ausgaben auf der Shell. Sie beenden sich nach Fertigstellung des Transfers (da die Shell durch den '<'-Operator bedingt automatisch ein ''EOF''-Zeichen sendet). |
|||
Auf weitere eingehende Daten wartet die Instanz auf dem Computer ''ziel'', wenn sie mit dem Parameter ''-k'' gestartet wird. In diesem Fall muss sie zum Beispiel per Tastenkombination {{Taste|[[Strg]]}} + {{Taste|C}} beendet werden. |
|||
=== Mehrere Dateien kopieren === |
|||
[[en:Netcat]] |
|||
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 (Packprogramm)|tar]], mit welchem komplette [[Verzeichnisstruktur]]en über Netzwerk kopiert werden können. Typischerweise kommt es in diesen Szenarien zu regelrechten Kaskaden von Programmen, die mittels Pipes miteinander verbunden sind, zum Beispiel in Anlehnung an das obige Beispiel ein Kommando auf dem Client-Rechner: |
|||
[[fi:Netcat]] |
|||
<syntaxhighlight lang="bash"> |
|||
[[pl:Netcat]] |
|||
$ tar vc * | gzip | netcat ziel 2000 |
|||
</syntaxhighlight> |
|||
sowie dazugehörig ein analoges Kommando auf dem Zielrechner: |
|||
<syntaxhighlight lang="bash"> |
|||
$ netcat -l -p 2000 | gunzip | tar vx |
|||
</syntaxhighlight> |
|||
In diesem Beispiel werden alle Dateien im aktuellen [[Arbeitsverzeichnis]] von <code>tar</code> 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. |
|||
=== Einmal-Webserver zum Dateitransfer === |
|||
Statt eines Netcat-zu-Netcat Transfers kann Netcat auch die Sprache höherer Protokolle sprechen, wie zum Beispiel [[Hypertext Transfer Protocol|HTTP]]. Folgendes Kommando startet einen [[Webserver]] auf dem [[Localhost|lokalen Computer]], welcher dem ersten [[Webbrowser]] die Datei ''hallo.txt'' präsentiert. |
|||
<syntaxhighlight lang="bash"> |
|||
$ ( echo "HTTP/1.0 200 Ok"; echo; cat hallo.txt; ) | netcat -l 8090 |
|||
</syntaxhighlight> |
|||
Zum Abrufen wird im Webbrowser die [[Uniform Resource Locator|URL]] <code><nowiki>http://localhost:8090/</nowiki></code> eingegeben. Dieser zeigt dann einen Speicherdialog oder die Datei direkt an. |
|||
=== Komplexes Firewallumgehen === |
|||
Netcat lässt sich ähnlich leicht dazu verwenden, Ports umzuleiten und so beispielsweise gezielt unzureichende [[Firewall]]s zu umgehen. Solche Anwendungsszenarien können schnell in eine rechtliche Grauzone gelangen, siehe dazu [[#Missbrauch|Missbrauch durch Netcat]]. |
|||
[[Datei:Netcat proxy.svg|zentriert|400px|Netcat in der Verwendung mit inetd]] |
|||
Die obige Grafik illustriert die Verwendung von Netcat als offenen Proxyserver, in Kombination mit [[inetd]].<ref>Angemerkt sei, dass die Verwendung von ''inetd'' in dem Beispiel nicht notwendig wäre, eine (zweite) Netcat-Serverinstanz könnte die gleiche Aufgabe übernehmen.</ref> 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-Port 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 umgekehrt. Auf diese Weise kann der Client völlig [[Transparenz (Computersystem)|transparent]] mit dem eigentlichen Server kommunizieren, als wäre der Proxy gar nicht vorhanden. |
|||
== Sicherheit == |
|||
Netcat wird oft mit sicherheitsrelevanten Fragen in Verbindung gebracht. Hierbei treten üblicherweise zwei essentielle Fragestellungen auf. |
|||
=== Verschlüsselung === |
|||
Netcat ändert grundsätzlich nicht den [[Datenstrom]]. 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) oder es muss eine der [[#Ports und Weiterentwicklungen|Netcat-Weiterentwicklungen]] verwendet werden. Alternativ muss von vorneherein zu Programmen gegriffen werden, bei denen Verschlüsselung ein zentraler Bestandteil ist, zum Beispiel der [[OpenSSL]]-Client/Server als [[Transport Layer Security|SSL]]-Implementierung oder [[Secure Shell|SSH]] bzw. [[Secure Copy]] (SCP) zum sicheren Streamen oder Kopieren von Daten. |
|||
=== Missbrauch === |
|||
Durch seine Universalität kann Netcat auch verwendet werden, um beispielsweise [[Backdoor]]s auf einem System einzurichten. So stufen diverse Antivirenprogramme, unter anderem [[McAfee VirusScan]], [[Ikarus Security Software|Ikarus]], [[AntiVir|Avira AntiVir]], [[AVG Antivirus]], [[Norton AntiVirus]], [[Kaspersky Anti-Virus]], [[Sophos]] AntiVirus und [[G Data Antivirus]], das Programm <code>nc.exe</code> als schädliches oder potentiell unerwünschtes Programm ein und verhindern dessen Ausführung.<ref>[http://securityresponse.symantec.com/avcenter/cgi-bin/virauto.cgi?vid=4294906932 Signatur von Netcat] [[Broadcom Inc.|Symantec]]</ref> |
|||
== Ports und Weiterentwicklungen == |
|||
Chris Wysopal hat Netcat auf [[Microsoft Windows|Windows]] portiert. ''[[GNU-Projekt|GNU]] Netcat'' ist eine komplette Reimplementierung und wird von Giovanni Giacobbi betreut.<ref>[http://netcat.sourceforge.net/ ''GNU Netcat'']</ref> ''[[OpenBSD]] Netcat'' ist eine weitere Reimplementierung, die aber nicht komplett kompatibel zum Ur-netcat ist, da die Syntax an OpenBSD-Standards angepasst wurde.<ref>[http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/nc/ ''OpenBSD netcat'']</ref> Andreas Bischoff hat die Windows-Version auf ''[[Windows CE]] ([[Microsoft Pocket PC|Pocket PC]]'' und ''[[Handheld PC]])'' portiert.<ref>[http://www.dr-bischoff.de/wince/Andreas_WINCE_stuff.html#netcat ''Netcat 4 wince'']</ref> |
|||
Cryptcat ist eine Weiterentwicklung von Netcat, die Verschlüsselung implementiert.<ref>[http://sourceforge.net/projects/cryptcat/ Cryptcat]</ref> Socat ist eine Reimplementation und kann außer TCP und UDP auch [[Stream Control Transmission Protocol|SCTP]] verwenden, über [[Proxy (Rechnernetz)|Proxyserver]] arbeiten und unterstützt ebenfalls Verschlüsselung.<ref>[http://www.dest-unreach.org/socat/ Socat]</ref> Eine weitere nicht vollständig kompatible Variante ist Netcat6, das auch [[IPv6]] unterstützt und diverse Performance-Optimierungen enthält, unter anderem den [[Nagle-Algorithmus]].<ref>[http://deepspace6.net/projects/netcat6.html Netcat6]</ref> |
|||
Auch der Portscanner [[Nmap]] liefert eine um viele Features ergänzte Netcat-Reimplementierung namens Ncat mit. Diese kann auch über IPv6, SCTP und ''[[Unix Domain Socket]]s'' kommunizieren und HTTP- und [[SOCKS]]-Proxys verwenden (ersteres auch serverseitig). An Sicherheits-Features unterstützt Ncat [[Transport Layer Security|SSL]] für Verschlüsselung und Authentifizierung sowie Zugangsbeschränkungen auf [[Hostname]]-Basis. Des Weiteren sind ein zum Datenaustausch zwischen mehreren Clients dienender ''Connection-Brokering''-Modus und ein darauf aufbauender einfacher [[Chat]]-Server enthalten.<ref>[http://nmap.org/ncat/ Ncat]</ref> |
|||
== Weblinks == |
|||
* {{man|1|nc|bsd|arbitrary TCP and UDP connections and listens}} |
|||
* {{man|1|nc|gnu|TCP/IP swiss army knife}} |
|||
* {{Internetquelle |
|||
|autor= Johannes Franken |
|||
|url= http://www.jfranken.de/homepages/johannes/vortraege/netcat.de.html |
|||
|titel= Netcat: Anwendungsbeispiele |
|||
|datum= 12. August 2006 |
|||
|zugriff= 3. März 2009 |
|||
|kommentar= Vortrag |
|||
}} |
|||
== Einzelnachweise == |
|||
<references /> |
|||
[[Kategorie:Systemsoftware]] |
|||
[[Kategorie:Portscanner]] |
|||
[[Kategorie:Unix-Software]] |
|||
[[Kategorie:Linux-Software]] |
Aktuelle Version vom 4. April 2025, 16:49 Uhr

Netcat, auch nc genannt, ist ein einfaches Werkzeug, um Daten von der Standardein- oder -ausgabe über Netzwerkverbindungen zu transportieren. Es arbeitet als Server oder Client mit den Protokollen TCP und UDP. Die Manpage bezeichnet es als TCP/IP swiss army knife (Schweizer Taschenmesser 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.
Anwendung
[Bearbeiten | Quelltext bearbeiten]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.
Syntax
[Bearbeiten | Quelltext bearbeiten]
Es gibt unterschiedliche Implementierungen von netcat, welche sich unter anderem in der Syntax unterscheiden. Im Folgenden ist die ursprüngliche Variante von Hobbit beschrieben.
Grundsätzlich unterscheidet Netcat zwischen zwei verschiedenen Modi:
- Server
netcat -l -p lokalport
(lokalport ist ein lokaler Port)- Nach dem Aufruf wartet („lauscht“: -l) Netcat auf dem mit -p angegebenen Port für unbegrenzte Zeit auf eine eingehende Verbindung. Nachdem eine Verbindung aufgebaut und wieder geschlossen wurde, beendet Netcat sich.
- Client
netcat zielserver zielport
- Hier ist zielserver der Hostname oder die IP-Adresse eines Hosts, mit dem Netcat sich verbinden soll, und zielport eine Portnummer, zum Beispiel 80 bei HTTP-Server. Unter Angabe des Flags -u verwendet Netcat statt TCP das verbindungslose UDP. In diesem Client-Modus muss auf dem Zielrechner und -port schon eine Server-Anwendung warten, andernfalls beendet sich Netcat mit einem Fehler.
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. Werden diese Ein- und Ausgaben nicht umgeleitet, kann der Anwender diese eingeben und lesen, d. h. hier fungieren die zwei Netcat-Aufrufe als ein einfaches Chat-Programm. Durch Umleitung oder Verwendung von Pipes oder FIFOs kann Netcat in vielen Fällen Netzwerkkommunikationsfähigkeiten ermöglichen, wo sie nicht implementiert sind, zum Beispiel in Shells. So ist die oben rechts dargestellte Illustration allgemein gültig, da stdin und stdout beliebig angepasst werden können.
Anwendungsbeispiele
[Bearbeiten | Quelltext bearbeiten]Einfaches Dateikopieren
[Bearbeiten | Quelltext bearbeiten]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 mit 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-Prozesses:
$ netcat ziel 2000 < original
Im fehlerlosen Fall erzeugt weder die Netcat-Instanz auf Computer start, noch auf Computer ziel irgendwelche Ausgaben auf der Shell. Sie beenden sich nach Fertigstellung des Transfers (da die Shell durch den '<'-Operator bedingt automatisch ein EOF-Zeichen sendet). Auf weitere eingehende Daten wartet die Instanz auf dem Computer ziel, wenn sie mit dem Parameter -k gestartet wird. In diesem Fall muss sie zum Beispiel per Tastenkombination Strg + C beendet werden.
Mehrere Dateien kopieren
[Bearbeiten | Quelltext bearbeiten]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, zum Beispiel 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.
Einmal-Webserver zum Dateitransfer
[Bearbeiten | Quelltext bearbeiten]Statt eines Netcat-zu-Netcat Transfers kann Netcat auch die Sprache höherer Protokolle sprechen, wie zum Beispiel HTTP. Folgendes Kommando startet einen Webserver auf dem lokalen Computer, welcher dem ersten Webbrowser die Datei hallo.txt präsentiert.
$ ( echo "HTTP/1.0 200 Ok"; echo; cat hallo.txt; ) | netcat -l 8090
Zum Abrufen wird im Webbrowser die URL http://localhost:8090/
eingegeben. Dieser zeigt dann einen Speicherdialog oder die Datei direkt an.
Komplexes Firewallumgehen
[Bearbeiten | Quelltext bearbeiten]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-Port 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 umgekehrt. Auf diese Weise kann der Client völlig transparent mit dem eigentlichen Server kommunizieren, als wäre der Proxy gar nicht vorhanden.
Sicherheit
[Bearbeiten | Quelltext bearbeiten]Netcat wird oft mit sicherheitsrelevanten Fragen in Verbindung gebracht. Hierbei treten üblicherweise zwei essentielle Fragestellungen auf.
Verschlüsselung
[Bearbeiten | Quelltext bearbeiten]Netcat ändert grundsätzlich nicht den Datenstrom. 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) oder es muss eine der Netcat-Weiterentwicklungen verwendet werden. Alternativ muss von vorneherein zu Programmen gegriffen werden, bei denen Verschlüsselung ein zentraler Bestandteil ist, zum Beispiel der OpenSSL-Client/Server als SSL-Implementierung oder SSH bzw. Secure Copy (SCP) zum sicheren Streamen oder Kopieren von Daten.
Missbrauch
[Bearbeiten | Quelltext bearbeiten]Durch seine Universalität kann Netcat auch verwendet werden, um beispielsweise Backdoors auf einem System einzurichten. So stufen diverse Antivirenprogramme, unter anderem McAfee VirusScan, Ikarus, Avira AntiVir, AVG Antivirus, Norton AntiVirus, Kaspersky Anti-Virus, Sophos AntiVirus und G Data Antivirus, das Programm nc.exe
als schädliches oder potentiell unerwünschtes Programm ein und verhindern dessen Ausführung.[2]
Ports und Weiterentwicklungen
[Bearbeiten | Quelltext bearbeiten]Chris Wysopal hat Netcat auf Windows portiert. GNU Netcat ist eine komplette Reimplementierung und wird von Giovanni Giacobbi betreut.[3] OpenBSD Netcat ist eine weitere Reimplementierung, die aber nicht komplett kompatibel zum Ur-netcat ist, da die Syntax an OpenBSD-Standards angepasst wurde.[4] Andreas Bischoff hat die Windows-Version auf Windows CE (Pocket PC und Handheld PC) portiert.[5]
Cryptcat ist eine Weiterentwicklung von Netcat, die Verschlüsselung implementiert.[6] Socat ist eine Reimplementation und kann außer TCP und UDP auch SCTP verwenden, über Proxyserver arbeiten und unterstützt ebenfalls Verschlüsselung.[7] Eine weitere nicht vollständig kompatible Variante ist Netcat6, das auch IPv6 unterstützt und diverse Performance-Optimierungen enthält, unter anderem den Nagle-Algorithmus.[8]
Auch der Portscanner Nmap liefert eine um viele Features ergänzte Netcat-Reimplementierung namens Ncat mit. Diese kann auch über IPv6, SCTP und Unix Domain Sockets kommunizieren und HTTP- und SOCKS-Proxys verwenden (ersteres auch serverseitig). An Sicherheits-Features unterstützt Ncat SSL für Verschlüsselung und Authentifizierung sowie Zugangsbeschränkungen auf Hostname-Basis. Des Weiteren sind ein zum Datenaustausch zwischen mehreren Clients dienender Connection-Brokering-Modus und ein darauf aufbauender einfacher Chat-Server enthalten.[9]
Weblinks
[Bearbeiten | Quelltext bearbeiten]nc(1)
: arbitrary TCP and UDP connections and listens – OpenBSD General Commands Manualnc(1)
: TCP/IP swiss army knife – Debian GNU/Linux Ausführbare Programme oder Shell-Befehle Handbuchseite- Johannes Franken: Netcat: Anwendungsbeispiele. 12. August 2006, abgerufen am 3. März 2009 (Vortrag).
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Angemerkt sei, dass die Verwendung von inetd in dem Beispiel nicht notwendig wäre, eine (zweite) Netcat-Serverinstanz könnte die gleiche Aufgabe übernehmen.
- ↑ Signatur von Netcat Symantec
- ↑ GNU Netcat
- ↑ OpenBSD netcat
- ↑ Netcat 4 wince
- ↑ Cryptcat
- ↑ Socat
- ↑ Netcat6
- ↑ Ncat