05.02.2013 Aufrufe

Netzwerkanalyse und Fehlersuche

Netzwerkanalyse und Fehlersuche

Netzwerkanalyse und Fehlersuche

MEHR ANZEIGEN
WENIGER ANZEIGEN

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?

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!