Erkennen von Schwachstellen
Wenn du den Dienst hinter einem offenen Port, womöglich auch seine Version sowie das Betriebssystem des Untersuchungsobjekts kennst, geht es im nächsten Schritt darum, Schwachstellen zu ermitteln.
Alle Schritte vom Erkennen des aktiven Hosts bis zum Ermitteln von Schwachstellen wird auch als Schwachstellenscan bezeichnet.
Beim Schwachstellenscan werden Schwachstellen oder auch Sicherheitslücken in Computersystemen, Netzwerken oder Anwendungen identifiziert und bewertet. Dies erfolgt automatisch mit spezieller Software, den sogenannten Schwachstellenscannern.
Um mögliche Schwachstellen zu erkennen, gibt es zwei Methoden:
Schwachstellen-Datenbanken
Es gibt Datenbanken, die Informationen über bekannte Schwachstellen in Anwendungen und Betriebssystemen enthalten. In diesen kann nach bekannten Schwachstellen für die identifizierten Dienste und deren Versionen gesucht werden.
Suche nach Schwachstellen in Datenbanken Aktives Testen
Fortgeschrittene Schwachstellenscanner können gezielt Schwachstellen durch aktives Testen ausnutzen. Sie senden spezielle Anfragen oder Exploits an die Dienste, um zu prüfen, ob die Schwachstellen tatsächlich vorhanden sind und ausgenutzt werden können.
Aktives Testen auf Schwachstellen
Erkennen von Schwachstellen mit Nmap
Suche in Schwachstellendatenbank
Nmap hat seine Stärken bei den ersten Schritten des Schwachstellenscans, also bei der Hosterkennung, dem Portscan und der Dienst- sowie Betriebssystemerkennung, und weniger beim Erkennen von Schwachstellen. Dennoch bietet es auch dafür einige Funktionen, die du gleich auf den LUPFER anwenden wirst.
Du konzentrierst dich auf die offenen TCP-Ports, von denen du die Dienste kennst, und beginnst damit für diese Dienste nach bekannten Schwachstellen zu suchen. Dies geht in Nmap mit:
nmap -sV --script vulners --script-args mincvss=9 <ip> -p <ports>
Die einzelnen Teile des Befehls bedeuten Folgendes:
-sV: Aktiviert die Diensterkennung--script vulners: Setzt das Nmap-Skriptvulners.nseein, das die ermittelten Softwareversionen mit der Schwachstellendatenbankvulners.comabgleicht und gefundene Schwachstellen auflistet--script-args mincvss=9: Setzt ein Argument für das Skript
Hier wird spezifiziert, dass nur Schwachstellen mit einem CVSS-Score von 9 oder höher angezeigt werden sollen. CVSS steht für Common Vulnerability Scoring System und bewertet die Schwere von Sicherheitslücken auf einer Skala von 0 bis 10.
Bevor du die Funde weiter untersuchst, sind hier noch wichtige Informationen zu Schwachstellen. Um alle öffentlich bekannten Schwachstellen identifizieren zu können, werden sie einheitlich benannt und verwaltet. Dies geschieht über den Standard CVE (Common Vulnerabilities and Exposures).
CVE (Common Vulnerabilities and Exposures) ist ein international anerkannter Standard zur Identifizierung und Benennung von Sicherheitslücken in Software und Hardware. Jede Schwachstelle wird durch eine eindeutige CVE-ID identifiziert, die aus dem Präfix "CVE-" gefolgt von einer Nummer besteht (z. B. CVE-2023-12345).
Schwachstellen werden bewertet, damit Organisationen ihre Reaktion auf sie priorisieren können. Dazu dient beispielsweise das CVSS (Common Vulnerability Scoring System).
Das CVSS (Common Vulnerability Scoring System) ist ein Standard zur Bewertung der Schwere von Sicherheitslücken. Auf Basis verschiedener Kriterien, die als Metriken bezeichnet werden, wird ein Score zwischen 0.0 und 10.0 berechnet. Je höher der Score ist, desto schwerwiegender wird die Schwachstelle eingeschätzt.
Schwachstellen werden zunächst nach den Base Metrics bewertet. Diese beinhalten die Eigenschaften einer Schwachstelle, die über die Zeit hinweg und in verschiedenen Benutzerumgebungen gültig sind. Dies sind die Ausnutzbarkeit der Schwachstelle, die Auswirkungen auf die Vertraulichkeit, Integrität und Verfügbarkeit der Daten.
Organisationen können den CVSS-Socre an ihre Bedingungen anpassen. Dafür gibt es weitere Metriken wie Threat Metrics oder Environmental Metrics, die die Benutzerumgebung wie beispielsweise die Sicherheitsanforderungen oder die Erreichbarkeit des Systems berücksichtigen, auf dem die Schwachstelle festgestellt wurde.
Lass uns auf die Funde von Nmap für OpenSSH zurückkommen. Recherchiere, ob du eine der Schwachstellen womöglich ausnutzen kannst, um Zugriff auf den LUPFER zu erhalten. Öffne dafür den Link.
Es öffnet sich die Seite vulners.com, die die CVE-ID der Schwachstelle mit CVE-2014-4210 angibt.
Es scheint einen Exploit für die Schwachstelle zu geben, aber Details sind nur für registrierte Nutzer von vulners.com zugänglich.
Da du das wahrscheinlich nicht bist, bleibt dir nur, über eine Internetsuche nach weiteren Informationen zu recherchieren.
Hier sind einige Schwachstellen-Datenbanken, die dabei helfen können:
- Common Vulnerabilities and Exposures (CVE): Die CVE-Datenbank listet alle öffentlich bekannten Schwachstellen auf.
- National Vulnerability Database (NVD): Die NVD enthält alle CVE-Einträge mit zusätzlichen Informationen, wie z. B. den CVSS-Score und Metadaten, um die Sicherheitsbewertung zu erleichtern.
- VARIoT: VARIoT listet CVE-Einträge für IoT-Geräte auf und enthält die zusätzlichen Informationen aus der NVD.
- Exploit Database: Die Exploit-Datenbank ist eine Sammlung von bekannten Sicherheitsanfälligkeiten und zugehörigen Exploits.
Bei diesem ersten Fund handelt es sich also um einen falsch-positive Meldung. Die Schwachstelle CVE-2014-4210 betrifft nicht die Software OpenSSH.
Wie sieht es nun mit den anderen Funden aus?
Schau dir die Einträge unter vulners.com an und recherchiere zu den beiden Schwachstellen:
- https://vulners.com/githubexploit/5E6968B4-DBD6-57FA-BF6E-D9B2219DB27A
- https://vulners.com/githubexploit/33D623F7-98E0-5F75-80FA-81AA666D1340
Während es sich bei der Schwachstelle CVE-2023-4596 um einen falsch-positiven Fund handelt, betrifft die Schwachstelle CVE-2024-6387 tatsächlich die eingesetzte Software OpenSSH 9.6p1.
Die Frage ist nun, ob die Schwachstelle auch ausnutzbar ist.
Laut Eintrag in der Datenbank vulners.com ist das der Fall.
Eine Internetrecherche ergibt, dass zwei Exploits öffentlich verfügbar sind:
Beide Exploits lassen sich nicht einfach verwenden, sondern müssten manuell an den LUPFER angepasst werden. Aufgrund der Komplexität sehen wir davon vorerst ab und schließen die Schwachstellensuche über Datenbanken an dieser Stelle ab.
Normalerweise würdest du für die Software OpenSSH 9.6p1 und Nginx 1.24.0 noch nach weiteren CVEs und direkt in der Exploit-Datenbank nach Einträgen suchen. Es können schließlich noch weitere Schwachstellen und Exploits bekannt sein.
Aktives Testen
Nun soll es um die zweite Möglichkeit gehen, Schwachstellen zu finden.
Vulnerability Scanner und auch Nmap testen Dienste aktiv darauf, ob sie bekannte Schwachstellen aufweisen.
Über das Flag -sC werden in Nmap Standardskripte gestartet:
nmap -sC <ip> -p <ports>
Nmap hat je ein Skript für den Dienst SSH und HTTP ausgeführt. Nmap setzt Skripte nicht nur ein, um auf Schwachstellen zu testen, sondern auch ganz allgemein ein, um Informationen zu gewinnen. Das erklärt, warum keines der Skripte einen Hinweis auf eine Schwachstelle liefert.
Nun ist auch möglich, einzelne Skripte oder Skripte einer Kategorie auszuführen.
Dies geschieht mit dem Flag --script.
Mit folgendem Befehl werden beispielsweise alle Skripte ausgeführt, die zur Kategorie vuln gehören und auf Schwachstellen testen:
nmap --script vuln <ip> -p <ports>
Nmap testet also den Dienst HTTP auf verschiedene Schwachstellen. Für Sicherheitsrisiken in Webapplikationen gibt es hier einen eigenen Abschnitt. Daher gehen wir hier nicht weiter auf die Funde ein.
Für den Dienst SSH erkennt Nmap dagegen offensichtlich keine Schwachstellen. SSH oder auch Secure Shell schauen wir uns aber noch einmal kurz genauer an. Es ist nämlich ein attraktives Ziel, weil sich damit ein Client beim LUPFER anmelden kann und Befehle ausführen kann. Vielleicht gelingt es, die Authentifizierung zu umgehen. Dafür prüfst du zunächst, welche Authentifizerungsmethoden der Dienst auf dem LUPFER zulässt:
nmap --script ssh-auth-methods <ip> -p <port>
Das Skript ssh-auth-methods.nse ermittelt also die Authentifizierungsmethoden, die der Dienst SSH auf dem LUPFER zulässt.
Wie du siehst, ist es möglich, sich über ein Passwort beim LUPFER anzumelden. Damit besteht die Möglichkeit, dass dabei schwache Zugangsdaten verwendet werden. Um das zu prüfen, gibt es nun zwei Möglichkeiten:
- Ein Brute-Force-Angriff versucht systematisch alle möglichen Kombinationen von Benutzernamen und Passwörtern, um Zugriff auf ein Konto oder System zu erlangen.
- Ein Wörterbuch-Angriff nutzt eine vorab definierte Listen von häufig verwendeten Benutzernamen und Passwörtern, um Anmeldedaten zu erraten.
Wie du dir denken kannst, ist ein Wörterbuchangriff schneller als ein Brute-Force-Angriff.
Mit dem Skript ssh-brute.nse lässt sich so ein Wörterbuchangriff in Nmap ausführen.
Der Befehl dafür lautet:
nmap --script ssh-brute <ip> -p <port>
Das Skript entnimmt Benutzernamen aus der Liste users.lst und Passwörter aus der Liste pass.lst, die sich im Nmap-Installationsverzeichnis befinden.
In der folgenden Übung kannst es selbst einmal ausprobieren.
Dabei musst du aber etwas geduldig sein.
Es wird etwa 10 Minuten dauern.
Das hat also nicht geklappt. Eine Möglichkeit wäre nun, noch andere umfangreichere Passwortlisten zu nutzen, die im Internet verfügbar sind, oder einen Brute-Force-Angriff zu starten. Aber da das zeitintensiv ist, schließen wir die aktive Netzwerkanalyse erst einmal ab.
