Sie sind auf Seite 1von 8

Firewalls umgehen mit

Protokoll-Tunneling
Abwehr

Steffen Wendzel

Schwierigkeitsgrad

Beim Tunneling von Protokollen werden einzelne Protokolle,


Daten oder Verbindungen innerhalb eines anderen Protokolls
transportiert. Das Tunneling ist dabei für die Endanwendungen
transparent. Dieser Artikel beschreibt, wie Tunneling mit
verschiedensten Protokollen funktioniert und wie man es
anwendet um Firewalls zu umgehen.

T
unneling ist eine in modernen Netz- se das POP3-Protokoll, um E-Mails abzuholen.
werken sehr häufig angewandte Tech- Diesen Layer kann man recht einfach für das
nik zur Übertragung von Protokollen Tunneling einsetzen, da man sich nicht um
innerhalb anderer Protokolle. Beispielsweise das Routing oder die Fehlerüberprüfung der
werden Daten über VPN-Verbindungen (die gesendeten und empfangenen Daten kümmern
ebenfalls als Tunnel zu bezeichnen sind) oder muss.
über SSH-Tunnel gesendet um diese zu au- Das Tunneling und die Schichten des
thentisieren oder zu verschlüsseln. Ebenfalls TCP/IP-Modells funktionieren auf die glei-
häufig verwendet werden Tunnel um Ipv6- che Weise: Protokolle werden innerhalb
Pakete durch Ipv4-Netzwerke zu tunneln, was anderer Protokolle übertragen. Beim Schich-
mittels 6to4-Protokoll realisiert wird. Wenn tenmodell wird der Header sowie die Daten des
man möchte, dann kann man aber genauso
gut Ipv6 über UDP oder TCP oder gar über
Ipv6 selbst tunneln. Das gilt auch für das Ipv4 In diesem Artikel erfahren
Protkoll, dass man ebenfalls via Ipv4 und al-
Sie...
lerlei möglichen anderen Protokolle tunneln
kann. • alles über das Konzept des Tunnelings
Um das Tunneling nun aber wirklich zu • Interessantes über die Technik, Firewalls mit
verstehen muss man sich zunächst das TCP/IP Hilfe von Tunneling umzugehen
Schichtenmodell ins Gedächtnis rufen (siehe
Abbildung 1), das einige Leser sicherlich be- Was Sie vorher wissen/können
reits kennen werden. Es besteht aus ingesamt sollten...
vier Schichten, die in jedem TCP/IP-fähigen
System soweit implementiert sind, wie sie be- • TCP/IP Grundkenntnisse
nötigt werden. • Grundkenntnisse über Firewalls
zDer Application Layer überträgt das Proto- • Erfahrung mit Unix Netzwerken
koll des jeweiligen Programmes - beispielswei-

2 hakin9 Nr. 1/2007 www.hakin9.org/de


Tunneling

einen neuen IP-Header, der den


IPSec-Header enthält. Im IPSec-
Header ist im Tunnelig Mode nicht
mehr nur der Transport-Layer und
����������������� �������������������������������� �����������������
Application-Layer, sondern auch der
Internet-Layer geschützt.

��������������� ����������������������������� ��������������� Ein erster Tunnel


