10.7    Prüf- und Diagnoseprogramme für Netzwerke

Prüfen Sie Ihr Netzwerk regelmäßig. Finden Sie unerwünscht offene Ports heraus. Klären Sie Fehler mithilfe einer Datenanalyse.

10.7.1    Rechtliche Hinweise

Werkzeuge sind nicht »gut« oder »böse«. In den falschen Händen sind sie aber gefährlich. Seien Sie sich dessen bewusst, und installieren Sie sie nicht in Standardverzeichnisse (sondern außerhalb der Path-Variable liegend). Setzen Sie diese Werkzeuge nur zum Überprüfen der eigenen Systeme ein. Lassen Sie sich von Kunden am besten einen schriftlichen Auftrag geben, wenn Sie deren Systeme damit prüfen sollen.

10.7.2    Verbindungen mit »netstat« anzeigen

Mit netstat ermitteln Sie TCP-Sockets, Verbindungen und Routen am eigenen Rechner. Sie erkennen eventuell aktive Schadsoftware, die über das Netzwerk kommuniziert. Sie können sich die Gegenstellen, Prozess-IDs und Benutzer zu den Verbindungen anzeigen lassen. Eine Auflistung aller aktiven Netzwerkschnittstellen mit einer Nutzungsstatistik hilft Ihnen, Fehlfunktionen im Netzwerk zu finden. Das Programm kann von Ihnen auch mit laufend aktualisierender Anzeige aufgerufen werden. Ich zeige Ihnen einige Beispiele für Ihre Praxis (Tabelle 10.10).

Aktion

Eingabe

Beispiel

Auflistung von Routen

netstat -r

1

Auflistung der Netzwerkschnittstellen

netstat -i

2

Auflistung aller TCP/UDP-Ports

netstat -lptun

3

Anzeigen statistischer Angaben

netstat -s

4

Anzeigen offener Ports

netstat -atup

5

Tabelle 10.10     Abfragen mit »netstat«

Weitere Ausführungen zu netstat finden Sie in Abschnitt 6.4.3, »Ports und Sicherheit«.

10.7.3    Hosts und Ports mit »nmap« finden

Mittels nmap gewinnen Sie viele Informationen über Ihr Netzwerk und die daran angeschlossenen Hosts. Sie erfahren, welche Hosts in Ihrem Netzwerk aktiv sind und welche Ports an diesen offen sind. Lesen Sie unbedingt die umfangreiche Manual-Seite dieses Programms.

Ich greife hier nur wenige Anwendungsszenarien heraus. Eines davon zeigt, wie Sie sich eine Übersicht über im LAN aktive Geräte verschaffen. Sie bekommen neben der IP- auch die MAC-Adresse. Damit können Sie unter Umständen schon ungebetene Gäste erkennen.

Das Netzwerk geben Sie in der CIDR-Notation an. Die sonst recht unübersichtliche, weil umfangreiche Ausgabe filtern Sie mit egrep. Damit lassen Sie sich die übereinstimmenden und die jeweils darauf folgenden Zeilen anzeigen. Sie finden im ersten Beispiel folgende Optionen von nmap:

In Abbildung 10.59 sehen Sie eine kleine Bestandsaufnahme eines lokalen Netzes.

»nmap«:Inventur eines lokalen Netzwerks, nmap Inventur eines lokalen Netzwerks

Abbildung 10.59     »nmap«: Inventur eines lokalen Netzwerks

Wenn Sie nur das Vorhandensein bestimmter Hosts kontrollieren wollen, verwenden Sie eine Liste. Diese Liste besteht aus IP-Adressen oder Rechnernamen und befindet sich in einer Textdatei. Im folgenden Beispiel werden IPv6-Hosts kontrolliert. Die neu verwendeten Optionen im folgenden Beispiel sind:

Die Ausgabe dieses abgewandelten Inventur-Scans sehen Sie in Abbildung 10.60.

»nmap«: Ping-Scan auf eine IPv6-Adressen aus einer Liste

Abbildung 10.60     »nmap«: Ping-Scan auf eine IPv6-Adressen aus einer Liste

