Zurücksetzen des ASP.NET-Passworts - Sicherheitsprobleme?

8

Ich habe verschiedene Fragen zu diesem Thema gesehen, aber es gibt ein paar Fragen, die nicht gestellt wurden. Wenn der Benutzer sein Passwort vergisst, möchte ich, dass er es nur mit seiner E-Mail-Adresse zurücksetzen kann (d. H. Es gibt keine Sicherheitsfrage / Antwort). Das Passwort wird als gesalzener Hash gespeichert, so dass keine Wiederherstellung möglich ist. Stattdessen möchte ich, dass der Benutzer ein neues Passwort eingibt, nachdem er bestätigt hat, dass er einen Reset angefordert hat.

  

Eine gängige Methode, die erwähnt wurde, ist einfach:

     

1) Erstellen Sie eine zufällige Guid / Kryptografisch starke Zufallszahl

     

2) Senden Sie eine eindeutige URL mit der Zufallszahl an die E-Mail des Benutzers   Adresse

     

3) Wenn bestätigt, wird der Benutzer aufgefordert, das Passwort zu ändern

Aber ist das nicht für einen MITM Angriff offen? Wenn das Senden temporärer Kennwörter über das Internet an eine E-Mail unsicher ist, was ist der Unterschied zwischen dem Ausführen und dem Senden einer eindeutigen URL, zu der der Angreifer navigieren kann? Habe ich irgendwo einen wichtigen Schritt verpasst, der dieses System sicherer macht (Oder gibt es einen besseren Weg, das Passwort zurückzusetzen)?

Danke

    
keyboardP 27.01.2010, 22:45
quelle

3 Antworten

9

Wenn Sie Ihren Hash korrekt erstellen, muss der URL-Klick von der IP-Adresse kommen, die den Reset angefordert hat. Dies würde erfordern, dass der MITM die IP fälscht und / oder Header verfälscht. Während dies möglich ist, je eindeutiger Sie den Hash für das fragliche System identifizieren können, desto schwieriger wird es, den Hash "zu beenden".

Es wird auch empfohlen, dass die GUID ein Einweg-Hash von bestimmten Kriterien ist. Es ist auch möglich, Systemdaten in der Anforderung unter Verwendung eines öffentlichen Schlüssels zu verschlüsseln, den ein privater Schlüssel entsperrt, so dass beim Anklicken der URL dieselben öffentlich verschlüsselten Systemdaten den Hash begleiten müssen und das einzige System, das diese Werte entschlüsseln könnte, wäre der private Schlüssel, der auf dem Server gehalten wird. Im Grunde ein Pseudo-PKI Anhang zum Hash.

    
Joel Etherton 27.01.2010, 22:59
quelle
7

Ihre Authentifizierungsmethode für den Benutzer ist ein gemeinsames Geheimnis (das Passwort).

Wenn der Benutzer dieses Geheimnis vergisst, müssen Sie einen neuen gemeinsamen geheimen Schlüssel einrichten. Egal, wie Sie vorgehen, Sie haben immer noch das Problem, den Benutzer zu authentifizieren, um das neue Geheimnis zu teilen.

Wenn Sie nur über die E-Mail-Adresse des Benutzers informiert sind, der für die Authentifizierung verwendet werden kann, müssen Sie bestätigen, dass der Benutzer, der einen Reset anfordert, die Kontrolle über diese E-Mail-Adresse hat.

>

Und der einzige Weg, dies zu tun, ist, ein Geheimnis an diese E-Mail-Adresse zu senden und zu überprüfen, ob sie es erhalten haben.

Was immer einem hinterhältigen MitM-Angriff offen steht.

Der Grund, warum Sie kein temporäres Passwort senden, besteht darin, das Problem zu vermeiden, dass "der Benutzer nicht gestört werden kann und stattdessen das unsichere temporäre Passwort anstelle seines eigenen sicheren Passwortes verwendet."

    
Anon. 27.01.2010 22:59
quelle
1

Um das Risiko eines Mannes im mittleren Angriff zu verringern, verwende ich die folgenden Maßnahmen:

  • Eine Zurücksetzungsanforderung kann nur einmal verwendet werden.
  • Wenn eine Rücksetzanforderung nicht verwendet wird, läuft sie nach einer Stunde ab.
  • Alle Zurücksetzungsanforderungen werden permanent protokolliert, unabhängig davon, ob sie endgültig abgeschlossen wurden oder abgelaufen sind.
Nick Higgs 28.01.2010 01:02
quelle