[LinuxFocus-icon]
Home  |  Plan  |  Index  |  Suchen

Nachrichten | Archiv | Links | Über uns
Dieses Dokument ist verfübar auf: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Foto del Autor]
von Danilo Lujambio


Inhalt:

 

Lernen mit NMap

[nmap]

Zusammenfassung:



Warum sind Scanner so wichtig für die Sicherheit eines Netzwerkes? Grundsätzlich weil sie das wichtigste Werkzeug für die Leute sind, die ein System angreifen wollen. Die Vorbereitung eines Angriffs durch einen Cracker könnte z.B. folgendermaßen aussehen:



Für einen Systemadministrator ist es wichtig, das eigene Netzwerk zu scannen und die dann aufgezeigten Sicherheitslöcher zu schließen bevor ein Anderer mit weniger guten Absichten das Netz scannt.

Es gibt verschiedenste Scanningwerkzeuge zu diesem Zweck. Dieser Artikel beschäftigt sich aber nur mit nmap. Nmap ist einer der besten Scanner- und Sicherheitswerkzeuge.

Nmap erlaubt dem Systemadministrator Netzwerke zu scannen, um zu erfahren, welche Server aktiv sind und welche Dienste sie anbieten. Zu diesem Zweck bietet Nmap verschiedene Scantechniken an. Dieser Artikel beschäfigt sich mit einigen von ihnen.

In diesem Artikel werden einige der gängigen Strategien, die Nmap bietet, gezeigt. Gleichzeitig wird gezeigt, wie sich der Scannvorgang auf dem Zielrechner ausdrückt.

Nmap kann man über www.insecure.org bekommen. Führe nach dem Download folgendes aus:

tar zxvf nmap-2.30BETA17.tgz
cd ...../nmap-2.30BETA17/
./configure
make
make install
und es ist installiert.

Die Ausgabe von Nmap ist normalerweise eine Liste von "interessanten" (aktiven) Ports auf dem gescannten Server. Diese Ports werden mit dem Namen des Dienstes, dem Status und dem Protokoll ausgegeben.

 

Mit TCP scannen, Drei-Wege-Handshake von TCP (Option -sT)

Einfaches Nmap-Scannen kann mit der Option -sT erledigt werden. Es basiert auf der Methode der Verbindungserstellung des TCP-Protokolls, bekannt als Drei-Wege-Handshake. Die Abfolge [1] kann grob wie folgt beschrieben werden:

  1. Der Server muß dazu bereit sein, eine Verbindung zu empfangen (normalerweise mittels der Socket-, Bind-, und Listen-Funktionen)
  2. Der Client startet eine aktive Verbindung - ein Aufruf von connect(). Dies sendet ein SYN-Segment an den Server, um diesen über den Anfang der Daten des Clients zu informieren. Das SYN-Segment enthält normalerweise einen IP-Kopf, einen TCP-Kopf und evt. einige TCP-Optionen.
  3. Der Server sollte auf dieses Paket mit einem ACK-Paket mit der eigenen Sequenznummer (im gleichen TCP-Paket) antworten.
  4. Der Client sollte diese Antwort ebenfalls mit einem ACK-Segment beantworten


Dieser Weg des Scannens hat zwei Vorteile

aber er hat auch einen großen Nachteil. Er ist sehr einfach zu entdecken und zu filtern.

Wir verfolgen die von NMap angewandte Prozedur mittels des Programmes tcpdump auf dem Zielserver. NMap wird auf dem Rechner 192.168.255.20 ausgeführt und zeigt auf den Server house2.xxx.xxx.xxx über ein Ethernet Netzwerk.

1) 08:24:18.393108 192.168.255.20.1024 house2.xxx.xxx.xxx.653: S 2632227152:2632227152(0) win 16060 < mss 1460,sackOK,timestamp 232602[|tcp] (DF)
2) 08:24:18.393167 house2.xxx.xxx.xxx.653 192.168.255.20.1024: R 0:0(0) ack 2632227153 win 0
3) 08:24:18.393227 192.168.255.20.1025 house2.xxx.xxx.xxx.6141: S 2644226118:2644226118(0) win 16060 < mss 1460,sackOK,timestamp 232602[|tcp] (DF)
4) 08:24:18.393258 house2.xxx.xxx.xxx.6141 192.168.255.20.1025: R 0:0(0) ack 2644226119 win 0
5) 08:24:18.453343 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: S 2640612362:2640612362(0) win 16060 < mss 1460,sackOK,timestamp 232608[|tcp] (DF)
6) 08:24:18.453542 house2.xxx.xxx.xxx.pop3 192.168.255.20.1298: S 1658259980:1658259980(0) ack 2640612363 win 16060 < mss 1460,sackOK,timestamp 243353[|tcp] (DF)
7) 08:24:18.458667 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3:. ack 1 win16060<nop,nop,timestamp 232609 243353 (DF)
8) 08:24:18.461280 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: F 1:1(0) ack 1 win 16060 < nop,nop,timestamp 232609 243353 (DF)