Zur Überprüfung eines einzelnen Hosts wählen Sie aus diesen Optionen:

Ohne weitere Angabe außer der des Rechnernamens oder der IP-Adresse erhalten Sie eine »kurze« Auskunft (Abbildung 10.61). In dieser Abbildung sehen Sie auch den erweiterten Scan (-A). In Abbildung 10.62 sehen Sie die Suche mit erweitertem Port-Bereich (‐p). Wenn Sie die Option -A benutzen, versucht nmap, auch die erreichbaren Angaben zum Port darzustellen. Im Beispiel sehen Sie die Angaben zum HTTP- und SSH-Server.

Weitere Ausführungen zu nmap finden Sie auch in Abschnitt 6.8.2, »Durchführen von Portscans zum Austesten von Sicherheitsproblemen«.

In Abschnitt 6.8.3, »Schließen von Ports«, finden Sie Hinweise zum Schließen von offenen und nicht benötigten Ports.

»nmap«: ohne und mit erweiterter Ausgabe

Abbildung 10.61     »nmap«: ohne und mit erweiterter Ausgabe

»nmap«: erweiterte Ausgabe mit vorgegebenem Port-Bereich

Abbildung 10.62     »nmap«: erweiterte Ausgabe mit vorgegebenem Port-Bereich

10.7.4    MAC-Adressen-Inventur: netdiscover

Mit diesem Programm listen Sie auf, welche Geräte sich in einem Netzwerk befinden. Teilweise kann das Programm anhand der gefundenen MAC-Adresse den Hersteller des Netzwerkchips ermitteln. Die Anwendung kann in einem Passiv-Modus arbeiten. Hierbei bleibt das Programm unauffällig und liest die ARP-Anforderungen und -Antworten aus dem Netz aus. Im Aktiv-Modus hingegen versendet das Programm selbst ARP-Pakete und kommt damit schneller zu einem Ergebnis. Dieses Programm startet in einem interaktiven Modus und kann darin per Tastendruck bedient werden. Rufen Sie es mit der Option -P auf, läuft es hingegen in einem Rutsch durch. Damit können Sie innerhalb eines Shellskriptes eine Ausgabedatei erzeugen und weiter automatisch auswerten.

Beim Programmstart können Sie diese Optionen anwenden:

Mit diesen Tasten steuern Sie das Programm:

In Abbildung 10.63 sehen Sie das Programm im Einsatz. Es wurde mit

netdiscover -i eth0 -r 192.168.0.0/24

gestartet.

Interaktive Ausgabe von netdiscover

Abbildung 10.63     Interaktive Ausgabe von netdiscover

10.7.5    Datenverkehr protokollieren (Wireshark, tcpdump)

Mit Wireshark können Sie per Mausklick den Datenverkehr protokollieren und analysieren. Beim Programmstart legen Sie die Netzwerkschnittstelle fest, auf der das Programm lauscht. Wireshark ermöglicht auch den Zugriff auf alle vorhandenen Netzwerkkarten und den localhost.

Die Benutzeroberfläche (Abbildung 10.64) gliedert sich in vier Teile. Oben finden Sie die Programmleiste. Die protokollierten Daten werden in drei Ebenen dargestellt. Die untersuchten Pakete laufen zeilenweise, verschiedenfarbig gekennzeichnet, in der oberen Ebene durch. Sie können per Mausklick eine dieser Zeilen markieren. Im mittleren Feld klicken Sie links auf einen der Protokollpfeile. Die Daten werden im Klartext dargestellt. Das untere Feld gibt die Daten hexadezimal aus.

Wireshark

Abbildung 10.64     Wireshark

Sie können Scanläufe speichern und später auswerten. Damit können Sie erkennen, ob schon Programme im Netzwerk aktiv sind, und gegebenenfalls Gegenmaßnahmen ergreifen.

Mit tcpdump nehmen Sie die gleichen Tests wie mit Wireshark vor. Die Log-Dateien von tcpdump können Sie bequem per Mausklick mit Wireshark auswerten. Ich zeige Ihnen in Tabelle 10.11 einige wichtige Optionen.

Aktion

Option

