Schwachstellen-Scan mit Nmap

NmapBeginner
Jetzt üben

Einführung

In diesem Lab erlernen Sie die Grundlagen des Netzwerk-Scannings mit Nmap (Network Mapper), einem leistungsstarken Open-Source-Werkzeug für die Netzwerkexploration und Sicherheitsüberprüfung. Sie beginnen mit einfachen Port-Scans, gehen über zur Dienst- und Versionserkennung und erkunden anschließend die Nmap Scripting Engine (NSE), um gezielte Schwachstellenprüfungen durchzuführen. Abschließend lernen Sie, wie Sie Ihre Scan-Ergebnisse in verschiedenen Formaten analysieren und für die Berichterstattung speichern. Dieses Lab bietet eine schrittweise, praxisorientierte Einführung in die Kernfunktionen von Nmap für eine effektive Netzwerksicherheitsbewertung.

Einen einfachen Netzwerk-Scan durchführen

Im ersten Schritt machen Sie sich mit Nmap vertraut, indem Sie einen Basis-Scan durchführen. Ein einfacher Scan wird verwendet, um herauszufinden, welche Ports auf einem Zielrechner geöffnet sind. Ein offener Port signalisiert, dass ein Dienst (wie ein Webserver oder SSH) aktiv ist und auf Verbindungen wartet.

