it-swarm-eu.dev

Passwort vergessen oder Link zurücksetzen, was ist sicherer für E-Mails?

Ich habe dies ursprünglich als Antwort hier gepostet in diesem Thread , aber nicht viel Feedback dazu erhalten, und jetzt bin ich gespannt, was andere für den besten Ansatz halten oder ob es einen Unterschied gibt zwischen den beiden Ansätzen.

Der ursprüngliche Punkt war, ob es sicherer war, einen Link zum Zurücksetzen des Passworts zu senden, wenn ein Benutzer sein Passwort an eine Website vergisst, oder ob das ursprüngliche Passwort unverschlüsselt in einer E-Mail gesendet werden sollte.

Jetzt ist es schlecht, ein Passwort nicht zu salzen und zu verschlüsseln, denn wenn die Datenbank irgendwann von der Website gestohlen wird, hat der Angreifer alle Passwörter als Tag klar. OK gut, das verstehe ich.

Aber wenn wir die Möglichkeit des Diebstahls der Datenbank ignorieren und nur den Benutzer betrachten, der sein Passwort vergisst und die "Schritte für vergessene Passwörter" durchläuft; Ist es mehr, gleich oder weniger sicher, einen Reset-Link über ein Nur-Text-Passwort in einer E-Mail zu senden?

Ich denke, dass es das gleiche ist. Denn wenn ein Angreifer auf irgendeine Weise Zugriff auf Ihre E-Mail hat (er kennt Ihre E-Mail-Anmeldedaten oder er schnüffelt den Datenverkehr irgendwo), hat er Zugriff auf das gesendete Klartext-Passwort oder den Reset-Link - auch wenn es nur eine begrenzte Zeit ist Verknüpfung.

Der Angreifer könnte Ihr Passwort zurücksetzen, bevor Sie überhaupt wissen, dass Sie eine E-Mail haben.

Ist mein Denken hier fehlerhaft?

23
fwgx

Es ist viel einfacher, auf das vorhandene E-Mail-Korpus zuzugreifen, als auf den eingehenden Stream. Wenn Sie beispielsweise ein paar Minuten Zugriff auf das System einer Person erhalten, können Sie diese ganz einfach durchsuchen. Für den Fall, dass ein Angreifer Zugriff auf alte E-Mails hat, jedoch nicht auf den Strom neuer eingehender E-Mails:

Sie verlassen sich darauf, dass der Benutzer entweder sein Passwort nach Erhalt ändert (unwahrscheinlich, da Sie ihm mitgeteilt haben, was es ist) oder die Erinnerung löscht (dauerhaft, nicht archiviert oder in einen Papierkorb verschoben, ebenfalls unwahrscheinlich) Botschaft.

Wenn dies nicht der Fall ist und ich einige Zeit später Zugriff auf das E-Mail-Konto des Benutzers erhalte, wird kein Reset-Link (zeitlich begrenzt/begrenzte Nutzung, möglicherweise sogar so begrenzt, dass der Angreifer ihn nicht einfach verwenden kann) vorhanden sein Verwenden Sie für mich, aber mit dem (höchstwahrscheinlich noch gültigen) Passwort ist sicherlich.

Indem Sie mir das Klartext-Passwort senden, zeigen Sie außerdem, dass Sie dieses an einem zugänglichen Ort gespeichert haben. In den meisten Fällen ist dies nicht erforderlich, da Sie das Kennwort (und Salz/Pfeffer) nicht verschlüsseln müssen, sondern nur hashen müssen. Wenn es verschlüsselt ist, kann jeder, der Zugriff auf die Datenbank und den Entschlüsselungsschlüssel hat (z. B. wahrscheinlich die meisten Mitarbeiter oder jeder, der den Code zusammen mit der Datenbank stiehlt), das Klartextkennwort erhalten. Wenn es gehasht ist, müssen Sie es erhalten, bevor das Hashing stattfindet (z. B. während einer Anmeldesitzung).

Obwohl dies nicht der Fall sein sollte, ist es sehr häufig, dass auf mehreren Websites dasselbe Kennwort (oder sehr ähnliche Kennwörter) verwendet wird. Das bedeutet, dass Sie nicht nur einen Weg finden, auf nur ein Konto zuzugreifen, sondern auch auf viele.

In dem anderen Fall, in dem der Angreifer Zugriff auf alle eingehenden E-Mails hat (möglicherweise sogar auf die Möglichkeit, eingehende E-Mails zu entfernen, bevor der Benutzer sie sieht), ist keines dieser Elemente sicher. Das E-Mail-Konto lautet hohes Risiko , denn wenn Sie über diese Art von Zugriff verfügen, können Sie wahrscheinlich zu jeder Site gehen, bei der der Benutzer ein Konto hat, und ein Zurücksetzen des Kennworts generieren. Um dies zu vermeiden, müssen Sie etwas anderes als (oder auch) Ihr E-Mail-Konto verwenden, um Zugriff zu erhalten, z. B. die Zwei-Faktor-Authentifizierung.

Beachten Sie, dass auch im letzteren Fall ein Reset-Link immer noch überlegen ist: Wenn der Angreifer das Kennwort des Benutzers über einen Reset-Link ändert, stellt der Benutzer beim Versuch, sich anzumelden, fest, dass etwas nicht stimmt (zu spät, aber zumindest wissen sie). Wenn Sie nur das Kennwort angeben, hat der Benutzer keine Ahnung, dass der Angreifer stillschweigend Zugriff erhalten hat.

40
Tony Meyer

