Netzwerke angreifen, um sie zu sichern

Jesse-lee Lang, 123RF

Ohne Gnade

Statt sein Netzwerk durch Aktenstudium sicherer zu machen, sollte man es einfach mit allem angreifen, was man hat. Nmap ist das Tool der Wahl, um die eigenen Server unter gnadenlosen Beschuss zu nehmen. Und das ist gar nicht so schwierig.
ADMIN 11/13 stellt die besten Lösungen vor und klärt, ob Browser-Plugins, Anonymisierer sowie Verschlüsselung wirklich helfen. Weitere Themen: Small ... (mehr)

Beim Durchstöbern eines Konferenz-Archivs fiel mir ein altes Video von Fyodor, dem Hauptentwickler des Nmap-Scanners, ins Auge. Da ich damals selbst im Publikum gesessen habe, wollte ich eigentlich nur meine Erinnerungen auffrischen, als ich mir das Video dann noch einmal ansah [1]. Dabei fiel mir dann allerdings auf, wie rasant sich das Tool in den letzten Jahren entwickelt hat. Nicht nur die Performance, mit der Nmap mittlerweile Tausende von Hosts in kurzer Zeit scannen kann, hat sich im Vergleich zu den ersten Versionen extrem verbessert, auch die Scripting Engine NSE kann sich nun wirklich sehen lassen. Standen vor einigen Jahren nur wenige Skripte zur Verfügung, enthält die aktuelle Version von Nmap weit über 400.

Auch die Datenbank mit den Fingerprints, die zum Ermitteln der Services und des eingesetzten Betriebssystems zum Einsatz kommen, umfasst mittlerweile mehrere Tausend Einträge. Die Version 6.40 von Nmap steht seit Mitte August zum Download [2] zur Verfügung und sollte in dieser Version über die Software-Repositories der meisten Linux-Distributionen zu haben sein.

Mit der Nmap Scripting Engine (NSE) stellt das Scanning-Tool eine elegante Methode zur Verfügung, mit denen Anwender beliebige Security-Tests ausführen können. Die Tests helfen dabei, aktive Netwerkdienste zu ermitteln, Schwachstellen der eingesetzten Software und eventuell vorhandene Backdoors zu identifizieren. Es gibt sogar die Möglichkeit, Exploit-Code auf gefundene Schwachstellen anzuwenden.

Universell per Skript erweiterbar

Die Scripting Engine besteht aus zwei Teilen. Das Herzstück ist der integrierte Lua-Interpreter. Die Scriptsprache Lua [5] ist primär dafür gedacht, die Funktionalität von bestehenden Programmen zu erweitern. Aus diesem Grunde ist der Interpreter auch extrem klein, sodass er sich prima in bestehende Tools integrieren lässt. Neben Nmap greifen bereits viele andere Tools auf Lua zurück, beispielsweise auch das bekannte Intrusion Detection System »Snort« und der Packet-Analyzer »Wireshark« . Neben dem Interpreter stellt die NSE-Bibliothek die zweite Komponente der Scripting Engine dar. Diese ist dafür verantwortlich, Nmap und Lua miteinander zu verbinden. Neben den Lua-Standardfunktionen stellt diese Bibliothek sehr mächtige Nmap-spezifische Methoden zur Verfügung. Diese lassen sich in NSE-Skripten mit einer »require« -Anweisung einbinden.

Skript-Kategorien

Die NSE-Skripte selbst gliedern sich in unterschiedliche Kategorien. So befinden sich beispielsweise Skripte zum Identifizieren von Schwachstellen in der Kategorie »vuln« , während die Skripte der Kategorie »exploit« versuchen, die identifizierten Schwachstellen auszunutzen. Ruft man Nmap mit aktivierter Scripting Engine auf, ohne jedoch ein spezielles Skript oder eine Kategorie anzugeben, so kommen die Default-Skripte zum Einsatz. Neben den bereits erwähnten existieren noch die Kategorien auth, broadcast, brute, discovery, dos, external, fuzzer, intrusive, malware, safe und version. Die Scripting Engine erwartet die Skripte im Verzeichnis »/usr/share/nmap/scripts/« . Nmap selbst nimmt diese dann über die Option »--script« entgegen. Mittels »--script-args« erhalten die Skripte die passenden Argumente. Dies ist etwa bei den Brute-Force-Skripten nötig.

