Wie Hacker dein Passwort knacken

Das Hacker Passwörter knacken können ist schon bekannt. Aber wie funktioniert das alles in der Realität?.

Häufig kommt es vor, dass man Passwörter vergessen hat z.B. eine Zahlenkombination des persönlichen E-Mail Accounts. Es gibt dann verschiedene Möglichkeiten wie du dein Passwört wieder bekommen kannst. Natürlich solltest du das nicht einfach so an deinem Gmail Konto ausprobieren, denn es gibt bei deinem E-Mail Provider Richtlinien. Wenn du gegen diese verstößt riskierst du dein E-Mail Konto.

Nicht nur die guten Hacker wissen wie man Passwörter knackt. Die bösen Hacker (Cracker) missbrauchen leider die Kunst des Passwort knackens immer wieder um Datendiebstahl.

Was ist ein Passwort überhaupt ?

Ganz einfach vormuliert. Ein Passwort dient der Authentifizierung. Das kann z.B. an einem Computersystem sein. Meistens wird eine Zeichen oder Zahlenfolge vereinbart (vielleicht auch beides) mit dieser kann man sich zusammen mit dem Benutzernamen/Kennung an einem System anmelden.

login-window
Login Fenster eines Computersystems

Das ist erstmal allgemein bekannt.

Aus was besteht ein Passwort ?

Das ist von den sogenannten Kennwortrichtlinien des Authentifizierungssystems abhängig also der Richtlinie oder Regeln, die dem Authentifizierungssystem sagt wie dein Passwort aussehen soll.

Bestimmt hast du so eine Meldung schonmal gesehen – “Passwort zu schwach”

Das sind Regeln die bestimmen wie ein Passwort aussehen soll.

Hier mal ein paar Beispiele:

  • Die Benutzung von klein und großbuchstaben (case sensitive)
  • Es müssen 1 oder mehrere Zahlen im Passwort vorhanden sein
  • Das Passwort beeinhaltet Sonderzeichen wie !,#,-
  • Das Passwort muss mindestens 8 Zeichen lang sein

Eine Kombination aus solchen Richtlinien erhöht die Komplexität eines Passwortes und es wird dadurch deutlich schwerer zu knacken. Ohne zu tief in die Materie einzutauchen – von hier aus geht es jetzt sehr schnell in die Kryptografie.

Denn für die Passwortsicherheit sind 3 Faktoren wichtig:

  • Der Schlüsselraum
  • Die Schlüssellänge
  • Das Schlüsselmanagement

Dazu später mehr.

Wie und wo werden Passwörter gespeichert ?

Passwörter werden meistens durch eine Verschlüsselungsfunktion auch Hashfunktion genannt in einen Schlüssel umgewandelt und gespeichert.

Das Thema kann sehr kompliziert werden aber wir möchten es hier einfach halten.

Hashfunktionen

Eine Hashfunktion ist eine Abbildung, die eine große Eingabemenge Auf eine kleinere Zielmenge Abbildet.

hash-funktion
MD5 Hashfunktion

Gibt man also z.B den Satz “Hallo Welt” ein wird dieser in eine kryptisch wirkende Zeichenkette übersetzt und wieder ausgegeben.

Hierkannst du das einmal selbst ausprobieren.

Hashfunktionen finden auf verschiedenen Gebieten Einsatz. Sie werden hauptsächlich bei Prüfsummen, Datenbanken und in der Kryptografie eingesetzt.

Lädt man z.B. eine Datei herunter, kann man von dieser eine Checksum (Prüfsumme) generieren lassen, um sie mit dem Original zu vergleichen. Wenn es Unstimmigkeiten gibt, könnte die heruntergeladene Datei verändert worden sein.

Mit dem Vorgang des überprüfens möchte man also ausschließen, dass der Download mit Malware infiziert ist.

$sha1sum datei.tar.gz

Der Befehl generiert eine Prüfsumme für die Datei datei.tar.gz in Linux

In Datenbankmanagementsystemen dagegen verwendet man Hashfunktionen zum suchen von Werten in Hashtabellen.

Hashfunktionen sind also nützlich um Passwörter kryptisch auf Servern zu speichern, sie besitzen eine höhere Effizienz bei bestimmten Zugriffen und sind für integritätschecks hilfreich.

Einige bekannten Hashfunktionen sind:

SHA-1 (Secure Hash Algorithm)

SHA-2 (Secure Hash Algorithm)

MD5 (Message Digest 5)