Die Zeilennummern wurden zur einfacheren Erklärung hinzugefügt. Zeile 1 zeigt den "angreifenden" Rechner 192.168.255.20, der ein SYN-Segment von Port 1024 an Port 653 auf dem Zielserver house2.xxx.xxx.xxx sendet. Wir können dieses Paket als SYN-Segment an dem S nach der Portnummer 653 erkennen. Dies deckt den Punkt 2. des Drei-Wege-Handshakes ab.
In Zeile 2 sehen wir, dass das Zielsystem mit einem RESET-Segment (R nach der Portnummer) antwortet. Dies besagt, dass kein Dienst auf Port 653 wartet.
Die Zeilen 3 und 4 sind vergleichbar mit den Zeilen 1 und 2 mit dem Unterschied, dass der Port 6141 auf dem Zielsystem abgefragt wird.
Zeile 5 zeigt, wie der Rechner 192.168.255.20 ein SYN-Segment an den POP3-Port (Portnummer 110) des Zielservers schickt und dieser das Segment und die Sequenznummer mit einem ACK-Segment akzeptiert. Beachte, dass das Paket von house2 die Kontroll-Bits ACK und SYN aktiviert hat. Die kann man in Zeile 6 sehen und ist der 3. Schritt des Drei-Wege-Handshake.
Zeile 7 zeigt als letztes noch die Beantwortung des letzen Paketes auf 192.168.255.20 mit einem ACK-Segment. Damit ist auch der 4. Schritt erreicht.
Zeile 8 beendet die Verbindung von 192.168.255.20. Dies geschieht mit einem FIN-Segment (beachte das F nach pop3).

Dieser Durchgang erlaubt NMap zu erkennen, dass port 110 (pop3) von house2 ein aktiver Port auf diesem Server ist.

Wie oben schon angemerkt, ist dieser Scannvorgang sehr einfach zu entdecken. Je nach Konfiguration von syslog.conf könnte die Verbindung aus Zeile 5 bis 8 folgendermaßen in der /var/log/messages erscheinen:

May 6 08:24:01 house2 in.pop3d[205]: connect
from root@192.168.255.20


 

Mit SYN-Segmenten scannen (halb-offen, Option -sS)

Diese Scanmethode wird angewandt, wenn NMap mit der Option -sS ausgeführt wird. Die benutzte Technik basiert auf "halb-offenen" Verbindungen: Wir senden ein SYN-Segment und wenn ein ACK-Segment darauf empfangen wird, so haben wir einen aktiven Port und wir schließen die Verbindung mit einem RESET-Segment. Wenn wir statt eines ACK- ein RST-Segment empfangen, so haben wir einen nicht aktiven Port. Diese Methode hat den Nachteil, dass ROOT-Rechte auf dem angreifenden Rechner vorhanden sein müssen. Der Vorteil ist die schwere Entdeckbarkeit dieser Mehode.

Im folgenden sehen wir einen vergleichbaren Scanvorgang mit NMap. Wir analysieren ihn wieder mit tcpdump

1) 22:25:45.856936 192.168.255.20.40175 house2.tau.org.ar.946: S 1292785825:1292785825(0) win 3072
2) 22:25:45.857078 house2.tau.org.ar.946 192.168.255.20.40175: R 0:0(0) ack 1292785826 win 0


Zeilen 1 und 2 sind denen der vorhergehenden Sektion sehr ähnlich. Der einzige Unterschied ist der Zielport 946. Auf die Anfrage mit dem SYN-Segment erhalten wir ein RESET-Segment. Der Port ist also nicht aktiviert.

3) 22:25:45.970365 192.168.255.20.40175 house2.tau.org.ar.pop3: S 1292785825:1292785825(0) win 3072
4) 22:25:45.976022 house2.tau.org.ar.pop3 192.168.255.20.40175: S 185944428:185944428(0) ack 1292785826 win 16080 < mss 536 (DF)
5) 22:25:45.979578 192.168.255.20.40175 house2.tau.org.ar.pop3: R 1292785826:1292785826(0) win 0

Die Zeilen 3, 4 und 5 zeigen die erfolgreiche Erkennung des POP3-Dienstes auf dem Server house2. Wie schon gesagt, wird der Drei-Wege-Handshake nicht komplett ausgeführt, sondern nach Empfangen des ACK-Segmentes ein RESET-Segment gesendet. Dies führt zum Abbruch der halboffenen Verbindung.

Dieser Scanvorgang hinterläßt keinen Eintrag in der Logdatei /var/log/messages, wie es der vorhergehende Versuch gemacht hat.

 

Scannen mit FIN-Segmenten

Diese Scanmethode basiert darauf, dass nicht-aktive Ports auf ein FIN-Segment mit einem RST-Segment antworten, aktivierte Ports diesen Befehl aber einfach ignorieren. Die aktivierten Ports sind also die, die nicht antworten. Mit dieser Methode können keine Server mit einem Betriebssystem von Microsoft gescannt werden, da diese eine nicht standard-konforme Implementation von TCP-Operationen haben.