Genug Theorie fürs erste. Einen
Tunnel mit fertiger Software einzu-
�������������� ���������� ��������������
richten ist gar nicht so schwierig.
Am einfachsten geht das mit dem
auf praktisch jedem Linux-, Unix-
und BSD-System installierten
��������������� �������������������������������� ��������������� OpenSSH. Mit OpenSSH bekommt
man nicht nur einen einfachen Tun-
nel, sondern gleichzeitig einen sehr
sicheren und zudem verschlüssel-
ten Tunnel zu Stande, ohne dass
Abbildung 1. Das Konzept des Tunnelings
man sich um die Details des Proto-
Application-Layers dabei an den Daten verwendet werden. IPSec kolltunnelings kümmern muss (doch
Header des Protokolls im Tans- kann so konfiguriert werden, dass keine Sorge, gleich geht es weiter
port-Layer angehängt. Diese Daten es entweder im >transport mode< mit den Protokollen!).
wiederum werden an den Header oder im >tunneling mode< arbeitet, Um einen einfachen SSH-Tun-
des Internet-Layers angehängt. wobei es die Daten dabei auf zwei nel zu errichten benötigt man nicht
Zum Schluss werden die Daten des verschiedenen Schichten tunnelt: einmal zwei Systeme: ein einziges
Internet-Layers noch in das Protokoll Auf dem Internet- und auf dem auf dem ein TCP-Dienst läuft reicht
des Data Link-Layers eingebaut und Transport-Layer. (Ab. 2) völlig (auch wenn dies weniger Sinn
versendet. Beim Empfang der Daten Im Transport-Mode wird der macht). Doch egal, ob man die SSH-
läuft alles umgekehrt. Dieses Verfah- Header des IPSec Protokolls im IP- Verbindung für ein einziges oder
ren kann man sich hervorragend an Header untergebracht. Der Header zwei Systeme erstellt: Die Schritte,
dem Modell Zwiebelschale merken, des Transport-Protokolls (z.B. TCP) die man dazu durchführen muss,
die man schichtenweise aufpellt. und die dessen Payload enthaltenen sind die Gleichen.
Möchte man nun Daten tunneln, Protokolle finden wiederum im IP- Im Folgenden soll eine IRC-Ver-
so bringt man diese Daten als Pay- Sec-Header Platz und Schutz. bindung über SSH getunnelt werden.
load oder versteckt im Header eines Im Tunnelig Mode wird hingegen Der IRC-Server ist server.xyz. Wich-
anderen Protokolls unter. Dabei kann ein komplettes IP-Datagram ersetzt. tig ist, dass man auf diesem Rechner
man diese Daten - verfügt man über Zu diesem Zweck erzeugt IPSec selbst über einen SSH-Zugang ver-
genügend Kreativität – in fast jedem
Protokoll tunneln und hervorragend
verstecken.
Data Link Layer Protocol
IPSec-Tunnel
Ein recht einfach zu verstehendes
Beispiel für einen Tunnel ist ein IP- IP Header
Sec-Tunnel mit dem virtuelle private
Netzwerke (VPNs) errichtet werden.
Für das Tunneling kommen je nach IPSec Protocol Header (AH, ESP)
Konfiguration dabei zwei Protokolle
zum Einsatz: der authentication
Transport Protocol Header (TCP, UDP)
header (AH) und encapsulated se-
curity payload (ESP). Ersterer stellt
die Authentizität der Daten sicher, Application Layer Header + Playload
letzterer kann für die Verschlüsse-
lung und (allerdings in geringerem
Maße als AH) ebenfalls für die
Sicherstellung der Authentizität der Abbildung 2. Aufbau des IPSec-Headers im Transport-Mode

www.hakin9.org/de hakin9 Nr. 1/2007 3


Angriff

