Sind deine Passwörter schon gehackt?

Immer wieder werden Fälle von veröffentlichten Passwörtern bekannt. Diese im Klartext veröffentlichten Passwörter werden sodann direkt für neue Angriffe verwendet da viele Benutzer_innen nach wie vor ein und dasselbe Passwort für verschiedene Dienste verwenden. Das machen sich die Angreifer_innen zunutze und testen diese veröffentlichten Passwörter natürlich als erstes.
Passwörter, welche einmal veröffentlicht wurden sollten daher unter keinen Umständen nochmals verwendet werden. Am Besten wäre es sogar, wenn jeder Onlinedienst beim Login, Ändern oder Erstellen eines Passworts eines Benutzers das Passwort direkt mit bereits veröffentlichen, also gehackten, Passwörtern abgleicht und die Weiter-(Verwendung) direkt verhindert.

Update 03.03.2018: Troy Hunt hat inzwischen eine neue Version seiner API veröffentlicht. Dabei müssen nur noch die ersten 5 Stellen eines SHA-1 Hashes übertragen werden. Details der API-Version 2 vom 22.02.2018

Der Sicherheitsforscher Troy Hunt hat sich daher die Mühe gemacht und alle durch Sicherheitslücken veröffentlichen Passwörter zusammengetragen, Duplikate entfernt und diese als SHA-1 Hashes veröffentlicht. Zudem stellt er einen Onlinedienst namens (HaveIBeenPwned) bereit. HaveIBeenPwned meint so viel wie „ist mein Passwort schon verbrannt bzw. vernichtet?“. Auf der Internetseite kann ein Passwort im Klartext und SHA-1-Hash übermittelt werden und mit der Datenbank der bereits geknackten Passwörter (ca. 320 Millionen) abgeglichen werden. Troy Hunt weist deutlich darauf hin, dass man auf seiner Internetseite keine aktiv unter Verwendung stehenden Passwörter testen sollte, selbst wenn das Passwort als SHA-1 übermittelt wird. Wenn du den Dienst testen möchtest, probiere es einfach mal mit „admin“ oder „123456“ und einer zufälligen Zeichenkette aus.

Um die Vorzüge der Datenbank in Anspruch nehmen zu können, kannst du die veröffentlichte Datenbank und Updates (ca. 5,5 GB) herunterladen um diese Lokal, auf deinem Rechner, mit den von dir verwendeten Passwörtern abzugleichen. Soll nur ein Passwort geprüft werden, so erzeuge den Hash des Passwortes in Großbuchstaben im Terminal z. B. mittels:
echo -n "admin" | openssl sha1 -binary | xxd -p | awk '{print toupper($0)}'

Obige Zeile erzeugt den SHA-1 Hash des Passwortes „admin“ mit dem Wert D033E22AE348AEB5660FC2140AEC35850C4DA997. Dieser Hash kann nun in den heruntergeladenen Textdateien gesucht werden, was jedoch einige Minuten dauern wird und keinen Spaß macht :-(.

Um den Vorgang deutlich zu beschleunigen, importiert man die 320 Millionen veröffentlichen Hashes beispielsweise in eine SQLite-Datenbank und erzeugt anschließend einen Index über die Spalte mit den Hashwerten. Die Datenbankdatei inklusive Index umfasst bei mir nun ca. 39 GB. Durch eine SQL-Abfrage
SELECT sha1 FROM passwords WHERE sha1 = 'D033E22AE348AEB5660FC2140AEC35850C4DA997';
erhält man nach wenigen Millisekunden ein Ergebnis.
Um den Vorgang weiter zu vereinfachen habe ich ein kleines Shell-Skript geschrieben, welches aus einer .csv-Datei Passwörter im Klartext einliest, Hashes erstellt und diese automatisch mit der Datenbank vergleicht. In wenigen Sekunden erhält man so ein Ergebnis darüber welche der von einem verwendeten Passwörter bereits „verbrannt“ sind. Die Skripte und auch die Datenbankdatei mit Index stelle ich hier zum Download zur Verfügung.

Update 03.03.2018: Die Datenbankdatei steht hier nicht mehr zum Download zur Verfügung.

Update 23.01.2019: Da es inzwischen viele Dienste und Passwortmanager gibt welche HaveIBeenPwned integriert haben stehen die Downloads hier nicht mehr zur Verfügung.

Links zum Thema

Wie verwende ich das Skript unter Mac OS und/oder Linux?

  1. Lade die Datenbank (A) und das Überprüfungsskript (B) herunter und extrahiere die Datenbank aus der 7-Zip-Datei.
  2. Erstelle eine plaintext.csv-Datei (C) mit dem Titel deiner Passwörter in der 1. Spalte und dem jeweils zugehörigen Passwort im Klartext in der 2. Spalte
  3. Speichere alle drei Dateien (entpackte Datenbank A, Datei B und C) in einem Ordner z. B. /Pwned
  4. Öffne das Überprüfungsskript mit einem Texteditor und ändere gegebenenfalls den Dateinamen der .csv-Datei und den der Datenbankdatei in den ersten beiden Zeilen. Speichere die Datei.
  5. Öffne ein Terminalfenster navigiere zum Ordner in dem die Dateien liegen: cd /dein/Pfad/zu/Pwned/
  6. Starte das Skript B mit bash check_if_pw_burned.sh
  7. Das Ergebnis wird direkt im Terminal ausgeben z. B.:
    Oh no - pwned!: hallowelt found in database for: eBay
    Oh no - pwned!: admin found in database for: Amazon
    -------------------------------
    Summary
    -------------------------------
    Checked: 20 Passwords
    Burned: 2 Passwords
    Not burned: 18 Passwords
    -------------------------------
    Burned password(s) previously appeared in a data breach and should never be used. If you've ever used it anywhere before, change it immediately!
    Based on data & idea from: https://haveibeenpwned.com/
    ------------------------------
  8. Lösche die Datei plaintext.csv sicher!

Ich schreibe in meiner Freizeit und freue mich über jede kleine Tasse Kaffee die du mir spendest 😉