Have I been Pwned?

Have I been Pwned?

techstuff security

Nachdem die Passwortsammlung "Collection #1" bekannt ist, wird es Zeit einmal die eigenen Logins mit diesen Daten abzugleichen.

Heute Morgen (17. Januar 2019) veröffentlichte Troy Hunt einen Blogartikel mit dem Titel The 773 Million Record "Collection #1" Data Breach. Troy ist der Initiator von Have I been pwned?. Ihm wurde ein Datensatz mit knapp 2,7 Milliarden kompromittierten Username/Passwort Kombinationen zugespielt. Darin enthalten sind 773 Millionen eindeutige eMail-Adressen und darunter natürlich auch einige von meinen eigenen.

Die Information darüber bekam ich übrigens über den Benachrichtigungsdienst von haveibeenpwned.com. Dort die eigenen Adressen zu hinterlegen kann ich nur empfehlen!

Jetzt wäre es natürlich wünschenswert zu wissen welche meiner Konten kompromittiert wurden. Die Seite gibt nur die Information, dass Adressen von mir im Zusammenhang mit Collection #1 auftauchen - aber nicht mit welchen Konten oder Websites die Daten in Verbindung stehen. Das ist soweit auch ok, schließlich möchte man nicht zu viele Informationen über die Verbindung von Adressen zu Webservices an dieser Stelle in Netz liegen haben. Aber wie komme ich jetzt an die betroffenen Dienste?

Hätte ich eine eigene Mail-Domain und hätte ich pro Konto eine individuelle Adresse verwendet, könnte ich die Domain Search nutzen. Aber ehrlich, zwei mal "hätte"... wer betreibt privat wirklich so einen Aufwand? Dieser Dienst ist vor allem sinnvoll für Administratoren von Maildomains mit mehreren Usern geeignet (sprich: Firmen, etc.). Diese sollten ihn auch dringend nutzen.

Ich bin an dieser Stelle ein wenig stolz auf mich weil ich bereits vor einiger Zeit alle meine Konten mit eindeutigen und komplexen Passworten ausgestattet habe. Das schützt natürlich noch nicht vor schlechter Verschlüsselung auf Serverseite; daher bleibt der Bedarf die kompromittierten Konten zu finden.

Die Suche nach den eigenen Passworten

haveibeenpwned.com hat noch einen Service zur Suche nach den Passworten selbst - also in meinem Fall ein eindeutiges Identifizierungsmerkmal. Aber ist es eine gute Idee ein echtes Passwort an irgendeinen Webservice zu schicken? Die API des Webservices arbeitet mit dem Modell der k-Anonymität um die Abfrage zu schützen. Es gibt zwei wesentliche Risiken:

  • Nutzt man das Webformular, wird das Passwort im Browser per Javascript gehasht. Ich muss also der Site und dem Browser vertrauen. Um dem zu entgehen implementiere ich den Client einfach selbst. Im Formular mehrere hundert Passworte manuell abzugleichen wäre ohnehin recht unpraktisch.
  • Einen Teil des Hashes preiszugeben macht unter Umständen einen Wörterbuchangriff möglich. Derzeit liefert die API pro Aufruf etwa 500 mögliche Einträge aus dem "Collection#1 Wörterbuch". Dieses Risiko kann ich aber ignorieren, da aufgefallene Passworte ohnehin geändert werden.

Um ganz sicher zu gehen, kann man natürlich auch die ganze Hashdatenbank herunterladen und die eigenen Hashes offline vergleichen.

Die PWNEDPassword API funktioniert wie folgt:

  1. Mein Client errechnet einen SHA-1 Hash des fraglichen Passwortes.
  2. Der Hash wird in einen fünfstelligen Prefix und den 35-stelligen Suffix zerteilt.
  3. Der Prefix wird an die API geschickt und zurück kommt eine Liste von Suffixen mit der Anzahl der PWNs.
  4. Jetzt kann ich die gelieferten Suffixe mit meinem Suffix vergleichen.
  5. Gibt es eine Übereinstimmung, ist das entsprechende Passwort kompromittiert.
  6. Gibt es keine Übereinstimmung habe ich (zur Zeit) kein Problem.

Pwned Password API

Der Prozess wird natürlich am besten automatisiert um eine ganze Liste von Passworten abzuarbeiten. Das Script für den Abruf habe ich bei Github eingestellt. Es nimmt eine Datei mit Passworten als Argument (Ein Passwort pro Zeile) und gibt einen Bericht in folgendem Format zurück:

$ ./checkPasswordList.sh passwordlist.txt
Checking passwords from list passwordlist.txt
XX: Password P@ssw0rd has been pwned 51259 times.
__: Password CaPZYwyaNKomZCqyxT4tddQjvxRvCsICaOBAqYec has not been pwned.
__: Password 8A6dsaEUtOb7N4e70j+OdVWaCsSKlRKUyYAHRE8m has not been pwned.
==: 1 of 3 passwords have been pwned.

Das Resultat: Meine Passwortliste scheint im Moment sicher zu sein. Auffällig sind lediglich Handy-PINs und Co. aber damit war zu rechnen und diese PINs werden nicht für Internetkonten verwendet. Die in der Sammlung enthaltenen Daten sind möglicherweise schon etwas älter.

Vorheriger Beitrag