Beachten Sie, dass Sie als nicht- Verfügung stehen. Auf dem Server-
Listing 1. Eine Shell-Session priviligierter Nutzer unter Unix nur Rechner wird hierfür nc im listen-Mo-
via TCP-Streamsocket tunneln Ports ab 1024 und Aufwärts öffnen dus gestartet (-l Paremter) und die
$ telnet target.xyz 80.
können. Was SSH dabei tut, dürfte Shell via -e /bin/sh ausgeführt: nc
Trying 127.0.0.1... mittlerweile klar sein: Die Verbin- -l -p 80 -e /bin/sh.
Connected to target.xyz. dung unseres IRC-Clients wird Auf dem Client-Rechner hinge-
Escape character is '^]'. innerhalb vom SSH-Protokoll ge- gen muss man nur noch via Telnet
ls;
tunnelt. Die Daten werden auf Port eine Verbindung zum angebenen
...
: command not found
10000 entgegengenommen und Port der Zielmaschiene aufbauen.
uname; über das SSH-Protokoll verschlüs- Achten Sie darauf hinter jeden Befehl
Linux selt an den Zielrechner geschickt. ein Semikolon zu schreiben, sonst
: command not found Dieser empfängt und entschlüsselt funktioniert die Ausführung nicht.
uname -or;
diese Daten und sendet sie wieder- Indem man einen Fehler produziert
2.6.15-26-386 GNU/Linux
: command not found
um an die lokale Adresse auf Port (=zwei mal Semikolon eingeben),
ps; 6667. wird die Verbindung gekillt.(siehe
PID TTY TIME CMD Genau das ist das Prinzip von Listing 1.)
14716 pts/9 00:00:00 bash Application-Layer basierten Tunneln,
14937 pts/9
14955 pts/9
00:00:00 sh
00:00:00 ps
die zugleich Application-Layer Daten Firewalls umgehen
: command not found
übertragen sollen: die eigentliche Vielleicht kam dem Einen oder An-
;; Verbindung wird über eine neue deren Leser nun schon die Idee, wie
sh: line 9: syntax error near Verbindung geleitet, zu der sich der man denn eine Firewall mittels eines
unexpected token `;;' Client verbindet und von der aus Tunnels umgehen kann. Um das zu
'h: line 9: `;;
Daten auch an den Server weiter- erläutern stellen wir uns zunächst
Connection closed by
foreign host.
geleitet werden. Für den Client läuft das übliche Szenario einer Firewall
der Vorgang transparent ab. Er muss vor, die das interne Netzwerk eines
sich nur auf den lokalen, statt auf den Unternehmens mit dem Internet
fügt, da die Verbindung über diesen entfernten Rechner verbinden. (oder einem beliebigen anderen
Authentifiziert wird. Ganz einfach kann man sich Netzwerk) verbindet: Wenn die Fire-
Dazu startet man SSH auf dem übrigens auch mit netcat den Traum wall halbwegs vernünftig vom Admi-
lokalen Rechner nach der folgenden vom Tunnel wahr werden lassen und nistrator abgesichert wurde, dann
Vorlage: Wobei gilt: -f bewirkt, dass eine Shell-Verbindung (allerdings lässt diese nur die Verbindungen
SSH in den Hintergrund gestellt unverschlüsselt und ohne Passwort- durch, die ausserhalb auf die Ports
wird, -C bewirkt eine Kompression schutz) über Port 80 schicken. Diese zugreifen, die die Mitarbeiter benö-
der Verbindung, -N bewirkt, dass Technik ist eine absolute Notlösung, tigen. Im Normalfall handelt es sich
auf der Gegenseite kein Befehl aus- falls keine anderen Programme zur dabei mit großer Sicherheit um die
geführt wird und mit -L gibt man den
lokalen Port, danach den Hostname
des Servers und dann den dortigen
Port, jeweils durch Doppelpunkte
Data Link Layer Protocol
seppariert, an. Zum Schluss noch
wie bei jeder SSH-Verbindung den
Benutzernamen und den Host an- New IP Protocol Header created by IPSec Proto.
geben.

$ ssh -f -C -N -L \ IPSec Protocol Header (AH, ESP)


10000:server.xyz:6667 \
username@server.xyz
Original IP Header

Dieser Aufruf würde also die IRC-


Verbindung über den lokalen Port
Transport Protocol Header (TCP, UDP)
10000 annehmen und auf server.xyz
an Port 6667 weiterleiten. Jetzt kann
man sich mit einem IRC-Client, etwa Application Layer Header + Payload
irssi, lokal auf Port 10000 verbin-
den.

$ irssi -c 127.0.0.1 -p 10000 Abbildung 3. Aufbau des IPSec-Headers im Tunneling-Mode

4 hakin9 Nr. 1/2007 www.hakin9.org/de


Tunneling

auf server.xyz, Port 10000. Er selbst


soll auf Port 20000 die Verbindung
des Browsers entgegen nehmen.

Port, z.B. 6667


$ htc -F 20000 localhost:10000
Client Client

Mit dem Browser verbindet man sich


nun auf 127.0.0.1, Port 20000, wie
Normale Verbindung

Normale Verbindung
Abbildung 5 zeigt, um den Tunnel
zu verwenden. HTTP über HTTP
zu tunneln ist zwar nicht sonderlich
sinnvoll, aber wenn Sie auf dem Ser-
ver statt Port 80, Port 22 angeben,
dann könnten Sie natürlich genauso
Port, z.B. 10000

Tunnel-Port gut SSH tunneln.


Tunnel-Client Tunnel-Verbindung Tunnel-Client
$ ssh -p 20000 user@localhost

Doch was tut man, wenn man kein


