Im zweiten Teil der Kolumne „Active Directory & Passwortsicherheit“ geht es nun darum, aus der ntds.dit Datei die entsprechenden Passwort-Hashes zu exportieren.
Vielleicht nur ein kurzer Exkurs zum Thema Passwort-Hashes: Um sich an einem System zu authentifizieren gibt es verschiedene Verfahren. In der heutigen Zeit erfolgt die Anmeldung häufig „nur“ mit einer sog. Single-Factor Authentifizierung. Dabei gibt der User neben seinem Namen oder einem Pseudonym ein Passwort ein. Das System nimmt dieses Passwort entgegen und generiert aus dem Passwort mit Hilfe einer mathematischen Funktion einen sogenannten Hashwert, den es mit einem gespeicherten Hashwert in der Systemdatenbank vergleicht. Hierdurch wird vermieden, dass Passwörter im Klartext übertragen und gespeichert werden müssen. Bei der Generierung des Hashwerts handelt es sich in der Regel um eine nicht reversible Funktion. Es ist nicht möglich, aus dem Hashwert wiederum mit Hilfe einer Funktion das Passwort zu ermitteln. f(x) = h für h != f(x). Die Hashfunktion stellt eine Abbildung dar, die das Passwort auf eine sog. Hashtabelle abbildet. Da die Anzahl von möglichen Passwörtern unendlich groß sein kann, kann es theoretisch zu sogenannen Kollisionen kommen. Diese tritt auf, wenn zwei verschiedene Passwörter den gleichen Hash liefern. Die meisten verwendeten Hashfunktionen sind nicht injektiv, was bedeutet das es zu Kollisionen kommen kann, wobei die Wahrscheinlichkeit von Kollisionen bei guten Hashfunktionen sehr gering ist. Sollte es also gelingen, ein Passwort zu finden, das mit Hilfe der (meist bekannten) Hashfunktion den gleichen Hashwert liefert, wie das übertragene und in der Datenbank gespeicherte Passwort, ist das Passwort in der Regel „geknackt“.
Zurück zur eigentlichen Aufgabenstellung: Die Passworthashes aus der Active Directory Datenbank warten darauf, extrahiert zu werden.
Hierzu gibt es verschiedene Tools, wobei ich im vorliegenden Beispiel die Extraktion mit Hilfe von Linux (Debian/Kali Linux) und der Library libesedb (https://github.com/libyal/libesedb/wiki ) durchgeführt habe.
Hierfür wurde das Repository via GIT geclont, konfiguriert und installiert.
Am Ende des Tages warten esedbexport und esedbinfo auf den Einsatz.
Mit Hilfe des Aufrufs „esedbexport -m tables ntds.dit“ werden die in der ntds.dit persistierten Dateien in separate Dateien exportiert.
Nun müssen die Informationen aus den verschiedenen Dateien noch zusammengesetzt werden. Hierfür benutze ich das Python-Tool ntdsextract, was ich über ein „git clone https://github.com/csababarta/ntdsxtract.git“ auf den Rechner hole.
Nach der erfolgreichen Installation von ntdsextract, stehen verschiedene Python-Skripte für die weitere Bearbeitung der exportierten NTDS Datenbank zur Verfügung.
Der Aufruf von dsusers.py mit den entsprechenden Parametern bearbeitet die entsprechenden Daten und extrahiert die gehashten Passwörter aus der Datenbank. Je nach Umfang des Active Directory kann der Export wenige Sekunden bis zu mehrere Stunden Zeit in Anspruch nehmen.
Am Ende des Tages gibt es folgendes zu sehen:
… die einzelnen User-Accounts werden übersichtlich inklusive ihrer wesentlichen Attribute dargestellt …
… und der Aufruf der Ergebnisdateien, die die entsprechenden Hashes zur weiteren Verarbeitung mit Tools wie Hashcat und John the Ripper bereitstellen.
Von jetzt an benötigt man nur noch ein wenig Übung im Umgang mit den entsprechenden Tools und Power, Power, Power…. MEHR POWER! 🙂
Mehr dazu in einem separatem Beitrag.