1. Home
  2. Misc IT
  3. Security Affairs
  4. Kali Linux
  5. Passwort Hashes gegen Wörterbuch testen

Passwort Hashes gegen Wörterbuch testen

Passwörter in Windows

Im Active Directory gespeicherte Passwörter

Passwörter werden in mehreren Attributen der Active Directory-Datenbank (NTDS.DIT-Datei) gespeichert. NTDS.DIT steht für New Technology Directory Services Directory Information Tree. Sie dient als primäre Datenbankdatei innerhalb der Active Directory Domain Services (AD DS) von Microsoft. Im Wesentlichen speichert und organisiert NTDS.DIT alle Informationen in Bezug auf Objekte in der Domäne, einschließlich Benutzer, Gruppen, Computer und mehr. Sie ist das Rückgrat von Active Directory und enthält wichtige Daten wie Benutzerkontodetails, Passwörter, Gruppenmitgliedschaften und andere Objektattribute.

Auf Member-Server und Workstations gespeicherte Passwörter

Auf Member-Server und Workstations werden die Hashes für lokale Benutzerkonten in einer lokalen SAM-Datenbank (Security Account Manager) in der Registrierung gespeichert. Sie werden mit denselben Verschlüsselungs- und Hash-Algorithmen verschlüsselt wie in Active Directory. Die Passwörter im Attribut supplementalCredentials für lokale Benutzerkonten werden seit Windows Server 2016 ebenfalls in der lokalen SAM-Datenbank gespeichert.

Zwischengespeicherte Anmeldeinformationen (Cached Credential)

Windows speichert auch eine Kennwortüberprüfung auf Domänenmitgliedern, wenn sich ein Domänenbenutzer bei diesem Domänenmitglied anmeldet. Diese Überprüfung kann zur Authentifizierung eines Domänenbenutzers verwendet werden, wenn der Computer nicht auf den Domänencontroller zugreifen kann. Die Kennwortüberprüfung wird auch als Cached Credential bezeichnet. Er wird berechnet, indem der NT-Hash mit dem Benutzernamen verknüpft und das Ergebnis mit der MD4-Hash-Funktion gehasht wird.

Passwort Hashes aus ntds.dit extrahieren

Bitte verwenden Sie die folgenden Informationen nur zu legitimen und verantwortungsvollen Zwecken, wie Sicherheitsprüfungen und Audits, und stellen Sie sicher, dass Sie die erforderlichen Genehmigungen und Zustimmungen eingeholt haben.

Der erste Schritt eines Angreifers besteht in der Regel darin, eine gehashte Passwortdatenbank zu erbeuten. Bei einem Windows-basierten Domänencontroller spielen in diesem Zusammenhang zwei Dateien eine wichtige Rolle. Die Datenbank ntds.dit enthält Benutzerkontoinformationen einschließlich Kennwort-Hashes, während die Registrierungsdatei SYSTEM Informationen über die Verschlüsselungsmethode enthält, die zur Speicherung dieser Kennwort-Hashes verwendet wird.

Auf beide Dateien kann während des Betriebs des Domänencontrollers nicht zugegriffen werden, so dass ein Angreifer versuchen wird, sie aus einem Backup zu stehlen. Entweder hat der Angreifer bereits Zugriff auf das Backup oder er erstellt mit dem Kommandozeilen-Dienstprogramm vssadmin einen VSS Snapshot, aus dem er dann die benötigten Dateien stehlen kann.

Sind diese Hürden überwunden und der Angreifer im Besitz der Active Directory Datenbak und der benötigten Registry Datei, kann er diese einem Tool zuführen, welches die Hashes aus der Datenbank extrahiert.

In der Kali Linux Distribution sind die Impacket Tools bereits installiert, von denen das Python Skript secretsdump.py für unsere Zwecke geeignet ist:

┌──(kali㉿kali)-[~/Documents/NTDS]
└─$ /usr/share/doc/python3-impacket/examples/secretsdump.py -ntds ./ntds.dit -system ./SYSTEM -outputfile ./myhashes.txt local

Sie finden dann im Ausgabeverzeichnis folgende Dateien vor:

┌──(kali㉿kali)-[~/Documents/NTDS]
└─$ ls -l
total 908
-rw-r--r-- 1 kali kali  34053 Oct 31 23:22 myhashes.txt.ntds
-rw-r--r-- 1 kali kali      0 Oct 31 23:21 myhashes.txt.ntds.cleartext
-rw-r--r-- 1 kali kali  65343 Oct 31 23:22 myhashes.txt.ntds.kerberos

Passwort Hash gegen Wörterbuch testen

Nachdem der Angreifer die gehashten Passwörter aus der Active Directory Datenbank extrahiert hat, vergleicht er im nächsten Schritt die Hashes mit einem Wörterbuch der am häufigsten verwendeten und per se unsicheren Passwörter. Im Prinzip wird bei diesem Test jedes Passwort aus dem Wörterbuch mit den aus der SYSTEM-Datei ermittelten Verschlüsselungsalgorithmen verschlüsselt und mit den ermittelten Hashes verglichen. An dieser Stelle ist natürlich der Umfang und die Qualität des Wörterbuchs entscheidend. Kali Linux enthält bereits eine umfangreiche Sammlung von Wörterbüchern, darunter das in der Hackerszene wohl bekannteste RockYou. RockYou enthält ca. 13 Millionen Passwörter. Gerüchte aus dem Jahr 2021 sprechen auch von einer RockYou-Liste mit mehreren Milliarden Einträgen, die im Internet aufgetaucht sein soll.

┌──(kali㉿kali)-[~/Documents/NTDS]
└─$ wordlists -h

> wordlists ~ Contains the rockyou wordlist

/usr/share/wordlists
├── amass -> /usr/share/amass/wordlists
├── dirb -> /usr/share/dirb/wordlists
├── dirbuster -> /usr/share/dirbuster/wordlists
├── fasttrack.txt -> /usr/share/set/src/fasttrack/wordlist.txt
├── fern-wifi -> /usr/share/fern-wifi-cracker/extras/wordlists
├── john.lst -> /usr/share/john/password.lst
├── legion -> /usr/share/legion/wordlists
├── metasploit -> /usr/share/metasploit-framework/data/wordlists
├── nmap.lst -> /usr/share/nmap/nselib/data/passwords.lst
├── rockyou.txt.gz
├── sqlmap.txt -> /usr/share/sqlmap/data/txt/wordlist.txt
├── wfuzz -> /usr/share/wfuzz/wordlist
└── wifite.txt -> /usr/share/dict/wordlist-probable.txt

Do you want to extract the wordlist rockyou.txt? [Y/n] Y
Extracting rockyou.txt.gz...


> wordlists ~ Contains the rockyou wordlist

/usr/share/wordlists
├── amass -> /usr/share/amass/wordlists
├── dirb -> /usr/share/dirb/wordlists
├── dirbuster -> /usr/share/dirbuster/wordlists
├── fasttrack.txt -> /usr/share/set/src/fasttrack/wordlist.txt
├── fern-wifi -> /usr/share/fern-wifi-cracker/extras/wordlists
├── john.lst -> /usr/share/john/password.lst
├── legion -> /usr/share/legion/wordlists
├── metasploit -> /usr/share/metasploit-framework/data/wordlists
├── nmap.lst -> /usr/share/nmap/nselib/data/passwords.lst
├── rockyou.txt
├── rockyou.txt.gz
├── sqlmap.txt -> /usr/share/sqlmap/data/txt/wordlist.txt
├── wfuzz -> /usr/share/wfuzz/wordlist
└── wifite.txt -> /usr/share/dict/wordlist-probable.txt

Zur Demonstration ermitteln wir noch die Anzahl der Passwörter in dieser Liste. Über 14 Millionen ist schon mal ein guter Anfang:

┌──(kali㉿kali)-[/usr/share/wordlists]
└─$ wc -l /usr/share/wordlists/rockyou.txt
14344392 /usr/share/wordlists/rockyou.txt

Löschen Sie die entpackte Datei rockyou.txt nach Ihrem Passwort-Audit wieder, da die Zip-Datei bei den regelmäßigen Updates mit dem Paketmanager apt automatisch aktualisiert wird. Entpacken Sie die Datei beim nächsten Audit einfach erneut.

Hashcat comes in the game

