SelfLinux Sicherheit nmap - der Netzwerksicherheits-Scanner Abschnitt 3 | SelfLinux-0.13.0

| nmap - der Netzwerksicherheits-Scanner | Autoren Formatierung GFDL

#### 3 Parameter für zusätzliche Optionen

Keine der folgenden Optionen ist zwingend erforderlich. Einige von ihnen sind jedoch äußerst sinnvoll.

#### 3.1 Bestimmte Ports / Portbereiche auswählen

Der Parameter -p legt fest, welche Ports gescannt werden sollen. Wird bei der Wahl der Zielports auf diese Option verzichtet, werden sämtliche well-known Ports zwischen 1 und 1024 sowie alle in der services - Datei von nmap gelisteten Dienste gescannt. Für einen IP - Protokoll - Scan (-sO) legt der Parameter -p die zu scannende Protokoll-Nummer (0-255) fest.

Beispiele: -p 23 wird lediglich einen Zugriff auf den Port 23 (Telnet) der Zielsysteme durchführen. -p 20-30,139,60000- scannt die Ports zwischen 20 und 30, Port 139 und alle Ports größer als 60000.

Bei gleichzeitigem TCP- und UDP - Portscan wird das jeweilige Protokoll durch ein vorangestelltes T: oder U: angewählt. Für die übergebenen Ports gilt so lange das spezifizierte Übertragungsprotokoll, bis ein anderes angegeben wird (Beispiel -p U:53,111,137,T:21-25,80 = UDP-Ports 53, 111 und 137 sowie die TCP - Ports 21 bis 25 und 80). Bei einem gleichzeitigen TCP- und UDP - Scan muss mindestens eine TCP - Scan - Variante (-sS, -sF oder -sT) angegeben werden.

#### 3.2 Wiederaufnahme eines abgebrochenen Scan

Die Option --resume <Protokoll-Dateiname> reaktiviert einen Netzwerk-Scan, der durch das Drücken von Control-C unterbrochen wurde.

#### 3.3 Performance-Optimierung

#### 3.3.1 Schneller Scannen

Mit der Funktion F wird ähnlich wie beim Strobe (einfacher und schneller TCP-Portscanner) ein ziemlich schneller Scan durchgeführt, da nur die Ports angesprochen werden, die in /etc/services angeführt wurden. Normalerweise reicht ein Scan auf diese Standard-Ports aus, da damit die gängigsten Dienste in Erfahrung gebracht werden können.

#### 3.3.2 DNS-Auflösung deaktivieren

Um einen Ping-Scan zu beschleunigen, kann mit der Option -n die DNS-Auflösung ausgeschaltet werden.

#### 3.3.3 Begrenzung der Sockets (Vermeidung eines Zusammenbruchs des Zielsystems)

Mit -M <Maximale Sockets> wird die maximale Anzahl der Sockets bei einem parallel durchgeführten TCP connect()-Scan festgelegt. Dies ist zum Beispiel in Situationen nützlich, wenn der Scanvorgang künstlich verlangsamt werden soll, damit das Zielsystem nicht unter der Last der Zugriffe zusammenbricht. Eine andere Herangehensweise ist die Verwendung von -sS.

#### 3.4 Scannen ohne vorheriges An-ping-en des Hosts

Der Parameter -P0 verhindert das Pingen eines Hosts, bevor dieser gescannt wird. So können ganze Netzwerke gescannt werden, die aufgrund einer restriktiv konfigurierten Firewall keine ICMP echo requests/responses) zulassen. Microsoft.com ist ein Beispiel für ein solch gut geschütztes Netzwerk, in dem nur die Verwendung dieser Option zum gewünschten Resultat führt.

#### 3.5 Klein fragmentierte Pakete für "Stealth-Scans"