Auflisten von Netzwerkgeräten (Abbildung 10.65)

-D

Festlegen des Netzwerkgeräts

-i <GERÄT>

Nur IP-Adressen anzeigen

-n

Mitschneiden von Ethernet-Headern

-e

Ausgabe eines Paketinhalts im ASCII-Format

-A

Angabe des Informationsgrads

-v -vv, -vvv

Port festlegen

port <PORT>

Port-Bereich festlegen

portrange <von-bis>

Log-Datei, in die tcpdump schreibt

-w <DATEI>

Tabelle 10.11     Wichtige Optionen von »tcpdump«

»tcpdump«: Auflistung der Netzwerkgeräte

Abbildung 10.65     »tcpdump«: Auflistung der Netzwerkgeräte

Das Beispiel in Abbildung 10.66 zeigt Ihnen die Abfrage eines Browsers beim HTTP-Server. Damit können Sie eventuelle Angriffe entdecken.

Die von tcpdump erzeugten Daten können Sie im Shell-Skript oder auch später mit Wireshark auswerten. Das nächste Beispiel zeigt die Kommunikation zwischen einem Browser und dem HTTP-Server. Die Abfrage wird dabei auf den Port 80 begrenzt. Das Mitschnittprotokoll wird in einer Datei abgelegt. Das vollständige Kommando lautet:

tcpdump -n -vvv -A -i eth0 port 80 and dst 192.168.0.67 or dst 192.168.0.34 
-w ausgabe.dmp

Sie können die Ausgabedatei von tcpdump formatiert ausgeben lassen. Dazu geben Sie einfach tcpdump -r <DATEI> ein.

»tcpdump«: Protokollierung von Webbrowser-Anfragen

Abbildung 10.66     »tcpdump«: Protokollierung von Webbrowser-Anfragen

Lesen Sie weitere Informationen in der Manual-Seite von tcpdump.

10.7.6    Netzaktivitäten mit »darkstat« messen

Sie erhalten mit darkstat relativ schnell einen guten Überblick über die Auslastung Ihres Netzes. Das Programm selbst starten Sie in der Shell; die Anzeige erhalten Sie per Webbrowser. Um sämtlichen Verkehr Ihrer Rechner zu erfassen, starten Sie das Programm nur mit diesen Angaben:

darkstat -i eth0 -p 8080

Mit der Option -i geben Sie die Netzwerkschnittstelle an, mit -p den Port, auf den Sie mittels Browser zugreifen. Wenn Sie eine Netzwerkadresse angeben möchten, verwenden Sie -l. Das Netzwerk geben Sie zusammen mit der ausgeschriebenen Subnetzmaske an. Möchten Sie nur ein bestimmtes Netz sehen, geben Sie z. B.

darkstat -i eth0 -l 192.168.0.0/255.255.255.0 -p 8080

ein.

In der Webanzeige erhalten Sie einen Graphen (Abbildung 10.67) und eine Liste der Hosts (Abbildung 10.68).

»darkstat«: Aktivitätsanzeige

Abbildung 10.67     »darkstat«: Aktivitätsanzeige

»darkstat«: Liste der Hosts

Abbildung 10.68     »darkstat«: Liste der Hosts

10.7.7    Netzlast mit »fping« erzeugen

Wenn Sie z. B. mit darkstat eine Netzübersicht erzeugen wollen, müssen Sie so lange warten, bis jeder der angeschlossenen Hosts im selben Netz einmal aktiv war. Ohne Aktivität werden diese Geräte sonst nicht erfasst und tauchen damit nicht in der Host-Übersicht auf. Mit fping haben Sie das Werkzeug dafür. Sie können damit bei jedem Gerät »anklopfen«, sodass die gewünschte Aktivität entsteht. Der Aufruf hierfür lautet

fping -r 0 -aA -g 192.168.0.0/24

für das Netz 192.168.0.0. Anstelle der Subnetzmaske müssen Sie hier die CIDR-Schreibweise anwenden. Die einzelnen Optionen von fping bedeuten:

10.7.8    Weitere Einsatzmöglichkeiten von »fping«