Welche Eigenschaften sollten Hashfunktionen haben ?

Hier sind einige der Anforderungen an Hashfunktionen:

  • Hashfunktionen sollten schnell Hashwerte berechnen können
  • Der Ausgangswert hat eine feste Länge, der unabhängig der Länge des Eingangswertes ist
  • Verwendete Hash-Funktionen haben Ausgangslängen von 128-512 Bit
  • Der Hashwert darf nicht einfach zurückberechnet werden können. (Einwegfunktion)

Eine Hashfunktion ist erstmal nichts kompliziertes. Einfach nur ein Programm das sichere kryptische Werte erzeugt.

Hashfunktion und Sicherheit

Angenommen ein Passwort wird in eine Hashfunktion gegeben und als Hashwert gespeichert. Ist es dann möglich, ein beliebiges anderes Passwort zu finden, für das die gleiche Hashfunktion einen identischen Hashwert erzeugt ?.

Noch einfacher. Wenn ich das Passwort nicht kenne, könnte ich doch solange irgendwelche anderen Passwörter ausprobieren bis die Hashfunktion den gleichen Hashwert ausgibt (Kollision) und der Login trozdem funktioniert ?.

Und genau solche Sicherheitseigenschaften sollten Hashfunktionen erfüllen können, wenn Sie als sicher eingestuft werden möchten.

Das Kollisionen tatsächlich existieren wird oft mit dem Geburtstagsparadoxon erklärt.

Das Geburtstagsparadoxon besagt das es statistisch gesehen, in einem Raum mit mehr als 23 Personen, die Chance gibt, dass 2 Personen in diesem Raum am selben Tag Geburtstag haben. Der Geburtstag kann mit einer Kollision gleichgesetzt werden. Die mathematische Formel für das Geburtstagsparadoxon sieht dann so aus.

math-gebparadox

Es gibt 3 Sicherheitseigenschaften für Hashfunktionen

  1. Urbildresistenz
  2. Schwache Kollisionsresistenz
  3. Starke Kollisionsresistenz

Die Urbildresistenz sagt aus, dass Hashfunktionen Einwegfunktionen sein müssen. Es soll also unmöglich sein, aus einem gegebenen Hashwert den Eingangswert berechnen zu können. Also aus einem Hashwert können wir nicht einfach das Passwort wiederherstellen.

Die schwache Kollisionsresistenz sichert uns zu, dass es nicht möglich ist zu einer gegebenen Nachricht (unser Passwort) den selben Hashwert durch eine andere Nachricht zu erzeugen (Das Beispiel von oben).

Es muss Außerdem praktisch unmöglich sein aus zwei beliebigen Nachrichten den gleichen Hashwert zu erzeugen. Das nennt sich starke Kollisionsresistenz

Einfach gesagt versucht der böse Hacker entweder von einem Hashwert auf eine Nachricht (Passwort) zurückzuschließen, eine Nachricht so zu manipulieren, dass er eine Kollision erzeugen kann oder zwei beliebige Nachrichten zu finden die den gleichen Hashwert erzeugen.

Das ganze wird normalerweise mathematisch korrekt bewiesen und formuliert, lasse ich aber an dieser Stelle raus. Für grundlegenderes Wissen, kann ich
Kryptografie verständlich: Ein Lehrbuch für Studierende und Anwender von Christof Paar und Jan Pelzl empfehlen.

So richtig sicher sind reine Hashwerte aber nicht. Es gibt weitere Schutzmechanismen, welche dem Hashwert hinzugefügt werden.

Warum das ganze mit den Hashfunktionen ?

Zusammenfassend kann man sagen, dass Hashfunktionen eine wichtige Rolle spielen. Passwörter werden heutzutage nicht einfach im Klartext gespeichert, sodass man sie ohne Probleme ablesen könnte. Zwangsläufig hat der Hacker also mit Hashfunktionen zu tun. Es ist wichtig das zu verinnerlichen.

Wo werden Passwörter gespeichert ?

Bei der Eingabe eines Passwortes passiert hinter den Kulissen eine ganze Menge. Das Passwörter in der Anmeldemaske nicht angezeigt werden, ist nur ein optischer Passwortschutzmechanismus. Das Passwort muss als sicherer Hashwert irgendwo auf dem System abgelegt werden. Aber wo wird dieser Hashwert abgelegt ?. Das ist abhängig vom Betriebssystem oder dem Programm.

Windows

