Netzwerkanalyse und Fehlersuche
Netzwerkanalyse und Fehlersuche
Netzwerkanalyse und Fehlersuche
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Kapitel 11<br />
<strong>Netzwerkanalyse</strong> <strong>und</strong> <strong>Fehlersuche</strong><br />
IP-Netzwerke sind inzwischen allgegenwärtig <strong>und</strong> nicht mehr ausschliesslich die Domäne von<br />
Freaks <strong>und</strong> Administratoren, die irgendwo im geheimnisvollen Hintergr<strong>und</strong> werkeln. Linux<br />
ist seit Anbeginn ein Netzwerkbetriebssystem, fast alle heute betriebenen Linux-Maschinen<br />
verwenden irgendwo das Internet-Protokoll. Viele Applikationen sind auf das Funktionieren<br />
der Netzwerkverbindungen angewiesen. Sie stellen jedoch durchaus unterschiedliche Anforderungen.<br />
Viele Nutzer <strong>und</strong> viele Dienste in grossen Netzwerken rufen auch dunklere Gestalten<br />
auf den Plan. Denen möchte ein Administrator keine überflüssige Angriffsfäche bieten oder<br />
er will deren Aktivitäten später nachvollziehen.<br />
Dieses Kapitel gibt Systemadministratoren Hinweise, wie sie bestimmte Netzwerkprobleme<br />
aufspüren können <strong>und</strong> welche Werkzeuge ihnen unter Linux zur Seite stehen. Die<br />
Aufgaben von Netzerwerken sind vielfältig. Die Netzwerkstrukturen einer vernetzten WG<br />
oder Familie unterscheiden sich von denen einer großen Organisation oder Firma. Trotzdem<br />
gibt es eine Reihe von Fragestellungen, die sich gleichen.<br />
11.1 Überblick<br />
Schon mit einer recht überschaubaren Anzahl von Werkzeugen läßt sich vielen Netzwerkproblemen<br />
qualifiziert zu Leibe rücken. Eine ganze Reihe sehr einfacher Tools, wie ping, telnet<br />
oder netstat steht eigentlich in jeder Gr<strong>und</strong>installation einer Linux-Maschine dem Admin<br />
zur Verfügung. Dabei wird das Kommando telnet häufig als Relikt alter Remote-Shells<br />
unterschätzt.<br />
Es erlaubt einfache Verbindungstests auf TCP-Dienste, um bespielsweise die Erreichbarkeit<br />
von Maschinen zu testen, die ICMPs selbst oder deren Firewalls ICMP blockieren.<br />
Mit nmap sieht der Admin sich sein Netz <strong>und</strong> seine Maschinen mit den Augen eines potenziellen<br />
Angreifers an. Diesen Hammer muss man jedoch nicht sofort schwingen, wenn man<br />
selbst Admin auf der zu untersuchenden Maschine ist. lsof oder netstat zeigen auf Server<br />
selbst an, welche Verbindungen gerade offen sind <strong>und</strong> welche Dienste diese anbieten.<br />
Abger<strong>und</strong>et wird die Tool-Suite durch Paketsniffer, wobei ethereal fast keine Wünsche<br />
mehr offen läßt <strong>und</strong> den Vergleich mit teuren kommerziellen Produkten kaum scheuen muss.<br />
Für das Verständnis der meisten Aspekte der <strong>Netzwerkanalyse</strong> sind einige Gr<strong>und</strong>kenntnisse<br />
des Aufbaus <strong>und</strong> der Funktionsweise der Netzwerkprotokolle ganz nützlich.<br />
11.1.1 Aufgabenfelder<br />
<strong>Netzwerkanalyse</strong>n können sehr unterschiedliche Fragestellungen beantworten. So möchte<br />
man vielleicht wissen, ob eine entfernte Maschine, beispielsweise der Webserver, den man<br />
157
158 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
nebenbei betreut, überhaupt noch erreichbar ist. Oder man fragt sich, weshalb die Daten nur<br />
durch die Leitung tröpfeln, obwohl die gemietete DSL-Verbindung mit 2 Mbit/s nicht die<br />
langsamste ist. In anderen Szenarien wollen Admins vielleicht wissen, was für Informationen<br />
ein Client mit einem Server austauscht.<br />
Für den weiteren Verlauf wurden die Fragestellungen in drei Bereiche aufgeteilt. Diese<br />
sind nicht völlig streng voneinander abzutrennen. Die Aufteilung soll aber helfen das sehr<br />
weite Feld der <strong>Netzwerkanalyse</strong> zum besseren Verständnis etwas zu strukturieren.<br />
Eine klassische Fragestellung ist die Erreichbarkeit von Maschinen <strong>und</strong> Diensten im<br />
Netz. Wenn im Webbrowser die Seite einer bestimmten Site nicht angezeigt wird, kann<br />
das verschiedene Ursachen haben. Ein Rechner mit einer Internet-Adresse muss korrekt<br />
konnektiert sein, damit er von überall aus dem Netz erreicht werden kann. Ist dieses gegeben,<br />
kommt es im nächsten Schritt darauf an, dass die richtigen Dienste an den richtigen Ports<br />
auf Anfragen warten.<br />
Nicht nur die bösen Jungs im Netz verwenden Paketsniffer. Diese Klasse von Tools hilft,<br />
den Inhalt von Paketen sichtbar zu machen. So werden nicht nur unverschlüsselte Standardprotokolle<br />
in ihrer Nutzung aufgedeckt, sondern können auch komplexere Fehler gef<strong>und</strong>en<br />
werden. So melden Protokolle wie DHCP selten die kompletten Anfragen eines Clients im<br />
Logfile. Ebenfalls haben Clients, die mittels ROM booten gar nicht die Möglichkeit viel Code<br />
für Debugging im ROM unterzubringen. Hier kann der Netzwerkadministrator herausbekommen,<br />
was für eine Anfrage der Client mit welchen Parametern gestellt hat. Genauso<br />
kann er sehen, ob der Server überhaupt geantwortet hat <strong>und</strong> was den Inhalt dieser Antwort<br />
ausmachte.<br />
Oft sind Maschinen erreichbar, die Client-Applikation spricht mit dem Server <strong>und</strong> trotzdem<br />
sind die Nutzer im eigenen Netz alles andere als zufrieden mit der Performance. Besonders<br />
kritisch wird es beim Telefonieren über das Netz via Voice-over-IP oder Online-Spielen.<br />
Hier kommt es darauf an, wie eine Leitung oder ein Router ausgelastet ist, in welcher Richtung<br />
die Daten hauptsächlich fliessen <strong>und</strong> ob es zu Staus kommt. Nicht immer lassen sich<br />
alle Probleme beeinflussen, besonders wenn sie ”irgendwo anders” im Netz auftreten. Oft<br />
kann man jedoch den Benutzern eine qualifizierte Auskunft geben, warum beispielsweise<br />
die eine VoIP-Verbindung sehr gut, die andere jedoch eher lausig funktioniert.<br />
11.1.2 Namensauflösung - ja oder nein<br />
Bei der Netzwerkkommunikation sind üblicherweise Maschinen beteiligt, die über einen sogenannten<br />
Full Qualified Domain Name (FQDN) verfügen. Sie können damit neben ihrer<br />
IP auch über diesen Namen weltweit angesprochen werden. Die Übersetzung zwischen Namen<br />
<strong>und</strong> IP-Adressen übernimmt im Hintergr<strong>und</strong> das Domain Name System 1 . DNS ist ein<br />
Dienst, der auf der Basis von IP funktioniert. IP funktioniert ohne DNS, DNS jedoch nicht<br />
ohne IP.<br />
Bei der <strong>Netzwerkanalyse</strong> kann es hilfreich sein, sich den Namen der miteinander Daten<br />
austauschenden Maschinen anzeigen zu lassen. Eine WWW-Verbindung zu www.google.com<br />
erhält je nach Netzteilnehmer sicherlich eine andere Einschätzung, als eine Verbindung zu<br />
der etwas kryptischen Adresse s0106000c6ed855d2.vs.shawcable.net. Aber auch der zweite<br />
Name gibt ziemlich gut Auskunft über die Funktion der Maschine.<br />
Jedoch generiert jede Auflösung einer Adresse in einen Namen zusätzlichen IP-Verkehr.<br />
Dieser kann schmale Bandbreiten zusätzlich belasten oder zu hohen Verzögerungen in den<br />
Analyse-Tools führen, wenn diese auf eine Antwort des jeweiligen DNS-Servers warten<br />
müssen. Bei starker Auslastung von Maschine <strong>und</strong> Netzwerkinterface gehen dem Monitor-<br />
1 DNS - siehe eigenes Kapitel zu diesem Thema
11.2. ERREICHBARKEIT VON DIENSTEN UND MASCHINEN 159<br />
Tool bei eingeschalteter DNS-Auflösung auch schon mal Pakete durch die Lappen, da der<br />
Aufwand höher ist, als nur IP-Adressen direkt aus dem jeweiligen Paket auszulesen. Deutlich<br />
geschickter ist es in vielen Fällen die Auflösung nach Namen abzuschalten <strong>und</strong> später<br />
manuell für die interessant oder problematisch erscheinenden Verbindungen dieses nachzuholen.<br />
11.2 Erreichbarkeit von Diensten <strong>und</strong> Maschinen<br />
Die Erreichbarkeit von Maschinen im Internet ist eine Gr<strong>und</strong>voraussetzung für eine erfolgreiche<br />
Kommunikation.<br />
11.2.1 Ping <strong>und</strong> Erweiterungen<br />
In der Schifffahrt senden so genannte Echolote ein Ultraschallsignal aus, um U-Boote<br />
<strong>und</strong> Hindernisse im Wasser zu orten. Das Signal wird reflektiert <strong>und</strong> mittels speziellem<br />
Empfänger hörbar gemacht. Es ist ein kurzes ”Ping” zu hören. Diesem Mechanismus ist<br />
das Kommando ping nachempf<strong>und</strong>en. Es benutzt das Internet Control Message Protocol,<br />
ein IP-Hilfsprotokoll für Fehler- <strong>und</strong> Kontrollmeldungen, wie Ping-Requests <strong>und</strong> -replys.<br />
Ping nimmt als Argument entweder eine IP-Adresse oder einen Hostnamen. Der Name<br />
wird per DNS zur IP aufgelöst <strong>und</strong> diese dann angezeigt:<br />
linux02:~> ping google.de<br />
PING google.de (216.239.39.104) 56(84) bytes of data.<br />
64 bytes from 216.239.39.104: icmp_seq=1 ttl=240 time=104 ms<br />
64 bytes from 216.239.39.104: icmp_seq=2 ttl=240 time=105 ms<br />
--- google.de ping statistics ---<br />
2 packets transmitted, 2 received, 0% packet loss, time 1000ms<br />
rtt min/avg/max/mdev = 104.370/104.694/105.018/0.324 ms<br />
Darüberhinaus meldet ping den (Mis-)Erfolg der Aktion <strong>und</strong> wie lange die Pakete im Schnitt<br />
für ihre Reise durchs Netz benötigten. Man kann zudem probieren auf die Broadcast-Adresse<br />
des eigenen Netzes zu pingen. Hier sollte keine Maschine antworten. Andernfalls ist das<br />
Subnetz für Flood-Pings, eine Denial-of-Service-Attacke zum Vervielfachen von Paketen,<br />
anfällig.<br />
Ping kennt eine Reihe von Optionen, mit denen sich sein Verhalten anpassen läßt. Mit<br />
der Option ”-s” legt man die Paketgröße fest. Große Pakete brauchen länger als sehr kurze.<br />
Sehr große Pakete müssen fragmentiert werden, bevor sie verschickt werden können.<br />
linux02:~> ping -c 1 -s 1400 132.230.9.254<br />
PING 132.230.9.254 (132.230.9.254) 1400(1428) bytes of data.<br />
1408 bytes from 132.230.9.254: icmp_seq=1 ttl=255 time=1.12 ms<br />
--- 132.230.9.254 ping statistics ---<br />
1 packets transmitted, 1 received, 0% packet loss, time 0ms<br />
rtt min/avg/max/mdev = 1.126/1.126/1.126/0.000 ms<br />
linux02:~><br />
linux02:~> ping -c 1 -s 50 132.230.9.254<br />
PING 132.230.9.254 (132.230.9.254) 50(78) bytes of data.<br />
58 bytes from 132.230.9.254: icmp_seq=1 ttl=255 time=0.436 ms<br />
--- 132.230.9.254 ping statistics ---<br />
1 packets transmitted, 1 received, 0% packet loss, time 0ms<br />
rtt min/avg/max/mdev = 0.436/0.436/0.436/0.000 ms
160 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
linux02:~><br />
linux02:~> ping -c 1 -s 14000 132.230.9.254<br />
PING 132.230.9.254 (132.230.9.254) 14000(14028) bytes of data.<br />
14008 bytes from 132.230.9.254: icmp_seq=1 ttl=255 time=5.21 ms<br />
--- 132.230.9.254 ping statistics ---<br />
1 packets transmitted, 1 received, 0% packet loss, time 0ms<br />
rtt min/avg/max/mdev = 5.214/5.214/5.214/0.000 ms<br />
Wenn man ein bestimmtes ”Ping” auf der Strecke mit einem Packet-Sniffer identifizieren<br />
will, hilft die Option ”-p ”. Damit kann man ein Pattern, ein Muster angeben.<br />
Eine grobe Performance-Messung im Netzwerk läßt sich durch Flooding testen ping -f<br />
Ziel-Rechner schickt soviele Pakte, wie die Schnittstelle versenden kann. Diese Option<br />
ist deshalb nur dem Administrator vorbehalten. Wenn eine ganze Reihe von Maschinen<br />
hintereinander angepingt werden sollen, macht es Sinn, nach beispielsweise drei Versuchen<br />
abzubrechen <strong>und</strong> einen Timeout anzugeben. Das regeln ”-c” für Count <strong>und</strong> ”-W” für die<br />
Wartezeit.<br />
Das klassische ping wurde für Einzelrechner entworfen, auf Broadcast-Pings sollten<br />
Maschinen nicht mehr antworten. Für das Pingen vieler Maschinen gibt es deshalb das<br />
Kommando fping.<br />
hermes:~ # fping -C 3 -q -g 10.8.4.1 10.8.4.10<br />
10.8.4.1 : 1.24 0.67 0.67<br />
10.8.4.2 : 0.83 0.27 0.25<br />
10.8.4.3 : - - -<br />
10.8.4.4 : - - -<br />
10.8.4.5 : - - -<br />
10.8.4.6 : - - -<br />
10.8.4.7 : 1.34 0.61 1.02<br />
10.8.4.8 : - - -<br />
10.8.4.9 : - - -<br />
10.8.4.10 : - - -<br />
Im Beispiel wurden alle Maschinen im IP-Bereich von 10.8.4.1 - 10 drei Mal angepingt <strong>und</strong><br />
das Ergebnis in netter Tabellenform mit den ermittelten Werten dargestellt. Die Option ”-C<br />
3” sorgte für Anzahl der Pings <strong>und</strong> deren Tabellendarstellung, ”-g” nimmt als Argument<br />
IP-Listen entgegen. Alternativ zum Beispiel ginge auch 10.8.4.0/29 für die ersten acht IP-<br />
Adressen von 10.8.4.0 - 7. Mit ”-q” beschränkt sich fping auf die Ergebnisdarstellung. Die<br />
Nichterreichbarkeit wurde durch das ”-” angedeutet. Fping kennt noch eine ganze Reihe<br />
weiterer Optionen, die sich in der ausführlichen Manpage finden.<br />
Auf der anderen Seite von ping <strong>und</strong> traceroute steht das kleine Programm icmpmon.<br />
Es protokolliert auf einer Maschine eintreffende ICMP-Pakete. Diese beantworten nicht nur<br />
Ping-Anfragen, wie im Beispiel oben. Die Zahl der ”v” steuert die ”Geschwätzigkeit” der<br />
Ausgabe.<br />
s02:/tmp # icmpinfo -vvv<br />
icmpinfo: Icmp monitoring in progress...<br />
Apr 12 22:09:39 ICMP_Echo < 132.230.1.142 [login2.ruf.uni-freiburg.de] sz=64(+20)<br />
0000 : 4500 0054 0000 4000 3E01 B037 84E6 018E E..T..@.>..7....<br />
0010 : 84E6 8117 0800 297E 8248 0001 8D29 5C42 ......)~.H...)\B<br />
0020 : 71C9 0600 0809 0A0B 0C0D 0E0F 1011 1213 q...............<br />
0030 : 1415 1617 1819 1A1B 1C1D 1E1F 2021 2223 ............ !"#<br />
[ ... ]<br />
Apr 12 22:13:44 ICMP_Time_Exceeded < 129.143.15.141 [Freiburg1.Belwue.DE] ><br />
134.76.60.86 [stud9.stud.uni-goettingen.de] sp=64009 [vcnet-link-v10]
11.3. NMAP - OFFENE MASCHINEN UND NETZE 161<br />
dp=33443 seq=0x003037aa sz=36(+20)<br />
0000 : 4500 0038 0000 0000 FC01 27AB 818F 0F8D E..8......’.....<br />
0010 : 84E6 8117 0B00 4078 0000 0000 4500 0044 ......@x....E..D<br />
0020 : 6553 0000 eS..<br />
[ ... ]<br />
Angreifer könnten versuchen durch ICMP-Redirects die Kernel-Routing-Tabelle zu verändern.<br />
Weniger dramatisch sind die durch traceroute bewusst ausgelösten Time-Exceeded-<br />
Meldungen. Sie weisen darauf hin, dass bei einem von der Maschine abgeschickten Paket<br />
wärend des Transports die TTL abgelaufen ist.<br />
11.2.2 Mögliche weitere Probleme<br />
Meldet (f)ping die Unerreichbarkeit einer Maschine, kann dieses mehrere Ursachen haben.<br />
Es kann beispielsweise ein Fehler im Routing vorliegen. Dann hilft das Kommando traceroute<br />
beim Nachverfolgen der Strecke. Oder der Admin der Maschine hat ICMP per Firewall<br />
geblockt. Dann gibts für den einfachen Test von TCP-Ports Telnet oder das Super-Tool<br />
nmap. Telnet ist eine Netzwerk-Applikation, die TCP benutzt. Als Remote-Login sollten<br />
Sie es auf keinen Fall verwenden, da es unverschlüsselt arbeitet. Die Auswirkungen sehen<br />
Sie weiter hinten bei ethereal. Es eignet sich jedoch gut, auf die Erreichbarkeit von TCP-<br />
Ports zu testen. An einer Konsole gibt man ein: telnet Ziel-Host Ziel-Port. Ziel-Host<br />
kann eine IP-Adresse oder ein Rechnername sein. Der Zielport ist eine Zahl zwischen 0<br />
<strong>und</strong> 65535 oder das Dienstkürzel. Die Zuordnung der Portnummern zu Namen für TCP<br />
<strong>und</strong> UDP findet sich in der Datei /etc/services. Nicht nur das Programm Telnet macht von<br />
dieser Datei Gebrauch.<br />
So liefert ein ”get” auf Port 80 (alternativ: http) eines HTTP-Servers oft eine mehr<br />
oder weniger sinnvolle Antwort, SMTP-Server melden sich mit ihrer Kennung <strong>und</strong> Dienste,<br />
die SSL verwenden, lehnen zumindest die Verbindung nicht ab. Lauscht kein Dienst am<br />
angesprochenen Port, dann lehnt der Ziel-Host die Verbindung ab.<br />
dirk@mobile ~ $ telnet rz.uni-freiburg.de smtp<br />
Trying 132.230.2.42...<br />
Connected to rz.uni-freiburg.de.<br />
Escape character is ’^]’.<br />
220 uni-freiburg.de ESMTP CommuniGate Pro 4.2.9 is glad to see you!<br />
^]<br />
telnet> close<br />
Connection closed.<br />
Im Beispiel meldete sich der SMTP-Server mit seiner Versionsnummer. Aus der Telnet-<br />
Sitzung kommt man mit dem Tastaturkürzel [Strg]-[AltGR]-[9]” (”ˆ]”) wieder heraus.<br />
11.3 NMAP - offene Maschinen <strong>und</strong> Netze<br />
Jeder Dienst, der sich ansprechen lässt <strong>und</strong> jedes Netz, in das man eindringen kann, bietet<br />
zwangsläufig Angriffspunkte. Das ”Hacker-Werkzeug” schlechthin ist nmap. Es dient dazu,<br />
offene Netze <strong>und</strong> auf den enthaltenen Maschinen offene Ports zu finden. Beim Portscanning<br />
geht es bildlich gesehen um das ”Anklopfen an die verschiedenen Türen” des Zielrechners,<br />
um festzustellen ob sich etwas Interessantes dahinter befindet. Genauer gesagt will ein Angreifer<br />
üblicherweise herausfinden welche TCP <strong>und</strong> UDP-Dienste auf dem Zielsystem laufen,<br />
um sich durch diese gegebenenfalls unauthorisierten Zugang zum System zu erlangen.
162 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
Um Problembereiche in eigenen Netzen selbst aufzuspüren, sollte man die Tools kennen<br />
<strong>und</strong> unter Umständen benutzen, da sie Auskunft geben, was potenzielle Angreifer reizvoll<br />
finden könnten.<br />
Die gescannten Ports einer Maschine klassifiziert Nmap in der folgenden Weise:<br />
• open: Ein Dienst akzeptiert an diesem Port eingehende TCP oder UDP-Connects. Ein<br />
offener Port kann gegebenenfalls missbraucht werden, um Zugang zum Zielsystem zu<br />
erlangen<br />
• closed: Ein Port, der als ”closed” festgestellt wurde, ist zwar erreichbar, aber unbenutzt.<br />
Es arbeitet kein Dienst dahinter. Dennoch kann es sinnvoll sein, solche Port<br />
zur OS-Erkennung mit einzubeziehen.<br />
• unfiltered: Dieser Zustand kann nur beim ACK Scan auftreten, bei dem versucht wird<br />
die Firewall-Regeln zu mappen. Mit ”unfiltered” bezeichnet Nmap erreichbare Ports<br />
von denen es nicht entscheiden kann ob sie offen oder nicht benutzt sind.<br />
• filtered: Wenn der Portscanner nicht in der Lage ist zu erkennen, ob ein Port ”open”<br />
oder ”closed” ist, wird er als ”filtered” eingestuft. In solchen Fällen verhindert eine<br />
Firewall (als Paketfilter) das Erreichen des Ports.<br />
• open, filtered: Dieser Zustand tritt bei Scans ein, bei welchen von offenen Ports keine<br />
Antwort erwartet wird. Hierbei kann die fehlende Antwort auch Resultat einer<br />
Firewall sein, die den Port blockiert.<br />
• closed, filtered: Nmap ist sich unsicher, ob der Port als ”offen, filtered” einzustufen<br />
ist.<br />
11.3.1 Scan-Methoden<br />
Nmap implementiert eine weitreichende Sammlung von Scan-Methoden, die in Abhängigkeit<br />
eines erwarteten Dienstes an einem Port, benötigt werden um eine korrekte Identifizierung<br />
zu erreichen. Darüberhinaus erlaubt Nmap die Offensichtlichkeit eines Scans zu reduzieren.<br />
Die nachfolgende Liste stellt die wichtigsten Scans zusammen:<br />
• TCP SYN ”-sS” Der SYN Scan wird auch als halboffener Scan bezeichnet, da auf den<br />
kompletten Three-Way-Handshake verzichtet wird. Wenn nach dem senden des TCP<br />
Paketes mit dem SYN-Flag ein ACK als Antwort folgt, geht Nmap von einem offenen<br />
Port aus. Kommt als Antwort ein RST, wird der Port als geschlossen deklariert <strong>und</strong><br />
wenn keine Antwort oder ein ICMP UNREACHABLE Fehler folgt, kann man vermuten,<br />
dass eine Firewall den Datenverkehr kontrolliert. Für den SYN Scan braucht der<br />
Nmap-Benutzer Admin-Rechte, da sogenannte Raw-Packets verschickt werden. SYN<br />
Scans sind nur schwer zu erkennen, da keine vollständige TCP Verbindung aufgebaut<br />
wird. Diese Methode arbeitet sehr schnell.<br />
• TCP Connect() ”-sT” Der TCP Connect() Scan kommt dann zum Einsatz, wenn ein<br />
SYN Scan nicht möglich ist. Es wird eine komplette TCP Verbindung zum jeweiligen<br />
Port aufgebaut. Nmap verwendet hierfür den connect() Systemaufruf, wie er auch<br />
von Web-Browsern <strong>und</strong> in P2P Netzwerken verwendet wird um eine Verbindung zu<br />
initiieren. Diese Methode arbeitet deutlich langsamer als der SYN Scan <strong>und</strong> hinterlässt<br />
zudem Spuren in den Log-Dateien des Zielsystems.
11.3. NMAP - OFFENE MASCHINEN UND NETZE 163<br />
• TCP Null ”-sN” Bei dieser Methode wird ein TCP Paket ohne gesetzte Flags abgeschickt.<br />
Hält das Zielsystem RFC 793 ein, sendet es ein RST für alle geschlossenen<br />
Ports <strong>und</strong> keine Antwort für alle offenen Ports zurück.<br />
• TCP FIN ”-sF” Bei dieser Methode wird ein TCP Paket mit gesetztem FIN-Flag<br />
abgeschickt. Wird das RFC 793 auf dem Zielsystem eingehalten, kommt ein RST für<br />
geschlossene Ports <strong>und</strong> keine Antwort für offene Ports zurück. Dieser Ansatz funktioniert<br />
normalerweise nur bei UNIX basierten TCP/IP Stack Implementationen, da<br />
sich Microsoft nicht an die Standards gehalten hat.<br />
• TCP Xmas ”-sX” Bei dieser Methode wird ein TCP Paket mit gesetztem FIN-, URG<strong>und</strong><br />
PSH-Flag abgeschickt. Es gilt das oben zu RFC 793 gesagte.<br />
• TCP Ack ”-sA” Diese Methode wird dazu verwendet mehr über die Firewall herauszufinden.<br />
Durch schicken eines TCP Paketes mit gesetztem ACK Flag sieht es so aus<br />
als wenn vom internen Netz ein SYN Paket geschickt worden wäre <strong>und</strong> wird somit von<br />
einem normalen Paketfilter durchgelassen. Ein zustandsbezogener Paketfilter merkt<br />
hingegen, dass kein SYN Paket vom internen Netz gesendet wurde <strong>und</strong> blockiert das<br />
Paket.<br />
• Individual ”–scanflags” Nmap erlaubt es TCP Pakete mit individuellen Flags abzuschicken.<br />
Dies kann sinnvoll sein, da viele Intrusion Detection Systeme Standard-<br />
Scans entdecken können. So schickt man mit der Option --scanflags FINURG ein<br />
TCP Paket mit gesetztem FIN <strong>und</strong> URG Flag ab. Zusätzlich wird festgelegt, wie<br />
Rückmeldungen interpretiert werden sollen. Zum Beispiel wird bei ”-sA” keine Rückmeldung<br />
als ”Port offen” interpretiert.<br />
• UDP ”-sU” UDP Scans sind sehr zeitaufwendig, jedoch unumgänglich um UDPbasierte<br />
Dienste wie beispielsweiwe TFTP, DHCP, DNS oder SNMP zu entdecken.<br />
Der UDP Scan kann mit einem der TCP-Scans kombiniert werden.<br />
Eine technisch gesehen interessante Untersuchung ist der Idle-Scan. Hierbei handelt es sich<br />
um einen ”blinden” TCP Scan. Bei dieser Methode wird die IP Fragmentation-ID ausgenutzt<br />
um über eine weitere Maschine das Zielsystem auszuspionieren. Das Prinzip des Idle-<br />
Scans ist in Abbildung ?? beschrieben. Die untersuchte Maschine darf zum Überprüfungszeitpunkt<br />
nicht im Netzwerk ativ sein. Dann erhöht sich die Fragment-ID nur um +1 wenn<br />
der angesprochene Port beim Zielsystem geschlossen ist <strong>und</strong> um +2 wenn der Port offen<br />
ist. Abgesehen von der Unsichtbarkeit des Angreifers, da es so aussieht als ob die dritte<br />
Maschine den Scan initiiert hat, können auf diese Weise Vertrauensbeziehungen zwischen<br />
Systemen ermittelt werden.<br />
Wenn beispielsweise der Zugriff auf eine Datenbank auf einer anderen Maschine nur<br />
dem Web-Server gestattet ist, jedoch nicht dem normalen Internet-Nutzer, zeigt ein direkter<br />
Portscan keine offenen Ports an, ein Idlescan mit dem Web-Server als Zombie jedoch sehr<br />
wohl.<br />
Eine weitere Möglichkeit besteht mit FTP Bounce Scans ”-b user:passwort@ftpserver:port”<br />
bei schlecht konfigurierten FTP-Servern. So ist es möglich diese als Portscan-Proxys zu<br />
missbrauchen. Der FTP-Server kann angewiesen werden eine Datei an Ports eines dritten<br />
Systems zu schicken. Anhand der resultierenden Fehlermeldung kann herausgef<strong>und</strong>en<br />
werden ob der entsprechende Port geöffnet oder geschlossen ist. Vorteil ist die Verschleierung<br />
des Scans gegenüber des Zielsystems, ausserdem kann, wenn ein FTP-Server aus dem<br />
Zielnetz missbraucht wird, die Firewall umgangen werden.
164 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
11.3.2 Aufruf <strong>und</strong> Benutzung<br />
Nmap arbeitet in der klassischen Ausgabe auf der Kommandozeile. Es gibt aber auch ein<br />
GTK-Frontend - nmap-fe, welches die Benutzung unter einer grafischen Oberfläche erleichtert.<br />
Es blendet am unteren Bildrand die Befehlszeile ein, wie es nmap aufruft. So läßt sich<br />
die Wirkung der einzelnen Schalter im User-Interface sehen. Auch auf der Kommandozeile<br />
kennt nmap einen interaktiven Modus; aufzurufen durch nmap --interactive.<br />
Um festzustellen, wieviele Maschinen ein Netz enthält, kann man ein ganzes Subnetz<br />
pingen, was einfacher als der direkte Versuch mit ping ist. Hierzu ruft man nmap wie folgt<br />
auf:<br />
hermes:~ # nmap -sP 10.8.4.0/24<br />
Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2005-09-29 00:42 CEST<br />
Host 10.80.4.0 seems to be a subnet broadcast address (returned<br />
1 extra pings).<br />
Host 10.80.4.1 appears to be up.<br />
MAC Address: 00:0F:66:C7:73:E8 (Cisco-Linksys)<br />
Host dell.wg.site (10.8.4.204) appears to be up.<br />
MAC Address: 00:08:74:4D:6F:3F (Dell Computer)<br />
Host 10.80.4.212 appears to be up.<br />
MAC Address: 00:02:B3:C2:55:91 (Intel)<br />
Host 10.80.4.220 appears to be up.<br />
MAC Address: 00:10:A4:8D:56:0A (Xircom)<br />
Host hermes.wg.site (10.8.4.254) appears to be up.<br />
Host 10.80.4.255 seems to be a subnet broadcast address (returned 1 extra pings).<br />
Nmap run completed -- 256 IP addresses (5 hosts up) scanned in 5.475 seconds<br />
Nmap scannt ganze Netze in der Form 192.168.2.0/24 für ein Klasse-C-Netz oder IP-Netze<br />
durch Angabe von Wildcards <strong>und</strong> Reichweiten: 192.168.1-11.* Man kann auch nur einzelne<br />
Rechner durch Angabe der Host-IP oder des Namens direkt ansprechen. Für die meisten<br />
Scans werden Root-Rechte benötigt: wie für ”-sS”, den SYN Port-Scan oder ”-sU”, den<br />
UDP-Scan. Nmap kann sein Timing für Scans durch die Angabe von ”-T Art” sehr unterschiedlich<br />
intensiv gestalten.<br />
Es existieren eine Reihe weiterer Optionen von nmap, die ein effektives Untersuchen<br />
von Zielsystemen erleichtern:<br />
• Dont Ping ”-P0” Dies ist eine Möglichkeit Nmap anzuweisen ein Zielsystem zu scannen<br />
ohne dieses vorher ”anzupingen”. Da viele Systeme im Internet nicht auf ICMP ”Echo<br />
Requests” antworten, ist es oft sinnvoll diesen Parameter zu benutzen.<br />
• Timing ”-T0-5” Der default Timingwert von Nmap steht auf -T3. Wenn man über<br />
einen schnellen Internetzugang verfügt, lässt sich zur Beschleunigung des Scans die<br />
Option ”-T4” verwenden. Mit der Option ”-T5” gehen meist zu viele Antworten des<br />
Zielsystems verloren, da Nmap nicht lange genug auf Antwortpakete wartet. Um bei<br />
hohen Sicherheitsstandards des Zielsystems zu verhindern, dass ein IDS den Scan<br />
bemerkt, kann das Timing mit ”-T0” oder ”-T1” herunter gesetzt werden. Dieses<br />
erhöht selbstredend die Dauer eines Scans.<br />
• Ports ”-p ports” Üblicherweise scannt nmap nicht alle 65535 Ports, da dieses wegen<br />
der abzuwartenden Timeouts viel zu lange dauern würde. Es beschränkt sich auf die<br />
privilegierten niedrigen Portnummern. Wenn ein bestimmter Dienst gesucht wird, ist<br />
es effektiver wenn der Scan nur bestimmte vordefinierte Ports eingeschränkt wird.<br />
Das regelt die Option ”-p 1-1023,1080,2237,5060,6667”.
11.3. NMAP - OFFENE MASCHINEN UND NETZE 165<br />
• Versionserkennung ”-sV” Da Dienste nicht unbedingt auf ihrem Standard-Port lauschen<br />
müssen, verfügt nmap über eine umfangreiche Versions-Erkennung von unterschiedlichen<br />
Diensten. Dazu greift es auf die eigene ”service probes” Datenbank<br />
zurück, welche es erlaubt viele Dienste anhand ihres Verhaltens zu identifizieren.<br />
Wenn man mit nmap ein Netz regelmäßig überprüfen will, startet es am besten skriptgesteuert<br />
im Hintergr<strong>und</strong>. Man kann mit ”-iL Datei” die Ziele aus einer Datei lesen <strong>und</strong> mit<br />
”-oN/-oX/-oG Log-Datei” die Ergebnisse im Normal-, XML- oder grep-optimierten Format<br />
in ein Logfile schreiben lassen. Die DNS-Auflösung lässt sich wie von anderen Netzwerkkommandos<br />
gewohnt mit der Option ”-n” abschalten.<br />
11.3.3 OS-Fingerprinting<br />
Wenn man feststellen möchte, was für ein Betriebssystem sich hinter einer Maschine verbirgt,<br />
hilft die Option ”-O” für den OS-Fingerprint. TCP/IP ist zwar standardisiert, aber<br />
nicht jedes Betriebssystem antwortet gleich. Beim sogenannten Stack-Fingerprinting wird<br />
anhand von spezifischen Reaktionen auf bestimmte auch ”kaputte” Anfragen erkannt, welches<br />
Betriebssystem auf dem Zielsystem installiert ist. Es gibt zahlreiche Hinweise, die zur<br />
Erkennung der unterschiedlichen Betriebssysteme führen können:<br />
• TCP ISN Muster: Hierbei wird nach Mustern in der initialen Sequenznummer, welche<br />
von der TCP-Implementation ausgewählt wird, gesucht.<br />
• IP oder Fragment-ID: Die meisten Betriebssysteme erhöhen eine systemweite Fragment-<br />
ID im IP-Header für jedes abgeschickte Datenpaket. OpenBSD geht hier anders vor<br />
<strong>und</strong> wählt die Fragment-ID zufällig. Bei Windows wird das Header-Feld für jedes Paket<br />
um 256 erhöht. Vorhersagbare ID’s können zu Sicherheitsproblemen führen, da<br />
sie beispielsweise Scans über Dritte erlauben.<br />
• Dont Fragment Bit: Viele Betriebssysteme verwenden das ”Dont fragment” Feld im<br />
IP-Header in einigen Fällen zur Optimierung des Datentransfers. Jedoch wird dies<br />
auch nicht von allen Betriebssystemen unterstützt <strong>und</strong> von manchen nur in bestimmten<br />
Fällen eingesetzt.<br />
• FIN Sonde: Sendet ein TCP FIN Paket <strong>und</strong> wartet auf Antwort. Nach RFC 793 sollte<br />
keine Antwort zurück kommen, jedoch senden viele schlampige Implementationen des<br />
TCP-Protokolls, wie bei Microsoft Windows, ein RST-Paket zurück.<br />
• Bogus Sonde: Es wir ein TCP SYN Paket mit <strong>und</strong>efiniertem Flag auf Bit 7 oder<br />
8 geschickt. Ältere Linux Kernel schicken in ihrem Antwort Paket das <strong>und</strong>efinierte<br />
Flag wieder mit. Andere Betriebssysteme brechen die Verbindung ab, wenn in einem<br />
TCP-Paket ein SYN zusammen mit einem <strong>und</strong>efinierten Flag eintrifft.<br />
• TCP Zeitstempel: Der TCP Zeitstempel ist ein optionaler Wert. Manche IP-Stacks<br />
unterstützen ihn nicht, andere erhöhen den Zeitstempel in bestimmten Frequenzen.<br />
Nmap kann mithilfe des Zeitstempels auch die ”uptime” einer Maschine bestimmen.<br />
• TCP Initiales Fenster: Nmap kann oft schon durch die alleinige Bestimmung der<br />
”inital window size” ermitteln, welches Betriebssystem antwortet, da diese meistens<br />
sehr spezifisch ist.<br />
• ICMP Behandlung: Einige Betriebssysteme regulieren die Rate des Sendens von Fehlermeldungen.<br />
Bei ICMP Fehlermeldungen wird von manchen Betriebssystemen ein
166 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
Teil der Nachricht zurückgeschickt, welche den Fehler verursacht hat. Auf diese Weise<br />
können sogar Systeme ohne offene Ports identifiziert werden.<br />
• Type of Service: Bei ICMP PORT UNREACHABLE Nachrichten wird normalerweise<br />
das ToS Feld im IP-Header auf 0 gesetzt. Linux verwendet hier aber zum Beispiel 0xC0<br />
als Wert.<br />
• Fragmentation Handling: In vielen TCP-Implementationen werden überlappende IP-<br />
Fragmente unterschiedlich behandelt. Entweder wird das alte Fragment mit dem Neuen<br />
überschrieben oder das alte Fragment bleibt erhalten.<br />
Die verschiedenen Anfragen ausgewertet <strong>und</strong> zusammengefasst, liefern eine Art Fingerabdruck<br />
eines Betriebssystems. Das funktioniert ganz gut, aber selten mit letztgültiger<br />
Sicherheit.<br />
11.4 Die eigenen Dienste <strong>und</strong> Verbindungen kennen<br />
Ist man auf einer Maschine Root, muss man nicht mit nmap die verschiedenen Netzwerk-<br />
Interfaces abscannen, um zu wissen, welche Dienste gerade laufen. Hierzu helfen die Programme<br />
netstat <strong>und</strong> lsof weiter.<br />
netstat ist ein Statistik-Tool, welches die Kernelnetzwerkschnittstellen ausliest. Netstat<br />
mit der Option ”-t” liefert alle bestehenden TCP, mit der Option ”-u” alle UDP-<br />
Verbindungen. Es zeigt jedoch nur zusammen mit der Option ”-a” alle offenen Server-Ports<br />
an. Die letzte Option alleine aufgerufen, zeigt eine vollständige Liste aller Ports <strong>und</strong> Sockets,<br />
auch die verwendeten Unix-Domain-Sockets im Dateisystem. Die Liste wird üblicherweise<br />
recht lang ausfallen. Möchte man nicht auf die Namensauflösung für bestehende Verbindungen<br />
warten, kann man diese mit ”-n” abschalten.<br />
Die Paketstatistik erfährt man mit netstat -s. Auch diese Ausgabe fällt länger aus:<br />
linux02:~ # netstat -s<br />
Ip:<br />
58239052 total packets received<br />
418723 forwarded<br />
0 incoming packets discarded<br />
53456498 incoming packets delivered<br />
50859142 requests sent out<br />
1 outgoing packets dropped<br />
68 dropped because of missing route<br />
3 fragments dropped after timeout<br />
123341 reassemblies required<br />
82569 packets reassembled ok<br />
1 packet reassembles failed<br />
3 fragments received ok<br />
Icmp:<br />
3537 ICMP messages received<br />
[ ... ]<br />
Anhand dieser Statistiken lassen sich bereits Unregelmäßigkeiten feststellen. Wenn viele<br />
Fehler in bestimmten Kategorien auftreten, könnte beispielsweise ein Scanversuch gelaufen<br />
oder gezielt kaputte Pakete geschickt worden sein.<br />
Netstat kennt eine ganze Reihe weiterer Optionen, um die Ausgaben beispielsweise für<br />
einzelne Interfaces zu verfeinern. Auskunft gibt wie üblich die umfangreiche Man-Page.<br />
Ist das IProute2-Paket installiert, liefert das Kommando ntop ebenfalls eine ausführliche<br />
Übersicht, die sich etwas anders als bei Netstat darstellt:
11.5. SCHNÜFFELN IM DATENVERKEHR 167<br />
linux02:~ # nstat<br />
#kernel<br />
IpInReceives 489769 0.0<br />
IpInDelivers 489663 0.0<br />
IpOutRequests 637864 0.0<br />
IpReasmReqds 10 0.0<br />
IpReasmOKs 1 0.0<br />
IpFragOKs 1 0.0<br />
IcmpInErrors 184367 0.0<br />
IcmpInDestUnreachs 92113 0.0<br />
IcmpInTimeExcds 184618 0.0<br />
IcmpInParmProbs 1 0.0<br />
IcmpInEchoReps 31 0.0<br />
IcmpInTimestamps 7 0.0<br />
IcmpOutErrors 155388 0.0<br />
IcmpOutTimeExcds 145357 0.0<br />
IcmpOutTimestamps 31 0.0<br />
TcpActiveOpens 94469 0.0<br />
TcpPassiveOpens 56 0.0<br />
TcpAttemptFails 95419 0.0<br />
TcpEstabResets 133 0.0<br />
TcpInSegs 245980 0.0<br />
TcpOutSegs 455926 0.0<br />
TcpRetransSegs 92354 0.0<br />
TcpInErrs 1 0.0<br />
TcpOutRsts 1229 0.0<br />
UdpInDatagrams 93009 0.0<br />
UdpNoPorts 60 0.0<br />
UdpOutDatagrams 6521 0.0<br />
Ip6InReceives 6 0.0<br />
Ip6InDelivers 6 0.0<br />
Ip6OutRequests 18 0.0<br />
Ip6OutMcastPkts 12 0.0<br />
[ ... ]<br />
lsof ist ebenfalls ein vielseitiges Analyse-Tool. Normalen Benutzern zeigt es beim Aufruf<br />
Dateien <strong>und</strong> Verbindungen an, die sie selbst geöffnet oder in Verwendung haben. Dem<br />
Systemadministrator offenbart es sämtliche Verbindungen, offenen Ports <strong>und</strong> Dateien. lsof<br />
kennt wie die meisten Netzwerkkommandos die Option ”-n” für die Unterdrückung der<br />
Namensauflösung. Dasselbe für Ports erreicht man mit ”-P”. Alle Netzwerkverbindungen<br />
lassen sich mit ”-i” anzeigen, mit ”-i6” schränkt man diese für IPv6 <strong>und</strong> entsprechend mit<br />
”-i4” für IPv4 ein:<br />
hermes root # lsof -i4<br />
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
dhcpcd 8607 root 4u IPv4 8377 UDP *:bootpc<br />
ssh 24599 dirk 3u IPv4 28337 TCP 10.8.4.220:3934-> \<br />
ns.wg.site:ssh (ESTABLISHED)<br />
ssh 28138 dirk 3u IPv4 32029 TCP 10.8.4.220:1188-> \<br />
ns.wg.site:ssh (ESTABLISHED)<br />
11.5 Schnüffeln im Datenverkehr<br />
In den bisherigen Betrachtungen ging es um die Erreichbarkeit von Maschinen <strong>und</strong> ihrer<br />
Dienste. Dabei lag der Fokus auf den Endpunkten der Kommunikationsverbindungen. Die
168 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
meisten Netzwerkdienste laufen als Client-Server-Applikation. Dabei können Clients <strong>und</strong><br />
Server komplett unterschiedliche Maschinen sein <strong>und</strong> Betriebssysteme fahren. Damit sich<br />
beide korrekt verständigen, kommt es darauf an, dass sie die ”richtige Sprache” miteinander<br />
reden. Da das verbindende Element das dazwischenliegende TCP/IP-Netzwerk ist, lassen<br />
sich durch die Beobachtung des Paketaustausches schon Rückschlüsse auf bestimmte Fehler<br />
ziehen.<br />
Wenn man sich vielleicht w<strong>und</strong>ert, weshalb die Namensauflösung in Ihrem Netz so lange<br />
dauert, oder was beim Teilumstieg auf IPv6 schief gegangen ist, reicht oft nicht das<br />
Debugging an der Applikation aus. Da hilft dann vielleicht der Blick auf die Netzwerkschnittstellen<br />
<strong>und</strong> in die Pakete hinein. Hierbei wird auch offenbar, wie einfach es ist, die<br />
Daten mitzulesen, die Applikationen unverschlüsselt austauschen.<br />
11.5.1 Analysen auf der Kommandozeile<br />
Für die Kommandozeile existiert schon sehr lange das Programm tcpdump. Es basiert wie<br />
das im Anschluss vorgestellte grafische Ethereal auf der Libpcap-Bibliothek. Diese stellt<br />
Schnittstellen zur Verfügung, die es erlauben Pakete in ”Rohform” beispielsweise auf einem<br />
Ethernet-Interface abzugreifen <strong>und</strong> zu interpretieren. Die Netzwerkschnittstelle, an<br />
die sich tcpdump hängen soll, legt man mit der Option ”-i Interface” fest, z.B. tcpdump<br />
-i eth1 für die zweite Ethernet-Karte. Im Augenblick des Starts beginnt tcpdump Pakete<br />
mitzuschreiben <strong>und</strong> in die Konsole auszugeben. Dabei schreibt es nicht den gesamten Paketinhalt<br />
heraus, sondern reduziert die Information auf wichtige IP-Header-Informationen,<br />
wie Quell- <strong>und</strong> Zieladressen, sowie Quell- <strong>und</strong> Zielports. Neben diesen Daten stellt es die<br />
Zeit des Paketempfanges sowie Teile des Inhalts, die es interpretieren konnte, dar. Eine<br />
einfache Ausgabezeile ist somit wie folgt aufgebaut: ”Zeit Protokoll Quelle.Port ¿ Ziel.Port:<br />
Kurzinterpretation des Inhalts” Will man statt der IP-Adressen die Link-Layer-Adressen,<br />
z.B. MACs im Ethernet sehen, geschieht das durch die Angabe der Option ”-e”.<br />
linux02:/tmp # tcpdump -i eth0<br />
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode<br />
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes<br />
17:24:06.921126 IP fay1.test.site.netbios-dgm > 10.17.9.255.netbios-dgm:<br />
NBT UDP PACKET(138)<br />
17:24:06.945264 IP linux022.test.site.32838 > dns1.wg.site.domain:<br />
62160+ PTR? 255.9.230.132.in-addr.arpa. (44)<br />
17:24:06.946275 IP dns1.wg.site.domain > linux022.test.site.32838:<br />
62160 NXDomain* 0/1/0 (137)<br />
17:24:06.946396 IP linux022.test.site.32838 > dns0.wg.site.domain:<br />
62161+ PTR? 44.9.230.132.in-addr.arpa. (43)<br />
17:24:06.947295 IP dns0.wg.site.domain > linux022.test.site.32838:<br />
62161* 1/3/3 (212)<br />
17:24:06.947546 IP linux022.test.site.32838 > dns1.wg.site.domain:<br />
62162+ PTR? 201.200.17.10.in-addr.arpa. (46)<br />
17:24:06.948799 IP dns1.wg.site.domain > linux022.test.site.32838:<br />
62162* 1/3/3 (208)<br />
17:24:06.954624 IP linux022.test.site.32838 > dns0.wg.site.domain:<br />
62163+ PTR? 200.200.17.10.in-addr.arpa. (46)<br />
17:24:06.955777 IP dns0.wg.site.domain > linux022.test.site.32838:<br />
62163* 1/3/3 (208)<br />
17:24:07.296782 802.1d config 8000.00:d0:95:7e:ec:3a.7205 root<br />
8000.00:09:97:30:38:0a pathcost 4 age 1 max 20 hello 2 fdelay 15<br />
17:24:07.922224 IP fay1.test.site.netbios-dgm > 10.17.9.255.netbios-dgm:<br />
NBT UDP PACKET(138)<br />
11 packets captured
11.5. SCHNÜFFELN IM DATENVERKEHR 169<br />
11 packets received by filter<br />
0 packets dropped by kernel<br />
Nun ist trotz stark verkürzten Inhalts auch bei geringem Traffic die Konsole sehr schnell<br />
voll. Hier gibts nun einige Möglichkeiten. Die mitgeschnittenen Daten kann tcpdump mit<br />
der Option ”-w Datei” in ein Logfile schreiben. Statt von einer Schnittstelle kann es mit<br />
”-r Datei” Daten zur Analyse aus einer Datei aufbereiten. Wenn alles mitgeschnitten wird,<br />
können später auch wirklich alle Informationen angesehen werden; bei großen Datenmengen<br />
ist jedoch der Plattenplatz irgendwann ein begrenzender Faktor.<br />
Eine sinnvolle Alternative bietet sich durch die Benutzung von Filtern. So schneidet man<br />
nur jene Informationen mit, die Ihnen in der gegebenen Situation (hoffentlich) weiterhelfen<br />
<strong>und</strong> ignorieren die anderen Daten einfach. Filter können bei tcpdump hinter den Optionen<br />
angegeben werden. Sie werden als Pseudo-Code geladen <strong>und</strong> bezüglich der eintreffenden<br />
Pakete interpretiert. Filterausdrücke können sich auf die verschiedenen Header beziehen.<br />
Es gibt eine Reihe von Schlüsselworttypen:<br />
• Typ 1 bestimmt den oder die zu identifizierenden Rechner. Hierzu zählen die Schlüsselwörter<br />
host, net <strong>und</strong> port. Mit ”host 10.8.4.1” wird festgelegt, dass man alle Daten<br />
sehen will, die an diese Maschine gehen oder von dieser kommen. Das geht auch für<br />
ganze Netze in der Form ”net 192.168.200.0/23” oder für bestimmte Ports ”port 25”.<br />
• Typ 2 - Für Typ 1 war die Übertragungsrichtung egal. Soll diese eine Rolle spielen,<br />
stehen die Kürzel src <strong>und</strong> dst zur Verfügung. Durch ”src host 10.8.4.23” fängt man<br />
nur IP-Pakete von der Adresse 10.8.4.23 ein. Auf den Ausdruck ”dst port 22” passen<br />
alle Pakete an den Standardport von SSH.<br />
• Typ 3 kümmert sich schliesslich um die verschiedenen Protokolle. Er kennt die Ausdrücke<br />
arp, ether, fddi, ip, ip6, rarp, tcp, udp <strong>und</strong> wlan. Um alle ARP-Pakete auf<br />
dem ersten Ethernet-Interface zu sehen, startet man einfach tcpdump -i eth0 arp.<br />
Nun ist die Welt vielleicht doch noch etwas komplexer. Um feiner abgestimmte Abfragen<br />
zu bauen, lassen sich Filterausdrücke mittels logischem UND (and) sowie logischem<br />
ODER (or) miteinander verknüpfen. Die Negation von Ausdrücken ist ebenfalls<br />
möglich. Mit tcpdump host 10.8.4.254 and 10.8.4.1or10.8.4.2 hält man die Kommunikation<br />
von 10.8.4.254 mit den beiden Maschinen 10.8.4.1,2 fest.tcpdump net 10.8.4.0/24<br />
and \!10.8.4.254 greift alle Pakete des Subnetzes auf, die nicht die Maschine 10.8.4.254<br />
zum Ziel oder als Quelle haben. Weitere Filter, beispielsweise das Matchen auf Paketlängen<br />
oder die Erklärungen zusätzliche Optionen finden sich in der ausführlichen Hilfe zum Programm;<br />
man tcpdump.<br />
11.5.2 Das Ganze in Bunt<br />
So richtig komfortabel ist tcpdump sicherlich nicht. Es hat den entscheidenden Vorteil,<br />
dass es nicht auf eine grafische Umgebung angewiesen ist. Steht diese aber zur Verfügung,<br />
läßt sich das Leben mit ethereal stark erleichtern. Es macht eigentlich ziemlich genau das<br />
gleiche, wie tcpdump. Nur stellt es die Ergebnisse in einem dreiteiligen Benutzerinterface<br />
sehr gut lesbar dar. Im oberen Teil der Applikation sind alle mitgeschnittenen Pakete aufgelistet,<br />
die sich leicht nach fortlaufender Nummer, Quelle, Ziel oder Protokoll umsortieren<br />
lassen. Dazu muss man lediglich auf den Tabellenkopf klicken. Im mittleren Teil ist das oben<br />
markierte Paket nach seinen Schichten aufgegliedert zu sehen. Der oberste Eintrag bezieht<br />
sich auf das gesamte Frame im Rohformat. Anschließend folgt der Ethernet-Header oder
170 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
Abbildung 11.1: DNS-Anfrage - man sieht, dass der Client zuerst nach einer IPv6 <strong>und</strong> dann<br />
nach einer IPv4 Adresse anfragt<br />
andere Layer2-Header. Dann kommt IP, IPv6 oder ein anderes Protokoll der Verbindungsschicht.<br />
Darauf folgend der Transport-Kopf, also meistens der TCP- oder UDP-Header. Zum<br />
Schluss sieht man die Applikationsdaten, die ethereal versucht weitestgehend zu interpretieren.<br />
Im unteren Fensterdrittel stellt ethereal das Paket als Hexdump dar <strong>und</strong> markiert<br />
den Protokollteil, der in der Mitte markiert wurde.<br />
Die Paketanalyse wird denkbar einfach: Man starte Ethereal <strong>und</strong> wählen über das Menü<br />
”Capture ¿ Start” aus. Hier trägt man noch das Interface ein, das mitgeschnitten werden<br />
soll <strong>und</strong> los gehts mit ”OK”. Es erscheint ein neues Fenster ”Capture from ...”. Hat man<br />
genug Pakete eingefangen stoppt man hier das Mitschneiden. Ethereal baut nun eine Liste<br />
der Pakete auf <strong>und</strong> stellt sie wie oben beschrieben zur weiteren Betrachtung dar. Auch<br />
ethereal erlaubt wie tcpdump das Laden <strong>und</strong> Speichern von Mitschnitten. Das geht ganz<br />
einfach über das File-Menü.<br />
Auch hier hat man vielleicht irgendwann soviele Daten mitgeschnitten, dass man mit<br />
einfachem Umsortieren nicht mehr weiterkommt. Es lassen sich dazu Filter angeben, die<br />
man entweder direkt in das Eingabefeld unterhalb der Menüzeile einfüttert oder den Assistenten<br />
”Expression” neben dem Feld erstellen läßt. Letzterer erlaubt einem sehr einfach<br />
Filter zu bauen. Dabei kann man dann fast nichts mehr falsch machen. Das Filtern auf eine<br />
MAC-Quelladresse sieht dann beispielsweise so aus: ”eth.src == 00:10:A4:8D:56:0A”. Will<br />
man auf IP Pakete filtern, die keine TCP-Payload haben, erreicht man das mit: ”ip.proto<br />
!= 6”. Will man alle DNS-Antworten sehen, gebe man als Filter: ”dns.flags.response ==<br />
1” an. Grenzen gibt es praktisch keine. Wenn ein Filter nichts matcht, sind nach dem<br />
Druck auf den Button ”Apply” die unteren Fensterteile leer. Andernfalls finden sich dort<br />
alle Pakete auf den der Filter passte. Sagte einem der Filter nicht zu, löscht man ihn mit<br />
”Clear” <strong>und</strong> schon sieht man wieder den ursprünglichen Mitschnitt. Um wirklich zu realisieren,<br />
wie einfach ein Netzwerkmitschnitt <strong>und</strong> dessen Analyse ist, starte man auf einer<br />
Maschine eigener Wahl den Telnet-Dienst. Der muss vielleicht erst noch nachinstalliert <strong>und</strong><br />
dann aktiviert. Keine aktuelle Distribution bindet ihn standardmäßig mehr ein - Telnet ist
11.6. SAMMELN IM HINTERGRUND - TRAFMOND 171<br />
Abbildung 11.2: TCP-Sessions lassen sich einfach verfolgen, dafür muss nur ein Paket der<br />
interessierenden Verbindung markiert werden<br />
der sicherheitsmäßige Sündenfall schlechthin. Wem das Beispiel sinnlos erscheint, schneide<br />
einfach mal die Anmelde-Prozedur an einen GMX-Account per Webinterface mit. Die<br />
Datenmenge ist höher, da ja die ganzen Banner noch geladen werden müssen, aber das<br />
Passwort ist dann leicht zu finden.<br />
Man klicke einfach auf ein Paket welches zur Sitzung gehört <strong>und</strong> gehe anschliessend<br />
in das Menü ”Analyze - Follow TCP Stream”. Man sieht einen Mitschnitt in dem die<br />
Senderichtung in roter <strong>und</strong> die Empfangsrichtung in blauer Schrift dargestellt ist. In Frage<br />
kommen alle Protokolle, die Passwörter unverschlüsselt austauschen. Dass auch noch der<br />
Inhalt der Sitzung so einfach nachvollzogen werden kann, ist eine andere Sache - die Dienste<br />
auf dem Weg werden es einem danken. Damit sind die Möglichkeiten von Ethereal längst<br />
nicht erschöpft. Der Admin kann sich über das gleichnamige Menü diverse Statistiken zu den<br />
eingefangenen Daten generieren lassen, die verschiedenen Kommunikationen zur besseren<br />
Identifikation bunt einfärben <strong>und</strong> vieles andere mehr.<br />
11.6 Sammeln im Hintergr<strong>und</strong> - trafmond<br />
Während sich beispielsweie icmpmon lediglich mit dem gleichnamigen Protokoll beschäftigte,<br />
beobachtet der trafmond den Netzwerkverkehr (dauerhaft) im Hintergr<strong>und</strong>. Bei<br />
einigen Distributionen ist Trafmon schon mit einem Runlevel-Skript vertreten <strong>und</strong> kann<br />
gleich beim Start eines Rechners mit hochgefahren werden.<br />
Der im Hintergr<strong>und</strong> laufende trafmond sammelt still <strong>und</strong> leise seine Daten <strong>und</strong> hinterlegt<br />
sie in einer Binärdatei /var/log/trafmon platzsparend ab. Diese Datei läßt sich mit<br />
dem Kommandozeilenwerkzeug trafmon auswerten. Die Zahl der ”v” bestimmt wiederum<br />
die Menge der Ausgaben:<br />
hermes:~ # trafmon -vv
172 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
Abbildung 11.3: Die Analyse des Datenstroms offenbahrt Passwort <strong>und</strong> Sitzungsdaten<br />
20040423 10:21:31/00h00m04s 10.8.4.220:4303 -> login2.uni-goettingen.de:ssh<br />
1518 63K<br />
20040423 10:22:40/00h00m48s 10.8.4.220:4304 -> login2.uni-goettingen.de:ssh<br />
2638 1680K<br />
20040423 12:03:58/00h00m02s 10.8.4.220:gsi -><br />
stud9.stud.uni-goettingen.de:http 5 952<br />
20040423 12:04:19/00h00m00s 10.8.4.220:jdl-dbkitchen -><br />
www.Goettingen.DE:http 5 954<br />
20040423 12:05:06/00h01m02s 10.8.4.220:2182 -> rz.uni-freiburg.de:smtp<br />
0 69<br />
20040423 12:37:37/00h00m04s 10.8.4.220:iiw-port -><br />
mail.uni-math.gwdg.de:cvspserver 897 2350<br />
Trafmon ist dafür da dauerhaft bei geringem Footprint im System zu laufen <strong>und</strong> nicht nur<br />
für Einzelanalysen ad-hoc gestartet zu werden. Die Menge der gesammelten Informationen<br />
ist kleiner, als bei den zuvor beschriebenen (Mammut-)Werkzeugen tcpdump oder<br />
ethereal.<br />
11.7 Wegeanalysen in IP-Netzwerken<br />
Das Internet Protokoll wurde dafür geschaffen, über verschiedenste reale <strong>und</strong> virtuelle Netzwerke<br />
Verbindungen herzustellen. Dabei spielt es für IP keine Rolle, ob die Daten über<br />
schnelle Glasfaserleitungen auf dem Gr<strong>und</strong> eines Ozeans laufen, per GPRS oder WLAN<br />
durch die Luft vermittelt werden oder auf unterschiedlichsten Arten von Kupferkabeln zu<br />
ihren Endpunkten oder Vermittlungsstellen zu gelangen. Für den Benutzer hat es den Vorteil,<br />
dass er eine Webseite aus den Staaten über das gleiche Netzwerkprotokoll erhält, wie
11.7. WEGEANALYSEN IN IP-NETZWERKEN 173<br />
seine Email von seinem Provider um die Ecke. Jedoch hängt das Verhalten einer Netzwerkapplikation<br />
stark davon ab, wie schnell <strong>und</strong> mit welchen Bandbreiten die Daten über<br />
eine gewisse Teilstrecke gelangen.<br />
Geht man per GPRS ins Netz spielt es keine Rolle, ob der angesprochene Webserver per<br />
Gigabit-Glasfaser an den Rest der Welt angeschlossen ist. Stattdessen kann man sich auf<br />
niedrige Bandbreiten bei hohen Verzögerungen einstellen. So kann es Ihnen auch umgekehrt<br />
passieren, dass man hinter einem schwach ausgelasteten DSL-Anschluss sitzt aber die FTP-<br />
Sitzung trotzdem nicht in Schwung kommt.<br />
Um festzustellen, was auf der Strecke so passiert, welche Verzögerungen <strong>und</strong> Paketverluste<br />
auftreten, stehen Ihnen eine Reihe von Programmen zur Verfügung. Dieser Artikel<br />
gibt einen Überblick darüber, wie sie als interessierter Linux-Nutzer oder Administrator<br />
sich Informationen zu ihrer näheren <strong>und</strong> weiteren Netzwerkumgebung verschaffen.<br />
11.7.1 Routenverfolgung<br />
Ein klassisches Kommandozeilen-Tool, welches eigentlich immer zur Gr<strong>und</strong>ausstattung einer<br />
Maschine gehört ist traceroute. Dieses Programm ist dem Kommando ping eng verwandt,<br />
da es ähnliche Informationen sammelt <strong>und</strong> ICMP benutzt. Es benötigt keine Root-<br />
Rechte zur Ausührung, liegt aber für Normalbenutzer meistens nicht im Suchpfad der Shell<br />
(/usr/sbin). traceroute zeichnet den Weg eines Paketes entlang seiner Route zum Ziel<br />
auf <strong>und</strong> stellt die Ergebnisse in einer Liste dar. Hierfür setzt traceroute lediglich ein funktionierendes<br />
UDP-Modul am Ziel voraus - eine besondere Applikation auf der Gegenseite<br />
benötigt es nicht. Wichtig ist jedoch, dass ICMP am Ziel nicht durch eine Firewall blockiert<br />
wird.<br />
traceroute nutzt für das Ermitteln der Route das TTL-Feld des IP-Headers. Der Absender<br />
initialisiert das TTL-Feld mit ”1” <strong>und</strong> schickt das erste Paket ab. Passiert ein IP-Paket<br />
einen Router, zählt dieser das TTL-Feld um eines herunter. Erreicht das Feld den Wert<br />
Null, verwirft der Router das Paket <strong>und</strong> schickt eine TTL-Exceeded an den Absender. So<br />
erfährt traceroute vom ersten Router. Anschliessend erhöht es das Feld um eins <strong>und</strong> schickt<br />
das nächste Paket. Die Aktion wird solange wiederholt, bis das Ziel erreicht ist.<br />
s02:~ # traceroute www.spiegel.de<br />
traceroute to www.spiegel.de (195.71.11.67), 30 hops max, 40 byte packets<br />
1 10.1.1.11 4.753 ms 5.273 ms 6.134 ms<br />
2 132.230.120.142 4.799 ms 6.439 ms 6.149 ms<br />
3 nsc-rz-gwn.fun.uni-freiburg.de (132.230.0.141)<br />
8.592 ms 5.977 ms 5.611 ms<br />
4 Freiburg1.belwue.de (129.143.15.141) 6.563 ms 12.260 ms 15.243 ms<br />
5 Stuttgart1.belwue.de (129.143.1.7) 16.740 ms 20.804 ms 15.209 ms<br />
6 Frankfurt1.belwue.de (129.143.1.26) 22.202 ms 23.175 ms 24.137 ms<br />
7 129.143.200.42 23.237 ms 26.502 ms 25.844 ms<br />
8 rmws-frnk-de07-gigaet-0-0.nw.mediaways.net (213.20.255.4)<br />
30.913 ms 30.517 ms 30.180 ms<br />
9 rmwc-frnk-de01-pos-1-2.nw.mediaways.net (213.20.249.201)<br />
30.205 ms 29.389 ms 30.864 ms<br />
10 rmwc-gtso-de01-pos-1-0.nw.mediaways.net (195.71.254.121)<br />
27.959 ms 31.603 ms 23.201 ms<br />
11 217.188.58.204 24.364 ms 24.707 ms 23.578 ms<br />
12 195.71.11.67 22.980 ms 23.742 ms 23.209 ms<br />
Traceroute ohne die Option ”-n” aufgerufen versucht jede IP-Adresse in einen Hostnamen<br />
aufzulösen. Sie steht dann in Klammern hinter dem Namen. Gelingt keine Auflösung gibt<br />
es nur die IP an. Traceroute nummeriert die einzelnen Zwischenstationen durch <strong>und</strong> gibt
174 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
hinter jeder drei Paketlaufzeiten an. Diese können deshalb variieren. Kam ein Paket abhanden,<br />
druckt traceroute ein Stern ”*”. Antwortet ein Router gar nicht, druckt es drei Sterne<br />
<strong>und</strong> springt zum nächsten. Befindet sich das Ziel irgendwo in einem geschützten Netz, sind<br />
die Aussagen zu den letzten Hops mit Vorsicht zu geniessen. Gibt es ein ”N!” aus, dann<br />
tauchte der Router zum erneuten Mal in der Liste auf. Das kann auf ein Routingproblem<br />
oder eine Firewall hinweisen. Eigentlich sollten die Paketlaufzeiten von Hop zu Hop ansteigen.<br />
Da aber Router viel beschäftigte Systeme sind <strong>und</strong> für die eigene Paketeverarbeitung<br />
länger brauchen können als für das Durchleiten kommen bei sehr schnellen Netzen Zeiten<br />
zustande, die nicht in einer aufsteigenden Reihenfolge liegen müssen. Eine komfortable<br />
Abbildung 11.4: Hier sieht man ganz deutlich, wie beim dritten Router sehr viele Pakete<br />
verloren gehen<br />
Erweiterung von traceroute ist mtr (My traceroute). Es gehört meistens nicht zum Standardinstallation,<br />
so dass man es bei Bedarf nachinstallien muss. Dieses Programm schickt<br />
nicht nur drei Pakete in Folge an eine Zwischenstation, sondern wiederholt diesen Vorgang<br />
bis es abgebrochen wird. Die Tabelle zeigt in der Gr<strong>und</strong>einstellung in der ersten Spalte den<br />
Host, in der zweiten den Paketverlust für jede Zwischenstation <strong>und</strong> daneben die Zahl der<br />
gesendeten Pakete. Für diese einzelnen Pings wird der letzte Wert, der Durchschnitt, die<br />
beste <strong>und</strong> die schlechteste Zeit aufgeführt. Man kann durch wiederholtes Drücken von ”d”<br />
den Anzeigemodus interaktiv ändern. Mit ”o” wählt man weitere Werte zur Darstellung in<br />
der Tabelle aus.<br />
s02 (0.0.0.0)(tos=0x0 psize=64 bitpattern=Tue Sep 29 16:02:26 2005<br />
Keys: Help Display mode Restart statistics Order of fields quit<br />
Packets Pings<br />
Host Loss% Snt Last Avg Best Wrst StDev<br />
1. 132.230.9.254 0.0% 16 0.6 0.7 0.5 1.5 0.2<br />
2. nsc-rz-gwn.fun.uni-fre 0.0% 16 3.2 1.5 0.3 4.1 1.2<br />
3. Freiburg1.belwue.de 0.0% 15 1.1 2.0 0.4 6.4 1.9<br />
4. Stuttgart1.belwue.de 0.0% 15 5.2 6.4 4.6 12.1 2.3<br />
5. Stuttgart2.belwue.de 0.0% 15 5.1 8.6 4.6 21.2 4.8<br />
6. ar-stuttgart4-ge3-2.g- 0.0% 15 5.1 12.1 4.4 26.6 8.7<br />
7. cr-stuttgart1-ge5-0.g- 0.0% 15 4.7 11.8 4.6 44.8 11.6<br />
8. cr-frankfurt1-po3-0.g- 0.0% 15 26.2 14.6 7.7 47.7 12.0<br />
9. cr-hannover1-po3-1.g-w 0.0% 15 13.7 13.8 13.0 15.8 0.7<br />
10. ar-goettingen1-po0-0.g 0.0% 15 16.6 15.7 14.7 17.5 0.8<br />
11. 188.1.46.202 0.0% 15 15.6 16.2 14.9 23.8 2.2<br />
12. stud9.stud.uni-goettin 0.0% 15 16.0 15.7 15.1 16.7 0.5
11.8. STATISTIKEN 175<br />
Von mtr gibts auch eine grafische Ausgabe. Diese muss jedoch oft separat installieren<br />
werden. Gestartet wird das Programm dann durch die Eingabe von xmtr.<br />
11.8 Statistiken<br />
Es gibt eine Reihe von Informationen, die sich mit Ethereal zwar beschaffen lassen, wo die<br />
Darstellung jedoch nicht optimal ist. Geht es um den generellen Real-Time-Überblick, ist<br />
für einige Fragestellungen der Paket- <strong>und</strong> Port-Statistiksammler iptraf eine gute Wahl.<br />
Dieses Programm recht mächtig. Es gibt auch kleinere Geschwister, die nicht ganz so viel<br />
Funktionsumfang mitbringen: trafshow <strong>und</strong> netwatch.<br />
11.8.1 iptraf<br />
Das Programm ist ncurses-basiert, also in einer normalen Shell lokal oder remote benutzbar.<br />
Eine grafische Oberfläche ist dafür nicht erforderlich. Das Tool gehört üblicherweise<br />
nicht zum Standardinstallationsumfang, so dass ein Admin es meist erst installieren muss.<br />
Beim Start des Programms erscheint eine kurze Begrüssungsmeldung, weiter gehts zum<br />
Abbildung 11.5: Das Hauptmenü von iptraf<br />
Hauptmenu mit einer beliebigen Taste. Dort lässt sich zwischen den folgenden Funktionen<br />
auswählen:<br />
• Der ”IP traffic monitor” verfügt über ein zweigeteiltes Interface. Im oberen zeigt IP-<br />
Traf bestehenden TCP-Verbindungen mit ihren Endpunkten <strong>und</strong> deren Status an. Im<br />
unteren Drittel läuft der Non-TCP-Traffic, also in erster Linie UDP, ICMP <strong>und</strong> ARP<br />
durch. Unter dem Menupunkt ”General interface statistics” listet IPTraf für jedes<br />
Interface die Zahl der ein- <strong>und</strong> ausgegangenen (Non-)IP-Pakete <strong>und</strong> die Datenrate<br />
für jedes Interface auf.<br />
• ”Detailed interface statistics” liefert Informationen zu einem vor ausgewählten Interface.<br />
Es zählt ein <strong>und</strong> ausgehende Pakete <strong>und</strong> Bytes. Zusätzlich listet es die Datenraten<br />
für ankommende <strong>und</strong> abgehende Datenströme <strong>und</strong> die Gesamtrate auf. Dieses Interface<br />
zeigt beispielsweise sehr gut, ob <strong>und</strong> wie eine DSL-Leitung ausgelastet ist. Hier<br />
ist die Unterscheidung zwischen ankommenden <strong>und</strong> abgehenden Paketen besonders<br />
interessant, da der Upstream deutlich kleiner als der Downstream ist. So kann man<br />
beispielsweise feststellen, ob der Download wegen verstopften Upload-Kanals mager
176 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
Abbildung 11.6: Das IP Traffic Monitor mit dem zweigeteilten Interface<br />
ausfällt. Zur Optimierung von Traffic-Shaping bietet sich ebenfalls der Blick in dieses<br />
Interface an.<br />
• Die ”Statistical breakdowns...” bieten Informationen, die sich mit anderen Tools eher<br />
schlecht beschaffen lassen. Die Zusammenfassungen nach der Paketgröße zeigt, in<br />
75 Byte Schritten, in welche Kategorie übertragene Pakete fallen. Viele recht kleine<br />
Pakete lassen auf andere Applikationen schliessen als viele große. Ersteres deutet auf<br />
die Nutzung von Voice-over-IP hin, letzteres eher auf große Downloads via HTTP oder<br />
FTP. Ebenso sind Überblicksstatistiken für TCP <strong>und</strong> UDP abfragbar: Nach Protokoll<br />
<strong>und</strong> Port sortiert baut IPTraf Listen auf <strong>und</strong> schlüsselt dabei wieder ankommendem<br />
<strong>und</strong> abgehendem Datenverkehr auf.<br />
• Der ”LAN station monitor” beobachtet Ereignisse auf dem Layer unterhalb der IP-<br />
Ebene 2 . Hier zählt IPTraf Pakete anhand ihrer MAC-Adresse <strong>und</strong> schlüsselt die Ergebnisse<br />
nach ankommenden <strong>und</strong> abgehenden IP- <strong>und</strong> generellen Paketen <strong>und</strong> Bytes<br />
auf.<br />
• Im Konfigurationsmenu lassen sich eine ganze Reihe Parameter einstellen, wie die<br />
umgekehrte DNS-Auflösung, Farben, Timer, Port-Ranges <strong>und</strong> etliches mehr.<br />
11.8.2 TrafShow <strong>und</strong> NetWatch<br />
Mit etwas weniger Funktionsvielfalt wartet trafshow auf. Es zeigt nach dem Start im Konsolenfenster<br />
bestehende IP-Verbindungen <strong>und</strong> die Zahl der darin gesendeten Pakete an.<br />
Am unteren Fensterrand stellt es eine Statistik aus der insgesamt seit Start übertragenen<br />
Paketmenge, der Zahl der Pakete pro Sek<strong>und</strong>e <strong>und</strong> der Zahl der Bytes pro Sek<strong>und</strong>e auf.<br />
Das Programm kann über Kommandozeilenoptionen gesteuert werden: So verhindert<br />
das vielfach bekannte ”-n” eine Auflösung in Rechnernamen <strong>und</strong> die Darstellung der Quell-<br />
2 Dieses kann der Data Link Layer bei Ethernet-Verbindungen sein aber auch PPP bei PPPoE-<br />
Verbindungen
11.8. STATISTIKEN 177<br />
<strong>und</strong> Zieladressen erfolgt als numerische IP-Adresse. Als letztes Argument kann beim Aufruf<br />
optional ein Ausdruck angegeben werden, der zum Filtern auf bestimmte Pakettypen analog<br />
zu tcpdump funktioniert. Gestartet mit der Option ”-e” gibt trafshow den Ethernet-<br />
Verkehr aus. Mit trafshow -i wlan0 legt der Administrator fest, dass das Programm die<br />
Schnittstelle wlan0 überwachen soll. Weitere Informationen enthält die Manpage.<br />
Ebenfalls in die Sparte der ncurses-basierten Programme fällt netwatch. Anders als<br />
iptraf oder trafshow wählt NetWatch eine andere Bildschirmaufteilung. Links werden die<br />
Verbindungen im LAN <strong>und</strong> rechts die entfernten aufgelistet. Mit den Links- <strong>und</strong> Rechts-<br />
Cursortasten kann die Art der Anzeige verändert werden: Zählen der ein <strong>und</strong> ausgehenden<br />
Pakete, empfangene <strong>und</strong> gesendete Bytes oder Art der Verbindung. Mit der Option ”-e eth1”<br />
legt man fest, dass NetWatch auf dem zweiten Ethernet-Interface lauscht, ”-n” unterdrückt<br />
die Auflösung von IP-Adressen in DNS-Namen.<br />
Zur Unterscheidung von LAN- <strong>und</strong> entferntem Datenverkehr kann mit ”-i IP” eine<br />
bestimmte lokale IP <strong>und</strong> mit ”-m Netmask” eine lokale Netzmaske für die geeignete Auswahl<br />
des Traffics festgelegt werden: netwatch -i 10.1.2.3 -m 255.192.0.0 sieht alle Pakete<br />
im Netz von 10.0.0.0 bis 10.63.255.255 als lokal <strong>und</strong> alle anderen als remote an.<br />
11.8.3 Analysen webbasiert - ntop<br />
Mit ntop gibt es ein weiteres Werkzeug, um Netzwerkschnittstellen bis ins Detail zu<br />
überwachen <strong>und</strong> den Datenverkehr auszuwerten. Es ist bei den meisten Distributionen als<br />
Paket verfügbar, muss aber wie viele der anderen hier vorgestellten Tools extra installiert<br />
werden.<br />
s02:~ # ntop -A -u wwwrun<br />
Tue Apr 12 22:46:30 2005 Initializing gdbm databases<br />
Please enter the password for the admin user:<br />
Tue Apr 12 22:46:59 2005 Admin user password has been set<br />
s02:~ # ntop<br />
Tue Apr 19 10:21:04 2005 Initializing gdbm databases<br />
Tue Apr 19 10:21:04 2005 ntop will be started as user nobody<br />
Tue Apr 19 10:21:04 2005 ntop v.3.0.053 MT (SSL)<br />
Tue Apr 19 10:21:04 2005 Configured on Dec 11 2004 20:05:20, built on \<br />
Dec 11 2004 20:07:17.<br />
Tue Apr 19 10:21:04 2005 Copyright 1998-2004 by Luca Deri <br />
Tue Apr 19 10:21:04 2005 Get the freshest ntop from http://www.ntop.org/<br />
Tue Apr 19 10:21:04 2005 Initializing ntop<br />
Tue Apr 19 10:21:04 2005 No default device configured. Using eth0<br />
Tue Apr 19 10:21:04 2005 Checking eth0 for additional devices<br />
Tue Apr 19 10:21:04 2005 Resetting traffic statistics for device eth0<br />
Tue Apr 19 10:21:04 2005 DLT: Device 0 [eth0] is 1, mtu 1514, header 14<br />
Tue Apr 19 10:21:04 2005 Initializing gdbm databases<br />
Tue Apr 19 10:21:05 2005 VENDOR: Loading MAC address table.<br />
[ ... ]<br />
Einmal das Passwort festgelegt <strong>und</strong> anschliessend gestartet, stellt ntop über Port 3000 als<br />
Web-Service etliche statistische Daten zur Verfügung. Als Gr<strong>und</strong>lage beobachtet das Programm<br />
den Datenverkehr <strong>und</strong> wertet ihn für die Statistik aus. Der Zugriff auf das Interface<br />
steht ersteinmal offen, da NTop defaultmäßig auf allen Interfaces startet. Nur bestimmte<br />
Bereiche, wie das Filtern, Abschalten oder der Statistik-Reset sind dem ”admin” vorbehalten,<br />
dessen Passwort man eingangs gesetzt hat. Das Programm braucht zum Betrieb<br />
einiges an Speicher, sehr knapp dimensionierte Systeme können hier Probleme bekommen.
178 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
Das Verhalten <strong>und</strong> die Fähigkeiten von ntop kann man über die Kommandozeile beim<br />
Aufruf des Daemons steuern. Hierzu gibt die ausführliche Manpage Auskunft.<br />
Die Informationen, die ntop sammelt unterscheiden sich nicht stark von den bereits vorgestellten<br />
Programmen. Es geht wieder um bestehende Verbindungen, generierten ausgehenden<br />
<strong>und</strong> ankommenden Traffic, Rechner mit ihren Hostnamen, IP- <strong>und</strong> MAC-Adressen.<br />
Einzelne Aspekte, wie die Aufschlüsselung der Pakete nach der Größe der TTL im Bereich<br />
”Traffic” kennt man vielleicht noch nicht. Der wesentliche Vorteil liegt in der vom<br />
Linux-Router völlig unabhängigen Darstellung auf jedem Webbrowser. So ist eine grafische<br />
Aufbereitung der Information auch ohne X11 problemlos möglich.<br />
11.8.4 Top fürs Netzwerk<br />
Das Programm iftop orientiert sich an dem für Prozesse bekannten top. Es arbeitet in<br />
der Konsole <strong>und</strong> besitzt einen zweigeteilten Aufbau: Im oberen Bildteil listet iftop die<br />
bestehenden Netzwerkverbindungen <strong>und</strong> deren über kurze Zeit gemittelten ankommenden<br />
<strong>und</strong> abgehenden Datenverkehr auf. Am oberen Bildrand stellt das Netzwerk-Top ein Skala<br />
Abbildung 11.7: Top für die Netzwerkauslastung, Anzeige durch die Länge der schwarzen<br />
Balken<br />
mit Kilobit-Aufteilung dar. Diese dient dazu für jede Verbindung durch schwarze Balken, die<br />
von links aus wachsen, den aktuellen Traffic symbolisch darzustellen. Im unteren Fensterteil<br />
gibt IfTop eine Zusammenfassung über alle bestehenden Verbindungen an.<br />
11.8.5 MRTG<br />
Das Programm Multi Router Traffic Grapher (MRTG) dient zur Überwachung der Auslastung<br />
von Netzwerkinterfaces. MRTG setzt ein Perl-Skript ein, mittels Simple Network<br />
Management Protocol (SNMP) den Durchsatz einzelner Netzwerkschnittstellen zu ermitteln.<br />
Es erzeugt mit einem kleinen C-Programm HTML-Seiten, welche die Auslastungsgrafen<br />
der überwachten Interfaces im PNG-Format zusammenfassen. Die Grafen bleiben nicht<br />
statisch, sondern werden bei jedem Durchlauf von MRTG fortlaufend erzeugt.
11.8. STATISTIKEN 179<br />
Für längerfristige Analysen erzeugt MRTG Grafen, die den Datenduchsatz der letzten<br />
Woche, des letzten Monats <strong>und</strong> des letzten Jahres wiedergeben. MRTG schreibt hierfür<br />
eine spezielle Log-Datei, welches es sukzessive konsolidiert. Damit wächst die Datei nicht<br />
unaufhörlich <strong>und</strong> trotzdem sind alle erforderlichen Daten enthalten, um auch langzeit Statistiken<br />
erstellen zu können. Die Einrichtung von MRTG erfordert etwas Überlegung <strong>und</strong><br />
Abbildung 11.8: Langzeitdaten sammeln mit MRTG<br />
höheren Aufwand als für die meisten bisher gezeigten Tools. Als erstes muss man eine<br />
Konfigurationsdatei erstellen. In dieser Datei sind nicht nur die Pfade zur Datenablage<br />
enthalten, sondern auch das gr<strong>und</strong>sätzliche Layout der später generierten Webseiten. Hier<br />
besteht die Chance einige Anpassungen vorzunehmen. Die Datensammelei geschieht durch<br />
SNMP - deshalb muss MRTG wissen, wie es an die Daten herankommt. Man kann damit<br />
jeden beliebigen Router oder Switch überwachen, die SNMP sprechen. Hierzu gibt man die<br />
Interfaces an, für die MRTG Statistiken schreiben soll <strong>und</strong> den SNMP-Community-String<br />
für das jeweilige Gerät. Die Geräte lassen sich über ihre IP oder den Rechnernamen ansprechen.<br />
Eine recht einfache Konfiguration erzeugt das mitgelieferte Tool cfgmaker durch<br />
den folgenden Aufruf:<br />
cfgmaker --interfaces eth0 ppp0 public@localhost > /etc/mrtg.conf
180 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
Anschliessend sollte man noch einen Blick in die Konfiguration werfen <strong>und</strong> mindestens<br />
den Pfad für die Ablage der Webseiten anpassen. Zugreifen kann man auf der Maschine<br />
selbst natürlich an einem Webserver vorbei, in dem man einfach das Verzeichnis <strong>und</strong> die<br />
HTML-Dateien im Browser direkt aufruft. Sollen die Statistiken auch remote zugänglich<br />
sein, kommt der Admin am Betrieb eines Webservers nicht vorbei. MRTG stellt anders als<br />
ntop kein eigenes Webinterface zur Verfügung. Es muss dafür auch nicht permanent laufen.<br />
Für den Einsatz von MRTG muss der SNMP-Service auf Ihrer Maschine gestartet sein,<br />
sowohl für den Konfigurationsvorgang als auch den späteren regelmäßigen Lauf von MRTG<br />
selbst. Zum Testen kann man mrtg auf der Kommandozeile aufrufen. Als Argument nimmt<br />
es die zu verwendende Konfigurationsdatei.<br />
hermes:~ # env LANG=C mrtg /etc/mrtg.conf<br />
Da das Tool mit UTF8 nicht klarkommt, sollte die Language-Environment-Variable beim<br />
Start entsprechend modifiziert sein. Ging alles glatt, kann ein Admin mrtg per Cron<br />
regelmäßig, beispielsweise alle fünf Minuten, Daten sammeln schicken. Ist die Zahl der<br />
überwachten Interfaces sehr hoch, sind längere Intervalle sicherlich sinnvoll.<br />
11.8.6 Bandbreiten messen<br />
Die eine Seite ist die Beobachtung der Auslasung von Netzwerkstrecken <strong>und</strong> Interfaces.<br />
Man kann natürlich auch aktiv an die Sache herangehen <strong>und</strong> schauen, was eine gegebene<br />
Strecke potenziell leisten kann.<br />
Die Programme iftop oder iptraf konnten Aussagen zur gerade realisierten Bandbreite<br />
auf einem bestimmten Interface machen. Nun ist es aber vielleicht etwas lästig erst einen<br />
FTP-Server zu installieren oder scp dazu zu verwenden, um die Bandbreite einer Verbindung<br />
zu messen. In diese Nische springt das Werkzeug bing. Die Namensabwandlung von ping<br />
leugnet die Verwandschaft nicht. Wärend ping sich um die Erreichbarkeit kümmert <strong>und</strong><br />
Paketlaufzeiten mißt, ist bing für die Ermittlung der realisierbaren Bandbreite eines Links<br />
zuständig. Bing nutzt dazu zwei verschiedene Paketgrößen, um ein etwas realitätsnäheres<br />
Ergebnis zu bekommen.<br />
s02:~ # bing -e 8 -S 1450 -s 100 10.8.3.254 10.8.3.220<br />
BING 10.8.3.254 (10.8.3.254) and 10.8.3.220 (10.8.3.220)<br />
100 and 1450 data bytes<br />
21600 bits in 0.320ms: 67500000bps, 0.000015ms per bit<br />
21600 bits in 0.358ms: 54271357bps, 0.000018ms per bit<br />
21600 bits in 0.399ms: 53992084bps, 0.000019ms per bit<br />
21600 bits in 0.419ms: 50811736bps, 0.000019ms per bit<br />
21600 bits in 0.436ms: 49541284bps, 0.000020ms per bit<br />
--- 10.8.3.254 statistics --bytes<br />
out in dup loss rtt (ms): min avg max<br />
100 8 8 0% 0.069 0.114 0.389<br />
1450 8 8 0% 0.050 0.054 0.075<br />
--- 10.8.3.220 statistics --bytes<br />
out in dup loss rtt (ms): min avg max<br />
100 8 8 0% 0.293 0.460 0.617<br />
1450 8 8 0% 0.729 0.764 0.819<br />
--- estimated link characteristics --warning:<br />
rtt big host1 0.050ms < rtt small host2 0.069ms<br />
estimated throughput 49601284bps
11.9. AUFGABEN 181<br />
minimum delay per packet 0.193ms (9504 bits)<br />
average statistics (experimental) :<br />
packet loss: small 0%, big 0%, total 0%<br />
warning: rtt big host1 0.054ms < rtt small host2 0.114ms<br />
average throughput 71052632bps<br />
average delay per packet 0.312ms (14517 bits)<br />
weighted average throughput 71043532bps<br />
resetting after 8 samples.<br />
Im Beispiel sorgte die Option ”-s 8” dazu, dass acht Testläufe durchgezogen wurden. Mit<br />
”-s 100” setzt man die kleinen Testpakete auf 100 Byte fest, mit ”-S 1450” die großen auf<br />
1450 Byte. Im Beispiel errechnete bing für eine 100 Mbit-Verbindung ohne starke Belastung<br />
zwischen einer 2 GHz P4 <strong>und</strong> einer 600 MHz PIII Maschine eine Bandbreite von geschätzten<br />
70 Mbit.Mehrere Aufrufe erbringen durchaus verschiedene Ergebnisse. Dabei muss die Maschine<br />
auf der bing gestartet wird nicht einer der beiden Testendpunkte sein. Für eine<br />
802.11b WLAN-Strecke wurden im Beispiel 3,7 Mbit gemessen. Somit stimmen zumindest<br />
die Größenordnungen überein. Bing ist von einer ganzen Reihe von Faktoren abhängig. Die<br />
Hardware des Rechners <strong>und</strong> der Ethernetkarte spielen ebenso wie Treibergüte <strong>und</strong> Maschinenbelastung<br />
ins Ergebnis hinein.<br />
11.9 Aufgaben<br />
11.9.1 Erreichbarkeit<br />
1. Man organisiere sich die IP vom Nachbarn <strong>und</strong> versuche diesen per Ping zu erreichen.<br />
Wie erfährt man seine eigene Default-Gateway-Adresse?<br />
2. Wie kann man die Erreichbarkeit von Maschinen im Netz überpürfen?<br />
3. Welche Möglichkeiten hat man, wenn ICMP von Firewalls blockiert wird?<br />
4. Welche Rolle spielt ICMP bei der Benutzung von traceroute, ping, nmap? Was<br />
wird dabei ausgenutzt?<br />
5. Wozu dient das IP-Header-Feld TTL? Welcher Unterschied besteht beim Anpingen<br />
des eigenen Default-Gateways <strong>und</strong> einer Adresse wie www.google.de oder goe.net?<br />
6. Welche Informationen lassen sich mittels nmap über eine Maschine beschaffen?<br />
7. Wie funktioniert der FTP-Bounce-Scan? Wann wendet man diesen an?<br />
8. Warum gelingt es nmap (<strong>und</strong> mit welcher Option?) mit einer guten Trefferquote herauszubekommen,<br />
welches Betriebssystem auf einer bestimmten Maschine oder einem<br />
Netzwerkgerät läuft?<br />
9. Woran kann man alles erkennen, dass eine Maschine hinter einer NAT-Firewall sitzt?<br />
Wie kann man herausbekommen, wieviele aktive Rechner sich hinter einer NAT-<br />
Firewall angeschlossen sind?
182 KAPITEL 11. NETZWERKANALYSE UND FEHLERSUCHE<br />
11.9.2 Paketanalyse<br />
1. Man starte das Kommandozeilenprogamm tcpdump. Wie kann man die Analyse auf<br />
ein bestimmtes Interface, eine bestimmte Quell-IP oder einen festgelegten Ziel-Port<br />
beschränken?<br />
2. Für die grafische Oberfläche, deutlich bunter <strong>und</strong> leichter zu bedienen ist das Programm<br />
ethereal. Man finde heraus, von welchem Typ die ICMP-Meldungen sind, die<br />
durch ping generiert werden!<br />
3. Wie kann man beispielsweise den gesamten ARP-Verkehr aus der Analyse im Ethereal<br />
herausfiltern?<br />
11.9.3 Datenverkehr zählen<br />
1. Welche ganz einfachen Möglichkeiten hat man, um festzustellen, wieviel Datenverkehr<br />
von einer Maschine ins Netz geschickt oder empfangen wurde?<br />
2. Wie würde man eine detaillierte Statistik auf einer Linux-Maschine erhalten, die NAT-<br />
Router für zehn weitere Maschinen spielt?