Jetzt kommt die eigentliche Magie, lassen wir die Katze aus dem Sack. Hashcat ist eines von vielen Tools, die für diese Aufgabe geeignet sind, aber Hashcat ist schon ein sehr prominenter Vertreter dieser Toolklasse. Im Prinzip übergibt man Hashcat nur die Datei mit den gehashten Passwörtern, das Wörterbuch mit den zu testenden Passwörtern und den Hash-Typ. Eine Liste der Hash-Typen findet sich in der Manpage von Hashcat. In unserem Fall ist der Hash-Typ 1000 (NTLM):

┌──(kali㉿kali)-[~/Documents/NTDS]
└─$ sudo hashcat -m 1000 ./myhashes.txt.ntds /usr/share/wordlists/rockyou.txt            
hashcat (v6.2.6) starting

OpenCL API (OpenCL 3.0 PoCL 4.0+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.7, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==================================================================================================================================================
* Device #1: cpu-penryn-Intel(R) Core(TM) i5 CPU       M 540  @ 2.53GHz, 2189/4442 MB (1024 MB allocatable), 2MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashes: 375 digests; 350 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Optimizers applied:
* Zero-Byte
* Early-Skip
* Not-Salted
* Not-Iterated
* Single-Salt
* Raw-Hash

ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Temperature abort trigger set to 90c

INFO: Removed hash found as potfile entry.

Host memory required for this attack: 0 MB

Dictionary cache built:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344392
* Bytes.....: 139921507
* Keyspace..: 14344385
* Runtime...: 2 secs

31d6cfe0d16ae931b73c59d7e0c089c0:                         
a3a78a920932841899407f915ca9d452:smile15                                    
6f0a6fdef70ee8793148d8410b0525c8:irgendwas                
Cracking performance lower than expected?                 

* Append -O to the commandline.
  This lowers the maximum supported password/salt length (usually down to 32).

* Append -w 3 to the commandline.
  This can cause your screen to lag.

* Append -S to the commandline.
  This has a drastic speed impact but can be better for specific attacks.
  Typical scenarios are a small wordlist but a large ruleset.

* Update your backend API runtime / driver the right way:
  https://hashcat.net/faq/wrongdriver

* Create more work items to make use of your parallelization power:
  https://hashcat.net/faq/morework

Approaching final keyspace - workload adjusted.           

                                                          
Session..........: hashcat
Status...........: Exhausted
Hash.Mode........: 1000 (NTLM)
Hash.Target......: ./myhashes.txt.ntds
Time.Started.....: Wed Nov  1 14:28:37 2023 (8 secs)
Time.Estimated...: Wed Nov  1 14:28:45 2023 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:  2061.7 kH/s (0.13ms) @ Accel:512 Loops:1 Thr:1 Vec:4
Recovered........: 4/350 (1.43%) Digests (total), 3/350 (1.14%) Digests (new)
Progress.........: 14344385/14344385 (100.00%)
Rejected.........: 0/14344385 (0.00%)
Restore.Point....: 14344385/14344385 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: $HEX[206b72697374656e616e6e65] -> $HEX[042a0337c2a156616d6f732103]
Hardware.Mon.#1..: Util: 61%

Started: Wed Nov  1 14:28:33 2023
Stopped: Wed Nov  1 14:28:46 2023

350 Passwort-Hashes mit über 14 Millionen Passwörtern in nur 13 Sekunden zu vergleichen, hat mich doch überrascht. Ich wusste, dass es schnell gehen würde, aber so schnell? Auf einem 13 Jahre alten MacBook mit einem virtualisiertem Kali Linux. Sehr beeindruckend...

Die Beute

Sie haben nun erfolgreich die folgenden drei Passwörter im Wörterbuch gefunden, wobei das erste ein leeres Passwort ist:

31d6cfe0d16ae931b73c59d7e0c089c0:                         
a3a78a920932841899407f915ca9d452:smile15                                    
6f0a6fdef70ee8793148d8410b0525c8:irgendwas

Der HEX-Wert zeigt den Hash des Passworts an, nach dem Sie in Ihrer Hash-Datei suchen können, um weitere Informationen zu diesem Objekt zu erhalten:

┌──(kali㉿kali)-[~/Documents/NTDS]
└─$ less ./myhashes.txt.ntds | grep 31d6cfe0d16ae931b73c59d7e0c089c0

Nehmen Sie es jedoch nicht auf die leichte Schulter, wenn Sie nur wenige geknackte Passwörter angezeigt bekommen. Ein kompromittiertes Benutzerkonto reicht aus, damit sich der Angreifer unbemerkt im Netzwerk bewegen kann, und je mehr Rechte dieses Konto hat, desto größer ist der Bewegungsspielraum des Angreifers. IT-Sicherheit ist eine Nulltoleranzangelegenheit!

Passwort mit Brute-Force erraten

Auf der einen Seite sieht man, wie einfach es für einen Hacker ist, ein unsicheres Passwort zu knacken. Auf der anderen Seite stellt ein sicheres Passwort den Hacker vor eine fast unüberwindbare Hürde. Ein Brute-Force-Angriff, d.h. das Ausprobieren aller möglichen Kombinationen der Tastatureingabe, ist in angemessener Zeit nicht durchführbar. Da kommt man sehr schnell in den Bereich von mehreren hundert Jahren und das ist für einen herkömmlichen Angreifer eigentlich uninteressant. Da braucht man schon Supercomputer, wie sie nur Regierungen hochindustrialisierter Länder zur Verfügung haben. Das ist teuer und dementsprechend groß muss dann auch das Interesse an diesem Passwort sein.

Fazit

Sichern Sie Ihre Umgebung ab

In Anbetracht der sensiblen Natur der in NTDS.DIT gespeicherten Informationen ist sie ein bevorzugtes Ziel für potenzielle Angreifer. Ein unbefugter Zugriff auf die Datei NTDS.DIT kann schwerwiegende Folgen haben, einschließlich einer vollständigen Kompromittierung der Domäne.

Um die Sicherheit von NTDS.DIT und Domänencontrollern zu gewährleisten, ist es unerlässlich, robuste Sicherheitsmaßnahmen zu implementieren. Zu diesen Maßnahmen gehören die Einschränkung des physischen Zugangs zu den Domänencontrollern, die regelmäßige Durchführung von Sicherheitsupdates, die Verwendung starker und eindeutiger Passwörter für alle Konten, die Implementierung einer mehrstufigen Authentifizierung und die Überwachung der Systemprotokolle auf verdächtige Aktivitäten.

Zusammenfassend lässt sich sagen, dass NTDS.DIT nicht nur eine Datei innerhalb von Active Directory ist, sondern den Kern der gesamten Infrastruktur darstellt. Das Verständnis ihres Zwecks und ihrer Bedeutung ist entscheidend für die effektive Verwaltung und Sicherheit von Windows Server-Umgebungen.

Sensibilisierung der Nutzer für die Bedeutung sicherer Passwörter

Sichere Passwörter sind von entscheidender Bedeutung für die digitale Sicherheit, da sie dazu beitragen, unbefugten Zugriff auf persönliche Informationen, Konten und Daten zu verhindern. Ein starkes Passwort ist komplex, einzigartig und schwer zu erraten, selbst für Angreifer, die Zugang zu Wörterbüchern oder Computerleistung haben. Durch die Verwendung sicherer Passwörter können Benutzer ihre digitale Identität schützen, was letztendlich dazu beiträgt, Cyberkriminalität und Identitätsdiebstahl zu reduzieren. Es ist wichtig, Passwörter regelmäßig zu aktualisieren und die Verwendung von Mehrfaktor-Authentifizierung zu fördern, um die Sicherheit weiter zu erhöhen.

Eine Passwort-Richtlinie unterstützt die Benutzer bei der Verwendung sicherer Passwörter

Eine Passwortrichtlinie, die auf ein Wörterbuch als Blackliste zugreift, ist von entscheidender Bedeutung für die Stärkung der Sicherheit von Online-Konten und Systemen. Sie verhindert, dass Benutzer offensichtliche oder leicht zu erratende Passwörter verwenden, indem sie bekannte Wörter, Phrasen oder gebräuchliche Kombinationen von Zeichen in einer Blackliste aufnimmt. Dies stellt sicher, dass Passwörter komplexer und widerstandsfähiger gegenüber Wörterbuchangriffen sind. Eine solche Passwortrichtlinie trägt dazu bei, das Risiko von Sicherheitsverletzungen und unautorisiertem Zugriff erheblich zu minimieren und fördert bewusstere Passwortgewohnheiten bei den Benutzern.

Updated on 23. März 2024

Was this article helpful?

Related Articles