Nehmen wir z.B. Windows, gibt es mehrere Komponente die für die Systemsicherheit verantwortlich sind.

  • Security Accounts Manager (SAM)
  • SAM Database

Für den Hacker interessant sind die SAM Komponente des Betriebssystems. Der Security Accounts Manager (SAM) Service verwaltet allgemein die Benutzernamen und Gruppen die lokal auf dem Rechner angelegt werden.

Die SAM Datenbank beeinhaltet die lokalen Benutzer und Gruppen zusammen mit deren Passwörtern und anderen Attributen. Die Datenbank befindet sich unter der Registry HKEY_LOCAL_MACHINE\SAM

Der Hashwert wird geschützt und ist ohne weiteres nicht so einfach sichtbar.

Mit den Tools die ich unten Empfehle können die Hashwerte extrahiert werden.

Linux

Um auf Linux Systemen die für die Benutzer hinterlegten Passwort Hashwerte zu sehen benötigt man root Zugriffsrechte. Bedeutet die Datei shadow kann als Root mit dem Befehl:

$cat /etc/shadow

geöffnet werden. Man sieht dann soetwas wie

root:$1$Ct7iUpMU$5KRrYfhAr6nZfAnUb/ZYd1:14747:0:99999:7:::

Jede Zeile im Shadow File besteht aus 9 Feldern die durch einen Doppelpunkt getrennt werden. Interessant für uns ist das zweite Feld mit dem Verschlüsselten Passwort als Hashwert.

Passwörter müssen meistens dort auf Systemen als Hashwert abgelegt werden, wo Authentifikationsverfahren genutzt werden. Einige weitere interessante Anwendungen die geschützt Passwörter als Hashwert ablegen:

  • Datenbanken wie MSSQL, ORACLE und MySQL
  • WLAN WPA/WPA2 PSK Authentifikation
  • MAC OSX
  • 7zip, Zip und WINRAR Archive
  • Cisco und geschützte Netzwerkkonfigurationsdateien

Android und Apple Phones gehören auch dazu.

Passwort knacken in der Theorie

Um Passwörter zu knacken gibt es verschiedene Methoden.

Brute-Force

auch “Methode der rohen Gewalt” genannt ist eine erschöpfende Suche. Bei der Brute-Force Methode probiert man alle möglichen Fälle einfach aus bis das richtige Passwort geknackt ist.

Hashfunktionen sollen ja das einfache zurückrechnen für Hashwerte verhindern. Deswegen müssen beim Brute-Force verfahren alle möglichen Hashwerte für ein Passwort generiert werden.

Hier kommt der Begriff Schlüsselraum ins Spiel. Denn wie schon zuvor erwähnt, je länger und komplexer der Schlüssel, desto größer wird der Schlüsselraum in dem das Passwort gesucht werden muss. Also die Menge aller möglicher Schlüssel die abgesucht werden müssen bis das richtige Passwort gefunden ist.

Ein Beispiel:

Angenommen du hast ein Programm, welches eine Zahlenkombination als Passwort nimmt. Das Passwort besteht aus 5 Zahlen in Reihe. Was bedeutet das du 10 hoch 5 (10^5) also 10.000 verschiedene Zahlenkombinationen hast. In diesem sogenannten Schlüsselraum befindet sich dein Passwort. D.h. >Eine< Zahlen Kombination aus 10.000 verschiedenen ist das Passwort.

Jetzt kannst du z.B. ein Programm mit mehreren Schleifen programmieren, welches dir alle möglichen Passwörter in einem Schlüsselraum ausgibt. Das sieht in einer Beispielaufgabe mit der Programmiersprache Python etwa so aus

Finde durch Brute-Force die zugehörigen 5 Buchstaben Passwörter, welche zu den unten stehenden 3 SHA-256 Hashwerten gehören.

1. 1115dd800feaacefdf481f1f9070374a2a81e27880f187396db67958b207cbad 
2. 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
3. 74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f
import multiprocessing
from hashlib import sha256
 
def HashFromSerial(serial):
    divisor = 456976
    letters = []
    for i in range(5):
        letter, serial = divmod(serial, divisor)
        letters.append( 97 + int(letter) )
        divisor /= 26
    return (letters, sha256(bytes(letters)).digest())
 
 
