Kapitel 10:
Password Hacking
Passwörter – meistens in Verbindung mit einem Benutzernamen – sind nach wie vor der häufigste Schutzmechanismus vor unberechtigtem Zugriff auf IT-Systeme und deren Ressourcen. Hat sich ein Angreifer die Login-Daten (engl. Credentials) eines legitimen Benutzers verschafft, kann er sich als dieser Benutzer ausgeben, indem er sich mit dessen Daten auf dem betreffenden System authentifiziert. Dies wird im Englischen als Impersonation bezeichnet, wir »spoofen« (engl. für vortäuschen) also quasi eine Identität. Schaffen wir es, die Credentials eines Administrator-Accounts zu erlangen, steht uns die Welt des Opfers offen.
Wenn Sie beim Begriff »Password Hacking« an Tools wie John the Ripper, Hydra oder Cain & Abel denken, liegen Sie zwar nicht falsch, aber das Password Hacking auf den simplen Einsatz einer Handvoll Tools zu beschränken, wird diesem Thema nicht umfassend gerecht. Es gibt diverse Ansätze, an die Credentials eines Benutzers zu gelangen. In diesem Kapitel werfen wir einen detaillierten Blick auf die diversen Möglichkeiten, Passwörter und Benutzerdaten zu stehlen. Hier sind die Themen dieses spannenden Kapitels:
Zugriffsschutz mit Passwörtern und anderen Methoden
Angriffsvektoren auf Passwörter
Password Guessing und Password Recovery
Windows-Authentifizierung angreifen
Linux-Authentifizierung angreifen
Wortlisten erstellen
Dictionary-Angriffe und Rainbow-Table-Angriffe
Brute-Force-Angriffe
Hash-Injection-Angriffe
Password Hacking mit L0phtcrack, John the Ripper und Cain & Abel
Online-Angriffe mit Hydra, Medusa und Ncrack
Schutzmaßnahmen gegen Password Hacking
Anhand der Länge der Themenliste können Sie bereits erkennen, dass das Thema Password Hacking viele Facetten hat. In diesem Kapitel werden Sie neben diversen Konzepten auch eine ganze Reihe von Tools kennenlernen, die Sie in verschiedenen Szenarien zum Einsatz bringen können. Letztlich benötigen die meisten Tools jedoch bestimmte Voraussetzungen, um ihre Fähigkeiten auszuspielen. Daher ist das Password Hacking nicht isoliert zu betrachten, sondern eingebettet in andere Hacking-Prozesse, die die Bedingungen für einen erfolgreichen Angriff auf Benutzer-Passwörter schaffen.
10.1 Zugriffsschutz mit Passwörtern und anderen Methoden
Die Feststellung der Identität kann durch verschiedene Methoden erfolgen, funktioniert aber immer nach einem oder mehreren der folgenden Kriterien:
Etwas, das man hat (z.B. Schlüssel, Badge, Ausweis etc.)
Etwas, das man weiß (Kennwort, Benutzerkennung, PIN)
Etwas, das man ist (Biometrische Erkennung der Fingerabdrücke, Iris etc.)
Gegenstände sind häufig sehr einfach zur Authentifizierung und Autorisierung einzusetzen. Haben Sie den Schlüssel zu einem Türschloss, sind Sie damit auch in der Lage, diese Tür zu öffnen – ohne dass es weiterer Prüfungen bedarf. Dadurch ist diese Methode der Zugangssicherheit für sich allein genommen nicht besonders sicher. Etwas, das man physisch besitzt, kann einem auch weggenommen werden.
Nicht selten sehen wir in Kriminalfilmen, wie der Angreifer den Mitarbeiter-Ausweis aus der Tasche des Opfers entwendet, um damit Zugang zum Firmengebäude und zu den Büroräumen zu erlangen. Das Stehlen eines Ausweises oder eines Schlüssels ist oft auch in der Realität nicht wirklich schwierig.
Kennwörter (schlicht ein anderes Wort für Passwörter) bzw. Login-Daten sind oft schon etwas schwieriger zu ermitteln, da es sich hier um ein Geheimnis handelt, das meistens besser geschützt werden kann als ein Ausweis oder ein Schlüssel. Dennoch gibt es viele Angriffsvektoren, die einen erfolgreichen Angriff wahrscheinlicher machen, als es wünschenswert ist. Da das Einrichten eines Passwort-Schutzes von allen Varianten am einfachsten ist, wird es auch am häufigsten implementiert.
Die grundsätzlich sicherste Authentifizierung erfolgt durch biometrische Erkennungsmerkmale. Hierzu gehören:
Fingerabdruck-Scan: Der Klassiker, mittlerweile Standard in vielen Umgebungen und einfach zu implementieren, sodass er auch z.B. bei Smartphones zum Einsatz kommt (engl. Fingerprint Scan)
Iris-Scan: Die sogenannte »Regenbogenhaut«, auch »Iris« genannt, ist bei jedem Auge individuell und eignet sich als einmaliges Identifizierungsmerkmal.
Retina-Scan: Ein »Netzhautscan« (auch: Retinal-Scan) untersucht die einzigartigen Muster der Blutgefäße (engl. Blood Vessels) der Netzhaut des menschlichen Auges.
Gesichtsscan: Aus der einzigartigen Kombination der Merkmale eines Gesichts kann ein Scanner eine Person eindeutig identifizieren. Diese Authentifizierungsmethode hält auch bei Smartphones Einzug. Apples Face ID konnte allerdings schon von Zwillingen ausgetrickst werden.
Keine der Varianten ist für sich perfekt. Daher werden oftmals Authentifizierungsmechanismen zu einer Zwei-Faktor-Authentifizierung (2FA) kombiniert. Beim Banking ist es z.B. nicht nur erforderlich, sich mit seinen Login-Daten anzumelden (etwas, das man weiß), sondern über Security-Apps auf dem Handy auch die Transaktionen zu bestätigen (etwas, das man hat). Mittlerweile nutzen sogar Systeme aus dem Alltag, insbesondere Smartphones, Fingerabdruckscanner oder Gesichtserkennung (etwas, das man ist) nicht nur zur Authentifizierung, sondern auch zur Bestätigung für Transaktionen wie App-Käufe oder eben das Online-Banking.
Die Zwei-Faktor-Authentifizierung basiert immer auf verschiedenen Faktoren, also z.B. Ausweis und PIN, Passwort und Fingerabdruck, Benutzer/Passwort und TAN etc. Müssen Sie z.B. zweimal hintereinander Ihren Ausweis vorzeigen oder wird eine Ressource durch zwei verschiedene Passwörter geschützt, bezeichnen wir dies nicht im engeren Sinne als Zwei-Faktor-Authentifizierung.
Werden mindestens zwei, ggf. aber auch mehr als zwei verschiedene Authentifizierungsmethoden genutzt, sprechen wir allgemein auch von Multifaktor-Authentifizierung (MFA). Auch wenn sich die Zwei-Faktor-Authentifizierung bzw. die Multi-Faktor-Authentifizierung immer mehr durchsetzt, gibt es noch immer genügend Systeme, die nur auf Passwörtern, in der Regel in Verbindung mit Benutzernamen, basieren. Hat der Angreifer in der Reconnaissance-Phase bereits eine Reihe von Benutzernamen ermittelt, kann er versuchen, gezielt deren Passwörter zu knacken (auch als »cracken« bezeichnet). Aber auch wenn er noch keine Benutzernamen hat, gibt es zahlreiche Ansätze für den Angriff auf Credentials, also Zugangsdaten.
10.2 Angriffsvektoren auf Passwörter
Wir können die Möglichkeiten für Angriffe auf Passwörter in verschiedene Typen unterscheiden:
10.2.1 Nicht elektronische Angriffe
Der Ansatz dabei ist kein auf Tools basierender Angriff, sondern auf der Leicht- bzw. Gutgläubigkeit und Naivität der Benutzer. Somit bewegen wir uns thematisch im Social Engineering. Damit sind vorwiegend nicht-technische Angriffe gemeint, die darauf abzielen, dass das Opfer dem Angreifer freiwillig seine Credentials preisgibt. Dies umfasst z.B. auch Telefonate, bei denen sich ein Angreifer als Mitarbeiter der IT-Abteilung ausgibt, um sich die Anmeldedaten eines Benutzers zwecks Wartung des Arbeitsplatz-Computers geben zu lassen.
Weitere Angriffsformen in dieser Kategorie sind das Shoulder Surfing, bei dem der Angreifer durch einen Blick über die Schulter des Opfers beobachtet, welche Daten der Benutzer bei der Anmeldung eingibt, sowie das Dumpster Diving. Hierbei durchsucht der Angreifer den Müll des Opfers auf der Suche nach persönlichen Daten.
10.2.2 Aktive Online-Angriffe
Angriffe in dieser Kategorie basieren auf der direkten Kommunikation mit dem Zielsystem (oder -benutzer). Hierunter fallen die folgenden Angriffstechniken:
Password Guessing (Versuch, das Passwort zu erraten)
Password Spraying (Ein bekanntes Passwort wird auf viele User angewendet, womit das vorzeitige Sperren des Accounts verhindert wird)
Dictionary Attack (Wörterbuch-Angriff)
Brute-Force-Attack (Durchprobieren aller Möglichkeiten)
Hash-Injection (Übermittlung des Passwort-Hashes, auch als Pass-the-Hash bwz. PtH bezeichnet)
Keylogger, Spyware und Trojaner
Phishing und dessen Weiterentwicklung Pharming
Während alle anderen der genannten Techniken darauf abzielen, das Passwort aktiv zu ermitteln, basiert das Phishing auf Social Engineering und verleitet das Opfer über einen Link dazu, seine Anmeldedaten z.B. auf einer gefakten Anmeldeseite einer Bank oder eines Portals frei Haus zu liefern. Beim Pharming wird der Browser über einen DNS-Poisoning-Angriff auf eine vom Angreifer kontrollierte Webseite mit Anmeldemaske geleitet.
10.2.3 Passive Online-Angriffe
Kann der Angreifer die Daten bei der Übertragung abfangen, ist es ihm unter Umständen ebenfalls möglich, Credentials zu erlangen. Hierzu kann er folgende Angriffsvektoren nutzen:
Sniffing: ganz allgemein das Abhören des Netzwerk-Traffics
Man-in-the-Middle: Die Daten gehen durch ein vom Angreifer kontrolliertes System hindurch und können hier mitgelesen werden.
Replay: Der Angreifer nutzt bestimmte mitgeschnittene Pakete mit Anmeldeinformationen und sendet diese erneut, um sich beim Opfer-System anzumelden.
Angriffe, die auf dem Mitschneiden des Netzwerk-Traffics basieren, sind insbesondere dann erfolgreich, wenn die Kommunikation unverschlüsselt erfolgt. Auf passive Online-Angriffe gehen wir in Kapitel 16 Network Sniffing mit Wireshark & Co. und Kapitel 17 Lauschangriffe & Man-in-the-Middle detailliert ein.
10.2.4 Offline-Angriffe
Passwörter sind auf fast allen Systemen irgendwo verschlüsselt bzw. als Hashwert in Dateien gespeichert. Ist es dem Angreifer möglich, die Datei mit den verschlüsselten Passwörtern auf den eigenen Computer zu kopieren, so ist ein Offline-Angriff möglich. Diese Situation ist für den Angreifer sehr komfortabel, da er beliebig oft und beliebig lange versuchen kann, die Passwörter zu cracken. Offline-Angriffe können mit folgenden Techniken durchgeführt werden:
Hier entstehen Überschneidungen mit den aktiven Online-Angriffen. Während dort ein Wörterbuch-Angriff oder ein Brute-Force-Angriff aufgrund der Begrenzung fehlerhafter Logins nur in Ausnahmefällen zum Einsatz kommen, können sie hier ihre ganze Stärke ausspielen. Rainbow-Tables sind spezielle Listen, die systematisch mittels eines bestimmten Algorithmus mithilfe von vorberechneten Hashwerten alle Möglichkeiten durchprobieren, und sind damit eine effektive Brute-Force-Technologie, sofern die Passwort-Hashwerte nicht mit einem Salt-Wert erstellt wurden (Abschnitt 10.5.3). Auf den DNA-Ansatz kommen wir am Ende dieses Kapitels in Abschnitt 10.8 zurück.
Genau genommen sind Passwörter, die als Hashwert gespeichert werden, nicht wirklich »verschlüsselt«. Eine Verschlüsselung beinhaltet auch immer die Möglichkeit der Entschlüsselung. Dies ist bei Hashwerten nicht gegeben, da es sich um Falltür-Funktionen handelt, die nur in eine Richtung funktionieren. Trotzdem erfüllen sie im Zusammenhang mit der sicheren Speicherung von Passwörtern den Zweck, die Passwörter nicht im Klartext zu speichern. Daher können wir etwas ungenau auch von »Verschlüsselung« sprechen. Sie sollten den technischen Unterschied aber im Hinterkopf behalten.
10.3 Password Guessing und Password Recovery
Die einfachste Variante aller Passwort-Angriffe ist das Raten eines Passworts (Password Guessing). Dazu gibt der Hacker ganz einfach das vermutete Passwort beim Login ein und hofft, ins Schwarze zu treffen. Warum seine Chancen in einigen Szenarien gar nicht mal schlecht stehen, erläutern wir gleich noch etwas näher.
Viele Hersteller liefern ihre Systeme mit vorkonfigurierten Accounts aus. Ändert der Anwender diese Credentials nicht ab, so hat ein Angreifer die Chance, mithilfe der Default-Passwörter Zugang zum System zu erhalten. Wie Sie an diese Kennungen gelangen, zeigen wir in diesem Abschnitt.
Eine weitere Variante, die wir in diesem Abschnitt vorstellen wollen, ist das Password Recovery. Diese Funktion ist in diversen Systemen implementiert und ermöglicht es, durch einen mehr oder weniger regulären Prozess das Passwort eines Administrator-Accounts wieder herzustellen.
10.3.1 Grundlagen des Password Guessings
Grundsätzlich gilt, dass die Chancen, Passwörter aktiv zu hacken, von der Qualität des Passworts abhängen. Da die meisten Passwörter von den Benutzern selbst festgelegt werden, ist die Wahrscheinlichkeit groß, dass der Benutzer versucht, sich das Leben möglichst einfach zu machen. Das bedeutet, dass er ein möglichst kurzes Passwort wählt, an das er sich gut erinnern kann. Er wird also häufig ein Passwort festlegen, das er herleiten kann. Dazu dienen oftmals Begriffe aus seinem privaten oder beruflichen Umfeld:
Im einfachsten Fall wählt der Benutzer einfach einen der obigen Begriffe aus, z.B. den Namen der Ehefrau. Das Passwort lautet dann z.B. schlicht: helene
.
An dieser Stelle kommen die Passwort-Richtlinien (engl. Password Policies) ins Spiel. Diese regeln die Mindestlänge und -güte des Passworts. Da die Passwort-Richtlinien in vielen Fällen eine Kombination aus Klein- und Großbuchstaben, Ziffern und/oder Sonderzeichen fordern, kommen dann oft einfache Permutationen heraus. Seine Ehefrau ist 1986 geboren, daher bieten sich z.B. folgende Varianten an:
Helene86!
Helene1986!
19Helene86$
1986Helene$
Listing 10.1: Passwort-Permutationen für Helene
Hat ein Benutzer viel mit einem bestimmten Produkt, einer Software oder etwas Ähnlichem zu tun, können auch derartige Dinge mit in das Passwort einfließen. Bei einem Linux-Fan z.B. linux4ever
oder Ähnliches.
Dies macht deutlich, wie wichtig es ist, in der Reconnaissance-Phase möglichst viele Details zum Umfeld und Leben der Zielperson herauszufinden. Je genauer die Vorlieben und das Umfeld der Person bekannt sind, desto einfacher wird es, wahrscheinliche Passwörter zu erraten.
Tatsächlich ist es Forschern in einem Versuch gelungen, anhand von Smartphone-Daten so viel über eine Person in Erfahrung zu bringen, dass der Rückschluss auf das bei einigen Social-Media-Plattformen verwendete Passwort möglich war. Hier wird eine weitere Schwachstelle offensichtlich: Da Benutzer häufig zu bequem sind, sich verschiedene Passwörter zu merken, wird dasselbe Passwort auf verschiedenen Plattformen verwendet – hat der Angreifer das Passwort erst einmal ermittelt, hat er damit Zugang zu diversen Systemen und Plattformen, auf dem das Opfer Accounts hat, da meistens auch derselbe Login-Name bzw. seine E-Mail-Adresse verwendet wird.
Oftmals identifizieren sich Mitarbeiter mit dem Unternehmen selbst oder Produkten, die es herstellt, und nutzen entsprechende Begriffe für die Wahl ihres Passworts. So ist es nicht unwahrscheinlich, dass ein Mitarbeiter von Nike als Passwort just-do-it oder Ähnliches wählt. In Abschnitt 10.6.3 werden wir Ihnen CeWL vorstellen, einen Word-List-Generator. Er durchsucht die Website eines Unternehmens nach geeigneten Wörtern, die zur Erstellung einer Passwortliste verwendet werden können.
10.3.2 Default-Passwörter
Viele Systeme und Dienste bringen Default-Passwörter mit – insbesondere Netzwerk-Komponenten wie Router, Switches oder Access Points –, selbst Kali Linux hat mit dem Benutzernamen root und dem Passwort toor bzw. seit Kali 2020.1 mit kali und kali einen Default-Login. In erstaunlich vielen Fällen ändern Administratoren das Default-Passwort nicht sofort nach der Inbetriebnahme, sodass für den Angreifer eine recht gute Chance besteht, damit richtig zu liegen.
Passwort-Listen im Internet
Im Internet gibt es zahlreiche Websites, die umfangreiche Listen mit Default-Passwörtern bereitstellen. Werfen Sie z.B. einmal einen Blick auf https://cirt.net/passwords.
Wie zu lesen, finden sich hier über 2000 Passwörter zu über 500 Herstellern. Haben Sie mittels Banner Grabbing oder Versionserkennung den Hersteller, die Software und/oder die Version des Zielsystems identifizieren können, geben Sie den Hersteller bzw. die Software in das Suchfeld ein und erhalten ggf. diverse Default-Logins, bestehend aus Username und Passwort.
Triviale Default-Credentials
Die Einträge sind nicht in jedem Fall perfekt. Eine Suche nach »postgresql« auf https://cirt.net/passwords zeigt z.B. einen Default-Benutzer postgresql, jedoch kein Passwort, wie Abbildung 10.2 zeigt. Damit lässt sich zunächst wenig anfangen.
An dieser Stelle bietet es sich durchaus an, einmal den User-Namen als Passwort zu testen. Dies ist in vielen Fällen aussichtsreich, da viele Hersteller sich nicht die Mühe machen, komplexe oder zumindest nicht ganz triviale Passwörter zu wählen. So findet sich z.B. auch bei Cisco traditionell häufig die Kombination cisco/cisco oder admin/cisco als Default-Login-Daten. In unserem PostgreSQL-Beispiel hat dies ebenso gepasst, wie Abbildung 10.2 verdeutlicht.
Geben Sie nicht gleich auf, wenn Sie auf der ersten Seite nicht fündig geworden sind. So ziemlich alle Default-User und -Passwörter tauchen irgendwo im Internet auf. Weitere Websites mit Default-Logins sind:
Default-Passwörter mit Metasploit
Auch hier kann uns das Metasploit-Framework wieder unterstützen. In der Sektion Auxiliary findet sich ein Modul namens postgres_login
, mit dem wir Default-Logins des PostgreSQL-Datenbanksystems testen können. In der msfconsole
laden Sie das Modul und legen für einen ersten Versuch nur den RHOSTS-Wert fest, um z.B. das Metasploitable-System zu kontaktieren. Führen Sie das Modul anschließend aus, testet es alle ihm bekannten Kombinationen aus Default-User und Default-Passwort. Abbildung 10.3 zeigt den Prozess.
Wie zu sehen, ist der Login mit postgres/postgres auf der Datenbank template1
erfolgreich. Geben Sie options
ein, sehen Sie die verfügbaren Optionen. Sie können durch Setzen der Optionen Username und Password dediziert ein (zusätzliches Login) angeben. In jedem Fall testet das Modul die Einträge in den Dateien, die für die Optionen User_File, Userpass_File sowie Pass_File angegeben sind. Per Default sind dies postgres_default_user.txt
, postgres_default_userpass.txt
sowie postgres_default_userpass.txt
im Verzeichnis /usr/share/metasploit-framework/data/wordlists/
, wie Sie sich selbst durch Eingabe von show options
überzeugen können. In diesem Verzeichnis finden sich auch weitere Passwort-Listen, z.B. für Oracle-Datenbanken oder auch Router-Default-Logins. Die Datei routers_userpass.txt
enthält folglich auch z.B. die Default-Logins cisco/cisco oder admin/admin. Diverse Module der Kategorie Auxiliary
bieten in der msfconsole
damit eine automatisierte Prüfung der jeweiligen Zugänge.
Beachten Sie, dass ein derartiger, automatisierter Scan in überwachten Netzwerken in der Regel einen Alarm auslöst. Sie sollten hier also nicht unbedacht vorgehen.
10.3.3 Password Recovery unter Windows
Es gibt diverse Methoden, um ein verloren geglaubtes Passwort eines Accounts auf Windows wiederherzustellen. Nachfolgend stellen wir Ihnen einige gängige Methoden vor.
Windows-Reparatur
Haben Sie sich schon einmal mit den Symbolen auf der Anmeldeseite von Windows 10 beschäftigt? Da ist ein Symbol, das Sie vermutlich bisher ignoriert haben.
Der Tooltipp, der beim Mouseover angezeigt wird, lautet »Erleichterte Bedienung«. Dahinter steckt ein Programm namens Utilman.exe. Es ist dafür gedacht, einige Hilfestellungen zu geben, die es Menschen mit eingeschränkten Möglichkeiten erlaubt, Windows leichter zu verwenden. Zumindest in gegenwärtigen Windows-10-Versionen ist es jedoch möglich, durch einen kleinen Trick dafür zu sorgen, dass beim Klick auf dieses Symbol etwas ganz anderes passiert.
Der Trick dabei ist, dass wir dieses Programm durch cmd.exe
ersetzen und damit bei Klick auf das Symbol (das ja vor der Anmeldung erscheint) eine Eingabeaufforderung erhalten. Dazu gehen Sie folgendermaßen vor:
Legen Sie zunächst ein bootfähiges Medium für die Windows-10-Installation ein (DVD oder USB-Stick) und stellen Sie über die Boot-Reihenfolge in BIOS oder UEFI sicher, dass von diesem Medium gebootet werden kann. Nachdem das System vom Installationsmedium gebootet hat, klicken Sie bei den Ländereinstellungen auf Weiter, um die Computerreparaturoptionen auszuwählen, wie in Abbildung 10.5 gezeigt.
Im Anschluss wählen Sie Problembehandlung und danach Eingabeaufforderung, die Sie damit auch erhalten. Sie haben nun Zugang zum System ohne Authentifizierung – Volltreffer! Aber wir sind noch nicht am Ziel. Wir befinden uns in einem Windows PE (eine Art Reparatursystem) auf einem virtuellen Laufwerk mit dem Buchstaben X. Geben Sie diskpart
und anschließend list volume
ein, um sich die Liste der Datenträger anzeigen zu lassen. Hier identifizieren Sie das Laufwerk, auf dem sich die Windows-Systemdateien befinden – in der Regel D. Ansonsten können Sie auch die anderen Laufwerke durchprobieren, die in Frage kommen.
Über exit
verlassen Sie das Programm diskpart
und können z.B. über die Eingabe d:
in das entsprechende Laufwerk wechseln. Nun navigieren Sie nach d:\Windows\System32
. Hier benennen Sie Utilman.exe
um und kopieren cmd.exe
als neue Utilman.exe
in dasselbe Verzeichnis. Voilà, der Wolf im Schafspelz wartet auf seinen Einsatz. Abbildung 10.6 zeigt die Schritte in der Kommandozeile.
Nun können Sie die Eingabeaufforderung verlassen und das System neu starten. Nach dem Neustart klicken Sie auf das Symbol für Erleichterte Bedienung und erhalten eine Eingabeaufforderung. Hier lassen Sie sich über den Befehl net user
die vorhandenen Benutzer anzeigen und können nun über den Befehl net user <User> *
das Passwort des angegebenen Benutzers zurücksetzen. Hier bietet es sich an, einen Benutzer zu wählen, der Admin-Rechte hat. Anschließend verlassen Sie die Eingabeaufforderung durch Eingabe von exit
.
Haben Sie ein leeres Passwort gesetzt (also zweimal Enter gedrückt), gelangen Sie ab sofort ohne Eingabe eines Passworts in die Windows-Oberfläche. Dies ist die – aus Hacker-Sicht – sicherste Variante. Anschließend sollten Sie schnellstmöglich wieder für Ordnung sorgen, also ggf. dem betreffenden Benutzer ein entsprechendes Passwort vergeben und die umbenannte Datei Utilman.exe.bak
wieder als Utilman.exe
an ihren angestammten Platz verlegen. Dies müssen Sie ggf. auch wieder über die Reparatur-Optionen tun, da der Administrator des Windows-Systems nicht über genügend Rechte verfügt, um diese Systemdateien im laufenden Betrieb zu manipulieren.
Das oben vorgestellte Prinzip können Sie bei älteren Windows-Versionen sowie bei Windows 10 und 11 anwenden. Es ist aber durchaus möglich, dass zukünftige Windows-Versionen diese Schwachstelle nicht mehr enthalten. In jedem Fall zeigt dies jedoch auf, wie die Systemeigenschaften für das Aushebeln der Sicherheit genutzt werden können. Es ist jedoch immer erforderlich, lokalen Zugriff auf das System zu haben. Remote funktioniert dieser Ansatz nicht.
Das Linux-Tool »chntpw«
Das Kommandozeilen-Programm mit dem »griffigen« Namen chntpw – das steht für »Change (Windows) NT Password« – dient zur Manipulation der Benutzerdatenbank auf Windows-Systemen. Diese heißt SAM (Security Account Manager) und liegt unter c:\Windows\System32\config
. Anstatt das Passwort des Administrators oder eines anderen Benutzers zu cracken, setzen Sie es einfach zurück – der Benutzer hat damit ein leeres Passwort (engl. blank Password).
Der Vorgang erfordert das Booten von DVD oder USB-Stick z.B. mit Kali Linux als Live-System. Dazu gibt es unter https://www.kali.org/get-kali/#kali-platforms eine Download-Option Live Boot. Mit dieser Version kann Kali auf einem Computer mit installiertem Betriebssystem gestartet werden und läuft ausschließlich im Arbeitsspeicher.
Auch andere Linux-Distributionen, wie Ubuntu, stellen chntpw bereit, jedoch ist das Tool auf Kali Linux bereits vorinstalliert. Von daher machen wir es uns leicht und starten das Windows-10-System mit eingelegtem Kali-Live-Image (also der Kali-Live-ISO-Datei im virtuellen optischen Laufwerk). Im Kali-Bootmenü wählen Sie einen der Live Modes. Nach dem Bootprozess erscheint die Ihnen bekannte Oberfläche von Kali Linux. Die Windows-Partition wird automatisch auf dem Desktop eingebunden, aber noch nicht gemountet. Dies können Sie über einen Rechtsklick und Auswahl der entsprechenden Option im Kontextmenü nachholen (siehe Abbildung 10.8).
Öffnen Sie ein Terminalfenster und wechseln Sie in das Verzeichnis /media/kali
, sofern Sie als kali arbeiten, sonst /media/<Username>
. Hier ist unter einem kryptischen Namen die Windows-Partition gemountet. Wechseln Sie in dieses Mount-Verzeichnis.
Nun können Sie nach Windows/System32/config
navigieren, wie in Abbildung 10.9 gezeigt. Suchen Sie dort nach einer Datei mit dem Namen SAM
. Beachten Sie hier die Schreibweise. Haben Sie diese identifizieren können, lassen Sie sich mit chntpw -l SAM
die verfügbaren Benutzer der SAM-Datenbank anzeigen.
Aus dieser Liste wählen Sie nun den Benutzer aus, dessen Passwort Sie zurücksetzen möchten. Im Beispiel von eric
geben Sie den Befehl chntpw -u eric SAM
ein und bekommen im Folgenden einige Informationen und Optionen für ihn angezeigt. Geben Sie am Prompt eine 1
ein und bestätigen Sie mit Enter. Damit wurde das Passwort des Benutzers eric
entfernt.
Schließen Sie im Anschluss chntpw
mit q
und Enter und speichern Sie mit y
die Änderungen. Das war es auch schon. Sie beenden Kali wie gewohnt und starten das System erneut ohne Kali-Medium. Nun wird Windows die Anmeldung als Benutzer eric
ohne Eingabe eines Passworts ermöglichen.
Unserer Erfahrung nach funktioniert diese Vorgehensweise bei diversen Windows-Versionen sehr gut, auch mit aktuell gepatchtem Windows 10 und 11. Wir haben allerdings vereinzelt auch Situationen gehabt, in denen der Password-Reset nicht funktioniert hat und kein vorhandener NT-Hash gefunden werden konnte. Es handelt sich bei chntpw
um ein experimentelles Hacking-Tool, das keine Garantie auf Erfolg geben kann.
Sie haben gesehen, wie einfach es geht, Benutzer-Passwörter zurückzusetzen. Der Angriffsvektor Bootmedium spielte dabei zweimal eine zentrale Rolle. Deaktivieren Sie auf Ihrem Produktivsystem das Booten eines externen Mediums im BIOS/UEFI und sichern Sie dieses mit einem starken Passwort, um derartige Angriffe zu verhindern.
10.3.4 Password Recovery für Linux
Auch für Linux existieren einfache Möglichkeiten, das Administrator-Passwort zu knacken, die sich von Distribution zu Distribution teilweise etwas unterscheiden. Dabei benötigen Sie noch nicht einmal ein Bootmedium. Stattdessen starten Sie den betreffenden Computer (bzw. rebooten ihn) und halten während der Startphase zur Sicherheit die Taste Shift gedrückt.
Es erscheint das Bootmenü des Bootloaders GRUB. Hier wählen Sie das Kernel-Image aus, das Sie starten möchten, und drücken die Taste E. Es öffnet sich der GRUB-Editor und zeigt die Bootparameter an. Hier suchen Sie nach dem Eintrag, der mit »linux« beginnt, und ergänzen am Ende der Zeile rw init=/bin/bash
. Abbildung 10.11 zeigt die betreffende Zeile bei einem Debian-System. Sie werden vermutlich mit einer englischen Tastaturbelegung arbeiten müssen.
Über Drücken von F10 oder Strg+X wird der Kernel gestartet. Eventuell müssen Sie nach dem Bootprozess Enter drücken, um den Prompt zu erhalten. Sie erhalten nun eine Kommandozeile mit Root-Rechten ohne Authentifizierung. Geben Sie passwd
ein, um das Passwort des Benutzers root nach Belieben zu setzen.
Bei Systemen, die sudo nutzen, sollten Sie ggf. mit passwd <User>
einen Benutzer auswählen, der über Administrator-Privilegien verfügt, da der Benutzer root
standardmäßig nicht für einen regulären Login-Vorgang vorgesehen ist. Welche User Sudo-Rechte haben, können Sie über den Befehl grep sudo /etc/group
ermitteln.
Anschließend führen Sie einen Kaltstart des Systems durch, da die regulären Systemsteuerungsbefehle, wie init
, halt
oder shutdown
, nicht ohne Weiteres verfügbar sind.
Nun können Sie das System ganz regulär starten, die im GRUB-Editor vorgenommenen Änderungen wurden nicht gespeichert, sodass die ursprünglichen Einträge wieder vorhanden sind.
Linux-Distributionen gehen unterschiedliche Wege. Der hier gezeigte Vorgang passt für Debian- und Ubuntu-Linux (und natürlich Kali Linux). In anderen Distributionen kann eine andere Vorgehensweise notwendig sein. Suchen Sie im Zweifel im Internet nach <Distribution> password recovery. An dieser Stelle können wir aus Platzgründen nicht jede Variante ausführlich beschreiben.
10.3.5 Password Recovery auf Cisco-Routern
Auch Netzwerkgeräte, wie Cisco-Router und -Switches, verfügen über Password-Recovery-Funktionen. Werfen wir einen Blick auf den Prozess zum Wiederherstellen des administrativen Zugangs zu einem Cisco-Router. In aller Regel werden Cisco-Netzwerk-Geräte über das Command Line Interface, kurz CLI, konfiguriert und verwaltet. Ein Standard-Tool zum Zugriff auf Cisco-Geräte ist PuTTY, ein Terminal-Client-Programm, das Sie ja bereits kennengelernt haben.
Für das Password Recovery von Cisco-Routern ist eine serielle Verbindung über den Console-Port (meist hellblau gekennzeichnet) über ein entsprechendes, oft ebenfalls hellblaues Rollover-Kabel erforderlich.
Cisco-Router speichern die textbasierte Konfiguration als sogenannte Startup-Config im NVRAM (non-volatile RAM) und kopieren diese während des Systemstarts in den Arbeitsspeicher als Running-Config. In der Konfiguration stehen auch die Passwörter für Benutzer bzw. den privilegierten Modus (Privileged EXEC Mode).
Starten Sie den Router und drücken Sie bei Verwendung von PuTTY die Tastenkombination Strg+Pause als Break-Signal, bis der Router seine normale Boot-Routine unterbricht und in den ROMMON-Modus wechselt. Dies ist ein Basismodus zu Reparaturzwecken. Nun geben Sie confreg 0x2142
ein. Dieser Wert des Konfigurationsregisters für den Bootvorgang weist den Router an, die Startup-Config zu ignorieren. Anschließend setzen Sie den Befehl reset
ab, damit der Router startet.
Da der Router während des Startvorgangs die gespeicherte Konfiguration ignoriert, startet er, als hätte er keine Konfiguration, also in der Werkseinstellung. Dies erkennen Sie daran, dass der System Configuration Dialog erscheint.
Beenden Sie diesen durch Eingabe von no
und warten Sie, bis die weitere Initialisierung des Systems abgeschlossen ist. Drücken Sie Enter, um den Prompt zu erhalten. Wechseln Sie in den privilegierten Modus durch Eingabe von enable
.
Dies ist der Punkt, an dem Sie gewonnen haben: Es erfolgt keine Passwortabfrage, Sie haben administrativen Zugriff auf den Router. Jetzt können Sie die Konfiguration entweder komplett neu schreiben bzw. aus einer Backup-Datei wiederherstellen (schlichtes Copy & Paste der Befehlszeilen) oder Sie stellen die aktuelle Konfiguration wieder her. Schauen wir uns diesen Prozess kurz an.
Kopieren Sie dazu mit copy startup-config running-config
die Startup-Config manuell in die Running-Config.
Wechseln Sie anschließend in den Global Configuration Mode, um z.B. mit enable secret <Passwort>
das Enable-Passwort neu festzulegen.
Alternativ können Sie mit dem Befehl username <User> privilege 15 secret <Passwort>
auch einen neuen Admin-User anlegen, nach dessen Anmeldung Sie direkt in den privilegierten Modus gelangen. Dies setzt allerdings weitere Konfigurationsparameter voraus.
Im nächsten Schritt setzen Sie mit config-register 0x2102
das Config-Register wieder auf den Standard-Wert zurück, damit die Startup-Config beim nächsten Neustart wieder gelesen wird.
Mit exit
verlassen Sie den Global Configuration Mode und gelangen wieder in den Privilege EXEC Mode.
Wichtig ist, dass die vorgenommenen Änderungen auch wieder gespeichert werden. Der Befehl copy run start
zeigt, dass Sie sich bei Cisco viel Schreibarbeit sparen können, da die Befehle nur so weit geschrieben werden müssen, bis sie eindeutig sind. Profis nutzen die noch kürzere Variante wr
für write memory
, was dasselbe Ergebnis erzeugt.
Abbildung 10.14 zeigt die Befehle im Zusammenhang.
Nach dem Neustart kennen Sie nun die relevanten Zugangsdaten, da Sie diese gerade selbst festgelegt haben. Gegebenenfalls müssen Sie alle Passwörter ändern, die für Sie relevant sind.
Schützen Sie sich vor diesem Vorgang, indem Sie mit dem Konfigurationsbefehl no service password-recovery
diesen Prozess unterbinden. Sie haben danach nur noch die Möglichkeit, die Netzwerkkomponente auf den Werkszustand zurückzusetzen. Die Konfiguration des Routers geht dabei verloren.
10.4 Die Windows-Authentifizierung
Werfen wir noch einmal einen genaueren Blick auf die Windows-Authentifizierung und die Vorgänge hinter den Kulissen. Damit wird auch deutlich, welche Angriffsvektoren wir für Windows-Logins nutzen können.
10.4.1 Die SAM-Datenbank
Windows speichert sowohl Benutzer als auch deren Passwörter in einer Datenbank unter c:\Windows\System32\config\SAM
. Diese Datenbank haben wir Ihnen in Abschnitt 10.3.3 im Rahmen von Windows-Password-Recovery bereits kurz vorgestellt. Der Security Account Manager (SAM) ist ein Windows-Dienst, der die Benutzerinformationen, wie Benutzername, Passwort und Gruppenzugehörigkeit, verwaltet.
Die SAM-Datenbank kann unter normalen Umständen zumindest unter Windows im laufenden Betrieb nicht ausgelesen oder kopiert werden. Einige Programme sind dazu trotzdem in der Lage. Wir stellen sie Ihnen etwas später noch vor.
10.4.2 LM und NTLM
In den ersten Windows-Versionen (vor Windows NT) wurde zur Speicherung der Passwörter eine Hashing-Funktion namens Lan Manager (LM) verwendet. Sie stammt aus den 1980er Jahren und ist sehr schwach. LM funktioniert folgendermaßen:
Das Passwort wird zunächst in Großbuchstaben (Uppercase) umgewandelt. Aus PassWord wird PASSWORD. Es werden nur 95 Zeichen aus dem ASCII-Code zugelassen.
Die Passwort-Länge ist auf 14 Zeichen beschränkt. Der LM-Hash wird in zwei Teile zu je 7 Zeichen aufgeteilt, die einzeln berechnet werden. Das reduziert zusätzlich den Aufwand für einen Angriff exponentiell.
Ist ein Passwort maximal sieben Zeichen lang, wird als zweite Hälfte des Hashes immer derselbe Wert verwendet: 0xAAD3B435B51404EE
. Damit ist es sehr einfach zu erkennen, wann ein Passwort entsprechend kurz ist.
Aufgrund der beschriebenen Arbeitsweise bzw. Designschwächen ist es heutzutage möglich, einen LM-Hash binnen weniger Sekunden zu brechen. Auch wenn LM aus Kompatibilitätsgründen weiterhin unterstützt wird, ist es seit Windows Vista standardmäßig deaktiviert. Stattdessen wird der Nachfolger NTLM eingesetzt, der mit Windows NT eingeführt wurde.
NTLM speichert die Passwörter mit einem Algorithmus, der etwas sicherer ist, und nutzt RC4-HMAC für eine entsprechende Verschlüsselung. In der SAM-Datenbank werden für den Eintrag eines Benutzers nach dem Namen und seiner User-ID zunächst der LM-Hash und anschließend der NTLM-Hash gespeichert. Ist LM deaktiviert, so ist der LM-Hash leer. Das Format der Einträge in der SAM-DB ist Folgendes:
Username:User-ID:LM-Hash:NTLM-Hash
Das schauen wir uns auch gleich noch in der Praxis an. Zunächst einmal wollen wir den Anmeldeprozess zusammenfassen.
Lokale Anmeldung
Der Benutzer meldet sich an, indem er im Login-Fenster seine Credentials eingibt, also seinen Benutzernamen und das Passwort.
Windows erstellt einen Hash mittels NTLM. Erfolgt die Authentifizierung über die lokale SAM-Datenbank, wird der Hashwert direkt mit dem hinterlegten Wert verglichen. Es ist also nicht notwendig, das Passwort zu irgendeinem Zeitpunkt zu entschlüsseln.
Anmeldung über Windows NT-Domain Controller
In NT-Domänen wurde von einem Computer, der Mitglied der Domäne ist, ein Login-Request an den Domain Controller (DC) gesendet.
Dieser antwortete mit einem Logon-Challenge, also einer zufälligen Zeichenkette, die der lokale Computer in verschlüsselter Form zusammen mit dem Hashwert des Passworts zurückschickte. Dieser Challenge-Response-Prozess erhöht grundsätzlich die Sicherheit bei der Übertragung eines gehashten Passworts.
Der DC vergleicht den Hashwert mit seinem eigenen, den er aus dem hinterlegten NTLM-Hash und der festgelegten Zeichenkette gebildet hat, und kann somit über den Erfolg der Anmeldung bestimmen.
Eine grundsätzliche Schwäche ist das Fehlen eines sogenannten »Salt-Werts« im Hash. Dadurch wird der Hash angreifbar. Welche Methoden wir dazu einsetzen können, lernen Sie etwas später im Detail kennen.
10.4.3 Kerberos
Mit Windows 2000 führte Microsoft im Rahmen von Active Directory Kerberos als Standard-Authentifizierungsprotokoll ein, das für Windows-Domänen genutzt wird. Der Name Kerberos leitet sich vom dreiköpfigen Höllenhund der griechischen Mythologie her. Die drei Köpfe setzen sich zusammen aus dem Client, dem Server, den der Client nutzen möchte, und dem Authentifizierungsserver.
Kerberos authentifiziert nicht nur einen Benutzer bzw. validiert dessen Kennwort, sondern gibt auch allen beteiligten Komponenten die Sicherheit, mit dem geplanten Kommunikationspartner zu sprechen, da sich jede Komponente gegenüber der anderen identifizieren muss. Das verhindert effektiv Man-in-the-Middle-Angriffe.
Auf dem Authentifizierungsserver – also einem der DCs – läuft eine Komponente namens Key Distribution Center (KDC). Sie besteht hauptsächlich aus einem Dienst namens Authentication Server (AS) und einem Ticket Granting Service (TGS).
Der Authentifizierungs- und Autorisierungsprozess
Kerberos basiert auf Tickets. Im Rahmen des Zugriffs auf Ressourcen werden verschiedene Tickets benötigt. Zuvor muss sich der Benutzer jedoch beim Kerberos-Server authentifizieren. Der Authentifizierungs- und Autorisierungsprozess beginnt, sobald der Client über einen »Authenticator-Request« (auch schlicht Authenticator genannt) eine Nachricht an den Authentication Server sendet. Während einige Informationen – insbesondere der Benutzername – unverschlüsselt übertragen werden, werden andere Daten in diesem Request mit dem Passwort des Benutzers (u_key) verschlüsselt. Dies wird in Abbildung 10.15 als Punkt 1 dargestellt.
Der Authentication Server prüft, ob er mit dem hinterlegten Passwort des in Klartext übermittelten Benutzers die Authenticator-Nachricht entschlüsseln kann, und authentifiziert den Benutzer somit. Dieser Prozess wird in Abbildung 10.15 durch den Pfeil über dem Authentication Server (Punkt 2) repräsentiert.
Als Antwort sendet der Authentication Server an den Client eine Nachricht, die als »Ticket Granting Ticket« (TGT) bezeichnet wird. Das TGT wird mit einem Schlüssel tgs_key verschlüsselt, den ausschließlich der Kerberos-Server kennt. Das TGT hinterlegt der Client in einem speziellen Bereich des Arbeitsspeichers, »Kerberos Tray« genannt. Es wird keine Information auf der Festplatte gespeichert. Dieser Schritt wird in Abbildung 10.15 mit der Nummer 3 gekennzeichnet.
Das TGT ist eine Erlaubnis für den Client, sich von der zweiten Kerberos-Server-Komponente, dem Ticket Granting Server, ein Ticket für den Zugriff auf die gewünschte Ressource ausstellen zu lassen. Dies ist dann auch der nächste logische Schritt. Dieser Ticket-Request wird mithilfe des TGT angefordert, das die Legitimation für diesen Request darstellt. Der Request enthält die konkrete Anfrage zur Nutzung z.B. eines bestimmten File-Servers, der ebenfalls Mitglied der Domäne ist. Dies wird in Abbildung 10.16 durch Punkt 4 dargestellt.
Der Ticket Granting Server stellt an dieser Stelle ein Ticket aus, das mit dem Passwort bzw. Schlüssel des File-Servers s_key verschlüsselt ist, und sendet dieses an den Client. Der Client speichert dieses Ticket ebenfalls im Kerberos Tray. Dies finden Sie in Abbildung 10.16 in Punkt 5 wieder.
Der Client kann sich nun mithilfe dieses Tickets beim File-Server authentisieren und die Ressource, z.B. Zugriff auf eine Freigabe, anfordern. Der File-Server prüft das Ticket, indem er dessen Inhalt mit seinem eigenen Schlüssel entschlüsselt.
Die entschlüsselten Informationen enthalten den Benutzernamen und dessen Gruppenzugehörigkeiten. Damit kann der File-Server prüfen, ob der Benutzer autorisiert ist, auf die angefragte Ressource zuzugreifen. Dieser Prozess ist in Abbildung 10.17 dargestellt.
Während die Authentifizierung also zentral über das KDC erfolgt, entscheiden die Server eigenständig über ihre Access Control Lists (ACLs), wer konkret in welcher Form auf ihre Ressourcen zugreifen darf.
Kerberos implementiert ein sogenanntes »Single Sign-on-Verfahren« (SSO). Damit ist es dem Client bzw. dem Benutzer möglich, sich einmal anzumelden und fortan auf Ressourcen der Domäne zuzugreifen, ohne sich erneut zu authentifizieren. Der Kerberos-Dienst authentifiziert Benutzer und Computer nur innerhalb seines sogenannten »Realms« (bedeutet übersetzt: Reich). Dies umfasst bei Active Directory in der Regel die AD-Domäne.
Temporäre Gültigkeit gegen Replay-Angriffe
Das TGT sorgt dafür, dass sich ein Client nicht für jede Ressourcen-Anfrage in der Domäne beim KDC authentisieren muss. Sowohl das TGT als auch das eigentliche Ticket haben eine Gültigkeit von nur wenigen Stunden. Zur Authentifizierung beim KDC selbst sendet der Client einen Timestamp-Wert, der vom KDC geprüft wird.
Standardmäßig dürfen die Zeitwerte nicht mehr als fünf Minuten auseinanderliegen, sonst scheitert die Authentifizierung. Diese Maßnahmen der temporären Gültigkeit verhindert Replay-Angriffe, bei denen der Angreifer schlicht die mitgeschnittenen (verschlüsselten) Informationen erneut sendet, um sich zu authentifizieren.
Schwachstellen in Kerberos
Mittlerweile existiert Kerberos in der Version 5. Gegenüber der Version 4 wurden diverse Schwachstellen beseitigt. Unter anderem war es in v4 möglich, unter Angabe eines Benutzernamens ein Initialticket vom KDC anzufordern, das mit dem Benutzerpasswort verschlüsselt war. Der Angreifer ist nun im Besitz eines verschlüsselten Tickets und kann einen Offline-Angriff (Brute-Force- oder Dictionary Attack) auf das Passwort starten.
Kerberos wird nicht nur in Active Directory eingesetzt. Mit MIT Kerberos (MIT = Massachusetts Institute of Technology) steht auch eine Unix/Linux-Variante zur Verfügung. Während der Kerberos-Authentifizierung wird ein Sitzungsschlüssel (engl. Session Key) erstellt, der auf dem Clientrechner im /tmp
-Verzeichnis abgelegt und erst nach Ablauf der Gültigkeit gelöscht wird. In Mehrbenutzer-Systemen wie Linux kann dieser Schlüssel auch von anderen Benutzern ausgelesen werden. Damit ist es für einen Angreifer möglich, fremde Tickets zu stehlen.
Analog zum Private Key der CA in einer PKI existiert bei Kerberos ein Master-Key, der auf dem Authentication-Server gespeichert ist. Wird dieser Key kompromittiert, kann der Angreifer sich ein sogenanntes »Golden Ticket« ausstellen, das eine beliebig lange Gültigkeitsdauer hat. Das Golden Ticket ist de facto nichts anderes als ein KDC. Damit werden auch alle vorhandenen, regulären Tickets im Kerberos-Realm hinfällig, da das Herzstück von Kerberos kompromittiert wurde.
Eines der leistungsfähigsten Tools im Zusammenhang mit dem Knacken von Passwörtern und Zugriffen in Active-Directory-Umgebungen ist das Programm mimikatz. Möchten Sie wissen, wie Sie mithilfe von mimikatz Windows-Credentials ermitteln und Angriffe auf Kerberos-Tickets (einschließlich der Erstellung eines Golden Tickets) ausführen können, so finden Sie unter www.hacking-akademie.de/buch/member ein Mimikatz-Tutorial, das wir aus Platzgründen nicht mehr im Buch unterbringen konnten.
Eine weitere Schwachstelle betrifft den Zeitstempel, der Replay-Angriffe verhindern soll. Durch Manipulation der Zeitsynchronisation via NTP kann ein Angreifer zum einen Denial-of-Service-Angriffe durchführen, wobei die Zeit-Differenz zwischen dem Domain Controller und den Mitgliedscomputern erhöht wird. Zum anderen kann der Hacker den Zeitstempel so manipulieren, dass die Zeit wieder übereinstimmt und damit alte, eigentlich ungültige Tickets wieder gültig werden können.
Insgesamt lässt sich jedoch festhalten, dass Kerberos eine gute Sicherheit gegen externe Angriffe bietet. Das Hauptproblem besteht, wenn der Angreifer bereits in der Domäne ist und beispielsweise über einen lokalen Admin-Account verfügt. In diesem Fall ist es möglich, Tickets aus dem Kerberos Tray auszulesen und die Authentifizierung zu manipulieren.
10.4.4 NTLM-Hashes auslesen mit FGdump
Ist ein Angreifer auf ein Windows-System gelangt und hat dort eine sogenannte »Root-Shell« (cmd.exe mit Administrator-Privilegien), so kann er auch im laufenden Betrieb die NTLM-Hashes aus der SAM-Datenbank auslesen, obwohl dies vom System nicht vorgesehen ist. Hierzu nutzt er ein Programm wie PWDump oder FGDump. Diese basieren darauf, eine DLL-Datei mit dem Hash-Dumping-Code in das LSASS-Subsystem zu injizieren. LSASS steht für Local Security Authority Subsystem und hat die notwendigen Rechte, auf die im Arbeitsspeicher befindlichen Inhalte der SAM-Datenbank zuzugreifen.
Die erste Version von PWDump entstand 1997 und wurde bis 2008 stetig verbessert. Als Weiterentwicklung von PWDump6 entstand FGDump im Jahr 2007. Daneben wurde mit PWDump7 die vorerst letzte Version veröffentlicht. Trotzdem funktionieren die Tools auch mit neuen Windows-Versionen inklusive Windows 10 und 11.
Wir beschränken uns hier auf FGDump. Die offizielle Webpräsenz von FGDump ist http://foofus.net/goons/fizzgig/fgdump/downloads.htm. Dort können Sie das Programm in der Version 2.1.0 (no source) als ausführbare Datei kostenfrei herunterladen.
Der Download von potenzieller Malware wie FGDump stellt sich in der Praxis unter Windows 10 oder Windows 11 gar nicht so einfach dar, da durch SmartScreen für Microsoft Edge und Windows-Defender-Echtzeitschutz einige effektive Schutzebenen implementiert wurden. Diese müssen Sie in den Windows-Einstellungen unter Update und Sicherheit|Windows-Sicherheit zunächst deaktivieren, um diesen Laborversuch durchzuführen.
In der Realität finden Angreifer hier durch Trojaner, Root-Kits, Reverse-Shells, Backdoors oder andere Methoden Mittel und Wege, die Software unbemerkt auf den Opfer-Rechner zu befördern. Einige dieser Wege stellen wir Ihnen im weiteren Verlauf des Buches noch detaillierter vor.
Nach dem Entpacken öffnen Sie eine Administrator-Eingabeaufforderung über Rechtsklick auf das Symbol der Eingabeaufforderung.
Navigieren Sie in den Ordner, in dem sich fgdump.exe
befindet, und starten Sie das Programm.
Geben Sie anschließend notepad 127.0.0.1.pwdump
ein, um sich die gesammelten Informationen aus der SAM-Datenbank in Notepad anzeigen zu lassen. Abbildung 10.20 zeigt die Ausgabe aus unserem Beispiel.
Sie sehen, dass keine LM-Hashes gesetzt sind, die NTLM-Hashes jedoch zum Teil vorhanden sind. Da es sich um ein Windows-10-System handelt, hat der Administrator auch kein NTLM-Passwort, da er per Default deaktiviert ist. Dafür ist mindestens einer der anderen Accounts mit Administrator-Privilegien ausgestattet. In unserem Beispiel ist der Benutzer eric
ein sehr wahrscheinlicher Kandidat, da die anderen Accounts Default-Einträge darstellen.
Sind wir damit nun schon am Ziel? Mit Nichten und Neffen! Sie haben derzeit lediglich den Passwort-Hash von lokalen Benutzern ermittelt. Jetzt gilt es, diesen Hash zu knacken. Bevor wir uns mit den einschlägigen Tools zum Angriff auf Passwort-Hashes beschäftigen, werden wir noch einen Blick auf die Linux-Authentifizierung werfen, um weitere Hashes einzusammeln, die wir knacken können.
10.5 Die Linux-Authentifizierung
Die Linux-Authentifizierung nutzt ein Konzept namens PAM. Das steht für Pluggable Authentication Modules und dient als Vermittlungsschicht zwischen dem Benutzer und einer Anwendung. Damit ist es möglich, dass eine beliebige Anwendung auf diesen zentralen Authentifizierungsmechanismus des Systems zugreift und dabei ausgewählte Funktionen, Module und Regeln zur Authentifizierung nutzt.
Durch die modulare Möglichkeit, neue Verfahren einzubinden, ist es nicht mehr erforderlich, dass eine Anwendung eine eigene Schnittstelle für spezielle neue Authentifizierungsmechanismen, wie z.B. LDAP oder Samba bereitstellt. Jedes Programm bzw. jeder Dienst, der PAM für die Authentifizierung nutzt, hat eine eigene Datei unter /etc/pam.d/
. In dieser Datei werden die Module zur Authentifizierung festgelegt sowie deren Modus. Zum Verständnis der nachfolgenden Ausführungen ist das Konzept von PAM nicht essenziell, aber es stellt eine wichtige und zentrale, oftmals wenig verstandene Komponente von Linux dar.
10.5.1 Speicherorte der Login-Daten
Die Linux-Authentifizierung nutzt eine Datei, die sich für das Speichern von Passwörtern geradezu aufdrängt: /etc/passwd
. Während es ursprünglich tatsächlich so war, sind die Passwort-Hashes seit langer Zeit ausgelagert und in die Datei /etc/shadow
gewandert. Die Datei /etc/passwd
enthält nur noch Informationen zu Benutzern, wie deren Login-Namen, User-ID (UID) und ID der Hauptgruppe (GID), Kommentarfeld, Home-Verzeichnis und die Login-Shell. Dort, wo einmal das Passwort stand, finden wir nur noch X
als Platzhalter. Abbildung 10.21 zeigt einen Ausschnitt der Datei auf unserem Debian-Linux-Server.
Aus bestimmten Gründen ist es notwendig, dass die Datei /etc/passwd
von jedermann gelesen werden kann. Daher war es notwendig, die sensiblen Informationen aus der Datei zu entfernen. Passwort-Informationen werden heute in der Datei /etc/shadow
gespeichert. Ihre Rechte sind restriktiver gesetzt.
Auf die Datei /etc/shadow
hat nur root Schreibrechte. Die Benutzer der Gruppe shadow, die standardmäßig leer ist, haben noch Leserechte und sonst niemand.
10.5.2 Passwort-Hashes unter Linux
Werfen wir nun einen Blick in die Datei /etc/shadow
. Sie enthält nicht nur das gehashte Passwort eines Benutzers, sondern auch Informationen zur Passwort-Verwaltung. Jedes Feld ist vom nächsten durch einen Doppelpunkt getrennt. Die Einträge sind folgendermaßen formatiert:
<Benutzer>:<Passwort-Hash>:<letzte Änderung>:<Änderung des Passworts frühestens(Tage)>: <Änderung des Passworts spätestens(Tage)>:<Hinweis Passwortänderung>:<Deaktiviert in>:<Deaktiviert seit>:<Freifeld>
Abbildung 10.23 zeigt einen Auszug der Datei. Wie auch in /etc/passwd
werden die einzelnen Felder durch Doppelpunkte voneinander getrennt. Nach dem Benutzernamen folgt der Passwort-Hash. Dieser beginnt mit der Angabe des verwendeten Hash-Algorithmus, zum Beispiel:
$1$ - MD5
$5$ - SHA-256
$6$ - SHA-512
$y$ - Yescrypt
In unserem Beispiel handelt es sich durchweg um SHA-512-Hashes. In Kali Linux wird mittlerweile der Algorithmus Yescrypt verwendet.
10.5.3 Der Salt – Passwort-Hashes »salzen«
Betrachten Sie in Abbildung 10.24 einmal den Hashwert des Benutzers alice und vergleichen Sie ihn mit dem des darunter liegenden Benutzers bob. Wie Sie feststellen können, sind diese nicht identisch, obwohl beide dasselbe Passwort nutzen. Dies liegt daran, dass ein zufälliger Wert in die Hashwert-Berechnung des Passworts eingeflossen ist, der »Salt« (deutsch: Salz). Abbildung 10.25 verdeutlicht den Prozess.
Er wird hinter der ID des Hash-Algorithmus angegeben und endet am nächsten Dollarzeichen ($
), ist hier also acht Zeichen lang. Die Länge des Salts ist grundsätzlich nicht festgelegt. Achtung: Bei Yescript kommt noch eine weitere Sektion mit Parametern für den Hashalgorithmus davor.
Der Einsatz eines Salts erhöht den Aufwand für Offline-Angriffe auf Passwort-Hashes enorm und stellt ein effektives Verteidigungsmittel gegen Rainbow-Tables dar. Dabei handelt es sich um spezielle, vorberechnete Passwort-Hash-Tabellen, die das Ermitteln von Passwörtern aus normalen Passwort-Hashes ohne Salt stark vereinfacht haben. Durch den Einsatz eines Salts müssen nicht nur die eigentlichen Klartext-Passwörter in der Rainbow-Table geprüft werden, sondern auch alle Möglichkeiten, die durch den Salt hinzukommen. Auch wenn der Salt bekannt ist, weil der Angreifer eine Kopie der Datei /etc/shadow
gezogen hat, erhöht sich der Umfang der Rainbow-Tables bei acht Salt-Zeichen erheblich.
Übrigens gibt es nicht nur Salt, sondern auch Pepper. Bei Letzterem wird ein festgelegter Wert vom Server in die Hashwert-Berechnung des Passworts eingerechnet. Dieser Wert wird im Unterschied zum Salt jedoch nicht in der Passwort-Datei, sondern an einem anderen, möglichst gut gesicherten Ort hinterlegt. Wird die Passwort-Datei kompromittiert, sind die Passwörter trotzdem noch immer sicher, da der Pepper-Wert entsprechend lang und zufällig gewählt ist und in keinem Wörterbuch enthalten ist. Damit sind Dictionary-Angriffe und auch Brute-Force-Angriffe kaum noch erfolgreich durchführbar.
In Abschnitt 10.6.1 gehen wir gleich noch einmal etwas genauer auf Rainbow-Tables ein.
10.5.4 Wie gelangen wir an die Passwort-Hashes?
Das ist eine berechtigte Frage! Hierfür gibt es verschiedene Möglichkeiten und Szenarien, die wir im Laufe dieses Buches nach und nach betrachten werden. Im Endeffekt benötigen wir Root-Rechte, um die Datei /etc/shadow
lesen zu können. Tatsächlich zäumen wir ein Stück weit das Pferd von hinten auf: Wir betrachten das Knacken von »gehashten« Passwörtern, sind aber noch gar nicht in das Opfer-System eingebrochen – oder doch? Das hängt vom Szenario ab. Betrachten wir einige gängige Wege, an die Passwort-Hashes zu gelangen:
Szenario 1: Sie verfügen bereits über einen Root-Account auf dem System
Damit haben Sie bereits vollen Zugriff auf das lokale Linux-System. Im Gegensatz zu Windows bedeutet der Root-Account, dass Sie wirklich unbeschränkten Zugang zum System haben. Ob Root formal Lese- oder Schreibrechte auf eine Datei oder ein Verzeichnis hat, ist unwichtig. Tatsache ist, dass er immer Zugriff hat. Root ist quasi Gott auf einem Linux-System.
Eine Variante stellen Linux-Systeme dar, die mit dem Sudo-Konzept arbeiten, da hier der Login mit dem Root-Account deaktiviert ist. Stattdessen wird vordefinierten Benutzern über sudo
temporär ein administrativer Zugriff auf das System und dessen Ressourcen gewährt. Mit sudo su –
oder sudo -i
kann dieser Benutzer sich allerdings dauerhaft eine Root-Shell sichern. Auch andere Linux-Distributionen stellen mittlerweile auf sudo
um. Unabhängig davon geht es letztlich immer darum, Zugriff auf eine Shell mit Administrator-Privilegien zu erlangen.
Die Frage ist nun, warum sollte Root noch mehr wollen? Immerhin hat er doch schon vollen Zugriff auf das lokale System ... Die Antwort ist einfach: Auch Root kennt nicht die Passwörter der anderen Benutzer des Systems. Vielleicht existiert z.B. ein Datenbank-Administrator eines anderen Systems, der auf dem lokalen System dasselbe Passwort nutzt wie auf dem Datenbank-Server. Es lohnt sich also in jedem Fall, die Passwörter der anderen Benutzer zu knacken. Vielleicht führen sie zu einem Zugang auf anderen Systemen im Opfer-Netzwerk, die der lokale Root-Account nicht hat.
Szenario 2: Sie gelangen über einen Exploit an eine Root-Shell
Gelingt es dem Angreifer, über eine Schwachstelle einer Anwendung oder des Betriebssystems remote eine Root-Shell zum Opfer-System zu öffnen, hat er zwar die uneingeschränkte Gewalt über das System, kennt aber weder von Root bzw. dem Administrator noch von sonstigen Benutzern die Passwörter. Für einen dauerhaften Zugang und als Sprungbrett zu anderen Systemen im Netzwerk des Opfers ist dies jedoch sehr wichtig. Die Art der Schwachstelle kann ein Buffer Overflow, eine SQL-Injection-Schwachstelle, Code Injection oder etwas anderes sein. Diverse Szenarien lernen Sie später noch in diesem Buch kennen.
Szenario 3: Privilegien-Eskalation
Sind Sie normaler Benutzer eines Systems, können Sie unter Umständen via Privilegien-Eskalation eine Rechte-Erhöhung erwirken. Dazu wird eine Schwachstelle eines Subsystems, einer Anwendung oder des Betriebssystems ausgenutzt, um den eigenen Status möglichst auf Administrator-Ebene zu erhöhen. Um Möglichkeiten der Privilegien-Eskalation geht es in Kapitel 11 Shells und Post-Exploitation.
Szenario 4: Zugang via Backdoor und Trojaner
Erinnern Sie sich an unsere erste Root-Shell, die wir über den vsftp-Dienst von Metasploitable erlangt haben? Zu diesem Zeitpunkt griffen wir ein wenig vor, da wir uns thematisch noch in der Reconnaissance-Phase befunden haben – jetzt sind wir mittendrin! Die ausgenutzte Schwachstelle war nichts anderes als eine Backdoor, also ein grundsätzlich nicht vorgesehener Zugang aus dem Netzwerk zum lokalen System. Das Gleiche kann ein Angreifer erreichen, indem er dem Opfer einen Trojaner unterjubelt, der unbemerkt einen Zugang für den Computer des Angreifers bereitstellt. Dies kann z.B. eine Bind- oder eine Reverse-Shell sein. Bei einer Bind-Shell wartet das Opfer auf einem bestimmten Port auf Verbindungsanforderungen. Bei einer Reverse-Shell baut das Opfer-System seinerseits eine Verbindung zu einem Server auf, der unter der Kontrolle des Angreifers steht. Mehr dazu ebenfalls in Kapitel 11 Shells und Post-Exploitation.
10.6 Passwort-Hashes angreifen
Wo stehen wir jetzt? Wir haben Zugriff auf die NTLM-Hashes eines Windows-Systems oder die Passwort-Hashes aus der Datei /etc/shadow
eines Linux-Systems. In ähnlicher Weise könnten wir uns Passwort-Hashes von anderen Systemen oder Authentifizierungsdiensten verschaffen. Nun können wir Passwort-Tools einsetzen, die verschiedene Techniken nutzen, um aus dem Hashwert das originale Passwort zu ermitteln. In diesem Abschnitt schauen wir uns wichtige Techniken und einige gängige Tools zum Knacken der Hashwerte an.
10.6.1 Angriffsvektoren auf Passwort-Hashes
Werfen wir zunächst einen Blick auf die wichtigsten Technologien für den Angriff auf Passwort-Hashes.
Brute-Force-Angriff
Es gibt eine Methode, mit der theoretisch jeder Hashwert im Rahmen eines Offline-Angriffs geknackt werden kann. Sie nennt sich Brute-Force-Angriff. Dabei wird einfach jede nur denkbare Kombination an Zeichen mit dem betreffenden Hash-Algorithmus verarbeitet und mit dem aus der Passwort-Datenbank extrahierten Hashwert verglichen.
So nachvollziehbar und trivial dieser Ansatz ist, so bedingt nützlich ist er in der Praxis. Zum einen verbraucht er sehr viele Ressourcen und zum anderen benötigt er mit jedem zusätzlichen Zeichen exponentiell mehr Zeit, um alle zusätzlichen Kombinationsmöglichkeiten durchzuprobieren. Der Wikipedia-Artikel zum Stichwort »Passwort« enthält eine Tabelle, die die Rechenzeit eines Brute-Force-Angriffs auf gehashte Passwörter darstellt. Dabei ist nicht nur die Länge des Passworts, sondern auch der Zeichenraum, also die möglichen verwendeten Zeichen, zu berücksichtigen. Aufgrund der permanenten Weiterentwicklung der Rechenleistung dienen die Angaben nur zur Orientierung.
Gerade in der unteren rechten Ecke wird deutlich, dass längere Passwörter mit einem ausreichenden Zeichenraum (Groß- und Kleinbuchstaben, Ziffern und ggf. Sonderzeichen) auch starke Rechner vor eine nahezu unlösbare Aufgabe stellen. Wir halten fest, dass Brute-Force-Angriffe insbesondere gegen schwache Passwörter erfolgreich eingesetzt werden können.
Dictionary-Angriffe
Dictionary- oder auch Wörterbuch-Angriffe basieren auf vorgefertigten Listen mit potenziellen Passwörtern. Diese Listen werden entweder mit den Tools mitgeliefert, stehen im Internet zur Verfügung oder können von Ihnen selbst bzw. entsprechenden Programmen erstellt werden.
Wie auch Brute-Force-Angriffe werden in bestimmten Szenarien die Einträge aus der Liste selbst genutzt, zum Beispiel um sie im Rahmen eines aktiven Online-Angriffs in einer Login-Eingabemaske einzufügen. Doch meistens sind dieser Methode enge Grenzen gesetzt, da die fehlerhaften Login-Versuche protokolliert und der Zugang nach wenigen Versuchen gesperrt wird.
Erfolgversprechender sind Dictionary-Angriffe in einem Offline-Szenario, in dem die Hashwerte vorliegen und das Angriffstool sich an diesen Passwort-Hashes austoben kann. Mit moderner Hard- und Software können auf diese Weise pro Sekunde Millionen von möglichen Passwörtern getestet werden. Wie effektiv diese Methode ist, hängt aber auch vom verwendeten Hash-Algorithmus ab, da jedes mögliche Passwort zunächst gehasht werden muss, um anschließend die Hashwerte miteinander zu vergleichen – das gilt natürlich genauso für Brute-Force-Angriffe. Wie bereits in Kapitel 5 Kryptografie und ihre Schwachstellen beschrieben, sind daher möglichst langsame und aufwendige Hash-Algorithmen (zum Beispiel PBKDF2 oder Bcrypt) ein effektiver Schutz gegen Brute-Force- und Dictionary-Angriffe.
Dictionary-Angriffe basieren darauf, dass die meisten Passwörter aus sinnvollen Wörtern zusammengesetzt werden, da diese sich leichter merken lassen. Dementsprechend ist die zugrunde liegende Passwortliste entscheidend. Die meisten Menschen nutzen Wörter in ihrer Sprache, die sie kombinieren bzw. durch weitere Zeichen ergänzen (Abschnitt 10.3.1). Der aktive Wortschatz einer Sprache liegt bei ca. 50.000 Wörtern. Diese müssen um zahlreiche Permutationen, also Zeichenumstellungen und Ergänzungen, erweitert werden, sodass durchaus einige Millionen oder sogar Milliarden Einträge entstehen können.
Es existieren sehr viele, umfangreiche Wortlisten im Internet bzw. werden im Rahmen bestimmter Projekte bereitgestellt. Das Openwall-Projekt zum Beispiel stellt unter www.openwall.com/wordlists gegen eine Gebühr von ca. 30 Dollar eine (eigentlich mehrere) umfassende Liste(n) mit insgesamt fast 2 GB Umfang bzw. 40 Millionen Einträgen bereit, die von allen gängigen Passwort-Cracking-Tools verwendet werden können. Kostenlose Listen finden sich zum Beispiel auf www.outpost9.com/files/WordLists.html oder auf https://github.com/danielmiessler/SecLists%20 oder in diversen Tauschbörsen. Letztere haben allerdings häufig eine schlechtere Qualität.
Natürlich werden Passwortlisten auch im Darknet gehandelt. In vielen Fällen stammen sie aus geknackten Kunden-Datenbanken großer Unternehmen mit vielen Millionen Kunden. Auf https://haveibeenpwned.com/Passwords können Sie feststellen, ob Ihr eigenes Passwort bereits in irgendwelchen bekannten Listen aufgetaucht ist.
Ein solches Passwort sollten Sie ggf. schnellstens austauschen. Die Website ermöglicht es zudem, geknackte E-Mail-Accounts zu prüfen und sich einen Überblick über die bekannten Opfer-Unternehmen von Datendiebstählen zu informieren. Der Begriff »pwn« bzw. »pwned« stammt aus der »Leetspeak«, dem Skriptkiddie-Jargon. Er bezeichnet die Übernahme bzw. das Kompromittieren von fremden Computern, Websites oder eben auch Passwörtern.
Sollten Sie überhaupt Ihr Passwort online auf einer fremden Seite eingeben? An dieser Stelle sei gesagt, dass das Passwort auf haveibeenpwned.com
natürlich nicht in Klartext übertragen wird. Stattdessen wird ein Hashwert gebildet und nach einem speziellen Algorithmus nur ein Teil davon übertragen, sodass die Anonymität gewahrt bleibt. Die Seite hat einen sehr guten Ruf und wird sogar von Regierungen zum Prüfen von Passwörtern genutzt. Trotzdem sollten Sie selbst entscheiden, ob Sie das Restrisiko, das immer besteht, eingehen wollen.
Alternativ zu vorgefertigten Passwort-Listen können Sie übrigens über Wortlisten-Generatoren eigene Listen erstellen. Darauf kommen wir in Abschnitt 10.6.3 zurück.
Rainbow-Tables
Als die Rainbow-Tables (zu Deutsch: Regenbogentabellen) von Philippe Oechslin 2003 vorgestellt wurden, stellten sie einen Meilenstein in der Kryptoanalyse dar. Sie ermöglichen es, mithilfe eines ausgeklügelten Algorithmus vorberechnete Hashwert-Listen zu erstellen, die im Vergleich zu Brute-Force-Angriffen äußerst effektiv eingesetzt werden können.
Rainbow-Tables verketten Passwörter und deren Hashes über sogenannte »Reduktionsfunktionen« derart, dass eine Kette entsteht, bei der der erste und der letzte Wert ausreicht, um alle Werte dazwischen herleiten zu können. Eine Reduktionsfunktion ist eine reversible (!) Funktion und erzeugt aus einem Hashwert ein mögliches, weiteres Klartext-Passwort. Dieses wird erneut gehasht et cetera. In der Rainbow-Table stehen nur das Ausgangspasswort und der letzte Reduktionswert der Kette (engl. Chain). Eine derartige Kette besteht zum Beispiel aus 2000 Elementen und wird durch nur 2 Elemente repräsentiert, aus denen sich die anderen Elemente berechnen lassen – dem ersten und dem letzten.
Wird nun ein Passwort-Hash untersucht, so wird der Hashwert so oft über die Hash-Reduktionssequenz geführt, bis das Ergebnis der Reduktion in einem der letzten Elemente einer Reduktionskette der Tabelle vorkommt. Jetzt kann ausgehend davon über die Hash-Reduktionssequenz dieses letzte Element verarbeitet werden, bis der exakte Hashwert – und damit das gesuchte Passwort – gefunden wurde.
Im Kern stellt eine Rainbow-Table eine (große) Liste mit vorberechneten Hashwerten dar, über die diverse weitere Hashwerte und damit mögliche Passwörter hergeleitet werden können. Damit stellt dieses Prinzip ein Time-Memory-Tradeoff dar. Es wird ein Mittelweg gesucht zwischen der Laufzeit eines Prozesses und dem benötigten Speicherverbrauch.
Während klassische Brute-Force-Angriffe zwar kaum Speicher benötigen, dafür aber teilweise extrem lange laufen, würde eine vorberechnete Liste mit allen möglichen Hashwerten einen extrem hohen Speicherbedarf erfordern. Mithilfe der Rainbow-Tables wird der Speicherbedarf reduziert, da einzelne Werte innerhalb einer Kette zur Laufzeit berechnet werden.
Im Internet gibt es vorgefertigte Rainbow-Tables für verschiedene Hashfunktionen, wie MD5, SHA-1, SHA-2 und andere. Einige Crack-Programme bringen auch eigene Rainbow-Tables mit. Last, but not least können Sie zum Beispiel mit Tools wie rtgen oder Winrtgen eigene Rainbow-Tables erstellen lassen.
Das Konzept von Rainbow-Tables stellt einen genialen Ansatz dar, hat aber auch einige Nachteile. Mit der Länge eines Passworts steigt auch die Größe einer Rainbow-Table. Je nach eingesetztem Hash-Algorithmus ist der Einsatz von Rainbow-Tables ab einer bestimmten Passwortlänge nicht mehr wirtschaftlich. Längere Passwörter (10+ Zeichen) bieten also einen guten Schutz gegen Rainbow-Tables. Eine weitere effektive Maßnahme gegen Rainbow-Tables ist der Einsatz eines »Salts« beim Hashing. Damit übersteigt die mögliche Länge auch kurzer Passwörter (einschließlich Salt) schnell die Grenze eines sinnvollen Einsatzes von Rainbow-Tables.
10.6.2 Pass the Hash (PTH)
Das Brechen eines kryptografisch gesicherten Passworts kann sehr aufwendig und langwierig sein und bei gut gewählten Passwörtern besteht eine gute Chance, dass sie nicht geknackt werden können. Einfacher ist der Ansatz, den Hashwert selbst im Rahmen der Authentifizierung zu übermitteln. Dies bezeichnen wir als Pass the Hash oder auch Hash Injection Attack. Dies funktioniert bei LM- und NTLM-basierten Authentifizierungen, da diese ohne Salt-Wert berechnet werden. Hierzu stellt Kali Linux die PTH-Suite bereit. Sie besteht aus einer Reihe von Tools, die mit pth-
beginnen.
Sie können das in einem kleinen Labortest einmal ausprobieren. Holen Sie sich beispielsweise von Ihrem Windows-7-System mithilfe von PWDump
oder FGDump
die Hashes aus der lokalen SAM-Datenbank. In unserem Beispiel existiert ein Benutzer asterix
, dessen Credentials wir nutzen möchten. Dazu kopieren Sie einfach den NTLM-Hashwert für den betreffenden Benutzer aus der Datei 127.0.0.1.pwdump
, die die ausgelesenen Hashwerte enthält. Da vermutlich kein LM-Hash zur Verfügung steht, müssen Sie einen Dummy-Wert einfügen. Der folgende LM-Hash entspricht einem leeren Passwort und eignet sich für diesen Zweck:
aad3b435b51404eeaad3b435b51404ee
Den Dummy-Wert müssen Sie zur Angabe der Hashwerte nach der folgenden Syntax vorn anfügen:
Diese Hashwerte speichern Sie in die Systemvariablen SMBHASH
Ihres Kali-Systems. Der Befehl dazu lautet in unserem Beispiel komplett folgendermaßen:
export SMBHASH= aad3b435b51404eeaad3b435b51404ee:CA38A6FBD4004EC79928ACD011FD2025
Bevor Sie weitermachen: Ein solcher Angriff funktioniert nur bei schwach konfigurierten Systemen. Stellen Sie für den Labortest sicher, dass bei Windows-Versionen ab Windows Vista die eingeführte User Account Control (UAC) deaktiviert ist. Sie können dies über die Eingabeaufforderung (als Administrator) mit dem Befehl C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
erledigen. Oder Sie stellen den Sicherheits-Regler in den Einstellungen der Benutzerkontensteuerung (Systemsteuerung|Benutzerkonten) ganz nach unten. Dies erfordert ggf. einen Neustart. Des Weiteren achten Sie darauf, dass die Firewall auf dem Windows-System nicht aktiv ist und dass der Netzwerktyp Ihrer LAN-Verbindung nicht auf Öffentlich steht, da in diesem Fall keine Verbindungsaufnahme von außen möglich ist.
Haben Sie die Hashes in der Variablen hinterlegt, nutzen wir das Tool pth-winexe, um mithilfe des Benutzernamens (% steht dafür, dass kein Passwort übergeben wird) und des Hashes in der System-Variablen eine Kommandozeile auf dem Opfer-System zu erhalten.
Nach der erfolgreichen Anmeldung finden wir uns auf dem Windows-System wieder – und zwar, ohne das Passwort ermittelt zu haben! Das können wir mithilfe von whoami
verifizieren. In den nächsten Schritten könnten Sie mithilfe von net user
neue Benutzer anlegen oder die Passwörter der vorhandenen Benutzer ändern.
10.6.3 Wortlisten erstellen
Dictionary-Angriffe stehen und fallen mit der Qualität der verwendeten Wortlisten. Wie bereits im vorhergehenden Abschnitt erwähnt, gibt es diverse vorgefertigte Wortlisten im Internet und Darknet zum Kauf oder zur freien Verfügung. Einige fertige Wortlisten finden sich bereits in Kali Linux unter folgendem Pfad: /usr/share/wordlists
.
In fast allen Tools können Sie darüber hinaus über einen Parameter angeben, welche Wortlisten Sie verwenden möchten. In diesem Abschnitt schauen wir uns an, wie Sie eigene Wortlisten erstellen und welche Tools Sie dafür verwenden können.
Crunch – der Brute-Force-Ansatz
Mit dem in Kali vorinstallierten Tool Crunch
erstellen Sie keine Wortliste im eigentlichen Sinne, sondern eine Brute-Force-Liste. Aus einem festgelegten Umfang von Zeichen, dem »Key Space«, erstellen Sie eine Liste mit allen möglichen Kombinationsmöglichkeiten, wobei Sie die minimale und die maximale Länge des Passworts angeben. Zum einen ist Crunch so ziemlich der einfachste Ansatz für eine Wortliste, zum anderen ist es wohl die letzte Wahl, wenn nichts anderes mehr geht. Das nachfolgende Beispiel in Abbildung 10.31 zeigt das Erstellen einer Brute-Force-Liste mit einem Passwort zwischen vier und sechs Zeichen, das aus den angegebenen Zeichen besteht und als crunchlist1.txt
gespeichert wird.
Wie zu erkennen, wird die Liste mit 238 MB und rund 36 Millionen Einträgen bereits mit einem unrealistisch kurzen Zeichensatz (Key Space) extrem lang. Mit head crunchlist1.txt
lassen Sie sich die ersten zehn Zeilen der angegebenen Datei anzeigen und cat crunchlist1.txt | wc -l
gibt die gesamte Datei aus und leitet die Ausgabe in den Befehl wc -l
(word count) weiter, der die Zeilen zählt – das Ergebnis stimmt also mit der Voraussage von Crunch überein.
Die Datei /usr/share/crunch/charset.lst
enthält eine Liste mit realistischen Zeichensätzen, Abbildung 10.32 zeigt einen Ausschnitt aus der Datei.
Wie zu erkennen, wird die Liste mit 238 MB und rund 36 Millionen Einträgen bereits mit einem unrealistisch kurzen Zeichensatz (Key Space) extrem lang. Mit head crunchlist1.txt
lassen Sie sich die ersten zehn Zeilen der angegebenen Datei anzeigen und cat crunchlist1.txt | wc -l
gibt die gesamte Datei aus und leitet die Ausgabe in den Befehl wc -l
(word count) weiter, der die Zeilen zählt – das Ergebnis stimmt also mit der Voraussage von Crunch überein.
Die Datei /usr/share/crunch/charset.lst
enthält eine Liste mit realistischen Zeichensätzen, Abbildung 10.32 zeigt einen Ausschnitt aus der Datei.
In Abbildung 10.33 erstellen wir eine Liste mit Passwörtern zwischen vier und acht Zeichen und nutzen den Zeichensatz mixalpha-numeric-all-sv
.
Das Ergebnis ist ... beeindruckend. Es wird eine 84 Petabyte große Datei erstellt, die wohl den Rahmen der meisten normalen Computersysteme sprengt. Dies zeigt dann doch die Grenzen dieses Ansatzes auf, da jedes zusätzliche Zeichen im Zeichensatz und jede Stelle mehr in der Passwortlänge die Liste exponentiell vergrößert. Die Ausführung des Befehls haben wir mit Strg+C abgebrochen.
Fairerweise muss man erwähnen, dass die Leistungsfähigkeit von Crunch weit darüber hinausgeht und das Tool auch angepasste Passwortlisten erstellen kann. Schauen Sie doch einmal in die Man-Page von Crunch und verschaffen Sie sich einen Überblick.
CeWL – der Custom Word List Generator
Wie in Abschnitt 10.3.1 bereits erwähnt, nutzen Mitarbeiter einer Organisation oder eines Unternehmens für die Wahl ihres Passworts gern Wörter aus ihrem beruflichen Umfeld. Damit ist es naheliegend, die Webpräsenz zugrunde zu legen und aus einschlägigen Begriffen eine Wortliste zu erstellen. Genau das leistet das bei Kali vorinstallierte, in der Programmiersprache Ruby geschriebene Tool CeWL (sprich: cool). Diesen Ansatz nennen wir Password Profiling. Er umfasst die Identifikation wahrscheinlicher Elemente im Passwort zur Bildung einer potenteren Passwortliste.
Der folgende Befehl erstellt eine Liste mit Wörtern aus der angegebenen Webpräsenz cbt-24.de
und speichert diese in der Datei cbt-24.cewl
. Dabei setzen wir die minimale Wortlänge auf sechs, Default ist drei. Die Tiefe der verfolgten Links setzen wir auf drei, per Default werden zwei Links verfolgt:
cewl https://cbt-24.de -m 6 -d 3 -w cbt-24.cewl
CeWL benötigt einen Moment, haben Sie Geduld. Im Ergebnis erhalten wir eine Wortliste mit fast 2000 Wörtern, wie Abbildung 10.34 zeigt.
Die ersten zehn Begriffe, die wir mit head cbt-24.cewl
anzeigen lassen, sind doch schon recht vielversprechend. Allerdings tendieren die meisten Benutzer dazu, ihre Passwörter zu »mutieren«. Dabei ergänzen sie Nummern oder Sonderzeichen vorn oder hinten, tauschen Groß- gegen Kleinbuchstaben oder Sonderzeichen aus et cetera.
Damit wir eine realistische Chance haben, dass diese Liste auch wirklich Passwörter findet, müssen wir also noch ein wenig »Mutanten-Gen« hinzufügen. Dazu eignet sich ein sehr bekanntes und beliebtes Tool namens John the Ripper.
Passwort-Mutation mit John the Ripper
John the Ripper ist ein sehr leistungsfähiges Tool für das Knacken von Passwörtern. Wir kommen in Abschnitt 10.6.5 darauf zurück. An dieser Stelle werfen wir einen Blick auf die Fähigkeit von John, Passwortlisten zu mutieren. Die Datei /etc/john/john.conf
enthält diverse Regeln für das Manipulieren der Passwörter. Diese Regeln sind alles andere als intuitiv zu verstehen, aber sie folgen einem logischen Konzept und sind sehr gut dokumentiert auf der Website von John the Ripper. Das Tool stammt übrigens aus dem Projekt OpenWall, das wir Ihnen schon etwas früher in diesem Abschnitt vorgestellt haben. Die Dokumentation der Regeln finden Sie unter www.openwall.com/john/doc/RULES.shtml.
In der oben genannten Datei findet sich eine Sektion [List.Rules:Wordlist]
. Hier finden Sie die Standard-Regeln, die auf Wortlisten angewendet werden können, die Sie über den Parameter --wordlist
referenzieren können. Abbildung 10.35 zeigt den Abschnitt.
Auch wenn die Regeln im Detail nicht leicht verständlich sind, wird durch die Kommentare deutlich, was sie bewirken. Schauen wir uns das in der Praxis an. Hierzu geben Sie folgenden Befehl ein, um die vorhandene Wortliste mit den Standard-Regeln zu mutieren:
john --wordlist=cbt-24.cewl --rules --stdout > cbt-24-mutated.cewl
Aus den ursprünglich rund 2000 Einträgen sind nun fast 100.000 Einträge geworden, wie wir uns mit wc -l
überzeugen können:
# wc -l cbt-24.cewl
1962
# wc -l cbt-24-mutated.cewl
96852
Listing 10.2: Die Liste wird durch Mutation wesentlich umfangreicher.
Gehen Sie die Datei und ihre Einträge durch, finden Sie diverse Mutationen der originalen Wörter.
Aufgabe
Fügen Sie übungshalber eine neue Regel unterhalb der Sektion [List.Rules:Wordlists]
hinzu mit folgendem Inhalt:
[List.Rules:TwoDigits]
# <Hier Beschreibung der Regel eintragen>
^[0-9]$[0-9]
Listing 10.3: Eine neue Regel wird erstellt.
Was wird diese Regel an den Wörtern der Liste verändern und wie lautet dementsprechend die Beschreibung der Regel? Recherchieren Sie in der Dokumentation von John. Rufen Sie diese Regel explizit auf mit dem Parameter --rules=TwoDigits
(statt --rules
ohne Parameter) und vergleichen Sie Ihre Ergebnisse.
10.6.4 L0phtcrack
Genug Vorgeplänkel! Blasen wir nun zum Angriff auf Passwort-Hashes. L0phtcrack ist ein sehr bekannter und leistungsfähiger, aber kostenpflichtiger Passwortcracker für Windows.
Die Präsentationsseite von L0phtcrack ist https://l0phtcrack.gitlab.io/. Derzeit (Stand Mitte 2023) ist die Zukunft von L0phtcrack noch recht unklar. Am 1. Juli 2021 ist das Eigentum der Software von Terahash wieder in den Besitz der L0pht Holdings übergegangen. Mit dieser Umstellung wurde der Verkauf der kostenpflichtigen Editionen eingestellt. Die aktuellen Besitzer planen nicht, Lizenzen oder Support-Abonnements für die L0phtCrack-Software zu verkaufen. Stattdessen wird die Software als Open Source angeboten und es werden Unterstützer gesucht. Wir sind gespannt, wie es hier weitergeht …
Die Download-Versionen werden unter https://gitlab.com/l0phtcrack/l0phtcrack/-/releases angeboten. Die zuletzt angebotene Windows-64-Bit-Version (7.2) kann unter https://l0phtcrack.gitlab.io/releases/7.2.0/lc7setup_v7.2.0_Win64.exe heruntergeladen werden. Die Bedienung ist durch eine übersichtliche grafische Oberfläche und einen Wizard vereinfacht. Der Wizard fragt diverse Parameter ab, die selbsterklärend sind.
Nutzen wir den Wizard und wählen dann Windows, können wir Passwort-Hashes aus der Datei importieren, die wir mit FGDump in Abschnitt 10.4.4 ermittelt haben. Testen wir dies einmal aus (siehe Abbildung 10.36).
Wählen Sie die passende Datei aus. Sie heißt vermutlich 127.0.0.1.pwdump
. Als Audit Type wählen Sie Common Password Audit aus, um einen Kompromiss aus Gründlichkeit und Geschwindigkeit zu finden. Abbildung 10.37 zeigt, dass diese Variante zunächst einen Dictionary-Angriff startet und anschließend via Brute Force maximal eine Stunde lang die Hashes angreift.
Nachdem der Angriff gestartet wurde, dauert es eine Weile (je nach Passwort-Qualität), bis LC7 das Passwort aufdeckt. In unserem Labor haben wir für einen Benutzer Obelix mit »sommer« ein einfaches Passwort gewählt, damit es leicht gefunden werden kann. Abbildung 10.38 zeigt das Ergebnis.
LC7 ist als Password-Auditing-Tool bestens dazu geeignet, sowohl lokale Systeme direkt auf sichere bzw. unsichere Passwörter zu prüfen, als auch Offline-Angriffe auf gesammelte Passwort-Hashes durchzuführen.
10.6.5 John the Ripper
Sie haben John the Ripper bereits bei der Erstellung einer mutierten Wortliste in Abschnitt 10.6.3 in Aktion erlebt, aber das war eigentlich nur eine Nebenaufgabe von John. Es handelt sich nämlich um eines der bekanntesten und leistungsfähigsten Tools, um Passwörter bzw. Hashes zu decodieren und damit zu knacken. John, oder JtR, unterliegt der GPL und ist damit eine freie Software. Es kann unter www.openwall.com/john für Linux oder macOS heruntergeladen werden. Für Windows steht vom selben Entwicklerteam die Software Hash Suite zur Verfügung. Da John auf Kali Linux bereits vorinstalliert ist, nutzen wir es zu Demonstrationszwecken dort.
Falls Sie darauf angewiesen sind, Passwörter via Brute Force zu ermitteln, sollten Sie dies auf möglichst leistungsfähiger Hardware machen – eine VM bietet sich in einem solchen Fall nicht unbedingt an. John benötigt für seine Arbeit insbesondere CPU-Leistung. Das gilt grundsätzlich für alle Brute-Force-Angriffe. In der Praxis werden hier oft Cluster oder die Cloud genutzt. Aber auch Wörterbuchangriffe brauchen viel Ressourcen.
Wollen wir doch mal sehen, welche Passwörter die Benutzer unseres Debian-Linux-Servers nutzen. Die Art und Weise, wie Sie die relevanten Einträge aus der Datei /etc/shadow
vom Linux-Server zu Kali Linux exportieren, ist an dieser Stelle erst einmal nicht wichtig – Sie können dies per PuTTY (SSH) bzw. SCP tun, einen Webserver einsetzen, über die gemeinsame Zwischenablage der virtuellen Maschinen die Daten übertragen oder einen anderen Weg Ihrer Wahl nutzen.
In unserem Szenario heißt die lokale Datei linux-server-hashes.txt
. Sie enthält vier Einträge, die wir eins zu eins aus der Datei /etc/shadow
vom Linux-Server extrahiert haben.
Uns interessieren nur diejenigen Einträge, die einen Passwort-Hash enthalten. Das betrifft die Benutzer root, alice, bob und trent. John ist ein schlaues Tool und erkennt viele Hash-Algorithmen automatisch. Der einfachste Weg, John zu starten, ist naheliegend: john <Passwort-Datei>
. John tut seine Arbeit still. Möchten Sie den aktuellen Status sehen, drücken Sie eine beliebige Taste – außer Q und Strg+C, da diese John beenden.
In Abbildung 10.40 sehen Sie, wie John von selbst den Hash-Algorithmus sha512crypt ermittelt. Sie erhalten auch gleich den Hinweis, dass Sie mit --format=<Hash-Typ>
den Hash-Algorithmus direkt angeben können. Mit john --list=formats
lassen Sie sich alle unterstützten Formate anzeigen. Obligatorisch wird diese Angabe, wenn Sie mehrere Formate in einer Hash-Datei zusammengefasst haben. Achtung: Sollte Yescript verwendet werden, muss format=crypt
angegeben werden.
In dieser Form aufgerufen, läuft John im Modus »single crack«. Das bedeutet, der Benutzername wird im ersten Schritt als Passwort zugrunde gelegt, mittels der bereits bekannten Regeln mutiert (engl. to mangle) und als Passwort getestet. Dies können Sie in Abbildung 10.41 in den ersten Zeilen der Status-Ausgabe sehr schön sehen. Anschließend nutzt John seine Default-Passwort-Liste /usr/share/john/password.lst
. Sie enthält jedoch nur etwas über 3000 Einträge und ist daher nicht sehr erfolgversprechend. Im dritten Schritt startet John eine Brute-Force-Attacke.
Einfache Passwörter wird John mit dieser Methode früher oder später finden. Doch lassen Sie uns dem Glück ein wenig auf die Sprünge helfen. Dazu erstellen wir eine eigene, sehr einfache Passwortliste, die die Passwörter unserer Benutzer enthält – allerdings falsch geschrieben.
Im nächsten Schritt können Sie nun mit --wordlist=
die Passwortliste einbinden und mit dem Parameter --rules
über die bereits bekannten Wordlist-Rules in /etc/john/john.conf
so mutieren, dass sie die richtigen Passwörter enthält. Dieses Mal geben wir auch brav das Format der Verschlüsselung an, wie in Abbildung 10.42 zu sehen.
An dieser Stelle können Sie auch erkennen, dass Alice und Bob tatsächlich dasselbe Passwort verwenden, obwohl der Hashwert aufgrund des Salts komplett unterschiedlich ist.
Sollten Sie zuvor bereits Passwörter mit John ermittelt haben, werden diese im Home-Verzeichnis des Benutzers (hier: root
) unter .john/john.pot
gespeichert. Die gefundenen Passwörter zeigt john --show linux-server-hashes.txt
. Im Labor sollten Sie vor jedem neuen Versuch diese Datei löschen, da John die bereits gefundenen Passwörter bei einem erneuten Durchlauf nicht anzeigt.
10.6.6 Hashcat
Neben John the Ripper ist Hashcat eines der beliebtesten, auf Unix basierenden Tools zum Knacken von Passwörtern bzw. Passwort-Hashes. Es ist bei Kali Linux vorinstalliert und die Man-Page bezeichnet es als das weltweit schnellste CPU-basierte Password Recovery Tool. Gleichzeitig wird darauf hingewiesen, dass die Variante oclHashcat, das auf GPU-Power basiert, noch schneller ist. Das ist allerdings veraltet, da mittlerweile beide Varianten in Hashcat aufgegangen sind (siehe: https://hashcat.net/wiki/doku.php?id=oclhashcat).
Die Verwendung von Hashcat ist ähnlich wie die von JtR. Ein typischer Einsatz von Hashcat auf der Kommandozeile sieht z.B. folgendermaßen aus:
hashcat -a 0 -m 1800 -o crackedhashes.txt pwhashes.txt wordlist.txt
Dabei legt die Option -a
den Angriffsmodus fest. 0
steht für Straight und bedeutet, dass eine Wordlist abgearbeitet wird. Mit -m
wird der Hash-Algorithmus angegeben, 1800
steht für SHA-512(Unix). Die Option -o
gibt das Output-File an, in dem die geknackten Hashwerte bzw. Passwörter gespeichert werden. Anschließend kommt die Datei mit den zu knackenden Hashwerten und last but not least die zu verwendende Wortliste. Auch Hashcat unterstützt sehr viele Hash-Algorithmen und Modi und ist durch seine Optimierung auf Geschwindigkeit ein sehr geeignetes Tool für Angriffe auf Passwort-Hashes.
10.6.7 Cain & Abel
Ein weiteres sehr bekanntes und beliebtes Freeware-Tool ist das auf Windows basierende Cain & Abel. Das Programm wurde letztmalig 2014 umfassend aktualisiert und ist somit schon etwas älter. Daher existiert auch kein offizieller Web-Auftritt, der einen entsprechenden Download anbietet. Sie müssen dafür die Google-Suche bemühen. Seien Sie dabei aber vorsichtig und halten Sie Abstand von zwielichtigen Quellen.
Cain & Abel als reines Cracking-Tool zu bezeichnen, wird ihm jedoch nicht gerecht, da es noch diverse andere Funktionen bietet. Es beherrscht unter anderem:
Darüber hinaus eignet sich Cain & Abel für Man-in-the-Middle-Angriffe zum Ausspähen von Passwörtern und Mitschneiden von VoIP-Sessions, SSL-Sessions und RDP-Verbindungen. Wenn Sie im Rahmen des Password Hackings ein weiteres relevantes Tool kennenlernen und austesten möchten, dann ist Cain & Abel ein guter Kandidat. Seien Sie aber auf jeden Fall vorsichtig bei der Wahl Ihrer Download-Quelle.
10.7 Online-Angriffe auf Passwörter
Während wir bei Offline-Angriffen die Cracking-Tools in aller Ruhe auf die Passwort-Hashes loslassen können, versuchen wir beim aktiven Online-Angriff, live direkten Zugang zu diversen, passwortgeschützten Netzwerk-Diensten zu bekommen. Dazu zählen zum Beispiel Web-Anwendungen, SSH, FTP, RDP, MySQL oder PostgreSQL etc.
Zur Ermittlung der Zugangsdaten müssen wir Anmeldeversuche unternehmen. Um diese optimiert und automatisiert durchführen zu können, unterstützen uns diverse Tools.
10.7.1 Grundlegende Problematik
Online-Angriffe auf Passwörter können grundsätzlich über dieselben Methoden durchgeführt werden, wie Sie es bisher kennengelernt haben, also Brute-Force- oder Dictionary-Angriffe. Und nicht zu vergessen das Password Guessing oder in einigen Fällen auch die Pass-the-Hash-Technik. Allerdings sieht es in der Praxis so aus, dass oftmals nur eine geringe Anzahl an fehlerhaften Anmeldungen geduldet wird, bevor der betreffende Dienst bzw. das Benutzerkonto deaktiviert wird.
Dadurch sind aktive Online-Angriffe heutzutage in vielen Fällen nicht mehr erfolgreich durchführbar. Die Voraussetzung für einen erfolgversprechenden Angriff ist also, dass der angegriffene Dienst keine Begrenzung der Anmeldeversuche hat. Und selbst dann dürften häufig Überwachungssysteme und Firewalls aufgrund der zahlreichen Verbindungsversuche Alarm schlagen.
Es gibt also nur noch relativ wenige Praxis-Szenarien, in denen derartige umfassende Angriffe erfolgreich sein werden. Dieser Ansatz wird ggf. dann genutzt, wenn eine User-Passwortliste eines Dienstes erbeutet wurde. Da viele User für unterschiedliche Dienste das gleiche Passwort benutzen, werden damit potenziell auch andere Dienste angreifbar.
Grundsätzlich haben diese Angriffe im Rahmen eines Penetrationstests als Password-Auditing ihre Berechtigung, da somit auch schwache oder gar Default-Passwörter aufgedeckt werden können und den Benutzern und Admins die Gelegenheit gegeben wird, diese zu ändern.
Im Folgenden werden wir Ihnen drei Tools vorstellen, die Sie für Online-Angriffe verwenden können. Sie sind alle schon auf Ihrem Kali Linux vorinstalliert und unterscheiden sich lediglich etwas in der Syntax, bei der Unterstützung der Dienste und in der Geschwindigkeit. Es ist von Vorteil, wenn Sie sich mit Medusa, Hydra und Ncrack einmal beschäftigt haben. Je nach Szenario ist mal das eine, mal das andere Tool erfolgreicher.
10.7.2 Medusa
Medusa ist ein Tool, das Online-Dictionary- bzw. Brute-Force-Angriffe durchführt und durch parallele Verbindungen auf hohe Geschwindigkeit ausgelegt ist. Medusa unterstützt in der aktuellen Version 2.2 schon sehr viele Dienste, ist aber modular aufgebaut, sodass weitere Module hinzugefügt werden können. Eine Übersicht der verfügbaren Module können Sie sich mit dem Befehl medusa -d
anzeigen lassen. Sie sehen in Abbildung 10.43, dass unter anderem SMTP unterstützt wird. Das könnte interessant werden! Versuchen wir in einem kurzen Praxistest, einen gültigen E-Mail-Account inklusive Passwort zu identifizieren.
Mehr Informationen zum SMTP-Modul erhalten wir mit medusa -M smtp -q
. Für die Identifizierung eines E-Mail-Accounts benötigen wir nun zwei Listen, mit denen wir einen Dictionary-Angriff einleiten können. Eine Liste mit Benutzernamen (bzw. E-Mail-Adressen) und eine mit Passwörtern. Diese erstellen wir selbst für unseren Labortest mit jeweils vier Einträgen. Ein gültiger Benutzername und ein passendes Passwort müssen unter den Einträgen versteckt sein, damit der Angriff erfolgreich ist.
Wählen Sie für die Liste der Benutzernamen nur eigene E-Mail-Accounts. Selbst wenn Sie Fantasie-Adressen verwenden, wissen Sie nicht, ob diese schon in Verwendung sind. Sie dürfen gemäß dem Codex für Ethical Hacker auf keinen Fall fremde Accounts ohne Genehmigung angreifen!
Haben Sie die Listen erstellt, könnte das beispielsweise sinngemäß aussehen wie in Abbildung 10.44.
Jetzt kann es losgehen. Hierzu nutzen Sie Medusa folgendermaßen:
medusa -h smtp.gmail.com -U user.lst -P password.lst -s -M smtp
Nachdem Sie den Zielserver und die beiden Listen angegeben haben, aktivieren Sie mit -s
die SSL-Verschlüsselung und geben am Ende das Modul an, das Medusa verwenden soll. Im Anschluss testet Medusa alle Kombinationen aus den Wortlisten durch und zeigt uns den Status im Terminal. Und siehe da, wir haben die passende Kombination gefunden, wie uns Abbildung 10.45 zeigt.
Wie bei allen Online-Angriffen dürfen Sie es auch hier nicht mit der Länge der Liste übertreiben. Viele Anmeldeversuche innerhalb kurzer Zeit sind nicht nur auffällig, sondern Sie laufen auch Gefahr, dass Ihr E-Mail-Zugang aus Sicherheitsgründen gesperrt wird. Daher ist es wichtig, via Profiling aussichtsreiche Listen zu erstellen, wie in Abschnitt 10.6.3 beschrieben.
10.7.3 Hydra
Das Tool Hydra stammt von einer Gemeinschaft namens »The Hackers’s Choice« und wird daher oft auch THC Hydra genannt. Hydra unterstützt eine große Auswahl an Diensten und damit Möglichkeiten, Zugänge zu identifizieren. Diese können Sie sich inklusive Informationen zur Syntax durch Eingabe von hydra
anzeigen lassen. Abbildung 10.46 zeigt die umfangreiche Unterstützung der Dienste.
Die Funktionsweise ist weitgehend selbsterklärend und ähnlich zu Medusa. Hydra bietet allerdings zusätzlich noch zwei Hilfen in der Handhabung.
Sie können mit dem Befehl hydra-wizard
einen Dialog aufrufen, der die einzelnen Parameter abfragt und Ihnen am Ende die Syntax des kompletten Befehls anzeigt, den Sie dann auch gleich ausführen können. Dies können Sie für den Anfang nutzen, um sich mit der Syntax und den Parametern vertraut zu machen. Später geht die Syntax in Fleisch und Blut über. Als weitere Möglichkeit können Sie die grafische Version von Hydra nutzen, die Sie mit xhydra
starten.
Testen Sie beides und entscheiden Sie selbst, welche Variante Sie nutzen möchten. Es lohnt sich tatsächlich ein intensiver Blick in xhydra
, um sich eine schnelle Übersicht über alle Funktionen von Hydra zu verschaffen.
10.7.4 Ncrack
Das Programm Ncrack.exe stammt aus der Schmiede der Nmap-Entwickler und ist unter https://nmap.org/ncrack für Linux, Windows und macOS zum Download erhältlich. Bei Kali Linux ist es (natürlich) schon vorinstalliert. Obwohl es als eigenständiges Tool bereitgestellt wird, ist es Teil des Nmap-Projekts. Das hat den großen Vorteil, dass es ein ähnliches Look & Feel bzw. ähnliche Optionen mit sich bringt wie Nmap. Zudem können mit -oN
oder -oX
gespeicherte Nmap-Scans als Eingangsparameter übergeben werden. In diesem Fall kann Ncrack anhand der Scan-Ergebnisse mit aktiven Diensten auf den Zielsystemen automatisch in Verbindung treten und über einen Dictionary-Angriff versuchen, die Zugangsdaten zu ermitteln.
Die nachfolgenden Beispiele entstammen der Windows-10-Plattform. Unter Kali Linux funktioniert es jedoch analog. Das Szenario: Wir haben über verschiedene Reconnaissance-Methoden einige Benutzer des Linux-Servers identifiziert und via Password-Profiling eine geeignete Passwortliste erstellt. Damit wollen wir den SSH-Serverdienst des Linux-Servers als Angriffsziel unter Beschuss nehmen. Mit -u user1,user2,user3,...
geben Sie einzelne Benutzer an. Die Option -P
erfordert die Angabe der Passwortliste. Das Ziel geben wir mit Portnummer an und -v
sorgt für eine ausführlichere Ausgabe. Abbildung 10.48 zeigt das Ergebnis.
Sie können mit -U <Userliste>
eine eigene Benutzerliste angeben, anstatt die Benutzer einzeln mit -u
anzugeben. Standardmäßig nutzt Ncrack die Default-Listen im Installationsverzeichnis im Unterverzeichnis lists
(siehe Abbildung 10.49). Diese befinden sich auf einem Kali-System unter /usr/share/ncrack
.
Listen mit Benutzern haben die Endung .usr
und Passwortlisten enden auf .pwd
. Brav haben wir unsere eigene Liste mypass.pwd
ebenfalls hier abgelegt.
Haben Sie einen Nmap-Scan – optimalerweise mit -sV
zur Versionserkennung – als XML-Datei abgespeichert, können Sie diesen mit -iX
als Angabe der Zielsysteme und deren Ports und Services einbinden. In Abbildung 10.50 übernehmen wir einen Nmap-Scan des Metasploitable-Systems und arbeiten ansonsten mit Default-Werten für Benutzer und Passwörter. Eine Reihe von Services kann Ncrack nicht bedienen und ignoriert diese dementsprechend.
Immerhin gelingt es, für den FTP-Dienst auf Port 21 das Passwort des Benutzers anonymous zu identifizieren. Das ist allerdings von geringem praktischen Nutzen, da anonymous klassischerweise mit minimalen Rechten auf dem FTP-Server ausgestattet ist. In einem realistischen Szenario würden wir mit angepassten Benutzer- und Passwortlisten arbeiten, um unsere Trefferrate zu erhöhen.
10.8 Distributed Network Attack (DNA)
Bisher haben wir Angriffe und Tools betrachtet, die von einem einzelnen System aus durchgeführt wurden. Vor einigen Jahren ist jedoch ein neuer Ansatz entstanden, bei dem Hunderte oder sogar Tausende Systeme für das Knacken einer durch Passwort geschützten Datei oder eines Passwort-Hashes ihre Ressourcen beisteuern können. Dies wird als Distributed Network Attack, oder kurz: DNA bezeichnet.
10.8.1 Funktionsweise
Ein zentraler DNA-Manager koordiniert den Angriff und weist den DNA-Clients auf den in den Prozess integrierten Endsystemen einen kleinen Teil der Aufgabe zum Knacken eines Passworts zu. Der DNA-Client wird auf dem Endgerät installiert und kann vom DNA-Manager gesteuert werden. Dies kann durchaus in Analogie zu Botnetzen gesehen werden. Dementsprechend sind auch Szenarien denkbar, in denen ein Bot eine solche Aufgabe übernimmt.
Regulär werden solche Systeme allerdings eher für Unternehmen angeboten, die sich auf Datenwiederherstellung und Password Recovery spezialisiert haben, sowie Polizeibehörden oder andere Strafverfolgungsbehörden. Der Vorteil ist, dass die DNA-Clients nur die Ressourcen nutzen, die ansonsten ungenutzt blieben, und die Netzwerk-Kommunikation auf ein Minimum beschränkt wird. Damit können diese Clients theoretisch auf nahezu allen Bürorechnern einer Organisation installiert werden, ohne dass sie Ressourcen in Anspruch nehmen würden, die für das produktive Geschäft benötigt werden.
Dazu kommt, dass derartige Systeme oft auch auf die GPU der Grafikkarte zugreifen. Damit wirkt eine starke Grafikkarte als Leistungsbooster. Durch die zahlreichen Systeme, die ihre Ressourcen bereitstellen, können auch komplexe Passwörter geknackt werden. In der Praxis werden, ähnlich wie beim Krypto-Mining, gern auch GPU-Cluster gebildet, um die Rechenpower zu erhöhen. Eine andere Variante ist die Verwendung von Cloud-Ressourcen, die mittlerweile günstig und sehr flexibel anzumieten sind. Durch Infrastructure-as-a-Service-Angebote (IaaS) kann eine große Rechenleistung erzeugt werden. Mehr dazu in Kapitel 31 Angriffe auf die Cloud.
10.8.2 ElcomSoft Distributed Password Recovery
Eines der erfolgreichsten kommerziellen Produkte, die nach dem DNA-Konzept arbeiten, ist ElcomSoft Distributed Password Recovery. ElcomSoft bietet diverse Tools und Produkte zum Thema Password Recovery an. Je nach Einsatz ist der Erwerb allerdings auch mit entsprechenden Kosten verbunden. Unter www.elcomsoft.de/edpr.html können Sie sich informieren.
Wir haben diese Webpräsenz als Beispiel ausgewählt, da es hier umfassende Informationen über das Produkt in deutscher Sprache gibt und sogar eine Online-Dokumentation, die eine detaillierte Vorstellung von der Funktionalität des Tools vermittelt. Wir gehen an dieser Stelle aus Platzgründen nicht weiter darauf ein.
10.9 Schutzmaßnahmen gegen Password Hacking
Wie Sie in diesem Kapitel gesehen haben, ist der erfolgreiche Angriff auf Passwörter oft an bestimmte Bedingungen geknüpft. Schwache Passwörter sind der Hauptangriffspunkt, den sich Angreifer zunutze machen können. Schauen wir konkret, wie wir uns gegen die Angriffe aus diesem Kapitel schützen können:
Ändern Sie als Erstes nach der Inbetriebnahme einer Komponente ggf. die Default-Passwörter.
Erstellen Sie eine Passwort-Richtlinie, die mindestens zwölf Zeichen umfasst (Empfehlung des BSI), Groß- und Kleinbuchstaben sowie Sonderzeichen erfordert ...
... und setzen Sie diese durch! Entweder über Gruppenrichtlinien oder andere, ggf. organisatorische Mittel (Unterschrift des Mitarbeiters).
Nutzen Sie kein Passwort mit Bestandteilen, die in Wörterbüchern vorkommen können.
Das Passwort sollte nicht aus offensichtlichen Bestandteilen, wie Namen oder Geburtsdaten von Ehefrau, Kind oder anderen Verwandten bestehen – auch das Haustier hat im Passwort nichts zu suchen.
Teilen Sie niemals Ihre Passwörter mit anderen Benutzern und geben Sie dieses – auch auf Anfrage Ihres Vorgesetzten – niemals heraus.
Im Gegensatz zu früher wird heute nicht mehr empfohlen, das Passwort regelmäßig zu ändern! Stattdessen geht Qualität vor Quantität. Ein gut gewähltes Passwort kann durchaus länger Bestand haben. Sobald befürchtet werden muss, dass es kompromittiert wurde, ist natürlich eine sofortige Änderung erforderlich.
Nutzen Sie nicht ein »Master-Passwort« für alle Dienste und Plattformen. Machen Sie sich stattdessen die Mühe, für einzelne Dienste kryptische, individuelle Passwörter zu vergeben.
Speichern Sie Ihre Passwörter nicht aus Faulheit an unsicheren Stellen – anstatt eine Datei Passwörter.txt
mit den Klartext-Passwörtern auf dem Desktop zu platzieren, sollten Sie einen Passwort-Safe, wie zum Beispiel die Open-Source-Software Password Safe (https://pwsafe.org) oder KeePass 2 (https://keepass.info/download.html) nutzen. Das hilft Ihnen auch dabei, diverse Passwörter für verschiedene Anwendungen und Plattformen zu verwalten. Es gibt auch kommerzielle bzw. Enterprise-Lösungen zum sicheren Ablegen von Passwörtern. Zudem können Sie damit oft sichere Passwörter erstellen lassen.
Zu den unsicheren Stellen gehören auch Browser, da die Passwörter hier regulär ausgelesen werden können und reversibel gespeichert werden.
Auch andere Anwendungen sollten keine Passwörter speichern.
Prüfen Sie über Seiten wie https://haveibeenpwned.com/Passwords, ob Ihr Passwort bereits in einer bekannten Passwortliste auftaucht (falls Sie diesen Seiten vertrauen).
Nutzen Sie keine Klartext-Protokolle oder Protokolle mit schwacher Verschlüsselung.
Begrenzen Sie die Anmeldeversuche an Ihren Diensten auf ein akzeptables Minimum (zum Beispiel drei oder fünf Versuche).
Aktivieren Sie das Security-Auditing, um Anmeldeversuche zu überwachen.
Sorgen Sie dafür, dass die Logfiles manuell oder besser über Monitoring-Systeme (Stichwort: SIEM) automatisch überwacht und Alarm-Meldungen versendet werden.
Nutzen Sie die Salt-Funktion, um Passwort-Hashes sicherer zu speichern.
Nutzen Sie keine veralteten Protokolle, die Passwörter unsicher speichern oder andere Schwachstellen offenbaren (Kerberos v4, LM-Hashes, MD5-Hashes etc.).
Last, but not least: Wo möglich, implementieren Sie eine Zwei-Faktor-Authentisierung. Damit erhöhen Sie die Sicherheit exponentiell.
Diese Liste erhebt keinen Anspruch auf Vollständigkeit, hilft Ihnen aber, einen guten Grundschutz für Ihre eigenen Passwörter und die Zugangsdaten Ihrer Organisation sicherzustellen.
Vielleicht brennt Ihnen eine Frage unter den Nägeln: »Okay, aber hilft das auch gegen Keylogger?« Die kurze und brutale Antwort ist: »Nein!« Wir greifen dieses Thema in Kapitel 12 Mit Malware das System übernehmen auf und werden Angriffsszenarien und Verteidigungsmöglichkeiten gegen Keylogger und ähnliche Malware aufzeigen.
10.10 Zusammenfassung und Prüfungstipps
Werfen wir einen Blick zurück: Was haben Sie gelernt, wo stehen Sie und wie geht es weiter?
10.10.1 Zusammenfassung und Weiterführendes
In diesem Kapitel haben wir erstmals ein System tatsächlich angegriffen und uns für einen der gängigsten Angriffsvektoren entschieden: dem Password Hacking. Sie haben erfahren, welche Angriffsvarianten wir unterscheiden, wobei neben dem noch zu beschreibenden Social Engineering der Offline-Angriff am erfolgversprechendsten ist, da wir hier grundsätzlich so viel Zeit und Aufwand in das Knacken eines Passworts investieren können, wie wir möchten.
Neben dem Passwort-Raten, das umso erfolgversprechender ist, je mehr Sie über die Person hinter dem zugehörigen Benutzerkonto wissen, ist auf nicht wenigen Systemen im Netzwerk noch ein Default-Passwort aktiv, das Sie über diverse Webseiten leicht finden können. Haben Sie lokalen Zugriff auf ein System, können Sie oftmals über einen Passwort-Recovery-Prozess das Passwort eines Benutzers – im besten Fall des Administratorkontos – zurücksetzen oder neu festlegen.
Sie haben gelernt, wie die Windows-Authentifizierung mittels LM/NTLM und Kerberos funktioniert, und FGDump in der Praxis erlebt. Auch Linux und die Passwort-Hashes in /etc/shadow
haben wir betrachtet. In diesem Zusammenhang haben Sie erfahren, warum der »Salt« ein effektives Mittel gegen Brute-Force- und Dictionary-Angriffe ist und Rainbow-Tables nahezu nutzlos werden lässt.
Sie haben den Ansatz von Pass the hash in der Praxis gesehen und erfahren, wie Sie sich mithilfe eines Hashes, ohne das Passwort zu knacken, mit pth-winexe an einem System anmelden können. Anschließend haben Sie konkrete Ansätze für den Angriff auf Passwort-Hashes kennengelernt und in diesem Zusammenhang auch erfahren, wie Sie eigene Passwortlisten erstellen können – das Stichwort ist: Password Profiling.
Mit L0phtcrack, John the Ripper, Hashcat und Cain & Abel haben Sie einschlägige Tools kennengelernt, mit denen Sie Offline-Angriffe auf Passwort-Hashes durchführen können. Dagegen sind Tools wie Medusa, Hydra und Ncrack dafür gedacht, aktive Online-Angriffe durchzuführen, um Netzwerk-Dienste direkt anzugreifen. Dahinter steckt die Hoffnung, über einen Dictionary-Angriff mit erfolgversprechenden Wortlisten eine gültige Benutzerkennung zu ermitteln.
In diesem Kapitel sind wir noch nicht auf die passiven Online-Angriffe mittels Sniffing und Man-in-the-Middle-Angriffen eingegangen. Diese stellen wir Ihnen in Kapitel 16 Network Sniffing mit Wireshark & Co. und Kapitel 17 Lauschangriffe & Man-in-the-Middle vor. Auch die Keylogger, mit denen Zugangsdaten effektiv ausgespäht werden können, haben wir außen vor gelassen, da wir uns in einem späteren Kapitel mit diesem Thema ausführlich beschäftigen werden.
10.10.2 CEH-Prüfungstipps
Für das CEH-Examen sollten Sie die gängigen Tools, ihre Stärken und Schwächen sowie wichtige Parameter kennen. Sie sollten zwischen aktiven Online-Angriffen, passiven Online-Angriffen (mittels Sniffer und MITM) und Offline-Angriffen unterscheiden können und wissen, dass hinter den nicht elektronischen Angriffen in erster Linie Social Engineering steckt.
Stellen Sie sicher, dass Sie die Authentifizierungsmechanismen hinter Windows und Linux verstanden haben und wissen, wie ein Salt funktioniert. In diesem Zusammenhang sollten Sie auch die gängigen Angriffsvektoren auf die Passwort-Hashes kennen und welche Tools hierfür eingesetzt werden können.
Unter dem Strich gilt auch hier: Üben, üben, üben! Gehen Sie in Ihre Laborumgebung, werfen Sie die Was-passiert-dann-Maschine an und testen Sie, was das Zeug hält! Lesen Sie ergänzend im Internet und erweitern Sie beständig Ihren Horizont. Dann haben Sie eine sehr gute Chance, Prüfungsfragen zu jedem Thema, das Sie bereits bearbeitet haben, souverän beantworten zu können.
10.10.3 Fragen zur CEH-Prüfungsvorbereitung
Mit den nachfolgenden Fragen können Sie Ihr Wissen überprüfen. Die Fragestellungen sind teilweise ähnlich zum CEH-Examen und können daher gut zur ergänzenden Vorbereitung auf das Examen genutzt werden. Die Lösungen zu den Fragen finden Sie in Anhang A.
Welche der folgenden Methoden ist eine Zwei-Faktor-Authentisierung?
Ausweis, Badge
Retina-Scan, Fingerabdruck
Passwort, Ausweis
PIN, Passphrase
Welche Aussage lässt sich aus dem folgenden LM-Hashwert ableiten?
DEB5ABAD35B55019AAD3B435B51404EE?
Es handelt sich um ein leeres Passwort.
Der Hashwert ist kein LM, sondern ein NTLM-Hash.
Das Passwort besteht aus 14 Nullen.
Das Passwort ist weniger als 8 Zeichen lang.
Sie möchten im Rahmen eines Penetrationstests die Credentials von Benutzern eines Linux-Servers cracken. Es gelingt Ihnen, administrativen Zugriff auf eine Shell des Zielservers zu erlangen. Wo sind die Hashwerte der Benutzer-Passwörter gespeichert?
/etc/passwd
/etc/shadow
/etc/passwords
/etc/pam.d
Jules arbeitet als Ethical Hacker und ist damit beauftragt, einen Stand-alone-Windows-Computer zu hacken. Welches Programm kann er nutzen, um die SAM-Datenbank auszulesen und damit die Benutzer und Passwörter des Systems zu ermitteln?
fgdump
Medusa
Ncrack
Hydra