Frage:
Passwortlose Authentifizierung - wie und wann ein Anmeldecode ungültig gemacht werden soll
Joel Harkes
2019-07-04 17:43:00 UTC
view on stackexchange narkive permalink

Unser System verwendet die kennwortlose Anmeldung, um dem Benutzer einen Anmeldecode + Link per E-Mail zu senden, über den er sich anmelden kann.

Wir haben festgestellt, dass einer unserer Kunden einen Mail-Scanner hat, der diesen Links tatsächlich folgt. Wir machen die verwendeten Anmeldecodes ungültig, um die Angriffsfläche für einen Angreifer zu verringern. Aber jetzt haben solche E-Mails keinen gültigen Anmeldelink mehr.

Hierfür scheint es zwei Lösungen zu geben:

  • Geben Sie keinen Anmeldelink an, sondern nur einen Code im message.
  • Lassen Sie den Anmeldecode nach der ersten Verwendung für den X-Zeitraum gültig sein (sagen wir, er wird nach 15 Minuten ungültig).

Option 1 scheint von unserer UX nicht akzeptabel zu sein Team.

Option zwei scheint viel weniger sicher zu sein:

  • Bietet eine größere Angriffsfläche, da mehr Codes in unserer Datenbank aktiv sind.
  • Social Das Engineering wird einfacher: Ein Benutzer kann innerhalb des gültigen Zeitraums (obwohl der Benutzer den Code bereits verwendet hat) ein Bild von der E-Mail und dem Typ des Codes machen und sich mit diesem Code anmelden.

Würde Gibt es eine andere oder bessere Lösung, die sowohl UX-freundlich als auch (zumindest als) sicher ist?