Tunnelingtool hat (und auch keins
Abbildung 4. Schema des Application-Layer tunnelings via TCP- schreiben kann), das einen der
Streamsocket Ports, die einem zur Verfügung
stehen, nutzen kann? Das ist noch
Ports 53 für DNS, 80 für HTTP, und Im Folgenden – und natürlich immer kein Beinbruch, denn auch
bei einem externen Mailsystem noch auch zum mitmachen – bauen wir hier kann man dank diverser Tools
um Port 110 für POP3 (oder Port 143 einen HTTP-Tunnel mit dem Tool noch immer recht einfach Tunnel
für IMAP) und Port 25 für SMTP. httptunnel auf, was ebenfalls recht zwischen zwei TCP/IP-Systemen
Eventuell kommen noch Ports für einfach von Statten geht. aufbauen und sogar auf Routing zu-
die SSL verschlüsselten Varianten Zunächst startet man auf dem rück greifen. Besonders beliebt sind
dieser Dienste (etwa Port 443 für Zielrechner, zu dem die Verbindung hierbei ICMP-Tunnel.
HTTPS oder 993 für IMAP over SSL) aufgebaut werden soll den Server
mit dazu. Fakt ist: Eine einfache hts. Das Zielsystem ist Port 80 auf vstt
SSH- oder IRC-Verbindung ausser- server.xyz. Der Tunnel-Server nimmt Als Software für einen ICMP-Tunnel
halb ist ohne Weiteres nicht möglich auf Port 10000 die Verbindung ent- steht unter Anderem das Tool stun-
(was wohl auch vom Arbeitgeber des gegen. nel sowie mein Programm vstt zur
Unternehmens so gewollt ist). Verfügung. Bei vstt handelt es sich
Mit Hilfe eines Tunnels lässt sich $ hts -F server.xyz:80 10000 um ein Programm, dass je nach Si-
dies ändern. Ist beispielsweise ein tuation den Ausweg über einen TCP-
SSH-Zugriff erlaubt (z.B. Aufgrund Der Client wird nun lokal gestartet oder einen ICMP-Tunnel ermöglicht
einer Fehlkonfiguration, oder damit und verbindet sich mit dem Server (UDP-Tunnel sind leider noch nicht
der Administrator schnell aus jedem
Subnetzwerk Rechner in einem an-
deren Netzwerk über das Internet
administrieren kann), so könnte
man den bereits oben beschriebe-
nen SSH-Tunnel verwenden um
eine IRC-Verbindung herzustellen.
Der grosse Vorteil von SSH-Tunneln
besteht in gebotenen Verschlüsse-
lung.
Doch falls eine SSH-Verbindung
nicht erlaubt ist, benötigt man ande-
re Tunneling-Tools mit denen sich
andere Protokolle tunneln lassen.
Besonders häufig anzutreffen sind
Tools für das HTTP-Tunneling, wie
etwa httptunnel oder HTTPort. Abbildung 5. Eine Browser-Verbindung über den HTTP-Tunnel

www.hakin9.org/de hakin9 Nr. 1/2007 5


Angriff

client$ telnet localhost 20000


Trying 127.0.0.1...
0 Bit 16 Bit 32 Bit
Connected to amilo.sun.

Source Port Destination Port Escape character is '^]'.


220 eygo.sun ESMTP Sendmail
8.13.8/8.13.8; Mon, 25 Sep 2006
Sequence Number 22:37:48 +0200 (CEST)
...

acknowledgment Number Tunneln


in jeder Situation
U A P R S F
Hdr Jetzt wird es wieder Zeit für The-
Reserved R C S S Y I Window Size
Len orie. Fakt ist, dass man praktisch
G K H T N N
durch jedes Protokoll Daten tunneln
Checksum Urgent Poiter kann. Bei einigen Protokollen ist
die Realisierung eines Tunnels sehr
aufwendig, bei anderen sehr einfach.
Options Padding Im Folgenden bespreche ich gängige
sowie einige sehr unübliche Tunne-
ling-Techniken, die aber zweifellos
möglich sind und mit denen teilweise
Abbildung 6. Aufbau des TCP-Headers. Besonders die reservierten Bits die übliche TCP/IP-Landschaft ver-
sowie die beiden Bits URG und PSH sind zum Tunneling eines Bytes zu lassen wird und man durch praktisch
gebrauchen. jede Firewall kommt, wenn man vor
dieser und hinter dieser ein System
implementiert). (Ich muss wohl nicht client# vstt -p icmp -r 10002 \ benutzen kann. Einige dieser An-
sagen, dass dieses Programm nur -t 10001 -a 192.168.2.20 \ griffe funktionieren nur im lokalen
für legale Zwecke verwendet werden -m 192.168.2.22 Netzwerk, weil Low-Level Protokolle
darf...) Auf diese Weise sollten die benutzt werden, die nicht routingfä-
meisten Firewalls umgangen werden server# vstt -p icmp -r 10001 \ hig sind.
können. Schließlich kann man, falls -t 10002 -a 192.168.2.22 \
alle TCP-Ports gesperrt sind, im- -m 192.168.2.20 POP3
mer noch auf ICMP zurück greifen. Um einen Eindruck davon zu be-
Ausserdem werden nicht nur blanke Nun sollte der ICMP-Tunnel bereits kommen, wie leicht es ist, Daten zu
TCP-Tunnel, sondern auch solche stehen. Als nächstes kommt das tunneln, soll das POP3-Protokoll als
mit einer Funktion zum Verstecken Tool s2f zum Einsatz, das Be- erstes Beispiel dienen. In diesem
der Verbindung ermöglicht, dazu standteil von vstt ist. Es verbindet Protokoll gibt es diverse Befehle wie
später mehr. den lokal laufenden vstt-Prozess etwa RETR n.
Um einen vstt-ICMP-Tunnel zwi- mit einem Socket und ermöglicht Dieser Befehl holt die Nach-
schen zwei Rechnern aufzubauen so die Verbindung zwischen Client richt mit der Nummer n ab. Das ist
startet man zunächst auf beiden vstt und Server. für jeden Administrator, der seine
im ICMP-Tunneling Modus. Im Fol- Auf dem SMTP-Server starten Verbindungen überwacht ein ganz
genden soll eine SMTP-Verbindung wir s2f im Client-Mode, was bedeu- normaler Anblick. Doch selbst hier
getunnelt werden. Der Aufruf von tet, dass s2f sich als Client mit dem kann man Daten bereits versteckt
vstt ist praktisch immer gleich, nur lokalen SMTP-Port (25) verbindet. tunneln. Dies geht indem man
dass man statt - p icmp bspw. auch -p Auf dem Client hingegen starten wir beispielsweise - wie ich es in vstt
pop3 oder -p none einsetzen kann. Mit s2f als Server (Parameter -s), damit implementiert habe - eine pseu-
-r <Port> wird jeweils der Port ange- sich der lokale Mail-Client mit s2f do-POP3-Verbindung aufbaut, die
geben, auf dem man die Verbindung verbinden kann. eigentlich keine ist. Für jedes zu
entgegen nehmen will. Mit -t <Port> übertragene Byte wird der Befehl
wird der Port des Peers angegeben. server# s2f -p 25 RETR n ausgeführt, wobei aber n
Für ICMP benötigt man eigentlich client# s2f -s -p 20000 keine Nachrichten-Nummer, son-
keine Ports, doch Sie dienen in die- dern der ASCII-Wert des zu über-
sem Fall zur Identifikation der Ver- Ab jetzt muss nur noch mit einem tragenen Bytes ist. Der vstt-Aufruf
bindung für die Sockets. Die eigene Mail-Client auf dem Client an Port ist Analog zur ICMP-Variante, nur
Adresse wird letztlich noch mit -a, 20000 verbunden werden, und die dass nun POP3 als zu benutzendes
die des Peers mit -m angegeben. SMTP-Session kann beginnen. Protokoll auf dem Client und dem

