Die Sicherheit eines Passworts hat verschiedene Faktoren. Mit zunehmender Rechenleistung benötigen Brute Force Attacken immer weniger Zeit, um einen Benutzeraccount erfolgreich aufzubrechen.
Dieser Artikel zeigt, wie und wie schnell Passwörter von moderner Hardware geknackt werden können.
Auf einem Windows 7 Rechner befinden sich die folgenden 6 Benutzeraccounts:
Benutzername | Passwort |
---|---|
john | audi |
jack | audi |
jeff | Audi |
jim | AudiR8 |
jake | Zb8-q+ |
joe | +Aud1R8!2013+ |
Die Frage ist, wie lange braucht eine unbefugte Drittperson, um die Klartext Passwörter herauszufinden, wenn sie im Besitz der NTLM Hashes ist.
Passwörter sollten nie im Klartext gespeichert werden. Einerseits sollte ein Administrator keinen Zugriff auf die Benutzerpasswörter haben, andererseits kommt es immer wieder vor, dass unbefugte Dritte Zugriff auf Benutzerdaten erlangen.
Verschlüsselung der Passwörter ist auch nur bedingt sinnvoll, da ein Computersystem zur Laufzeit Zugriff auf die Passwörter benötigt und also im Besitz des Schlüssels sein muss. Folglich müsste sich dieser Schlüssel auch auf der lokalen Festplatte befinden, was einem Angreifer wiederum das Entschlüsseln ermöglichen würde. Zudem könnten die entschlüsselten Passwörter zur Laufzeit aus dem Memory gelesen werden.
Normalerweise werden Passwörter gehasht und nur die Hashwerte gespeichert. Ein Hashwert, kurz Hash ist eine Prüfsumme des Passworts, von welcher man nicht auf das ursprüngliche Passwort zurückschliessen kann. Im Falle von Windows 7 werden NTLM Hashes verwendet.
Die NTLM Hashes der Passwörter werden in der Datenbank vom Security Accounts Manager (SAM) gespeichert. Unter Windows ist es nicht so einfach an diese Hashes zu gelangen. Es gibt verschiedene Programme und Methoden um die Hashes zu exportieren. Das folgende Beispiel verwendet pwdump7, welches als Administrator ausgeführt werden muss.
Da die SAM Datenbank auf der Festplatte mit dem SYSKEY verschlüsselt wird, und zusätzlich von einem NTFS Filesystemlock beschützt wird, liest pwdump7 die NTLM Hashes aus dem Memory.
Achtung: Anti-Malware und -Virenprogramme erkennen diese Programm als Hack-Tool.
Dies setzt einen physischen Zugriff auf den Rechner voraus. Kann jemand den Computer mit einer CD oder einem Memory Stick booten, muss er aber nicht im Besitz des Administartoraccounts sein.
c:\pwdump7>PwDump7.exe Pwdump v7.1 - raw password extractor Author: Andres Tarasco Acuna url: http://www.514.es john:1001:NO PASSWORD*********************:C7C7E453AF4B90B5F3AC4EA30ADA73BD::: jack:1002:NO PASSWORD*********************:C7C7E453AF4B90B5F3AC4EA30ADA73BD::: jeff:1003:NO PASSWORD*********************:A5805420355A30376C680641BD5C7FE0::: jim:1004:NO PASSWORD*********************:57C96EE8ED7244C0666723DF9D7A7F88::: jake:1005:NO PASSWORD*********************:FE304E136A1B5CDF4D7AD9915639AC5F::: joe:1006:NO PASSWORD*********************:BE7F809CD7978649C2CCC3EE7825996B:::
Salts sind zufällige Zeichenfolgen, welche beim Hashing an das Passwort angehängt werden. Sie werden verwendet, damit zwei Benutzer mit dem gleichen Passwort nicht den gleichen Hashwert erhalten und damit man die Hashes und Passwörter nicht einfach in einer 1 zu 1 Datenbank ablegen kann.
Wie man der Ausgabe entnehmen kann, sind die NTLM Hashes von Windows 7 nicht gesalzen. Dies erkennt man daran, dass die Benutzer john und jack den gleichen Hashwert in der SAM Datenbank besitzen.
Haben zwei Benutzer mit dem gleichen Passwort in einem System den gleichen Hashwert, werden keine Salts verwendet. Dies wirkt sich negativ auf die Sicherheit eines Systems aus.
Da die NTLM Hashes von Windows nicht gesalzen sind, kann man die Hashes eindeutig in einer Datenbank ablegen. Da es zahlreiche solche Datenbanken im Internet gibt, kann man die Hashwerte einfach mal bei Google ins Suchfeld eingeben.
Google Suche
NTLM Hash | Suchresultat |
---|---|
C7C7E453AF4B90B5F3AC4EA30ADA73BD | sha1.znaet.org |
A5805420355A30376C680641BD5C7FE0 | sha1.znaet.org hash.darkbyte.ru |
57C96EE8ED7244C0666723DF9D7A7F88 | Keine Resultate |
FE304E136A1B5CDF4D7AD9915639AC5F | Keine Resultate |
BE7F809CD7978649C2CCC3EE7825996B | Keine Resultate |
Zwei der fünf Hashes und das dazugehörige Passwort konnten auf diese Weise innert Sekunden gefunden werden. Nun wird das Gleiche nochmals bei einer dedizierten Hash Datenbank, CrackStation probiert. Mit folgendem Ergebnis:
crackstation.net
NTLM Hash | Passwort |
---|---|
C7C7E453AF4B90B5F3AC4EA30ADA73BD | Partial Match |
A5805420355A30376C680641BD5C7FE0 | Audi |
57C96EE8ED7244C0666723DF9D7A7F88 | AudiR8 |
FE304E136A1B5CDF4D7AD9915639AC5F | Not Found |
BE7F809CD7978649C2CCC3EE7825996B | Not Found |
In der dedizierten Hash Datenbank wurde zusätzlich noch der Hashwert für das Passwort AudiR8 gefunden.
Es fehlen noch 2 Klartext Passwörter. Nun wird versucht mittels Brute Force Attacke alle Accounts aufzubrechen. Das Programm Hashcat ist eines der schnellsten Passwort Recovery Programme.
Der Computer auf welchem Hashcat ausgeführt wird verwendet den folgenden Processor:
Intel Core i7-3770 CPU 3.40GHz (4 Cores / 8 Threads)
Würde man anstatt Hashcat oclHashcat verwenden und das ganze auf der GPU rechnen anstatt in der CPU, wäre der gesamte Vorgang ein Vielfaches schneller.
ntlm.txt
C7C7E453AF4B90B5F3AC4EA30ADA73BD A5805420355A30376C680641BD5C7FE0 57C96EE8ED7244C0666723DF9D7A7F88 FE304E136A1B5CDF4D7AD9915639AC5F BE7F809CD7978649C2CCC3EE7825996B
Hashcat command line
./hashcat-cli64.bin -m 1000 -a 3 ntlm.txt ?a?a?a?a?a?a
Legende
-m 1000 | Window NTLM Hashes |
-a 3 | Brute-Force |
ntlm.txt | Datei mit den Passwort Hashes |
?a?a?a?a?a?a | [Passwort Maske][7] (6 Zeichen) |
Hashcat Output
Input.Mode: Mask (?a) [1] Index.....: 0/1 (segment), 95 (words), 0 (bytes) Recovered.: 0/6 hashes, 0/1 salts Speed/sec.: - plains, - words Progress..: 95/95 (100.00%) Running...: --:--:--:-- Estimated.: --:--:--:-- Input.Mode: Mask (?a?a) [2] Index.....: 0/1 (segment), 9025 (words), 0 (bytes) Recovered.: 0/6 hashes, 0/1 salts Speed/sec.: - plains, - words Progress..: 9025/9025 (100.00%) Running...: --:--:--:-- Estimated.: --:--:--:-- Input.Mode: Mask (?a?a?a) [3] Index.....: 0/1 (segment), 857375 (words), 0 (bytes) Recovered.: 0/6 hashes, 0/1 salts Speed/sec.: - plains, - words Progress..: 857375/857375 (100.00%) Running...: --:--:--:-- Estimated.: --:--:--:-- a5805420355a30376c680641bd5c7fe0:Audi c7c7e453af4b90b5f3ac4ea30ada73bd:audi Input.Mode: Mask (?a?a?a?a) [4] Index.....: 0/1 (segment), 81450625 (words), 0 (bytes) Recovered.: 2/6 hashes, 0/1 salts Speed/sec.: 77.45M plains, 77.45M words Progress..: 81450625/81450625 (100.00%) Running...: 00:00:00:01 Estimated.: --:--:--:-- Input.Mode: Mask (?a?a?a?a?a) [5] Index.....: 0/1 (segment), 7737809375 (words), 0 (bytes) Recovered.: 2/6 hashes, 0/1 salts Speed/sec.: 77.73M plains, 77.73M words Progress..: 7737809375/7737809375 (100.00%) Running...: 00:00:01:40 Estimated.: --:--:--:-- 57c96ee8ed7244c0666723df9d7a7f88:AudiR8 270347ca2372240d426298a457054adf:Audi13 fe304e136a1b5cdf4d7ad9915639ac5f:Zb8-q+ Input.Mode: Mask (?a?a?a?a?a?a) [6] Index.....: 0/1 (segment), 735091890625 (words), 0 (bytes) Recovered.: 5/6 hashes, 0/1 salts Speed/sec.: 78.38M plains, 78.38M words Progress..: 735091890625/735091890625 (100.00%) Running...: 00:02:36:18 Estimated.: --:--:--:-- Started: Fri Jan 3 16:31:54 2014 Stopped: Fri Jan 3 19:09:53 2014
Mittels Brute Force Attacke konnten alle 6-stelligen Passwörter auf einer herkömmlichen CPU in weniger als 3 Stunden aufgebrochen werden.
Das letzte Passwort ist zu komplex, um in wenigen Stunden geknackt zu werden. Folgend die Ausgabe von Hashcat für 13-stellige Passwörter:
Input.Mode: Mask (?a?a?a?a?a?a?a?a?a?a?a?a?a) [13] Index.....: 0/1 (segment), 177077138822401247 (words), 0 (bytes) Recovered.: 0/9 hashes, 0/1 salts Speed/sec.: - plains, 74.66M words Progress..: 124298292/177077138822401247 (0.00%)
Für das letzte Passwort müssten 177'077'138'822'401'247 verschiedene Kombinationen berechnet werden. Auf der verwendeten CPU würde dies ca. 76 Jahre in Anspruch nehmen.
Wenn man aber bedenkt, dass man auf einer modernen Grafikkarte 140 Milliarden NTLM Hashes pro Sekunde berechnen kann, reduziert sich die Zeit auf lediglich 14 Tage.
Moderne Hardware und spezialisierte Programme wie Hashcat erlauben es heute innert kurzer Zeit komplexe Passwörter mittels Brute-Force Attacke aus den Hashwerten zu errechnen.
Systeme, die zum Speichern der Passwort Hashes keine Salts verwenden, sind generell unsicher. Zudem sollten Algorithmen verwendet werden, die mehr Rechenleisting benötigen (z.B. Bcrypt).
In Teil 3 geht es darum, wie man als Software Entwickler Passwörter abspeichern sollte, damit sie nicht so einfach, wie in diesem Artikel beschrieben aufgebrochen werden können.