Durch die zusätzlich Option -f werden sehr kleine fragmentierte Pakete für SYN-, FIN-, Xmas- oder NULL- Scans verwendet. Das bedeutet, dass die TCP - Header auf mehrere Pakete verteilt werden. Ziel ist es, den Scan vor Firewall- und IDS - Systemen zu verstecken. Gerade bei älteren Geräten werden die Pakete oftmals nicht zuerst defragmentiert. Heutzutage reihen Paketfilter in den meisten Fällen die einzelnen Pakete in eine Warteschlange ein, bevor sie mit der Auswertung / Filterung beginnen. Damit rückt das Ziel dieser Option in weite Ferne.

Bei verschiedenen Testläufen ist wurde festgestellt, dass ein SYN - Scan mit einer großen Anzahl klein fragmentierter Pakete in einer kleinen Anzahl Versuche nmap verfälschte Daten ausgab. Der Test lief von einem SuSE Linux 6.3-Client mit 10 MBit/Sek. (Koaxial-Kabel) gegen ein SuSE Linux 6.3-Gateway. Nmap behauptete in einigen Fällen, dass zwischen dem zweitletzten wirklich offenen Port 139 (netbios-ssn) und dem allerletzten Port 8080 (http-proxy) ein gefilterter TCP - Port offen sei.

#### 3.6 Timing-Einstellungen

Mit Nmap können Scans weitestgehend unentdeckt bleiben. In einigen Fällen kann mit zusätzlichen Optionen das Timing noch feiner abgestimmt werden.

Mit den -T Optionen Paranoid, Sneaky, Polite, Normal, Aggressive und Insane lässt sich das Timing der Scans auf das Zielsystem einstellen:

- Der Paranoid - Modus scannt sehr langsam, in der Hoffnung, nicht von Intrusion Detection-Systemen entdeckt zu werden. Er serialisiert alle Scand und wartet im Normalfall einfach fünf Minuten bis zur Sendung des Folgepaketes.
- Der Sneaky - Modus (dt. schleichend) ist mit dem Paranoid-Modus vergleichbar, allerdings sendet dieser die Pakete im Abstand von 15 Sekunden.
- Der Polite - Modus (dt. höflich) verringert die Netzlast und verkleinert die Gefahr des Zusammenbrechens der Zielmaschine. Er serialisiert ebenfalls die zu sendenden Pakte und wartet dazwischen mindestens 0.4 Sekunden.
- Der Normal-Modus scannt so schnell wie möglich, ohne das Netz dabei zu überlasten.
- Im Aggressive-Modus (dt. aggressiv) wird eine Wartezeit von 5 Minuten zwischen den einzelnen Hosts hinzugefügt, jedoch wird nie länger als 1.25 Sekunden auf Antworten gewartet.
- Der Insane - Modus (dt. geisteskrank) ist lediglich in sehr schnellen Netzwerken verwendbar, oder überall dort zu empfehlen, wo einzelne Resultatsinformationen verloren gehen dürfen. Zwischen den einzelnen Systemen werden 75 Sekunden und zwischen den Zugriffen 300 ms gewartet.

Weiterhin sind verschiedene sehr feingranulare Einstellungen mit verschiedenen Parametern wie z. B. --host_timeout, --max_rtt_timeout, --initial_rtt_timeout, --max_parallelism, --scan_delay, etc. möglich.

#### 3.7 Fingerprints zur Ermittlung des Betriebssystems

Mit -O wird ein so genannter Fingerabdruck des gescannten Systems angefertigt. Es wird eine Anzahl spezifischer Tests mit dem Ziel ausgeführt, das typische Verhalten der jeweiligen TCP/IP - Implementierungen zu erkennen. Die erhaltenen Informationen stellen quasi einen Fingerabdruck des Systems dar, der mit bekannten Betriebssystem-Fingerabdrücken verglichen wird. Diese sind in der nmap-os-fingerprints Datei zu finden.

Es kommt nahezu nie vor, dass ein falsches Betriebssystem prognostiziert wird, solange die Protokollstapel beim Host nicht manipuliert wurden. Es kann höchstens vorkommen, dass nmap dem Fingerabdruck des Computers kein Betriebssystem zuordnen kann. Sollte es einem Endanwender von nmap möglich sein das Betriebssystem zu identifizieren, kann er per CGI-Script auf http://www.insecure.org/cgi-bin/nmap-submit.cgi aktiv zur Perfektionierung von nmap beitragen.