6 hakin9 Nr. 1/2007 www.hakin9.org/de


Tunneling

Server angegeben werden muss. se lassen sich natürlich auch die unangetastet lassen, da dieses
Hier daher nur das Beispiel für den meisten anderen Application-Layer eine zu wichtige Bedeutung im TCP-
Client: Protokolle wie SMTP, NNTP, IMAP, Traffic hat, Es wird verwendet, um
HTTP, FTP etc. verwenden, um Da- empfangene Daten zu bestätigen.
client# vstt -p pop3 -r 10002 \ ten zu verstecken und gleichzeitig Daher sollte man erst das 3. Bit
-t 10001 -a 192.168.2.20 \ zu tunneln. der TCP-Flags beanspruchen: das
-m 192.168.2.22 PUSH-Flag. Dieses Bit wird ver-
TCP wendet um einzelne TCP-Segmente
Eine weitere Möglichkeit wäre es, TCP basierte Streamsocket-Tunnel unmittelbar an den Applicationlayer
jeweils 4 Bit eines Bytes zu über- kennen Sie bereits durch das erste weiterzuleiten, ohne dass erst eine
tragen indem man die Zeichen RETR Beispiel (SSH) und den soeben bestimmte Anzahl von Bytes (dafür
als Binärwerte verwendet. Ist ein beschriebenen POP3-Tunnel. Doch gibt es übrigens konfigurierbare
Zeichen groß geschrieben, steht sind diese nicht die einzigste Mög- Watermarks) empfangen werden
es für eine 1, ein kleines Zeichen lichkeit durch TCP zu tunneln. Im muss. Einige Anwendungen wie
hingegen repräsentiert eine 0. TCP-Header können einige Bits da- SSH und Telnet benutzen übrigens
Würden also die zwei Befehle reTR zu benutzt werden, um Daten darin generell das PUSH-Flag, um jeden
4\r\nReTR 3\r\n aufeinander folgen, zu verstecken. Tastendruck sofort zu übertragen
dann würde dies das Byte 00111011 Simmuliert man beispielsweise und auszuwerten.
repräsentieren. Möchte man es eine Verbindung zwischen zwei Sys-
noch weiter treiben, so kann man temen, dann werden einige Bits im IPv4 und IPv6
jeweils nur 1 Bit übertragen, indem TCP-Header gar nicht, und andere Um Daten direkt im Ipv4 oder Ipv6
man entweder nur 1 oder 2 Leer- nur bedingt verwendet. Besonders Protokoll zu tunneln gibt es auch
zeichen zwischen dem Befehl und interessant sind die 6 reservierten einige Möglichkeiten. In Ipv4 könn-
der Nachrichtennummer überträgt, Bits, die an sich keine weitere Ver- ten Bits zur Flussoptimierung, oder
wobei eben wieder eines für eine wendung finden. Das darauf fol- auch einige Bits des Wertes Time-
1 und zwei für eine 0 stehen (oder gende Urgent-Bit könnte man noch to-live (TTL) missbraucht werden.
umgekehrt). Solche Tunnel sind als siebentes Bit verwenden. Doch Der TTL-Wert ist 8 Bit groß. Wird
äußerst schwer zu detektieren. Falls Achtung: Ist das Urgent-Bit ge- ein IP-Datenpaket versendet, so ist
man allerdings jeweils nur ein oder setzt, wird auch der Urgent-Pointer der TTL-Wert zu begin 0xff. Jeder
vier Bit überträgt, so müssen ex- ausgewertet, der das Ende der als Router, den das Paket passiert,
trem viele POP3-Pakete gesendet dringlich markierten Daten im Pay- dekrementiert den TTL-Wert um
werden, was dann wiederum sehr load zeigt. Um ein einzelnes Byte zu exakt 1. Erreicht der TTL-Wert die
auffällig sein kann, weil die Traffic- übertragen fehlt nun nur noch das Zahl 0, so wird das Paket verwor-
Rate – je nach Umgebung – deutlich 8. Bit. Dass auf das Urgent-Bit fol- fen. Man verwendet den TTL-Wert
ansteigen kann. Auf die selbe Wei- gende ACK-Bit sollte man möglichst unter Anderem, um unendlich lan-
ge Routing-Loops zu verhindern,
in denen Pakete unendlich kreisen
würden. Weiß man aber, dass
VER IHL Type of Service Total Length
zwischen zwei Tunnelendpunkten
bspw. nur 2 Router (man spricht
dann von 2 Hops) liegen, und dass
ID FLG Fragment Offset keine andere Route zwischen den
beiden Hops besteht, so kann man
davon ausgehen, dass die ersten
TTL Protocol Checksum 6 Bits nicht manipuliert werden,
und diese nach belieben zum tun-
neln verwenden. Diese Technik
Source Address
ist allerdings sehr umständlich,
individuell anzupassen und sehr
fehleranfällig. Mit etwas Kreativität
Destination Address
könnte man sich ansonsten auch
die optionalen Ipv4-Optionen zu
Options Padding Nutzen machen.
In Ipv6 könnte man hingegen die
4 Bits des Priority-Feldes verwen-
den um ein halbes Byte zu tunneln.
Abbildung 7. Aufbau des Ipv4-Headers Ebenfalls denkbar ist die modifi-