Genau diese Frage wurde schon einmal gestellt.Ich kann es momentan nicht finden, aber ich weiß, dass es hier ist.
Verfügt der einmalige Kunden-Mail-Scanner über einen ausreichend eindeutigen Benutzeragenten, den Sie einfach auf Ihrem Server blockieren können?Möglicherweise mit dem Kunden _static_ _IP_ gekoppelt?
So ärgerlich, dass ich keine echte Antwort darauf geben werde: Setzen Sie ein CAPTCHA auf die Seite, zu der der Login-Link führt.
https://security.stackexchange.com/questions/211258/do-mail-servers-follow-links-in-emails-as-part-of-a-security-scan-before-inbox-d/211293#211293
Vielleicht ungültig machen, nachdem er tatsächlich etwas auf der Seite getan hat?Wenn auf den Link geklickt wird, bedeutet dies nicht, dass ein Passwort festgelegt wurde
Wie wird die E-Mail überhaupt generiert?Klickt der Benutzer auf eine Schaltfläche auf der Website und wird dann die E-Mail gesendet, oder kommt die erste Anmeldeanforderung von einem anderen System?
Meine 2 Cent: Sie sollten den HTTP-Standard einhalten, der besagt, dass GET eine ["sichere" Methode] (https://developer.mozilla.org/en-US/docs/Glossary/safe) ist, die den Status nicht ändertdes Servers.Der Mail-Scanner des Kunden ist völlig berechtigt, dem Link zu folgen.
Von der UX-Seite - Ich möchte, wenn der Anmeldelink ungültig wurde * nachdem * ich alle Prozesse nach der ersten Anmeldung abgeschlossen habe (Festlegen von Passwörtern, Ausfüllen aller erforderlichen Kontodaten usw.).Es kommt vor, dass ich einen solchen Link öffne, die Felder ausfülle, abgelenkt werde und das Fenster schließe / das Gerät in den Ruhezustand versetze und den Prozess zu einem späteren Zeitpunkt von einem anderen Fenster oder Gerät aus neu starte.
Sechs antworten:
gfrung4
2019-07-04 18:02:35 UTC
view on stackexchange narkive permalink

Anstatt den Anmeldecode beim Klicken auf den Link ungültig zu machen, haben Sie ein Skript auf der Seite, das ausgeführt wird, und fordern Sie Ihren Server auf, den Code ungültig zu machen. Dies ist nur wirksam, wenn der "Mail-Scanner" nur die Seite besucht und keine Skripte darauf ausführt.

Sie sollten den Code auch nach einer bestimmten Zeit ungültig machen (Ihre zweite Option), weil Wenn der Benutzer einen Browser mit deaktivierten Skripten ausführt, wird der Code durch diese Methode nicht ungültig. Das Zeitlimit dient in diesem Fall als Sicherung.

Wenn Sie feststellen, dass auf dem "Mail-Scanner" Ihrer Benutzer Skripte auf der Seite ausgeführt werden, funktioniert dies nicht . Stattdessen können Sie eine Benutzeraktion auf der verknüpften Seite benötigen, um den Anmeldevorgang abzuschließen. Ihre Benutzer würden auf den Link in der E-Mail klicken und zu einer einfachen Seite mit einer Anmeldeschaltfläche und möglicherweise einem Text wie Als <username>? weitergeleitet werden. Melden Sie sie nur an (und machen Sie den Anmeldecode ungültig), wenn sie auf die Schaltfläche klicken. Dies würde zwei Klicks von Ihren Benutzern anstelle von einem erfordern, aber ich denke nicht, dass dies zu unpraktisch ist.

Da der "Mail-Scanner" nur die Seite besucht und nicht klickt Mit der Schaltfläche wird der Code nicht verbraucht.

Je mehr ich darüber nachdenke, desto mehr möchte ich einen Klick benötigen. Es ist nicht darauf angewiesen, dass der Mailscanner keine Skripte ausführt, daher sollte er robuster sein. Sie können es sogar mit Steffen Ullrichs Cookie-Idee kombinieren. Wenn der Benutzer auf den Anmeldelink in der E-Mail klickt und das Cookie hat, wissen Sie, dass es sich nicht um den Mail-Scanner handelt, sodass Sie sich sofort anmelden können. Ein Klick und sie sind angemeldet. Wenn das Cookie NICHT vorhanden ist, kommt der Klick möglicherweise tatsächlich vom Mail-Scanner, sodass Sie eine Seite mit einer Anmeldeschaltfläche anzeigen. Wenn es sich tatsächlich nur um den Benutzer in einem anderen Browser handelt (oder um denselben Browser mit deaktivierten Cookies), klicken sie auf die Schaltfläche und melden sich an. In diesem Fall waren zwei Klicks erforderlich, dies ist jedoch nur eine geringfügige Unannehmlichkeit und nur dann erforderlich, wenn Der Cookie ist nicht vorhanden.

Siehe diese ähnliche Frage.

Normalerweise wird dies mit einem Formular behandelt, das eine POST-Anfrage stellt, da automatisierte Tools diese wahrscheinlich nicht senden.Außerdem wird die Abhängigkeit von Skripten beseitigt.
Ja, das war der, den ich gesucht habe!
Anstatt mit "Bearbeiten:" zu bearbeiten, ... bearbeiten Sie einfach den Beitrag, um das Neue zu sagen.Wenn sich die Leute darum kümmern, was es in der Vergangenheit war, werden sie sich den Revisionsverlauf ansehen.
Steffen Ullrich
2019-07-04 18:39:18 UTC
view on stackexchange narkive permalink

Es ist unklar, in welchem ​​Kontext das passwortlose Login verwendet wird. Wenn der Benutzer den Link zum Anmelden jedoch erst nach dem Besuch der Website sendet, können Sie ein Cookie an den Browser des Benutzers senden und dieses Cookie erwarten, wenn sich der Benutzer anmeldet.

Die meisten Benutzer werden wahrscheinlich das verwenden Dieselbe Browser, um sich anzumelden, nachdem Sie den Link per E-Mail erhalten haben. In diesem Fall können Sie die angeklickte URL an dem vom Browser gesendeten Cookie ausrichten. Da die Security Appliance keine Kenntnis von den Cookies der Endbenutzer hat, können Sie den Klick von dieser Appliance einfach ablehnen.

Falls der Benutzer einen anderen Browser zum Klicken auf den Link verwendet oder wenn der Benutzer die Cookies explizit gelöscht hat oder implizit (wie bei Verwendung einer neuen privaten Browsersitzung) können Sie weiterhin ein explizites Token in der E-Mail haben, das der Benutzer manuell eingeben kann, um mit der Authentifizierung fortzufahren.

Auf diese Weise werden fast alle Benutzer beim Klicken auf den Link transparent behandelt. Die verbleibenden Benutzer können manuell fortfahren, indem sie das Token eingeben, und alle automatischen Systeme werden weggelassen - selbst wenn sie das Javascript auf der Seite ausführen können .

Ich würde nicht mit der Unfähigkeit dieser Analysesysteme rechnen, ein Skript auszuführen. Ich bin mir ziemlich sicher, dass viele tatsächlich mit Skripten umgehen werden, da dies auch ein typischer Mechanismus ist, der in Phishing-Mails verwendet wird, um die Analyse zu erschweren. Stattdessen sollten Sie auf fehlende Systemkenntnisse (d. H. Kennen Sie das Cookie nicht) und fehlende Funktionen zählen.

Dieser Ansatz scheint irgendwie verwirrend.Was passiert, wenn Ihr lokaler IT-Administrator das Konto für Sie erstellt hat?Was ist, wenn sich der Benutzer mit einem anderen Gerät angemeldet hat?Was ist, wenn der Benutzer beispielsweise Firefox Focus (verhält sich wie ein Inkognito-Modus) als Standardbrowser festgelegt hat?Was passiert, wenn der Benutzer Ihre Website auf Chrome besucht, auf die E-Mail-Benachrichtigung klickt und sein Smartphone den Link zum Samsung-Browser öffnet?etc pp
@pytago: Diese Punkte werden in meiner Antwort tatsächlich angesprochen.Bitte lesen Sie die Teile * "Falls der Benutzer einen anderen Browser verwendet ... werden fast alle Benutzer beim Klicken auf den Link transparent behandelt, die verbleibenden Benutzer können manuell fortfahren, indem sie den Token eingeben, und alle automatischen Systeme werden weggelassen ..." *.Der Hauptpunkt meiner Antwort ist, dass sie nicht auf einer derzeit unfähigen Analyse beruht, die möglicherweise in der Lage ist, auf einen Link zu klicken oder das Skript später auszuführen.Es beruht stattdessen auf fehlendem Wissen und nicht auf fehlenden Fähigkeiten bei der Analyse.
TRiG
2019-07-05 14:58:52 UTC
view on stackexchange narkive permalink

Melden Sie sich nur auf POST-Anfrage an. Der Link in der E-Mail sollte nicht eine Anmeldung verursachen: Er sollte einfach auf eine Anmeldeseite verlinken. Der URL-Code kann aus der URL extrahiert und in ein ausgeblendetes Formularfeld eingefügt werden. Wenn das Formular gesendet wird, was der E-Mail-Scanner nicht tut, ist der Benutzer nur dann angemeldet.

Wenn Sie die Benutzerreibung verringern möchten, können Sie das Formular automatisch einmal von Javascript senden lassen Die Seite wird geladen.

Die Idee mit POST ist gut.
mentallurg
2019-07-07 01:37:25 UTC
view on stackexchange narkive permalink

Wenn der Link geöffnet ist, zeigen Sie nur eine Seite mit einer Schaltfläche an, aber machen Sie nichts mit dem Code. Erst wenn der Benutzer auf die Schaltfläche geklickt hat, wird der Code ungültig.

John Wu
2019-07-07 15:02:57 UTC
view on stackexchange narkive permalink

    Vermeiden Sie Einweg-Token. Diese eignen sich nicht gut für Fehlertoleranz, z. Wenn ein Benutzer versucht, einen Link zu verwenden, und sein Gerät eine langsame Verbindung hat. Alles, was zum einmaligen Gebrauch verwendet wird, ist möglicherweise anfälliger für Denial-of-Service-Angriffe von Anwendungen.

  1. Läuft das Token nach dem Senden innerhalb eines angemessenen Zeitraums ab, z. 15 Minuten.

  2. Nachdem der Benutzer auf den Link geklickt hat, benötigen Sie einen zweiten Authentifizierungsfaktor. Dies könnte etwas sehr Einfaches sein, wie ihr Name. Dies verringert das Risiko, dass ein Tippfehler in der E-Mail des Benutzers einem Fremden mit einer ähnlichen Adresse vollen Zugriff auf sein Konto gewährt. Für zusätzliche Sicherheit könnte der zweite Faktor außerhalb des Bandes geliefert werden (z. B. per SMS), dies ist jedoch offensichtlich weniger bequem. Wenn Sie keinen zweiten Faktor finden können, können Sie eine CAPCTHA verwenden. Wenn dies für Personen zu anstrengend ist, verwenden Sie einfach eine Zielseite mit einer Schaltfläche und fordern Sie den Benutzer auf, darauf zu klicken, bevor Sie fortfahren.

  3. Setzen Sie Sitzungsfixierung und CSRF-Schadensbegrenzung auf den Authentifizierungsseiten ein.

  4. Lassen Sie alle Token im Flug ablaufen, sobald sich der Benutzer erfolgreich authentifiziert hat, jedoch nicht Vor. Dadurch wird verhindert, dass Bots und E-Mail-Clients den Code versehentlich verbrauchen.

  5. Führen Sie ein Überwachungsprotokoll über die Verwendung von Token und analysieren Sie es regelmäßig auf verdächtige Muster.

user10216038
2019-07-04 20:48:58 UTC
view on stackexchange narkive permalink

Ich werde meine Kommentarfrage als mögliche Antwort hinzufügen.

Blockieren Sie den einmaligen Kunden USER-AGENT auf Ihrem Server? Koppeln Sie mit dem Kunden Statische IP .

Wenn diese ausreichend eindeutig sind, können Sie sie transparent machen.

Nicht Hardcode der einen Instanz, nehmen Sie an, dass es wieder vorkommen wird, und richten Sie eine Referenztabelle von USER-AGENT und IP ein, die blockiert werden sollen. Auf diese Weise können Sie die Tabelle bei Bedarf einfach ergänzen.

Ich würde mir vorstellen, dass jeder verwendete "Mail-Scanner" seinen Benutzeragenten vortäuscht.Wenn auf jeder besuchten Website angekündigt würde, dass es sich um einen Mail-Scanner handelt, wäre es für tatsächlich böswillige Websites sehr einfach, eine harmlose Seite zu erstellen, die den Scanner "täuscht".
@gfrung4: Obwohl es logisch erscheint, wären Sie überrascht, wie oft es nicht passiert.Die Gründe sind vielfältig: Entwickler wussten es nicht oder kümmerten sich nicht darum, rechtliche Bedenken, sich als jemand anderes auszugeben, Wartung, um die ID auf dem neuesten Stand zu halten.Meistens fehlt es entweder vollständig (was selbst verwendbar ist) oder es handelt sich um eine statische, halb eindeutige ID.Hoffentlich wird das OP es uns sagen.
Befindet sich der Mailscanner hinter demselben NAT wie der Kunde, funktioniert dies nicht.Wenn der Mailscanner auf dem Computer des Kunden ausgeführt wird, funktioniert dies ebenfalls nicht.
@abligh: Solange der Mailscanner einen anderen Benutzeragenten als der Kundenbrowser hat, funktioniert er auch mit demselben NAT.Ihr zweiter Punkt ist gültig, aber das wäre eine sehr seltsame und unwahrscheinliche Konfiguration.
Blacklists sind immer der schlechteste Weg, um Sicherheitsprobleme zu lösen


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...