Wieso sich die TO einen Gaming-PC kaufte
Tatsächlich ist dieser Computer jedoch für mich bestimmt, einem Studenten der hier gerade sein Praxissemester absolviert. Bevor jetzt aber haufenweise Bewerbungen eingehen, von Leuten, die auch gerne mal auf so einem PC „zocken“ wollen – nein, auch ich spiele auf der Maschine keine Computerspiele.
Eine solche Grafikarte kann nämlich auch für andere, durchaus sinnvolle Zwecke verwendet werden, zum Beispiel zum Password Cracking.
Um zu verstehen, wieso man hier nicht einfach eine CPU verwendet, müssen wir uns etwas mit technischen Details beschäftigen:
Beim Rendern von Grafikdetails sind sehr viele mathematische Berechnungen notwendig. GPUs haben daher im Gegensatz zu CPUs eine viel höhere Anzahl an Kernen und können somit eine viel größere Anzahl an parallelen Berechnungen durchführen. Das kann man sich beim Passwortknacken zu Nutze machen.
Wie ist das Vorgehen beim Password Cracking?
Bei einem erfolgreichen Angriff auf eine Webplattform ist häufig die Passwortdatenbank ein begehrtes Ziel. Dummerweise findet man darin jedoch keine Klartextpasswörter, sondern sogenannte Hashes. Beim Hashen wird das Klartextpasswort mit Hilfe von komplexen mathematischen Formeln in eine Zeichenkette mit fixer Länge transformiert. Es gibt viele verschiedene Hashtypen, welche unterschiedlich komplex sind. Dadurch lassen sich manche schneller berechnen, als andere. Außerdem gibt es bei aktuellen Hashes keine „reverse Hashfunktion“, um Daten zurück in die Ursprungsform zu verwandeln.
Möchte man trotzdem das ursprüngliche Passwort herausfinden, muss also ein anderer Weg gefunden werden:
Zunächst erstellt man sich eine möglichst große Liste mit potentiellen Passwörtern, der so genannten Wordlist. Füllen kann man den Inhalt einer solchen Liste zum Beispiel mit
- Wörtern aus dem Wortschatz verschiedener Sprachen (deutsch, englisch, …)
- geografischen Begriffen (Namen von Flüssen, Namen von Bergen, ..)
- Medienspezifische Begriffe (Namen von Prominenten, Namen von Filmen, Namen von Bands und Musiktiteln, …)
- Begriffe aus dem Webauftritt einer Firma
Der Kreativität sind hier keine Grenzen gesetzt.
Die daraus resultierenden Wörter kann man schließlich noch miteinander verknüpfen und mit Zahlen oder Sonderzeichen ergänzen.
So wird eine Liste mit dem Inhalt:
Thinking
Objects
Zu:
Thinking
Objects
Thinking123
Thinking!
[…]
ThinkingObjects
Thinking123Objects
[…]
Thinking!Objects123
Nun kommt unsere Grafikkarte ins Spiel. Diese berechnet für jedes einzelne Wort in der Liste den dazugehörigen Hash. Diese daraus resultierenden Hashes müssen schließlich nur noch mit dem zu knackenden Hash verglichen werden und man wird, falls die Wordlist gut war – oder das Passwort zu schlecht – so letztendlich mit dem Klartextpasswort belohnt.
Um das besser zu verstehen, betrachten wir die Abbildung oben. Auf der rechten Seite des Doppelpunkts steht das Passwort, auf der linken Seiten der daraus resultierende md5-Hash.
Soll also der Hash
„ed98bbbed6317b37b8183758d8114046“
geknackt werden, berechnen wir für jedes Wort in der Wordlist den dazugehörigen Hash. Diesen vergleichen wir schließlich mit dem zu knackenden Hash. Dadurch finden wir unseren Hash in der letzten Zeile. Das gesuchte Passwort ist also „yakuza^^“.
Wie man sich eine eigene Wordlist bastelt
Im Rahmen meines Praktikums bei Thinking Objects war es meine Aufgabe, mithilfe der Hochleistungsgrafikkarte eine Umgebung zum Password Cracking aufzusetzen.
Zuerst musste jedoch eine Passwortliste her.
Da es bereits jede Menge solcher Wordlists im Internet zu finden gibt, habe ich mir die im vorherigen Abschnitt beschriebenen Schritte gespart. Mein Ziel war es, eine möglichst umfangreiche Liste für komplexe Passwörter und eine möglichst kurze, aber effiziente Liste für einfache Passwörter zu erstellen.
Für die umfangreiche Liste habe ich aus diversen Quellen Wordlists heruntergeladen, diese alle in eine Datei geschrieben, und zum Schluss die Duplikate mit den Linux Tools „sort“ und „uniq“ aussortiert. Die finale Liste ist ganze 85 Gigabyte groß und enthält 9.449.970.910 Wörter. Ausgeschrieben sind das unvorstellbare 9,5 Milliarden! Man könnte also bei 7,44 Milliarden Menschen für jeden einzelnen mindestens ein Passwort in dieser Liste festhalten.
Um die zweite Liste möglichst kurz und effizient zu halten, habe ich mir spezielle Listen mit verschiedenen Standard-Passwörtern, sowie den 1 Million am häufigsten verwendeten Passwörtern heruntergeladen und diese ebenfalls in einer Liste zusammengefasst. Diese ist knapp 700 MB groß und enthält „nur“ rund 63 Millionen Wörter. Sie soll außerdem im Laufe der Zeit mit allen auf der Maschine geknackten Passwörtern von deutschen Accounts erweitert werden, um somit die bestmögliche Performance zu liefern.
Zusätzlich habe ich sogenannte Masks erstellt, welche Bruteforcing nach bestimmten Mustern erlauben. Somit ist es möglich, alle Zeichen aus einem bestimmten Zeichensatz einmal durchlaufen zu lassen.
Um dies zu veranschaulichen, hier ein Beispiel:
Zeichensatz a-z, 0-9
aaaa
aaab
aaac
[…]
aaa1
[…]
ab39
ab40
[…]
Dieses Verfahren ist zwar sehr zeitaufwendig, jedoch kann damit JEDES Passwort geknackt werden! Die einzige Möglichkeit, sich gegen einen solchen Angriff zu wehren, ist ein möglichst langes Passwort mit möglichst vielen verschieden Zeichen zu verwenden. Ab einer bestimmten Länge und Zeichenanzahl ist ein solcher Angriff nämlich nahezu unmöglich. Bereits ab acht Zeichen (Groß-, Kleinbuchstaben, Zahlen und Sonderzeichen) dauert dieser Vorgang mehrere Tage (md5 Hashes). Mehr zum Thema „Sicheres Passwort“ findet sich im Beitrag Warum Passwörter Mist sind – Tipps zu sicheren Passwörtern.
Wie funktioniert dieses Passwortknacken in der Praxis und wie lange dauert sowas überhaupt?
Wer sich nun fragt, wie man so auf die Schnelle mehrere Millionen oder gar Milliarden Hashes berechnet und diese dann auch noch mit einem bereits vorhandenen Hash abgleicht, nein, das muss man natürlich nicht manuell machen. Dafür gibt es diverse Tools. Eines der besten nennt sich Hashcat. Es kann kostenlos im Internet heruntergeladen werden und ist verfügbar für Linux und Windows. Hashcat wird über die Kommandozeile bedient und benötigt als Parameter lediglich den Hashtyp, den Pfad zur Wordlist und den Pfad zur Liste mit dem zu knackenden Hash beziehungsweise den Hashes. Danach arbeitet das Programm die Liste vollautomatisch ab und zeigt gleichzeitig den Fortschritt sowie die Anzahl an bereits gefundenen Passwörtern an.
Je nach Hashtyp geht das Password Cracking extrem schnell, dauert mehrere Tage oder gar Jahre. Um dies zu veranschaulichen, folgen einige Beispiele. Wir gehen dabei vom Worst Case aus, das heißt, das gesuchte Passwort steht ganz am Ende der Wordlist oder ist gar nicht enthalten.
Hier wurde die bereits oben erwähnte 85 GB Wordlist verwendet. Zu knacken war jeweils ein Hash:
Hashtyp | Dauer zum kompletten Abarbeiten der Wordlist | Geschwindigkeit in Hashes per Second (H/s) |
---|---|---|
Md5 | ~ 31 Sekunden | ~ 30521 M |
Sha512 | ~ 11 Minuten | ~ 1491 M |
Sha512 (salt) | ~ 12 Minuten | ~ 1317 M |
Sha512crypt (default iterations 656000, salt) | ~ 12 Stunden, 37 Minuten | ~ 208 k |
WPA2 PSK (WLAN Key) | ~ 4 Stunden, 45 Minuten | ~ 553 k |
Scrypt (costfactor 1, salt) | ~ 3 Stunden, 20 Minuten | ~ 787.5 k |
Bcrypt (costfactor 5, salt) | ~ 5 Tage, 1 Stunde | ~ 21645 |
Hier wurde erneut die 85 GB Wordlist verwendet. Allerdings waren diesmal 16 Hashes zu knacken:
Hashtyp | Dauer zum kompletten Abarbeiten der Wordlist | Geschwindigkeit in Hashes per Second (H/s) |
---|---|---|
Md5 | ~ 31 Sekunden | ~ 30521 M |
Sha512 | ~ 11 Minuten | ~ 1491 M |
Sha512 (salt) | ~ 3 Stunden, 12 Minuten | ~ 1317 M |
Sha512crypt (default iterations 656000, salt) | ~ 8 Tage, 20 Stunden | ~ 208 k |
WPA2 PSK (WLAN Key) | ~ 4 Stunden, 45 Min. | ~ 553 k |
Scrypt (costfactor 1, salt) | ~ 2 Tage, 5 Stunden | ~ 787.5 k |
Bcrypt (costfactor 5, salt) | ~ 80 Tage, 20 Stunden | ~ 21645 |
Die in den Tabellen ersichtlichen Zeiten bedeuten aber nicht, dass wir nun auch tatsächlich das Klartextpasswort haben. Lediglich unsere Liste wurde nun abgearbeitet.
Vor allem auffällig ist die große Diskrepanz bei den Hashes mit Salt.
Salted Hashes werden zusätzlich mit einem Key verändert. Dadurch sieht das Endprodukt eines solchen Hashes immer unterschiedlich aus, auch wenn zwei Passwörter eigentlich dieselben sind. Aus dem Passwort „password“ und dem Salt „salt“ wird dabei die Zeichenkette „password:salt“. Wird nun eine md5 Hashfunktion darauf angewandt, entsteht der Hash „799b011d1fc69cfe034b9d4417933509“. Verwenden wir nun dasselbe Passwort, aber den Salt „geheim“, entsteht ein komplett unterschiedlicher Hash: „5b162422c4ccc0c8f02ea0568f0bd78b“.
Für jeden zu knackenden Hash muss also einmal die komplette Wordlist berechnet werden. Dadurch steigt die Dauer mit der Menge der zu knackenden Hashes. Bei einem einzelnen Hash ist jedoch kaum ein Unterschied festzustellen.
Auch der Costfactor wurde eingeführt, um das Passwortknacken zu verlangsamen. In vereinfachter Darstellung betrachtet, wird die Hashfunktionen dabei zunächst auf das Klartextpasswort, dann auf den daraus resultierenden Hash angewendet. Dies wird mehrere Male wiederholt:
md5(password) = 5f4dcc3b5aa765d61d8327deb882cf99 ->
md5(5f4dcc3b5aa765d61d8327deb882cf99) = 696d29e0940a4957748fe3fc9efd22a3 ->
md5(696d29e0940a4957748fe3fc9efd22a3) = …
Vom unkoordinierten Durcheinander zum automatisierten Fließband Cracking
Um die Password Cracking Maschine möglichst effizient in der Firma nutzen zu können, habe ich abschließend das Tool Task-Spooler aufgesetzt. Es ermöglicht mehrere Kommandozeilenbefehle in eine Queue zu stellen. Mitarbeiter können also ihre Crackingjobs in diese Warteschlange stellen und müssen nicht jedes Mal prüfen, ob der aktuelle Vorgang bereits beendet wurde. Ist ein Crackingjob abgeschlossen, bekommt der Auftraggeber eine Benachrichtigung per Mail.
Weshalb möchte die TO geklaute Passwörter von mir knacken? Ist das nicht illegal?
Wir bei der TO sind die Guten! Daher stellen wir natürlich nichts Böses mit den geknackten Passwörtern an. 🙂 Oft werden wir aber von Firmen beauftragt, ihr IT System auf Sicherheitslücken zu prüfen. In diesem Fall haben wir das Einverständnis, legal in die Systeme einzubrechen. Dabei werden unter anderem Benutzer Accounts und die dazu gehörigen gehashten Passwörter gefunden. Nach diesen Hashes können wir schließlich in unserer Hash-Datenbank suchen. Falls dort noch kein passender Eintrag vorhanden ist, versuchen wir die Hashes zu knacken. Mehr zu unserer Hash-Datenbank findet sich demnächst im Artikel „Warum mein Dating-Profil ein Unternehmensrisiko ist“.
Super Artikel