Nmap Scripting Engine (NSE)

Die Nmap Scripting Engine (NSE) ist eines der mächtigsten und flexibelsten Merkmale von Nmap. Mit ihr können Benutzer einfache Scripts schreiben und weitergeben (geschrieben in der Programmiersprache Lua ), um eine breite Palette von Netzwerkaufgaben zu automatisieren. Diese Scripts werden dann parallel mit der Geschwindigkeit und Effizienz abgearbeitet, die Sie von Nmap erwarten. Als Benutzer können Sie auf eine wachsende und vielfältige Menge von Scripts vertrauen, die mit Nmap veröffentlicht werden, oder eigene Scripts für eigene Bedürfnisse schreiben.

Zu den Aufgaben, die wir bei der Konzeption dieses Systems anvisierten, gehören die Netzwerkerkennung, eine ausgefeiltere Versionserkennung sowie eine Verwundbarkeitserkennung. NSE kann aber sogar bei der Ausbeutung von Schwachstellen benutzt werden.

Um diese verschiedenen Anwendungen widerzuspiegeln und um die Auswahl des richtigen Scripts zu vereinfachen, verfügen alle Scripts über ein Kategorie-Feld. Im Moment sind folgende Kategorien definiert: safe, intrusive, malware, version, discovery, vuln, auth und default. Sie alle werden at https://nmap.org/book/nse-usage.html#nse-categories.

Die Nmap Scripting Engine wird detailliert at https://nmap.org/book/nse.html beschrieben und wird mit den folgenden Optionen gesteuert:

-sC

Führt einen Script-Scan mit dem Standardsatz an Scripts durch. Das ist äquivalent zu --script=default. Manche der Scripts in dieser Kategorie werden als aufdringlich betrachtet und sollten nicht ohne Genehmigung auf einem Zielnetzwerk ausgeführt werden.

--script <script-categories>|<directory>|<filename>|all

Führt einen Script-Scan (wie z.B. -sC) durch und benutzt dabei die mit Kommata getrennte Liste von Script-Kategorien, individuellen Scripts oder Script-Verzeichnissen statt des Standardsatzes. Zuerst versucht Nmap, die Argumente als Kategorien zu interpretieren, dann (wenn das nicht gelingt) als Datei- oder Verzeichnisnamen. Ein Script oder Verzeichnis von Scripts kann als absoluter oder relativer Pfad angegeben werden. Absolute Pfade werden unverändert benutzt. Relative Pfade werden an den folgenden Orten gesucht, bis sie gefunden werden: --datadir/; $NMAPDIR/; ~/.nmap/ (wird unter Windows nicht durchsucht); NMAPDATADIR/ oder ./. In all diesen Verzeichnissen wird außerdem auch ein scripts/-Unterverzeichnis ausprobiert.

Falls ein Verzeichnis angegeben und gefunden wird, lädt Nmap alle NSE-Scripts (alle Dateinamen, die mit .nse enden) aus diesem Verzeichnis. Dateinamen ohne die Endung nse werden ignoriert. Nmap sucht keine Unterverzeichnisse rekursiv durch, um Scripts zu finden. Wenn individuelle Dateinamen angegeben werden, dann muss deren Dateierweiterung nicht nse lauten.

Nmap-Scripts werden standardmäßig in einem scripts-Unterverzeichnis des Nmap-Datenverzeichnisses gespeichert (see https://nmap.org/book/data-files.html). Aus Effizienzgründen werden Scripts in einer Datenbank indiziert, die in scripts/script.db. gespeichert ist und für jedes Script auflistet, in welche Kategorie bzw. Kategorien es gehört. Um alle Scripts in der Nmap-Script-Datenbank auszuführen, geben Sie das Argument all an.

Die Scripts werden nicht in einer Sandbox ausgeführt und können Ihr System somit versehentlich oder böswillig beschädigen oder in Ihre Privatsphäre eindringen. Sie sollten Scripts von Dritten nur dann ausführen, wenn Sie deren Autoren vertrauen oder sie selbst eingehend studiert haben.

--script-args <name1>=<value1>,<name2>={<name3>=<value3>},<name4>=<value4>

Hiermit können Sie Argumente für NSE-Scripts angeben. Argumente werden als name=value-Paare angegeben. Die Argumente werden verarbeitet und in einer Lua-Tabelle gespeichert, auf die alle Scripts Zugriff haben. Die Namen werden als Strings (die alphanumerische Werte sein müssen) in argument-table als Schlüssel gespeichert. Die Werte sind ihrerseits entweder Strings oder Tabellen (innerhalb von ‘{’ und ‘}’). Sie könnten z.B. diese mit Kommmata getrennten Argumente angeben: user=bar,pass=foo,whois={whodb=nofollow+ripe}. String-Argumente werden potenziell von mehreren Scripts benutzt, während Untertabellen normalerweise nur von einem Script benutzt werden. In Scripts, die eine Untertabelle annehmen, wird diese Untertabelle normalerweise nach dem Script benannt (in diesem Fall z.B. whois).

--script-trace

Diese Option macht das, was --packet-trace macht, aber eine ISO-Ebene höher. Wenn diese Option angegeben wird, wird die gesamte ein- und ausgehende Kommunikation von Scripts ausgegeben. Die angezeigte Information enthält das Kommunikationsprotokoll, Quell- und Zieladressen sowie die übertragenen Daten. Falls mehr als fünf Prozent der übertragenen Daten nicht druckbar sind, werden sie stattdessen als Hexadezimal-Auszug ausgegeben. Auch die Angabe von --packet-trace schaltet diese Mitverfolgung von Scripts ein.

--script-updatedb

Diese Option aktualisiert die Script-Datenbank in scripts/script.db, die von Nmap benutzt wird, um die verfügbaren Standard-Scripts und Kategorien zu bestimmen. Man muss die Datenbank nur dann aktualisieren, wenn man NSE-Scripts in das Standardverzeichnis scripts hinzufügt oder von dort entfernt, oder wenn man die Kategorie eines Scripts ändert. Diese Option wird ohne Argumente benutzt: nmap --script-updatedb.