Die Lab-Umgebung wurde mit mehreren Diensten vorkonfiguriert, die auf localhost (Ihrem eigenen virtuellen Rechner) laufen, damit Sie daran üben können. Das Werkzeug nmap ist bereits vorinstalliert.

  1. Überprüfen Sie zunächst, ob Nmap installiert ist, und kontrollieren Sie die Version. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:

    nmap --version
    

    Sie sollten eine Ausgabe sehen, die die Nmap-Version bestätigt, ähnlich wie diese:

    Nmap version 7.80 ( https://nmap.org )
    Platform: x86_64-pc-linux-gnu
    Compiled with: liblua-5.3.3 openssl-1.1.1f libssh2-1.8.0 libz-1.2.11 libpcre-8.39 nmap-libpcap-1.9.1
    Compiled without:
    Available nsock engines: epoll poll select
    
  2. Führen Sie nun Ihren ersten Scan gegen localhost durch. Dieser Befehl weist Nmap an, die gängigsten offenen Ports auf Ihrem lokalen Rechner zu prüfen.

    nmap localhost
    
  3. Untersuchen Sie das Ergebnis. Nmap listet die gefundenen offenen Ports zusammen mit ihrem Status und dem üblicherweise mit diesem Port verbundenen Dienst auf. Die Ausgabe wird etwa so aussehen und die für dieses Lab vorbereiteten Dienste anzeigen:

    Starting Nmap 7.80 ( https://nmap.org ) at ...
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000092s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    8080/tcp open  http-proxy
    
    Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
    

Dieser erste Scan liefert Ihnen eine Übersicht der laufenden Dienste, was den ersten Schritt bei jeder Netzwerksicherheitsbewertung darstellt.

Dienstversionen erkennen

Zu wissen, welche Ports offen sind, ist nützlich. Doch für einen Sicherheitsanalysten ist es weitaus wertvoller, die exakte Software und deren Version zu kennen, die hinter diesen Ports steckt. Veraltete Software ist eine der Hauptquellen für Sicherheitslücken. In diesem Schritt verwenden Sie Nmap zur Dienst- und Versionserkennung.

Wir nutzen dafür den Parameter -sV, der Nmap anweist, die offenen Ports aktiv abzufragen, um detaillierte Informationen über Dienste und Versionen zu erhalten.

  1. Führen Sie einen Scan zur Versionserkennung gegen localhost durch. Um den Scan effizienter zu gestalten, zielen wir direkt auf die in Schritt 1 entdeckten Ports (22, 2121, 2222, 3001, 8080), anstatt alle Ports zu scannen.

    nmap -sV -p 22,8080 localhost
    

    Profi-Tipp: Das gezielte Scannen bestimmter Ports verkürzt die Scandauer erheblich. Ein vollständiger Port-Scan mit -sV kann mehrere Minuten dauern, während dieser zielgerichtete Ansatz meist in Sekunden abgeschlossen ist.

  2. Vergleichen Sie die Ausgabe mit dem Basis-Scan aus Schritt 1. Sie sehen nun eine zusätzliche Spalte namens VERSION, die Details über die auf dem jeweiligen Port laufende Software liefert.

    Die Ausgabe wird detaillierter sein, ähnlich wie hier:

    Starting Nmap 7.80 ( https://nmap.org ) at ...
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.00011s latency).
    Not shown: 995 closed ports
    PORT     STATE SERVICE VERSION
    22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
    8080/tcp open  http    nginx 1.18.0 (Ubuntu)
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    
    Nmap done: 1 IP address (1 host up) scanned in 2.15 seconds
    

Diese Informationen sind entscheidend. Wenn der Scan beispielsweise eine alte Version von nginx mit einer bekannten kritischen Schwachstelle aufdeckt, wissen Sie genau, wo Sie mit den Gegenmaßnahmen ansetzen müssen.

Die Nmap Scripting Engine (NSE) nutzen

Die Nmap Scripting Engine (NSE) ist eine der mächtigsten Funktionen von Nmap. Sie ermöglicht es Ihnen, eine Vielzahl von Netzwerkaufgaben mithilfe einer Skriptbibliothek zu automatisieren. Diese Skripte können für fortgeschrittene Netzwerkerkundung, Schwachstellenerkennung und sogar für Exploitation eingesetzt werden.

In diesem Schritt verwenden Sie den Parameter -sC, der eine Reihe von Standard-Skripten ausführt, die als sicher gelten und für die Informationsbeschaffung nützlich sind.

  1. Führen Sie einen Nmap-Scan mit aktivierten Standard-Skripten gegen localhost durch. Der Parameter -sC ist ein bequemer Weg, um mehr Informationen zu erhalten, ohne einzelne Skripte manuell angeben zu müssen.

    nmap -sC localhost
    
  2. Überprüfen Sie die Ausgabe. Sie werden zusätzliche Informationen sehen, die eingerückt unter jedem Port aufgeführt sind. Dies ist das Ergebnis der NSE-Skripte. Beispielsweise könnte das Skript http-title den Titel der Webseite auf Port 8080 auslesen, während SSL-Skripte Details zu Zertifikaten liefern.

    Die Ausgabe wird noch ausführlicher sein:

    Starting Nmap 7.80 ( https://nmap.org ) at ...
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000099s latency).
    Other addresses for localhost (not scanned): ::1
    Not shown: 995 closed ports
    PORT     STATE SERVICE
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    | ssl-cert: Subject: commonName=localhost
    | Subject Alternative Name: DNS:localhost
    | Not valid before: 2024-07-18T03:37:05
    |_Not valid after:  2034-07-16T03:37:05
    8080/tcp open  http-proxy
    |_http-open-proxy: Proxy might be redirecting requests
    |_http-title: Site doesn't have a title (text/html).
    
    Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
    

Wie Sie sehen können, haben die Standard-Skripte automatisch wertvolle Informationen gesammelt, wie etwa den Titel der Webseite auf Port 8080 oder Details zu SSL-Zertifikaten.

Einen Schwachstellen-Scan ausführen

Jetzt ist es an der Zeit, gezielt nach Schwachstellen zu suchen. Die NSE enthält eine Kategorie von Skripten, die speziell für die Prüfung bekannter Sicherheitslücken entwickelt wurden. Sie können alle Skripte der Kategorie vuln ausführen, um einen umfassenden Schwachstellen-Scan durchzuführen.

Es gehört zur bewährten Praxis, die Ergebnisse langer oder wichtiger Scans immer in einer Datei zu speichern. Wir verwenden den Parameter -oN, um die Ausgabe im Standardformat von Nmap zu sichern.

  1. Kombinieren wir nun das Gelernte. Führen Sie einen Scan durch, der die Diensterkennung (-sV) beinhaltet und alle Schwachstellen-Skripte (--script vuln) ausführt. Speichern Sie das Ergebnis in einer Datei namens vuln_scan.txt.

    nmap -sV --script vuln -oN vuln_scan.txt localhost
    

    Dieser Scan kann einige Minuten dauern, da viele verschiedene Skripte gegen jeden offenen Port ausgeführt werden.

  2. Sobald der Scan abgeschlossen ist, wird eine Datei namens vuln_scan.txt in Ihrem aktuellen Verzeichnis (/home/labex/project) erstellt. Sie können den Inhalt mit dem Befehl cat betrachten:

    cat vuln_scan.txt
    
  3. Da die Ausgabedatei sehr lang ist, ist es effizienter, nach Schlüsselwörtern zu suchen. Verwenden Sie grep, um nach Zeilen zu suchen, die auf eine Schwachstelle hindeuten. Der Begriff "VULNERABLE" ist hierbei ein eindeutiger Indikator.

    grep "VULNERABLE" vuln_scan.txt
    

    Sie sollten eine Ausgabe sehen, die gefundene Schwachstellen anzeigt. In dieser Lab-Umgebung werden Sie wahrscheinlich eine Schwachstelle im Zusammenhang mit dem Byterange-Filter von Apache finden:

    |   VULNERABLE:
    |     State: VULNERABLE
    

    Um die vollständigen Details der Schwachstelle zu sehen, können Sie nach der spezifischen CVE-Nummer suchen oder das gesamte Scan-Ergebnis prüfen. Beispielsweise könnten Sie eine Apache DoS-Schwachstelle (CVE-2011-3192) auf Port 8080 entdecken. Beachten Sie, dass auch Skriptfehler (wie clamav-exec: ERROR) auftreten können. Dies ist normal und kann ignoriert werden – solche Fehler entstehen, wenn bestimmte Skripte in der isolierten Lab-Umgebung nicht korrekt ausgeführt werden können.

Dieser Schritt zeigt, wie man aktiv nach Schwachstellen sucht und so von der einfachen Erkennung zu einer gezielten Sicherheitsüberprüfung übergeht.

Scan-Ergebnisse speichern und formatieren

Die fachgerechte Dokumentation und Berichterstattung von Befunden ist eine essenzielle Fähigkeit für jeden Sicherheitsexperten. Nmap unterstützt verschiedene Ausgabeformate für unterschiedliche Zwecke. In diesem letzten Schritt lernen Sie, wie Sie Ihre Ergebnisse in mehreren Formaten speichern und einen benutzerfreundlichen HTML-Bericht erstellen.

  1. Erstellen Sie zunächst ein eigenes Verzeichnis, um Ihre Berichte organisiert zu halten.

    mkdir -p ~/project/reports
    
  2. Führen Sie den Scan erneut aus, aber speichern Sie die Ausgabe diesmal gleichzeitig in zwei Formaten: als normalen Text (-oN) und als XML (-oX). XML ist ein strukturiertes Format, das sich ideal für die Weiterverarbeitung mit anderen Werkzeugen eignet.

    nmap -sV -p 8080 --script vuln -oN ~/project/reports/scan_report.txt -oX ~/project/reports/scan_report.xml localhost
    
  3. Das XML-Format ist für Menschen schwer lesbar. Nmap bietet jedoch das Hilfsprogramm xsltproc an, um die XML-Datei in einen übersichtlichen HTML-Bericht umzuwandeln. Führen Sie den folgenden Befehl aus, um scan_report.html zu generieren.

    xsltproc ~/project/reports/scan_report.xml -o ~/project/reports/scan_report.html
    
  4. Überprüfen wir nun, ob alle Berichtsdateien im Verzeichnis ~/project/reports erstellt wurden. Nutzen Sie den Befehl ls -l, um die Dateien und deren Details aufzulisten.

    ls -l ~/project/reports
    

    Sie sollten Ihre drei Berichtsdateien sehen:

    total 40
    -rw-rw-r-- 1 labex labex 14276 Aug 28 15:12 scan_report.html
    -rw-rw-r-- 1 labex labex  5686 Aug 28 15:11 scan_report.txt
    -rw-rw-r-- 1 labex labex 14924 Aug 28 15:11 scan_report.xml
    

Sie verfügen nun über eine einfache Textdatei zur schnellen Durchsicht, eine XML-Datei für die maschinelle Verarbeitung und eine HTML-Datei für die professionelle Präsentation und Weitergabe.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit Nmap gesammelt, einem grundlegenden Werkzeug in der Cybersicherheit. Sie haben mit einfachen Port-Scans begonnen, um aktive Dienste auf einem Netzwerk-Host zu identifizieren. Danach sind Sie zu fortgeschritteneren Techniken übergegangen, einschließlich der Dienstversionserkennung (-sV), um spezifische Softwarestände zu ermitteln. Sie haben zudem die Leistungsfähigkeit der Nmap Scripting Engine (NSE) erkundet, indem Sie Standard-Skripte (-sC) und einen vollständigen Schwachstellen-Scan (--script vuln) durchgeführt haben. Abschließend haben Sie gelernt, wie man Scan-Ergebnisse professionell in verschiedenen Formaten (-oN, -oX) speichert und diese für die Analyse und Dokumentation in einen lesbaren HTML-Bericht umwandelt. Diese Fähigkeiten bilden ein solides Fundament für den Einsatz von Nmap in realen Netzwerksicherheitsüberprüfungen.