www.hakin9.org/de hakin9 Nr. 1/2007 7


Angriff

kation des Hop-Limits, dass den


Nachfolgeder des Ipv4 TTL-Wertes
darstellt.
Ver Traffic Cl Flow Label

ICMP
Beim ICMP-Protokoll gibt es ver- Payload Length Next Hdr. Hop Limit
schiedene Möglichkeiten, Daten zu
tunneln. Man muss hierzu wissen,
dass der ICMP-Header sich je nach Source Address
ICMP-Typ und ICMP-Code unter-
schiedlich gestaltet und eine unter-
schiedliche Bedeutung aufweist. Destination Address

Am Einfachsten ist es ICMP-Da-


ten über ICMP-Echo Datagramme
zu tunneln. In echo-Requests ist
Abbildung 8. Aufbau des Ipv6-Headers
Platz für sehr viele Daten, weshalb
ein Ping-Tunnel auch die beste steht dabei für die DNS-Encodierte terschiedlichen DNS-Namen – sich
Möglichkeit ist, Daten über ICMP zu Form der zu übertragenen Daten. jede Seite alle Requests merken und
tunneln. Hier gibt es allerdings etwas (Mehr zur Encodierung der DNS-Re- bei doppelten Requests mit einem
zu beachten: Würden Sie in einem quests finden Sie im DNS-RFC oder neuen Schlüssel, der in einem Sub-
Netzwerk wie meinem versuchen Lesen Sie den Source Code meines Protokoll enthalten seien könnte, ei-
ICMP-Tunnel aufzubauen, würden DNS-Servers Xyria:DNSd). nen neuen Wert generieren, den der
Sie scheitern. Warum? Weil viele Ad- Ein DNS-Header kann aus bis zu Peer-Endpunkt mit dem natürlich zu
ministratoren und andere komische 127-Level von je 127 Zeichen langen übertragenden Schlüssel dechiffrie-
Leute üblicher Weise ICMP Ping-Re- (Sub-)Domains bestehen und kann ren kann. Wenn Sie nun trotz Allem
quests (also Ping-Anfragen) blocken. somit recht gut Daten übertragen. denken, es sei relativ einfach, Daten
Was hingegen nicht blockiert wird Bedenken Sie jedoch, dass normale über DNS zu tunneln, dann lesen Sie
sind Ping-Response Nachrichten. So DNS-Requests über UDP-Pakete den letzten Abschnitt des Artikels
ist es möglich, einen Ping-Request in laufen und diese in Verwendung mit zum Thema Reliability.
andere Netzwerke zu schicken, und dem DNS nur 512 Byte groß sein
die Antwort zu erhalten, ohne dass dürfen. Ziehen Sie von diesen Bytes CDP
Hosts aus anderen Netzwerken den DNS-Header und den Platz, Für den absurden Fall (das Absurde
Ping-Requests in das eigene Netz- den die Encodierung beansprucht ist schließlich interessant!), dass
werk senden können. vstt benutzt ab, dann erhalten Sie, je nachdem man gar keine TCP/IP-Daten ver-
desshalb ICMP Echo-Response wie gut ihre Encodierung geschrie- senden kann, ist es in Sonderfällen
Pakete (ICMP-Type 0) statt Echo- ben ist, deutlich weniger, aber im- (z.B. weil TCP/IP nicht in den Kernel
Request Pakete (ICMP-Type 8), um mernoch genug Platz. Wichtig ist, einkompiliert ist und ein Netzwerk nur
ICMP-Tunnel aufzubauen. In der dass immer TXT-Records angefragt mit AppleTalk oder IPX läuft) immer
Default-Konfiguration können dabei werden. Dadurch kann der Server noch möglich, Daten durch andere
bis zu 64 Byte pro Paket versendet mit einem TXT-Record antworten, in Protokolle zu tunneln. Diese sind in
werden. Wenn man möchte, kann dem die Encodierung viel einfacher der Regel jedoch nicht routingfähig,
man aber auch weitaus mehr Daten ist, und daher können auch einfacher weshalb man Daten praktisch nur
pro Paket verpacken. und schneller mehr Daten übertra- direkt austauschen kann (und sich ei-
gen werden. Allerdings muss man nen Proxy selber schreiben müsste...
DNS sicherstellen, dass wirklich immer aber jetzt geraten wir für normalden-
Eine recht schwierige Möglichkeit der eigene Pseudo-DNS Server kende Sicherheitsverantwortliche in
Daten zu tunneln (speziell wenn man von den dazwischen geschalteten den Bereich des Absurden). Mögliche
ganze IP-Pakete tunneln möchte) Servern abgefragt wird, was sich Kandidaten hierfür sind das Cisco
ist, diese durch das Domain Name ebenfalls besonders schwierig rea- Discovery Protocol (CDP), die IPX-
System (DNS) zu schleusen. Dazu lisieren lässt – zum Beispiel weil und AppleTalk-Protokolle sowie einige
benötigt man einen Fake-DNS Ser- gleiche Anfragen im Cache von da- selbst gebastellte Protokolle. Eine
ver. Die Anfrage wird in der Form zwischengeschalteten DNS-Servern weitere Möglichkeit bestünde darin, in
ABC.mydomain.com vom Client an landen könnten (und somit die Ver- einem Netzwerk, dass das Spanning
den Server (oder einen anderen Ser- bindung kompromittieren könnten). Tree Protocol (STP) nicht benutzt,
ver im Internet, der dann den eige- Zu diesem Zweck müsste – unter mittels dafür geschriebener Program-
nen Server anfragen muss) gestellt. Verwendung einer Chiffrierung zur me genau in diesem Protokoll Daten
Der Teil ABC des Domainnamens generierung von immer wieder un- zu verschicken. Anstatt einer Adresse