Es gibt 3 Formen dieser Methode in NMap (-sF, -sX und -sN). Wir werden die Option -sF wie in den vorhergehenden Optionen analysieren.

1) 06:50:45.643718 192.168.255.20.35600 casahouse.tau.org.ar.864: F 0:0(0) win 2048
2) 06:50:45.643865 house2.tau.org.ar.864 192.168.255.20.35600: R 0:0(0) ack 0 win 0

In den Zeilen 1 und 2 wird das FIN-Segment übertragen (beachte das F nach der 864 in Zeile 1). Daraufhin antwortet der Server house2 mit einem RST-Segment. Daraus schließt NMap, dass dieser Port nicht aktiv ist.

3) 06:50:47.933227 192.168.255.20.35600 > house2.tau.org.ar.pop3: F 0:0(0) win 2048
4) 06:50:48.251147 192.168.255.20.35601 > house2.tau.org.ar.pop3: F 0:0(0) win 2048

Zeile 3 und 4 nehmen wieder den POP3-Port als Beispiel. In Zeile 3 sehen wir ein FIN-Segment, auf das keine Antwort gegeben wird. In Zeile 4 wird überraschender Weise noch einmal ein FIN-Segment geschickt, auf das wieder keine Antwort kommt. Dies zeigt NMap, dass dieser Port aktiv ist.

 

Ausdrücke von tcpdump, die weiterhelfen können

In dem Abschnitt über den "Drei-Wege-Handshake von TCP" wurde zuerst eine Methode gezeigt, die in den Logdateien nachzulesen ist. Danach wurden mit den Optionen -sS und -sF zwei Methoden gezeigt, die nicht mitgeloggt werden. Wir können tcpdump dazu benutzen, auch diese Angriffe zu erkennen. Tcpdump erzeugt aber so viele Informationen, dass diese nicht mehr gespeichert oder überprüft werden können. Im folgenden sind einige Ausdrücke aufgeführt, die wie Filter für tcpdump wirken. Damit werden die Informationen von tcpdump überschaubar und einfacher zu analysieren.

Zum besseren Verständnis der Ausdrücke wird im folgenden das Format eines TCP-Paketes gezeigt [2].

 

TCP (RFC 793)

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Quellport          |           Zielport            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Sequenznummer                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Acknowledgement Nummer                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Offset |  Reserver |U|A|P|R|S|F|             Window            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksumme          |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Optionen                     |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              Daten                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Wir sehen, dass das 13te Byte das Flag-Byte ist, welches die Art des Paketes (SYN, FUN, etc.) bezeichnet. Mit diesem Wissen und dem UND (&) Operator können wir Masken für die aktiven Bits konstruieren. Daraus ergeben sich Ausdrücke wie

tcpdump ' tcp[13] & 7 != 0 and dst 192.168.255.20 ' > /tmp/out7

, das den Eingang mit den Bits R, S oder F (Maske ist 00000111) und dem Ziel 192.168.255.20 aktiv lässt und den Rest einfach ignoriert.

Mit

tcpdump ' tcp[13] & 1 != 0 and dst 192.168.255.20 ' > /tmp/out1

überwachen wir die Pakete mit aktivem FIN-Bit (Maske 00000001). Dies kann zur Entdeckung von Scannvorgängen mit der Option -sF benutzt werden. Und mit

tcpdump ' tcp[13] & 2 != 0 and dst 192.168.255.20 ' > /tmp/out2

bekommen wir alle Pakete mit aktivem SYN-Bit. Dies kann zum Entdecken von Scannvorgängen mit der Option -sS dienen.

Für die Option -sS gibt es aber auch ein spezielles Programm zur Entdeckung dieser Angriffe. Mehr unter [3].

 

Schlußwort

Programme wie NMap sind sehr nützlich, um die Systemsicherheit in Netzwerken zu verbessern. Dies geschieht sozusagen durch die Augen des Hackers. Wir haben einen kleinen Teil aus diesem Bereich gezeigt, doch ich hoffe, dass damit das Scannen ein wenig besser verstanden werden kann.

Anmerkung des Übersetzers:
Das Scannen von fremden Servern kann in Deutschland eine Straftat darstellen. Dies solltet ihr beachten, wenn ihr diese Anleitung zum Scannen fremder Server benutzt.

 

Literatur

[1] W. Richard Stevens Unix Network Programming Volume 1
[2] RFC 793
[3] siehe nmap Dokumentation

 

Talkback für diesen Artikel

Jeder Artikel hat seine eigene Seite für Kommentare und Rückmeldungen. Auf dieser Seite kann jeder eigene Kommentare abgeben und die Kommentare anderer Leser sehen:
 Talkback Seite 

Der LinuxFocus Redaktion schreiben
© Danilo Lujambio, FDL
LinuxFocus.org

Einen Fehler melden oder einen Kommentar an LinuxFocus schicken
Autoren und Übersetzer:
es -> -- Danilo Lujambio
es -> en Iván Rojas Aguilar
en -> en Javier Palacios
en -> de Sebastian Fastner

2001-07-10, generated by lfparser version 2.17