def main():
    h1 = bytes().fromhex("1115dd800feaacefdf481f1f9070374a2a81e27880f187396db67958b207cbad")
    h2 = bytes().fromhex("3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b")
    h3 = bytes().fromhex("74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f")
    numpasswords = int(26 ** 5)
    chunksize = int(numpasswords / multiprocessing.cpu_count())
    with multiprocessing.Pool() as p:
        for (letters, digest) in p.imap_unordered(HashFromSerial, range(numpasswords), chunksize):
            if digest == h1 or digest == h2 or digest == h3:
                password = "".join(chr(x) for x in letters)
                print(password + " => " + digest.hex())
 
 
if __name__ == "__main__":
    main()

Und hat als Ausgabe:

apple => 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
mmmmm => 74e1bb62f8dabb8125a58852b63bdf6eaef667cb56ac7f7cdba6d7305c50a22f
zyzzx => 1115dd800feaacefdf481f1f9070374a2a81e27880f187396db67958b207cba

Das Programm stammt von Rosetta Code und zeigt sehr schön wie ein Brute-Force Algorithmus funktioniert.

Das Programm soll alle Hashwert Möglichkeiten für ein Passwort bestehend aus 5 ASCII Kleinbuchstaben ausprobieren. Dabei soll die Parallelität der Programmiersprache ausgenutzt werden. Wenn das Passwort gefunden ist wird das Passwort mit dem zugehörigen Hashwert ausgegeben.

Die Schlüssellänge spielt deshalb eine entscheidende Rolle, weil mit zunehmender Länge des Schlüssels der Umfang des Schlüsselraums steigt, also die Menge aller möglichen Schlüssel.

Der Schlüsselraum ergibt sich durch Zeichensatz^Anzahl = Schlüsselraum an Zeichen.

Brute-Force Schutz und Schlüsselsicherheit

In der Praxis werden die möglichen Anmelde Versuche beim Login eingeschränkt, sodass ein ständiges ausprobieren nicht ohne weiteres möglich ist.

Eine hohe Bitanzahl erschwert zusätzlich das Knacken eines Passwortes, da die Menge der darstellbaren Werte dann sehr hoch ist. Ein ausprobieren von Passwörtern wird dann zu einem erschöpfenden Unterfangen. Die Brute-Force Methode kann dann bis zu Jahren dauern.

Bei 261 bit können ca. so viele verschiedene Werte wie Atome im Universum existieren dargestellt werden.

Das kann also dauern.

Wie schon zuvor erwähnt spielt das Schlüsselmanagement auch eine Rolle. Die Schlüsselauswahl, der Wechsel und die Lagerung. Erhöhen die Passwort Sicherheit.

Wörterbuch-Angriffe

Der Wörterbuchangriff nutzt vorgefertigte Listen gespeichert in .txt Dateien, um mit Wörtern und gewöhnlichen Bezeichnungen das Passwort zu knacken. Die Liste ist mehrere Gb groß.

word-list

Weitere Wortlisten gibt es

http://weakpass.com/wordlisthttps://crackstation.net/

Regel-Angriffe

Mit verschiedenen Regeln können Wörterbuchangriffe kombiniert werden. Die Regeln können das Passwort auf verschiedene Arten modifizieren um es dann erneut zu versuchen.

Es gibt noch weitere ausgefeilte Techniken wie Hybrid-Angriffe und Maskierte Angriffe.

Rainbowtables

Rainbowtables sind wesentlich schneller als Wörterbuchangriffe. Die Raibowtables enthalten Passwörter mit dem zugehörigen Hashwert. Man sucht also in der Tabelle zu einem Hashwert das zugehörige Passwort. Allerdings sind diese nicht komplett und werden dann erst erzeugt.

Um Angriffe mit Rainbowtables zu verhindern nutzt man den sogenannten Salt Wert. Der Salt Wert wird dem Hashwert angehängt.

Schlüssel Entropie

Wichtig für die Schlüsselsicherheit ist auch die Entropie. Die Entropie ist in der Kryptologie ein Maß dafür, wie viel Zufall in einem Schlüssel steckt. Entropie bestimmt also die Qualität des Schlüssels und hat Einfluss auf die Generierung. Gute Schlüssel brauchen viel Zufälligkeit. Das kann man sich so vorstellen:

  1. mOL5306WJ7
  2. 111111111111
  3. tomtomtomtom

Welches der 3 Schlüssel sieht wohl am zufälligsten generiert aus ?. Nr. 1 natürlich. Die Theorie um das Thema Entropie ist sehr umfangreich. Hier ein Vorgeschmack:

entropie-funktion
Entropie Formel