Die Option -O aktiviert weiterhin einige zusätzliche Tests wie z. B. das Messen der Uptime (wann wurde das Zielsystem das letzte Mal neu gestartet) oder die Klassifizierung der Berechenbarkeit der TCP-Sequenznummer (wie schwer es ist, eine bestehende Verbindung zu entführen).

Mit Eingriffen in die Handhabung des Betriebssystems bei Verbindungs-Anforderungen und direkt beim Protokollstapel könnte ein anderes Betriebssystem vorgetäuscht werden. Diese Aktion ist jedoch mit dem bitteren Beigeschmack eines möglichen Performance- und Stabilitäts-Verlusts des Betriebssystems verbunden. Beispiele:

bei Microsoft Windows 98

root@linux # nmap 192.168.0.3 -O
Starting nmap V. 2.3BETA6 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on rieekan.matrix.net (192.168.0.3):
Port State Protocol Service
139 open tcp netbios-ssn
TCP Sequence Prediction: Class=trivial time dependency
Difficulty=0 (Trivial joke)
Remote operating system guess: Windows NT4 / Win95 / Win98
Nmap run completed -- 1 IP address (1 host up) scanned in 7 seconds

bei SuSE Linux 6.3

root@linux # nmap 192.168.0.3 -O
Starting nmap V. 2.3BETA6 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on gateway.matrix.net (192.168.0.1):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
139 open tcp netbios-ssn
8080 open tcp http-proxy
TCP Sequence Prediction: Class=random positive increments
Difficulty=2150475 (Good luck!)
Remote operating system guess: Linux 2.1.122 - 2.2.12
Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

bei unbekanntem Betriebssystem