Ok, ignorieren Sie die Tatsache, dass die Passwörter im Klartext gespeichert sind, und tauchen Sie direkt in die Frage ein :. Das Kennwort ist ein Berechtigungsnachweis mit langer Gültigkeit, während ein Link zum Zurücksetzen des Kennworts auf verschiedene Arten festgelegt werden kann:

  1. Nur für kurze Zeit gültig
  2. Nur gültig ab einer bestimmten IP
    • Vorzugsweise dieselbe IP, von der die Passwortanfrage gesendet wurde.
  3. Nur gültig innerhalb der Benutzersitzung
    • Wenn der Benutzer Details in das Webformular eingibt, um ein neues Kennwort anzufordern, erhält der Benutzer ein Cookie (Starten einer Sitzung). Die Validierung der Passwort-Reset-URL hängt von etwas in dieser Sitzung ab. Daher schlägt die Validierungsfunktion fehl, wenn die Anforderung ohne das Cookie erfolgt.

Es sollte auch beachtet werden, dass ein altes Passwort, das möglicherweise nicht mehr auf Ihrer Site gültig ist, für den Kunden immer noch sehr sensibel ist, da Benutzer Passwörter für alle Arten von Diensten wiederverwenden.

Unter diesem Gesichtspunkt könnte das Einfügen von Passwörtern in die E-Mail-Boxen der Leute als unhöflich angesehen werden.

22
mhswende

Wenn Sie das Kennwort eines Benutzers im Klartext senden, senden Sie möglicherweise ein Kennwort, das er auch auf anderen Websites verwendet. Selbst wenn Sie den Benutzer zwingen, das Kennwort auf Ihrer Website bei der nächsten Anmeldung zu ändern, haben Sie ihm keinen Gefallen getan überhaupt.

9
Tom Newton

Es ist unethisch, Passwörter im Klartext zu speichern, wenn Sie die geringste Sorge um Ihre Benutzer haben. Sie sollten sichere gesalzene Hashes aufbewahren. Das Senden eines Klartextkennworts kann dazu führen, dass sicherheitsbewusste Benutzer Ihren Dienst nicht mehr verwenden (obwohl sicherheitsbewusste Benutzer Kennwörter nicht wiederverwenden; sie unterstützen nur keine Dienste, die offensichtlich nicht sicherheitsbewusst sind).

Wie implementiert man ein Zurücksetzen des Passworts? Im Allgemeinen müssen Sie für eine mäßig sichere Site (z. B. Kreditkarte) einige grundlegende Sicherheitsfragen beantworten (z. B. den Mädchennamen der Mutter) und überprüfen, ob sie die Kontrolle über ihr E-Mail-Konto oder ihre Telefonnummer haben, als eine Form der Zwei-Faktor-Authentifizierung. Der Link sollte nur in einem kurzen Zeitfenster (Stunden bis Tage) und nur einmal gültig sein (z. B. enthält er ein zufällig erstelltes Token, das nach der ersten Verwendung und nach einem bestimmten Zeitraum abläuft).

Sie benachrichtigen sie auch darüber, dass das Kennwort zurückgesetzt wurde (und selbst wenn ihre E-Mail-Adresse kompromittiert wurde; sie finden Hinweise auf einen Angreifer, wenn sie sich nicht mehr mit ihrem alten Kennwort anmelden können). Das Senden des Passworts (ohne es zu ändern) bedeutet, dass dieser Angriff heimlich ausgeführt werden kann, ohne dass der Benutzer es jemals weiß (wenn beispielsweise die E-Mails gelöscht wurden).

9
dr jimbob

Es ist besser, einen Link zum Zurücksetzen des Passworts zu senden.

Einige Websites haben das Formular für das vergessene Passwort sofort auf einen zufälligen Wert zurückgesetzt, der per E-Mail an den Benutzer gesendet wird. Dies hat einen Denial-of-Service-Fehler: Jemand, der nicht der Kontoinhaber ist, kann dazu führen, dass sein Kennwort zurückgesetzt wird. Der Link zum Zurücksetzen des Kennworts vermeidet dies, da das Kennwort erst zurückgesetzt wird, wenn ein Benutzer auf den Link klickt. Dazu muss er Zugriff auf die E-Mail-Adresse haben.

Wenn Sie ein wenig Sicherheit gegen einen Angreifer wünschen, der Zugriff auf die E-Mail-Adresse des Benutzers hat, besteht der übliche Ansatz darin, auch Sicherheitsfragen zu stellen. Dies sind Fragen wie "Wie war der Vorname Ihres Haustieres?". Die Zeit, um diese zu fragen, ist, nachdem der Benutzer auf den Link zum Zurücksetzen des Passworts in der E-Mail geklickt hat.

Einige gute Ratschläge hier: https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

3
paj28

Es ist besser, einen Reset-Link zu senden.

Zusätzlich zu den von @Tony Meyer und @mhswende angegebenen Gründen kann die Seite unter dem Link zum Zurücksetzen eine zusätzliche Authentifizierung erfordern. Auf vielen Websites müssen Benutzer genau zu diesem Zweck "Sicherheitsfragen" beantworten (der alte Standard vor dem Computer fragt nach dem Mädchennamen Ihrer Mutter). Bei Websites mit Ihrer Telefonnummer müssen Sie möglicherweise auf der Seite zum Zurücksetzen des Kennworts einen Code eingeben, den sie per SMS gesendet haben. Finanzinstitute stellen möglicherweise Fragen zu alten Finanzunterlagen (frühere Morgtages usw.).

Es ist nicht trivial, einen guten sekundären Authentifizierungsmechanismus zu entwickeln, aber jedes Verfahren zum Zurücksetzen (oder Wiederherstellen) von Passwörtern, das nicht anfällig genug ist, dass ich es als fahrlässig bezeichnen würde.

2
ShadSterling