
Firewall-/IDS-Umgehung und -TäuschungViele Internet-Pioniere hatten die Vision eines globalen, offenen
Netzwerks, in dem ein universeller IP-Adressraum virtuelle Verbindungen
zwischen zwei beliebigen Knoten erlaubt. Dadurch können Hosts als echte,
gleichberechtigte Partner agieren und Information untereinander senden und
empfangen. Die Menschen könnten von ihrer Arbeitsstelle auf all ihre Systeme
daheim zugreifen, die Einstellungen der Klimaanlage ändern oder die Türen
für verfrühte Gäste aufsperren. Diese Vision einer universellen Konnektivität
wurde durch eine Verknappung im Adressraum und Sicherheitsbedenken abgewürgt.
In den frühen 1990er Jahren begannen Organisationen mit der Aufstellung von
Firewalls mit dem ausdrücklichen Zweck einer Reduktion der Konnektivität.
Riesige Netzwerke wurden mit Anwendungs-Proxies, NAT (Network Address
Translation)-Geräten
und Paketfiltern vom ungefilterten Internet abgeriegelt. Der
ungehinderte Fluss von Informationen hat einer strengen Regulierung von
zugelassenen Kommunikationskanälen und der darüber ausgetauschten Inhalte
Platz gemacht. Netzwerkhindernisse wie Firewalls können die Analyse eines Netzwerks
außerordentlich schwer machen. Und leichter wird es nicht werden, da das
Verhindern von Ausspähungen oft ein Schlüsselziel beim Einsatz
dieser Geräte ist. Trotzdem bietet Nmap viele Eigenschaften, um beim
Verständnis dieser komplexen Netzwerke zu helfen und um zu überprüfen,
dass diese Filter arbeiten wie gewünscht.
Es bietet sogar Mechanismen zur Umgehung schlechter Abwehrstrategien.
Eine der besten Methoden, Ihre Lage in puncto Netzwerksicherheit
zu verstehen, ist die, sie anzugreifen. Versetzen Sie sich selbst in
die Denkweise eines Angreifers und wenden Sie Verfahren aus diesem Kapitel
gegen Ihr Netzwerk an. Starten Sie einen FTP-Bounce-Scan, Idle-Scan,
Fragmentierungsangriff, oder versuchen Sie durch einen Ihrer eigenen Proxies
zu tunneln. Zusätzlich zur Beschränkung der Netzwerkaktivität überwachen Firmen
ihren Datenverkehr immer mehr mit Intrusion-Detection-Systemen
(IDS). Alle wichtigen IDS werden mit Regeln ausgeliefert, die entworfen wurden,
um Nmap-Scans zu erkennen, weil Scans manchmal Vorboten von Angriffen sind.
Viele dieser Produkte haben sich in Intrusion-Prevention-Systeme
(IPS)
verwandelt, die für böswillig gehaltenen Datenverkehr aktiv blockieren.
Dummerweise ist es für Netzwerkadministratoren und IDS-Hersteller eine sehr
schwierige Aufgabe, böswillige Absichten durch die Analyse von Paketdaten
zuverlässig zu erkennen. Angreifer mit Geduld, Geschick und der Hilfe
bestimmter Nmap-Optionen können meist unerkannt an einem IDS vorbeikommen.
Währenddessen müssen Administratoren mit riesigen Mengen falscher
positiver Ergebnisse kämpfen, bei denen eine nicht böswillige Aktivität
fehldiagnostiziert wird und Alarm schlägt oder blockiert wird.
Ab und zu schlagen Leute vor, dass Nmap keine Eigenschaften für die
Umgehung von Firewallregeln oder IDS enthalten sollte. Ihr Argument ist,
dass diese Eigenschaften genauso wahrscheinlich von Angreifern missbraucht
werden wie von Administratoren, die die Sicherheit verbessern. Das Problem
bei dieser Logik ist, dass diese Methoden trotzdem von Angreifern benutzt
würden, die einfach andere Werkzeuge finden oder die Funktionalität in
Nmap einbauen würden. Zugleich wäre es für Administratoren sehr viel
schwerer, ihren Job zu machen. Das Aufstellen nur moderner, gepatchter
FTP-Server ist eine wesentlich bessere Verteidigung als der Versuch,
die Verbreitung von Werkzeugen zu verhindern, die einen FTP-Bounce-Angriff
implementieren.
Es gibt keine Wunderlösung (oder Nmap-Option) zur Erkennung und
Umgehung von Firewalls und IDS-Systemen. Es braucht Kompetenz und Erfahrung.
Eine Anleitung dazu würde den Rahmen dieses Referenz-Handbuches sprengen,
das nur die wichtigsten Optionen auflistet und beschreibt, was sie
machen. -
-f (Pakete fragmentieren);
--mtu (benutzt angegebene MTU)
Die Option -f bewirkt, dass der gewünschte Scan
(inklusive Ping-Scans) winzig fragmentierte IP-Pakete benutzt. Die Idee
dabei ist, den TCP-Header über mehrere Pakete aufzuteilen, um es
Paketfiltern, Intrusion-Detection-Systemen und anderen Ärgernissen
schwerer zu machen, Ihre Aktivitäten zu durchschauen. Seien Sie dabei
vorsichtig! Manche Programme haben Mühe, mit diesen winzigen Paketen
umzugehen. Ein Sniffer alter Schule namens Sniffit ist beim Erhalt des
ersten Fragments sofort mit einem Segmentation-Fault-Fehler abgestürzt.
Wenn Sie diese Option einmal angeben, spaltet Nmap die Pakete in acht
Bytes oder weniger nach dem IP-Header auf. Das heißt, ein 20 Byte langer
TCP-Header würde in drei Pakete aufgeteilt, zwei mit acht Bytes des
TCP-Headers und eines mit den restlichen vier. Natürlich hat jedes
Fragment auch einen IP-Header. Geben Sie erneut -f an,
um 16 Bytes pro Fragment zu benutzen (was die Anzahl der Fragmente
verkleinert).
Oder Sie geben eine eigene Offset-Größe mit der Option
--mtu (für engl. maximum transmission unit) an.
Wenn Sie --mtu angeben,
sollten Sie nicht auch -f angeben. Das Offset muss ein
Vielfaches von acht sein. Zwar kommen fragmentierte Pakete nicht durch
Paketfilter und Firewalls durch, die alle IP-Fragmente in eine
Warteschlange stellen, wie z.B. die Option
CONFIG_IP_ALWAYS_DEFRAG im Linux-Kernel, aber einige
Netzwerke können sich den damit verbundenen Performance-Einbruch nicht
leisten und lassen sie folglich deaktiviert. Andere können sie nicht
aktivieren, weil die Fragmente auf verschiedenen Routen in ihre Netzwerke
kommen könnten. Manche Quellsysteme defragmentieren hinausgehende Pakete
im Kernel. Ein Beispiel dafür ist Linux mit dem Verbindungsmodul
iptables.
Führen Sie einen Scan aus, während ein Sniffer wie z.B.
Wireshark
läuft, um sicherzustellen, dass die gesendeten Pakete fragmentiert sind.
Falls Ihr Host-Betriebssystem Probleme macht, probieren Sie die Option
--send-eth
aus, um die IP-Schicht zu umgehen und rohe Ethernet-Rahmen zu
schicken. Eine Fragmentierung wird von Nmap nur für rohe Pakete unterstützt,
die man mit TCP- und UDP-Port-Scans (außer beim Connect-Scan und
FTP-Bounce-Scan) und der Betriebssystemerkennung benutzen kann.
Merkmale wie die Versionserkennung und die Nmap Scripting Engine
unterstützen im Allgemeinen keine Fragmentierung, weil sie sich auf
den TCP-Stack Ihres Hosts verlassen, um mit anderen Zielen zu
kommunizieren. -
-D <decoy1>[,<decoy2>][,ME][,...]
(verdeckt einen Scan mit Ködern)
Führt einen Decoy-Scan durch, was für den entfernten Host den
Anschein erweckt, dass der oder die Hosts, die Sie als Köder
angeben, das Zielnetzwerk ebenfalls scannen. Deren IDS kann also
5–10 Port-Scans von eindeutigen IP-Adressen verzeichnen, aber
es weiß nicht, welche IP sie gescannt hat und welche unschuldige Köder
waren. Das kann man zwar bekämpfen, indem man Router-Pfade mitverfolgt,
Antworten verwirft oder weitere aktive Mechanismen anwendet, aber im
Allgemeinen ist es eine wirksame Methode zum Verbergen Ihrer
IP-Adresse. Trennen Sie alle Köder mit Kommata voneinander, wobei Sie
optional
ME
als einen der Köder angeben können, um die Position Ihrer echten
IP-Adresse zu bestimmen. Falls Sie ME an
sechster Stelle oder später setzen, zeigen einige verbreitete
Port-Scan-Detektoren (wie z.B. der hervorragende
Scanlogd
von Solar Designer)
Ihre IP-Adresse wahrscheinlich überhaupt nicht an. Wenn Sie kein
ME angeben, setzt es Nmap an eine zufällig gewählte
Position. Sie können auch
RND
benutzen, um eine zufällige, nicht-reservierte IP-Adresse zu
erzeugen, oder RND:<number>,
um <number> Adressen zu erzeugen. Beachten Sie, dass die Hosts, die Sie als Köder benutzen, eingeschaltet
sein sollten, sonst könnten Sie versehentlich einen SYN-Flood-Angriff auf
Ihre Ziele auslösen. Außerdem lässt sich der scannende Host sehr einfach
bestimmen, wenn nur einer davon im Netzwerk eingeschaltet ist. Vielleicht
möchten Sie IP-Adressen statt -Namen benutzen (damit die Köder-Netzwerke
Sie nicht in ihren Nameserver-Protokollen sehen). Köder werden sowohl im initialen Ping-Scan (mit ICMP, SYN, ACK
oder was auch immer) als auch während der eigentlichen Port-Scan-Phase
benutzt. Auch bei der Erkennung entfernter Betriebssysteme
(-O) werden Köder benutzt. Bei der Versionserkennung
oder beim TCP-Connect-Scan funktionieren Köder jedoch nicht. Falls
eine Scan-Verzögerung stattfindet, wird sie zwischen zwei Stapeln
vorgetäuschter Testpakete erzwungen, nicht zwischen einzelnen Testpaketen.
Weil Köder stapelweise auf einmal gesendet werden, können sie vorübergehend
die Beschränkungen der Überlastungssteuerung verletzen. Man sollte hierbei noch erwähnen, dass beim Einsatz von zu vielen
Ködern Ihr Scan sich verlangsamen und sogar ungenauer werden kann.
Manche ISPs filtern außerdem Ihre vorgetäuschten Pakete, aber viele
beschränken solche vorgetäuschten IP-Pakete in keinster Weise. -
-S <IP_Address> (Quelladresse vortäuschen)
Unter gewissen Umständen kann Nmap eventuell Ihre Quelladresse
nicht bestimmen (wenn dem so ist, dann sagt Ihnen Nmap Bescheid).
Benutzen Sie in diesem Fall -S mit der IP-Adresse
der Schnittstelle, über die Sie die Pakete senden möchten. Eine weitere mögliche Anwendung dieses Flags ist eine Vortäuschung
des Scans, um die Ziele glauben zu machen, dass jemand
anderes sie scannt. Stellen Sie sich eine Firma vor, die
wiederholt von einem Mitbewerber gescannt wird! Bei dieser Art von
Anwendung werden im Allgemeinen die Optionen -e und
-PN benötigt. Beachten Sie, dass Sie normalerweise
Antwortpakete zurückbekommen (sie werden an die IP adressiert, die Sie
vortäuschen), d.h. Nmap kann keinen sinnvollen Bericht produzieren. -
-e <interface> (angegebene Schnittstelle benutzen)
Sagt Nmap, auf welcher Schnittstelle es Pakete senden und
empfangen soll. Nmap sollte das automatisch erkennen können,
sagt Ihnen aber Bescheid, wenn nicht. -
--source-port <portnumber>;
-g <portnumber> (Quell-Portnummer vortäuschen)
Eine Fehlkonfiguration, die überraschend häufig vorkommt, ist es, dem
Netzwerkverkehr allein auf Basis der Quell-Portnummer zu vertrauen. Wie
das zustande kommt, kann man leicht verstehen. Ein Administrator setzt
eine glänzende neue Firewall auf und wird sofort mit Beschwerden von
undankbaren Benutzern überflutet, deren Anwendungen nicht mehr laufen.
Vor allem DNS könnte einen Aussetzer haben, weil die UDP-DNS-Antworten
von externen Servern nicht länger ins Netzwerk hineinkommen. Ein
weiteres häufiges Beispiel ist FTP. Bei aktiven FTP-Übertragungen
versucht der entfernte Server, eine Verbindung zurück zum Client
herzustellen, um die gewünschte Datei zu übertragen. Für diese Probleme existieren sichere Lösungen, oftmals in Form von
Proxies auf Anwendungsebene oder Protokoll-parsenden Firewall-Modulen.
Leider gibt es auch einfachere, unsichere Lösungen. Viele Administratoren
haben beobachtet, dass DNS-Antworten von Port 53 und aktive FTP-Antworten
von Port 20 kommen, und sind in die Falle getappt, eingehenden Datenverkehr
nur von diesen Ports zu erlauben. Oft gehen sie davon aus, dass kein Angreifer
solche Firewall-Lecks bemerken und ausbeuten würde. In anderen Fällen
betrachten das Administratoren als kurzfristige Überbrückungsmaßnahme,
bis sie eine sicherere Lösung implementieren können. Und dann vergessen sie
diese Sicherheitsaktualisierung.
Aber nicht nur überarbeitete Netzwerkadministratoren tappen in diese
Falle. Zahlreiche Produkte wurden mit diesen unsicheren Regeln ausgeliefert.
Sogar Microsoft hat sich schuldig gmacht. Die IPsec-Filter, die mit
Windows 2000 und Windows XP ausgeliefert wurden, enthalten eine implizite
Regel, die jeden TCP- oder UDP-Datenverkehr von Port 88 (Kerberos) erlaubt.
Ein weiterer bekannter Fall sind Versionen der Zone Alarm Personal-Firewall
bis 2.1.25, die alle empfangenen UDP-Pakete vom Quell-Port 53 (DNS) oder
67 (DHCP) erlauben. Nmap bietet die Optionen -g und
--source-port (sind äquivalent), um diese Schwächen
auszunutzen. Geben Sie einfach eine Portnummer an, und Nmap wird, wenn
möglich, Pakete von diesem Port senden.
Damit es richtig funktioniert, muss Nmap für bestimmte
Betriebssystemerkennungstests verschiedene Portnummern benutzen,
und DNS-Anfragen ignorieren das --source-port-Flag,
weil Nmap sich bei ihnen auf System-Bibliotheken verlässt. Die meisten
TCP-Scans, inklusive dem SYN-Scan, unterstützen die Option vollständig,
ebenso wie der UDP-Scan. -
--data-length <number> (Zufallsdaten an gesendete Pakete anfügen)
Normalerweise sendet Nmap minimale Pakete, die nur einen Header
enthalten. Daher haben seine TCP-Pakete im Allgemeinen nur 40 Bytes
und die ICMP Echo-Requests nur 28. Mit dieser Option sagen Sie Nmap,
dass es die angegebene Anzahl von zufälligen Bytes an die meisten
gesendeten Pakete hinzufügen soll. Pakete für die Betriebssystemerkennung
(-O) sind davon nicht
betroffen,
weil dort aus Genauigkeitsgründen konsistente Pakete verlangt werden,
aber die meisten Ping- und Port-Scan-Pakete unterstützen das. Das kann
den Scan etwas verlangsamen, aber auch etwas unauffälliger machen. -
--ip-options <S|R [route]|L [route]|T|U ... >;
--ip-options <hex string> (sendet Pakete mit angegebenen IP-Optionen)
Laut
IP-Protokoll
können in den Paket-Headern mehrere Optionen enthalten sein. Anders als
die allgegenwärtigen TCP-Optionen sieht man IP-Optionen aus Gründen
der praktischen Anwendbarkeit und Sicherheit nur selten. Tatsächlich
blockieren die meisten Internet-Router die gefährlichsten Optionen
wie Source Routing sogar. Dennoch können diese Optionen in manchen
Fällen nützlich sein, um die Netzwerk-Route zu Zielrechnern zu
bestimmen und zu manipulieren. Sie können z.B. vielleicht die Option
Record Route dazu benutzen, einen Pfad zum Ziel sogar dann zu
bestimmen, wenn traditionellere, traceroute-artige Ansätze versagen.
Oder wenn Ihre Pakete von einer bestimmten Firewall verworfen werden,
können Sie mit den Optionen Strict oder Loose Source Routing
möglicherweise eine andere Route angeben. Die meisten Möglichkeiten bei der Angabe von IP-Optionen hat man,
wenn man einfach Werte als Argumente für --ip-options
angibt. Stellen Sie vor jede Hex-Zahl ein \x und
zwei Ziffern. Einzelne Zeichen können Sie wiederholen, indem Sie ihnen
ein Sternchen und dann die Anzahl der Wiederholungen nachstellen. So ist
z.B. \x01\x07\x04\x00*36\x01 ein Hex-String mit
36 NUL-Bytes. Nmap bietet auch einen verkürzten Mechanismus für die Angabe
von Optionen. Geben Sie einfach die Buchstaben R,
T oder U an, um jeweils
Record Route,
Record Timestamp
oder beide Optionen gemeinsam anzugeben.
Loose oder Strict Source
Routing
kann man mit L bzw. S, gefolgt von
einem Leerzeichen und einer mit Leerzeichen getrennten Liste von
IP-Adressen angeben. Wenn Sie die Optionen in den gesendeten und empfangenen Paketen
sehen möchten, geben Sie --packet-trace an. Mehr
Informationen und Beispiele zum Einsatz von IP-Optionen mit Nmap finden
Sie unter http://seclists.org/nmap-dev/2006/q3/0052.html.
-
--ttl <value> (setzt IP-Time-to-live-Feld)
Setzt bei IPv4 das Time-to-live-Feld in gesendeten Paketen
auf den angegebenen Wert. -
--randomize-hosts (randomisiert Reihenfolge der Zielhosts)
Verlangt von Nmap, dass es alle Gruppen von bis zu 16.384 Hosts
durcheinanderwürfelt, bevor es sie scannt. Das kann den Scan für
verschiedene Netzwerk-Überwachungssysteme weniger offensichtlich
machen, besonders dann, wenn Sie ihn mit einer langsamen
Timing-Option kombinieren. Wenn Sie größere Gruppen randomisieren
möchten, müssen Sie
PING_GROUP_SZ
in nmap.h
erhöhen und neu kompilieren.
Eine alternative Lösung ist es, die Liste der Ziel-IPs mit einem List-Scan
(-sL -n -oN <filename>) zu
erzeugen, dann z.B. mit einem Perl-Script zu randomisieren, um sie
schließlich als Ganzes mit
-iL
an Nmap zu übergeben.
-
--spoof-mac <MAC address, prefix, or vendor
name> (MAC-Adresse vortäuschen)
Verlangt von Nmap, dass es in allen gesendeten rohen Ethernet-Rahmen
die angegebene MAC-Adresse
benutzt. Diese Option impliziert
--send-eth,
um sicherzustellen, dass Nmap tatsächlich Pakete auf Ethernet-Ebene
sendet. Die MAC-Adresse kann in mehreren Formaten angegeben werden.
Wenn es einfach die Zahl 0 ist, wählt Nmap eine
völlig zufällige MAC-Adresse für diese Sitzung. Falls der angegebene
String aus einer geraden Anzahl von Hexadezimalziffern besteht (in dem
Paare optional mit Doppelpunkten getrennt sein können), benutzt Nmap
diese als MAC. Werden weniger als 12 Hexadezimalziffern angegeben,
dann füllt Nmap die restlichen sechs Bytes mit zufälligen Werten. Falls
das Argument weder null noch ein Hex-String ist, schaut Nmap in
nmap-mac-prefixes nach, um einen Herstellernamen
zu finden, der den angegebenen String enthält (unabhängig von der
Schreibweise). Wird eine Übereinstimmung gefunden, benutzt Nmap die
OUI dieses Herstellers (einen drei Byte langen
Präfix)
und füllt die verbleibenden drei Bytes mit Zufallswerten. Gültige
Beispiele für Argumente von --spoof-mac sind
Apple, 0,
01:02:03:04:05:06, deadbeefcafe,
0020F2 und Cisco.
Diese Option betrifft nur Scans mit rohen Paketen wie den SYN-Scan oder
die Betriebssystemerkennung, keine verbindungsorientierten Merkmale wie
die Versionserkennung oder die Nmap Scripting Engine. -
--badsum (sendet Pakete mit falschen TCP/UDP-Prüfsummen)
Verlangt von Nmap, bei den an Zielhosts gesendeten Paketen
ungültige TCP- oder UDP-Prüfsummen zu benutzen. Da so gut wie alle
Host-IP-Stacks solche Pakete verwerfen, kommen eventuelle Antworten
sehr wahrscheinlich von einer Firewall oder einem IDS, das sich nicht
die Mühe macht, die Prüfsumme zu überprüfen. Mehr Details zu dieser
Methode finden Sie unter http://nmap.org/p60-12.html.
|
|