Während der Entwicklung von neuen NSE-Skripten kann man Nmap auch einfach mittels »--datadir« den genauen Dateisystempfad angeben, um das Skript von einer beliebigen Stelle aus auszuführen. Ist die Entwicklung abgeschlossen, sollte die Datei schließlich in das Default-Skriptverzeichnis kopiert werden. Neben den eigentlichen Lua-Skripten liegt dort auch eine Datei »script.db« . Diese kennt alle vorhandenen Skripte und die dazugehörigen Kategorien. Mittels der Nmap-Option »--script-updatedb« wird diese auf den aktuellen Stand gebracht. Die Option »--script-help« macht genau das, was der Name vermuten lässt, wobei auch Wildcards möglich sind. Eine Hilfe zu allen NSE-Skripten, die den Service »httpd« betreffen (Abbildung 1), liefert:

Abbildung 1: Die Hilfe zeigt, welche Nmap-Module es für den http-Daemon gibt.
# nmap --script-help "http-*"

Das zweite Beispiel (Abbildung 2) führt einen Scan auf dem lokalen Port 21 durch. Ist dieser offen, kommen die Skripte »ftp-anon« und »ftp-brute« zum Einsatz. ftp-anon prüft, ob ein anonymer Login auf dem Server möglich ist und listet im Erfolgsfall das Root-Verzeichnis des Servers auf. Das zweite Skript führt einen Brute-Force-Angriff aus. Dabei greift Nmap auf die Bibliothek »unpwdb.lua« aus dem Verzeichnis »nselib« zurück. Diese wiederum bedient sich der beiden Dateien »usernames.lst« und »passwords.lst« für den Brute-Force-Angriff. Beide Dateien sind Teil der regulären Nmap-Installation, sodass die Brute-Force-Skripte direkt einsatzbereit sind, ohne erst ein Wörterbuch mit Benutzernamen und Passwörtern herunterladen zu müssen.

Abbildung 2: So sieht ein Brute-Force-Angriff auf den FTP-Port 21 aus. Der Aufruf dazu ist ein simpler Einzeiler, der Effekt ein brutaler Passwort-Angriff.

Nmap kommt in der aktuellen Version 6.40 mit weiteren 400 fertigen NSE-Skripten daher. Sollte trotzdem nicht das passende dabei sein, so ist es recht leicht, eigene Skripte in Lua zu schreiben oder die bestehenden Skripte abzuändern. NSE-Skripte sind immer so aufgebaut, dass diese einen Header, eine Port-Regel und eine Action enthalten. Das Beispiel (Listing 1) zeigt, wie sich SSH-Server identifizieren lassen, die auf einem nicht Default-Port lauschen, also beispielsweise auf Port 443. Dies könnte ein Indiz dafür sein, dass bestehende Compliance-Regeln bei der Konfiguration des Server nicht eingehalten wurden. Solche Server werden gerne dazu genutzt, um einfache Paketfilter zu umgehen, die SSH blockieren sollen. Port 443 ist der Standard-Port für gesicherte http-Verbindungen (»https« ) und daher fast immer offen. Ein Paketfilter, der lediglich bis OSI-Level 4 arbeitet, würde hier nicht feststellen können, dass über den Port 443 kein Web-Traffic, sondern eine SSH-Verbindung läuft.

Listing 1

ssh-strangeport.nse

01 description = [[
02 Checks if SSH is running on a non-standard port.
03 Possible compliance violation.
04 ]]
05
06 ---
07 -- @output
08 -- 443/tcp  open   ssh
09 -- |_ ssh-strangeport: SSH server on unusual port: possible compliance violation
10
11 author = "Thorsten Scherf"
12 license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
13 categories = {"discovery", "safe"}
14
15 portrule = function(host, port)
16         return port.service == "ssh" and
17                 port.number ~= 22 and port.number
18                 and port.protocol == "tcp"
19                 and port.state == "open"
20 end
21
22 action = function()
23         return "SSH server on unusual port: possible compliance violation"
24 end

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Container-Anwendungen isolieren mit Aporeto Trireme

Beim Umstieg auf Container-basierte Anwendungen sind viele Klippen zu umschiffen, dies gilt insbesondere für das Thema Security. So lassen sich Anwendungen nur schwer voneinander kontrollierbar isolieren. Hier setzt Aporeto mit Trireme an. Die Software sorgt dank einer attributbasierten Zugriffskontrolle für mehr Sicherheit. Wir stellen das Konzept anhand eines Beispiels vor. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Linux-Backup

Welche Backup-Lösung setzen Sie für Linux im professionellen Umfeld ein?

  • keine
  • eigene Scripts
  • rsnapshot
  • rdiff-backup
  • Bacula
  • Bareos
  • Borg
  • Duplicity
  • Amanda
  • Burp
  • Clonezilla
  • Acronis
  • Arkeia
  • SEP sesam
  • Veeam
  • Redo Backup
  • Relax-and-Recover
  • andere kommerzielle Software
  • andere Open-Source-Software

Google+

Ausgabe /2017

Microsite