Kurz und knapp, die Entropie ist nicht direkt für das praktische Passwort knacken wichtig. Man kann aber durch die Berechnung Rückschlüsse auf die Stärke oder Schwäche eines Algorithmus. Nur falls du das einmal studieren möchtest.

Performance beim Passwort knacken

Die Rechenleistung spielt beim Passwort knacken eine wichtige Rolle. Denn bei hoher Rechenleistungen können mehr Möglichkeiten durchprobiert werden.

Das Equipment zum Passwort knacken kann von einem einfachen Laptop bis zu 64 GPU Cluster reichen. Man unterscheidet beim Knacken zwischen CPU und GPU knacken. Die GPU ist im Vergleich viel schneller, da sie verbessert parallel arbeitet.

Um die Cracking Time zu berechnen also die Geschwindigkeit mit der ein Passwort geknackt werden kann berechnet man Schlüsselraum / Hashrate = Cracking Time

Die Hashrate berechnet sich aus der jeweiligen Hashfunktion / Rechenleistung

Jede CPU/GPU hat verschiedene Werte und Hacker führen vorher ein Benchmarking durch. Die unten genannten Tools unterstützen solche Leistungsprüfungen. D.h. man kann mit den Tools sehr schnell herausfinden wie viel Passwörter man pro sek. ausprobieren kann.

Wie knacken Hacker Passwörter in der Praxis

Hacker benutzen verschiedene Ansätze um Passwörter zu “knacken”. Der Vorgang kann auf einen Ablaufplan von 7 Phasen reduziert werden.

  1. Hashwert Extraktion
  2. Formatierung
  3. Stärke bewerten
  4. Ressourcen Aufwand berechnen
  5. Angriffsplan
  6. Passwort knacken
  7. Wiederholen

In der Extraktionsphase wird der Hashwert aus dem jeweiligen System oder der Anwendung “extrahiert” um diesen dann in weiteren Tools zu verwenden. Wie schon oben besprochen legen Betriebssysteme oder Anwendung die Passwörter irgendwo als Hashwert ab.

Jedes verwendete Tool benötigt zum knacken des Passwortes den Hashwert in einem geeigneten Format. Aber meistens ergibt sich das auch aus der Tool Dokumentation. Wenn Hacker z.B. mehrere Passwörter nacheinander knacken wollen. Dann hat dieser vielleicht eine List als .csv Datei vorliegen.

Die Stärke des Hashwertes ist sehr wichtig, da ein langsame Hashfunktion länger dauert. Um einen Android PIN zu generieren dauert es mit einer Geforce GTX1080 ca. 5419.4 kH/s.

Zu wissen wie viele Ressourcen zur Verfügung stehen ist wichtig, denn der Hacker möchte nicht mit einem veralteten Rechner einen starken Hashwert brechen das kann zum Teil Jahre dauern. Das Tool John The Ripper oder Hashcat bieten die Möglichkeit einen benchmark Test auszuführen um herauszufinden wie viel Ressourcen zur Verfügung stehen

Wie oben erwähnt können verschiedene Arten von Angriffen durchgeführt werden. Regel-Angriffe oder z.B. Hybrid-Angriffe. Ein richtiger Angriffsplan mit ausgeklügeltem Angriffsmuster erhöht die Erfolgschance.

Das Passwort zu knacken erfordert Zeit.

Nach einigen Durchgängen hat man vielleicht Glück. Sonst werden alle Schritte wiederholt. Vielleicht überdenkt man nochmal die Wörterbücher oder Angriffsparameter.

Für Hacker gibt es zum Passwort knacken keine Meisterplan, weil jedes Szenario zu kompliziert und anders ist.

Hacker Tools und Taktik

Klassische Programme die dafür verwendet werden sind:

Die 7 Phasen Angriffsphasen kann man leicht mit diesen Tools durchführen. Die Tools sind sehr gut Dokumentiert, vorallem Hashcat, sodass man schnell zu einem Ergebnis gelangt. Zum lernen kann man sich einige Tools in Python selber programmieren und üben. Ein erster Schritt wäre z.B. ein eigenes Brute-Force programm.

Das Programm kann nacheinander Buchstabenkombinationen ausprobieren:

  • aaaa
  • aaab
  • aaac
  • aaad

usw.

Buch Empfehlung

Wenn du mehr über das praktische Passwort knacken lernen möchtest, kann ich dir nur dieses Hacker Buch empfehlen. Das Buch wird durchgehend aktualisiert und es wird gut gezeigt wie Hacker die Programme oben benutzen.

hash-crack

Hash Crack – Password Cracking Manual