Mit fping können Sie ohne großen Aufwand weitere Aufgaben erledigen. Das Programm dient als Datenquelle in Shell-Skripten. Es ermittelt Hosts, die entweder erreichbar oder nicht erreichbar sind. Ich zeige Ihnen hier ein Shell-Skript und einige Skriptfragmente als Anregung für Ihre tägliche Arbeit.

Das Shell-Skript (Listing 10.1) zeigt Ihnen alle erreichbaren Hosts innerhalb des angegebenen Netzwerks an. Im Ergebnis stehen auch die Zeitangaben. Am Schluss der Ausgabe finden Sie eine zusammenfassende Statistik. Die Anzeige lasse ich mit dem Programm less puffern. Sie können mit den Cursor-Tasten und zeilenweise blättern. Mit den Tasten (Bildì) und (Bildë) bewegen Sie sich seitenweise. Möchten Sie das angezeigte Ergebnis speichern, drücken Sie die Taste (S) und geben einen Dateinamen an. Mit (Q) beenden Sie die Anzeige.

#! /bin/sh
# Eingabe der Netzwerkadresse
echo -n "Netzwerkadresse: ";read netz
echo "Ermittle Netzwerkteilnehmer......"

# Durchführen von fping und Umleitung der gesamten Ausgabe
# in Log-Datei
fping -r 0 -aA -e -s -g $netz/24 > fping.log 2>&1

# Anzeigen der Log-Datei ohne die nicht erreichten Hosts
cat fping.log | grep -v "ICMP Host" | less

Listing 10.1     Shell-Skript »netz4.sh«

Die Ausgabe sehen Sie in Abbildung 10.69.

Ergebnisanzeige von »netz4.sh«

Abbildung 10.69     Ergebnisanzeige von »netz4.sh«

Das folgende Skriptfragment (Listing 10.2) dient Ihnen als Anregung für eigene Anwendungen:

#! /bin/sh
# Eingabe der Netzadresse
echo -n "Netzadresse eingeben: "; read netz
# fping als Datenquelle für for-Schleife
# Ausführen von fping, Umleitung der Fehlerausgabe nach /dev/null,
echo "Erreichbare Hosts"
for i in `fping -r 0 -aA -g $netz/24 2>/dev/null`
do
# Anzeige IP-Adresse
echo $i
# Auswertung für weitere Aktion
if [ "$i" = "192.168.0.1" ];
then
echo "Standard-Gateway"
fi
done
echo "-----------------------------------------"
echo "Nicht erreichbare Hosts"
# fping als Datenquelle für for-Schleife
# Ausführen von fping,
for i in `fping -r 0 -uA -g $netz/24 2> /dev/null`
do
echo $i
if [ "$i" = "192.168.0.0" ];
then
echo "Netzadresse, kein Host"
fi
done

Listing 10.2     Skriptfragment für eigene Entwicklungen

In dem Skriptfragment aus Listing 10.2 finden Sie zunächst eine for-Schleife, die die aktiven Hosts auflistet. Anstelle der Abfrage nach der Netzadresse können Sie die Variable $netz mit einem festen Wert belegen (netz="192.168.0.0"). Diese Zuweisung ersetzt dann die Abfragezeile. Mit dem if-Konstrukt werten Sie die mit dem Schleifendurchgang wechselnden Inhalte der Variable i aus. Als »Aktion« habe ich hier nur eine echo-Anweisung gewählt, die den angegebenen Text ausgibt. An dieser Stelle können Sie hier Ihre eigenen Anweisungen setzen: Wake-on-LAN, Softwareverteilung, Datensicherung, Rechner herunterfahren, da am Abend vom Benutzer vergessen, u. Ä.

Übrigens können Sie auch auf Windows-Rechnern solche Shell-Skripte laufen lassen. Den Shell-Interpreter bash finden Sie unter http://win-bash.sourceforge.net. Für die anderen Befehle (wie less) suchen Sie unter www.freecode.com.

10.7.9    Die Erreichbarkeit von Hosts mit »ping« bzw. »ping6« prüfen