8 hakin9 Nr. 1/2007 www.hakin9.org/de


Tunneling

könnte man in dann die zu tunnelnden eine TCP-Streamsocket Verbin-


Daten verstecken. Doch nun genug dung verwendet): Pakete können
mit diesem Ausblick und zurück zum unterwegs verloren gehen, in
letzten wichtigen Thema. verschiedener Reihenfolge beim
Tunnelendpunkt ankommen oder
Weitere Möglichkeiten Schaden nehmen. Im lokalen Sub-
Wenn Sie nun denken, die Möglichkei- netz kann man durchaus tunneln,
ten des Tunnelings seien durch diese ohne sich um soetwas kümmern
paar Protokolle und die gesamten Ap- zu müssen, doch wenn man Da-
plication-Layer Protokolle erschöpft, ten über das Internet versenden
dann irren Sie sich. Beispielsweise möchte, dann kommt man nicht um
könnte man recht gut in dynamischen einen Algorithmus herum, der einen
Routingprotokollen tunneln. Im Rou- Schutz implementiert. Die Vorge-
ting Information Protocol (RIP) sind hensweise hierfür ist natürlich sehr
beispielsweise ganze 16 Bit ungenutzt. protokollspezifisch. In vstt habe ich
Würde man folglich die für ein Netz- für die ICMP-Tunnel jedem Paket ei-
werk typischen Routing-Meldungen ne ID verpasst. Diese ID muss von
zwischen einigen Routern generieren, der Gegenstelle ebenfalls mit einem
so dass dem Administrator nichts da- ICMP-Paket bestätigt werden. Wird
ran auffällt, und würde man zudem die ID nicht bestätigt, dann wird das
Sniffende Tunnelendpunkte haben, die Paket erneut gesendet.
den Datenverkehr zwischen solchen Ausserdem kümmert sich vstt
Routern mitlesen, dann könnte man darum, dass die Pakete, die zu groß
sehr wohl unbemerkt kommunizieren. für ein einzelnes ICMP-Paket sind,
Durch Routing-Protokolle sollte man auf mehrere aufgeteilt werden und
allerdings nur im Extremfall tunneln, am Ende wieder zusammengesetzt
da ein kleiner Fehler grobe negative werden. Erst wenn alle Teile eines
Auswirkungen auf ein Netzwerk ha- ursprünglichen Pakets übertragen
ben kann! wurden, wird der Payload an s2f
weiterleitet. So oder ähnlich funk-
Reliability tionieren die meisten Tunneling-
Leider gibt es da nämlich noch ein Tools die direkt mit ICMP oder TCP
Problem (sofern man nicht grad tunneln. l

Im Internet
• http://www.tcp-ip-info.de/tcp_ip_und_internet/tunneling _protokolle.htm - weitere
VPN-Protokolle;
• http://en.wikipedia.org/wiki/Tunneling _protocol sowie http://de.wikipedia.org/
wiki/TCP/IP-Referenzmodell – Wikipedia-Artikel;
• http://www.nocrew.org/software/httptunnel.html – httptunnel;
• http://www.stunnel.org/ - stunnel;
• http://doomed-reality.org - vstt;
• ftp://ftp.rfc-editor.org/in-notes/rfc1035.txt - RFC 1024: P. Mockapetris: Domain
Names – Implementation and Specification, Nov. 1987.

Literatur
• Praxisbuch Netzwerksicherheit, Galileo-Press, 2005 - S. Wendzel & J. Plötner.

Über den Autor


Steffen Wendzel ist 21 und beschäftigt sich seit vielen Jahren mit der Sicherheit von
Unix-Systemen und TCP/IP-Netzwerken. Er entwickelte diverse OpenSource Softwa-
re, ist Autor mehrerer Bücher zu den Themen Linux und Netzwerksicherheit, Security
Consultant bei Plötner-IT sowie Student der Informatik an der FH-Kempten (Deutsch-
land). Seine Webseite: http://cdp.doomed-reality.org

www.hakin9.org/de hakin9 Nr. 1/2007 9