root@linux # nmap 192.168.0.6 -O
Starting nmap V. 2.3BETA6 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on hidden.matrix.net (192.168.0.6):
Port State Protocol Service
7 open tcp echo
9 open tcp discard
13 open tcp daytime
17 open tcp qotd
19 open tcp chargen
[...]
465 open tcp smtps
1030 open tcp iad1
1433 open tcp ms-sql-s
6667 open tcp irc
6668 open tcp irc
TCP Sequence Prediction: Class=trivial time dependency
Difficulty=11 (Easy)
No OS matches for host (If you know what OS is running on it,
see http://www.insecure.org/cgi-bin/nmap-submit.cgi).
TCP/IP fingerprint:
TSeq(Class=RI%gcd=1%SI=F4F9)
TSeq(Class=TD%gcd=1%SI=A)
TSeq(Class=TD%gcd=1%SI=B)
T1(Resp=Y%DF=Y%W=4470%ACK=S++%Flags=AS%Ops=M)
T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
T3(Resp=Y%DF=Y%W=4470%ACK=S++%Flags=AS%Ops=M)
T4(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)
T5(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=)
T7(Resp=N)
PU(Resp=Y%DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=F%ULEN=134%DAT=E)
Nmap run completed -- 1 IP address (1 host up) scanned in 19 seconds

#### 3.8 Besitzer eines Prozesses ermitteln

Mit dem Parameter -I wird die identd - Information laut RFC 1413 über die laufenden Prozesse auf dem Ziel-System eingeholt. Beispiele:

bei Microsoft Windows 98

root@linux # nmap 192.168.0.3 -I Starting nmap V. 2.3BETA6 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/) Interesting ports on rieekan.matrix.net (192.168.0.3): Port State Protocol Service Owner 139 open tcp netbios-ssn Nmap run completed -- 1 IP address (1 host up) scanned in 6 seconds

bei SuSE Linux 6.3

root@linux # nmap 192.168.0.1 -I Starting nmap V. 2.3BETA6 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/) Interesting ports on gateway.matrix.net (192.168.0.1): Port State Protocol Service Owner 21 open tcp ftp mruef 23 open tcp telnet 139 open tcp netbios-ssn rieekan 8080 open tcp http-proxy lanman Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

#### 3.9 zusätzliche TCP- und ICMP- Optionen

#### 3.9.1 TCP - Pings

Diese Funktion ist immer dann anzuwenden, wenn die Erreichbarkeit von Systemen oder Netzwerken identifiziert werden soll und eine Überprüfung mittels ICMP vom Zielsystem nicht zugelassen wird.

Der Parameter -PT <Port> verwendet einen TCP-Ping-Scan um zu verifizieren, welche Hosts im Netzwerk erreichbar sind. Diese Option kann auch ohne die Definierung eines Ports verwendet werden (standardmäßig wird HTTP-Port TCP/80 verwendet).

Ansprechbare Systeme sollten auf das gesendete TCP-Datagramm (ACK-Flag gesetzt) mit einem RST antworten.

#### 3.9.2 TCP-SYN-Suchlauf bei TCP-Ping-Scan

Hierbei kann mit der Option -PS ein SYN-Suchlauf anstelle des standardmäßigen ACK-Suchlaufs bei TCP - Ping - Scans verwendet werden. Das Setzen des Zielports erfolgt auf die selbe Art und Weise wie bei den zuvor erläuterten TCP - Pings.

#### 3.9.3 TCP reverse ident-Scanning

Mit Option -I wird das TCP reverse ident - Scanning aktiviert. Wie Dave Goldsmith in einem Bugtraq-Posting aus dem Jahre 1996 publiziert hat, ermöglicht das ident - Protokoll (RFC 1413) das Identifizieren des Besitzers eines TCP - Dienstes.

#### 3.9.4 ICMP - Ping

Die Option -PI nutzt einen klassischen Ping (ICMP echo request), um die Erreichbarkeit von Systemen und Broadcast - Adressen von Subnetzen zu identifizieren. Letztere sind extern erreichbare IP - Adressen, die eine Umwandlung zu einem internen Broadcast des Subnetzes durchführen. Sie stellen die Voraussetzung für eine Reihe von Denial of Service-Attacken (Smurf ist die bekannteste Variante) dar und sollten deshalb verhindert werden.

#### 3.9.5 ICMP timestamp - Anfrage

Die Option -PP benutzt eine ICMP timestamp - Anfrage (Typ 13, Code 0), um ansprechbare Hosts zu finden.

#### 3.9.6 Parallele Ausführung von TCP- und ICMP - Ping

Der Parameter -PB <Port> ist der standardmäßig gewählte Ping - Typus. Es werden beide o. g. Techniken (-PT und -PI) parallel durchgeführt. Auf diese Weise können Firewall - Elemente ausgetrickst werden, die nur eine der beiden Protokolle herausfiltern. Der Zielport wird analog der zuvor erklärten Optionen angegeben.

#### 3.9.7 ICMP address mask request

Es wird ein ICMP address mask request (Typ 17, Code 0) verwendet.

#### 3.10 Ausgabeoptionen

#### 3.10.1 Komplette DNS-Auflösung erzwingen

Die Option -R versucht, während eines Scan-Vorgangs alle Host-Namen aufzulösen, und zwar nicht nur die Aktiven. Durch die explizite Anweisung auch inaktive Rechner-Namen in Erfahrung zu bringen, kann diese Funktion unter Umständen einen Durchlauf extrem in die Länge ziehen.

#### 3.10.2 Verbose Option

Im Verbose-Modus, der mit -v aktiviert wird und sehr zu empfehlen ist, werden Informationen in ausführlicher Form ausgegeben. Die doppelte Verwendung -vv erhöht den Umfang der Ausgabe nochmals. Ebenso kann -d einige Male aktiviert werden, falls Sie wirklich vor einem vollem Bildschirm verrückt werden wollen!

#### 3.10.3 Ausgabe in Protokoll-Datei

Mit Parameter -oN <Protokoll-Dateiname> werden die Resultate des Scans in einem normalen, für Menschen lesbaren Format abgespeichert. Der Paraemter -oX hingeggen protokolliert die Resultate in einer XML-Datei. Sollen die Informationen mit grep gefiltert werden, bietet sich der Parameter -oG an. Sind alle drei Formate von Belang, so kann man mit Option -oA <Basisdateiname> alle Formate bekommen.

Weiterhin existiert die Möglichkeit, mit Parameter -oS ein für s|<ripT kiDd|3 lesbares Format auszuwählen.

#### 3.10.4 Protokolldatei erweitern

Mit --append_output werden die Scan - Resultate an die spezifizierte Protokoll-Datei angehängt, anstatt diese zu überschreiben.

#### 3.11 Verschleierungsparameter

Ganz offensichtlich kann ein Intrusion Detection System (IDS) nmap - Scans oftmals erkennen. Neben der Deaktivierung der ICMP - Pings sind weitere Manipulationen möglich, die in den folgenden Abschnitten beschrieben werden.

#### 3.11.1 Verbergen der Identität / IP - Source manipulieren

Unter bestimmten Umständen ist nmap nicht in der Lage, Ihre Quell - IP - Adresse zu identifizieren (nmap wird Ihnen dies mitteilen). In einer solchen Situation kann mit der Hilfe der Option -S die IP-Adresse (der gewünschten Schnittstelle) festgelegt werden.

Eine andere Möglichkeit dieser Option ist, die Quelle des Scans zu spoofen, so dass das Zielsystem glaubt, dass jemand anderes den Scan durchführt.

Diese wirklich exzellent ausgedachte und umgesetzte Funktion kann unter Umständen auch für Denial of Service-Attacken genutzt werden (angegebener Host nicht ansprechbar).

#### 3.11.2 Lockvogel

Mit der Option -D <Decoy1 [,Decoy2][,ME],...> wird ein so genannter Decoy-Scan (dt. Lockvolgel) veranlasst. Für einen unabhängigen Betrachter sieht es so aus, als würde eine Reihe zusätzlicher Hosts die Zielumgebung scannen. Durch die Option -D host.fake1.com,ME,test.fake2.com verfälscht nmap die Scan-Pakete mit den Absendeadressen von host.fake1.com und test.fake2.com.

#### 3.11.3 sonstige Verschleierungsversuche

Die Option --data_length <Anzahl> legt die Länge der zu versendenden Pakete fest. Normalerweise verschickt nmap möglichst kleine Pakete, die lediglich aus dem Header bestehen. So weisen TCP - Datagramme im Normalfall eine Länge von 40 und ICMP echo request-Anfragen 28 Bytes auf. Diese Option weist nmap an, die verschickten Pakete um Null-Bytes zu verlängern. Pakete zur Erkennung des Betriebssystens (-O) sind im Gegensatz zu Ping-Zugriffen und Portscan-Paketen nicht betroffen. Natürlich verlangsamt sich dadurch das Scannen - aber ebenso erhöht es die Unauffälligkeit des Scans.

Spielt Zeit eine untergeordnete Rolle, können durch Verwendung der Option -q ein unauffälliges Verhalten eingestellt werden. (Siehe auch Bugtraq, FTP, ICMP, IP, Linux, Networking, nmap, Ping, Port, RFC 792, RFC 793, RFC 1413, Scanning, Security, Strobe, TCP, UDP, Unix, Windows)

#### 3.12 Sonstige Optionen

#### 3.12.1 Ursprungsort der Ports festlegen

Mit -g <Portadresse> wird der Ursprungsport eines Scans definiert. Die Ports 20 und 53 sind erfahrungsgemäss eine gute Wahl.

#### 3.12.2 Auswahl des Device

Mit -e <Gerätename> wird bestimmt, an welcher Schnittstelle (Device) die Datenpakete auf die Reise geschickt werden sollen. Je nach dem muss für den Gerätename eth0, eth1 oder ppp0 definiert werden.

#### 3.12.3 IPv6-Unterstützung

IPv6 wir mit der Option -6 erreicht. Momentan werden nur TCP connect()- und Ping - Scans von nmap unterstützt. Sollen UDP- oder andere Scan - Typen genutzt werden, lohnt sich ein Blick auf http://nmap6.sourceforge.net/.