Mit ping verwenden Sie ein Standardwerkzeug, das Sie auf allen Betriebssystemen vorfinden. Für Ihren Arbeitsalltag werden Sie vor allem die Optionen -c <ZAHL der Pings> und -f (»Dauerfeuer«) verwenden. Je nach Ausführung erhalten Sie als Antwort entweder ein schlichtes alive oder not alive. Andere Versionen zeigen Ihnen die Laufzeit, die Größe der Testpakete und eine statistische Zusammenfassung an:

harald@ze4:~$ ping -c 3 192.168.0.25
PING 192.168.0.25 (192.168.0.25) 56(84) bytes of data.
64 bytes from 192.168.0.25: icmp_req=1 ttl=64 time=0.056 ms
64 bytes from 192.168.0.25: icmp_req=2 ttl=64 time=0.049 ms
64 bytes from 192.168.0.25: icmp_req=3 ttl=64 time=0.052 ms

--- 192.168.0.25 ping statistics ---
3 packets transmitted, 3 received, 0 % packet loss, time 1999ms
rtt min/avg/max/mdev = 0.049/0.052/0.056/0.006 ms

Konnten Sie den Host nicht erreichen, sieht Ihre ping-Ausgabe so aus:

harald@ze4:~$ ping -c 1 192.168.0.26
PING 192.168.0.26 (192.168.0.26) 56(84) bytes of data.
From 192.168.0.34 icmp_seq=1 Destination Host Unreachable

--- 192.168.0.26 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100 % packet loss, time 0ms

Weitere Informationen liefert Ihnen die Manual-Seite (Linux, FreeBSD) oder die help-Option. Beachten Sie auch die Ausführungen zur Namensauflösung (Abschnitt 4.4.1, »Prüfung der Erreichbarkeit und Namensauflösung mit ›ping‹ bzw. ›ping6‹«) und ICMP (Kapitel 5, »Steuer- und Fehlercodes mit ICMP und ICMPv6 übertragen«).

Sie können auf ein weiteres Programm mit ähnlicher Funktionalität zurückgreifen. Mit oping testen Sie wahlweise IPv4- und IPv6-Adressen.

10.7.10    »cryptcat«: im Dienste der Sicherheit

Dieses bereits in Abschnitt 9.1.5 erwähnte Programm kann Ihnen helfen, offene Ports an Ihren Rechnern zu erkennen oder aber auf Portscans zu reagieren.

Um sowohl die offenen als auch geschlossenen Ports eines Rechners zu scannen, wenden Sie diese Syntax an:

cryptcat -vv -z RECHNERNAME|IPADRESSE PORT|PORTBEREICH

Das Beispiel finden Sie in Abbildung 10.70.

Anzeige des angegebenen Portbereichs

Abbildung 10.70     Anzeige des angegebenen Portbereichs

Möchten Sie nur offene Ports aufspüren, lassen Sie bei den Optionen ein v weg (Abbildung 10.71):

cryptcat -v -z RECHNERNAME|IPADRESSE PORT|PORTBEREICH

Anzeige offener Ports des angegebenen Portbereichs

Abbildung 10.71     Anzeige offener Ports des angegebenen Portbereichs

Sie können das Programm gut in Shell-Skripte einbinden, denn bei der Verwendung einer einzigen Port-Angabe ist auch der Exitcode $? zur weiteren Steuerung auswertbar. Dies möchte Ihnen das minimalistische Beispiel in Listing 10.3 zeigen. Für Ihre Versuche in Ihrem eigenen lokalen Netz ersetzen Sie die großgeschriebenen Begriffe durch die entsprechenden Angaben.

#! /bin/sh
cryptcat -v -z RECHNERNAME|IPADRESSE PORT > /dev/null 2>&1
if [ $? -eq 0 ];
then
echo "SSH-Port geöffnet"
else
echo "SSH-Port geschlossen"
fi

Listing 10.3     Ein Shell-Skript mit »cryptcat«

Weitaus interessanter für die Praxis ist die Möglichkeit, auf Port-Ansprachen durch Scans oder andere Maßnahmen zu reagieren. Dazu starten Sie das Programm im Lauschmodus. Die Grundsyntax hierfür lautet:

cryptcat -v -n -l -p PORT

Dabei steht die Option -n für die Unterbindung der Namensauflösung (was ja eine nach außen gerichtete verräterische Aktion darstellen kann). Mit -l versetzen Sie das Programm in den Empfangsmodus. Der Port wird mittels -p PORT angegeben. Der angegebene Port darf nicht bereits durch andere Anwendungen belegt sein, andernfalls erhalten Sie nur eine Fehlermeldung.

cryptcat beendet sich nach einem einzigen Kontakt des Ports mit der Außenwelt und gibt den Exitcode 0 aus. Das in Listing 10.4 gezeigte Shell-Kommando wall dient der Ausgabe der Nachricht auf allen aktiven Terminalsitzungen. Aber Sie können hier natürlich auch noch weitere Aktionen vorsehen, bis hin zum kurzzeitigen Deaktivieren der Netzwerkkarte! Den Ablauf des Shell-Skripts und die Port-Abfrage von einem anderen Rechner aus finden Sie in Abbildung 10.72.

#! /bin/sh
cryptcat -v -n -l -p 7071
if [ $? -eq 0 ]
then
wall "Da hat wer angeklopft"
fi

Listing 10.4     »cryptcat« meldet einen Anklopfer.

Reaktion auf Portscan

Abbildung 10.72     Reaktion auf Portscan

10.7.11    Weitere Systemabfragen auf Linux-Systemen

Mit fuser können Sie unter anderem ermitteln, welche Prozesse und deren Eigentümer welchen Port belegen. Die Informationen hieraus sind dann von Bedeutung, wenn sich eine Netzwerkanwendung nicht starten lässt, weil der gewünschte Port schon anderweitig belegt ist.

Die Abfrage geschieht in der Form:

fuser -u PORT/TCP|UDP

Die Abbildung 10.73 zeigt Ihnen die Ausgabe für den Port 22, der von einigen Prozessen genutzt wird.

Ausgabe von »fuser«

Abbildung 10.73     Ausgabe von »fuser«

Im Verzeichnis proc finden Sie Informationen zu belegten Ressourcen, die der Kernel verwaltet. Mit den Shell-Befehlen ls und cat können Sie viele Informationen zu Prozessen auslesen. Sie müssen dafür als Benutzer root agieren.

Nachdem die Prozesse über einen Port durch fuser ermittelt wurden, interessieren uns nun die Details dazu. Mit PID wird die betreffende Prozessnummer bezeichnet. Bei manchen Befehlen wurde das Kommando echo " " angereiht. Dies dient nur der Verbesserung der Lesbarkeit. Nachdem der von cat ausgegebenen Information der Zeilenvorschub fehlt, würde unmittelbar daran der Systemprompt »geklebt«. Die Ausführung der nachfolgend gezeigten Vorgehensweise finden Sie in Abbildung 10.74.

Mit lsof finden Sie ebenso Angaben über belegte Ressourcen. Dieses Programm verfügt über verschiedene Optionen, hier verwenden wir nur -i. Ports werden in der Form :PORT nach den Optionen angegeben. Die Manual-Seite informiert Sie über die vollständigen Möglichkeiten. In Abbildung 10.75 wird gezeigt, wie man Prozesse und Eigentümer ermittelt, die einen bestimmten Port benutzen.

Ermittlung weiterer Informationen über eine PID

Abbildung 10.74     Ermittlung weiterer Informationen über eine PID

Abfragen mit »lsof«

Abbildung 10.75     Abfragen mit »lsof«

Ohne Angabe des Ports würden alle Prozesse, Benutzer und Programmaufrufe bezüglich belegter Netzwerkressourcen aufgelistet.

Beachten Sie, dass hier nur Grundlagen zur Netzwerksicherheit aufgeführt werden können. Die verschiedenen Gefahrenbilder sind leider dynamischer Natur und wechseln rasch. Halten Sie sich deshalb stets auf dem Laufenden. Führen Sie Sicherheitsupdates zeitnah aus. Verfolgen Sie den vielzitierten Grundsatz der Datensparsamkeit. Sensible Daten gehören in sichere »Schatzkammern«!