Passwort Sicherheit Teil 2

Manuel Badzong    04.01.2014

Passwort Sicherheit Teil 2

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.

Ausgangslage

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.

Wie werden Passwörter gespeichert?

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.

Beschaffen der Passwort Hashes

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:::

Passwort Salts

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.

Passwort Recovery mit einer Hash Datenbank

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.

Brute Force

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.

Schlussfolgerungen

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).

Passwörter speichern

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.


Recent Posts

NGINX Rate Limits für Wordpress Pingbacks

23.04.16 | Manuel Badzong

iPad Safari Scareware entfernen

20.03.16 | Manuel Badzong

DDoS Abwehr Teil 2

02.03.16 | Manuel Badzong

Wie schützt man sich vor Ransomware

19.02.16 | Manuel Badzong

DDoS Abwehr Teil 1

08.12.15 | Manuel Badzong

Passwort Sicherheit Teil 3

05.01.14 | Manuel Badzong

Passwort Sicherheit Teil 2

04.01.14 | Manuel Badzong

Passwort Sicherheit Teil 1

03.01.14 | Manuel Badzong