Zwei-Faktor-Authentifizierung
Alles, was Sie gelesen haben, bezieht sich auf die Identifikation basierend auf dem, was der anfragende Benutzer weiß.Er kennt seine E-Mail-Adresse, weiß, wie er darauf zugreifen kann (d.h. er kennt sein E-Mail-Passwort) und kennt die Antworten auf geheime Fragen.
„Wissen“ gilt als ein Authentifizierungsfaktor; zwei weitere gängige Faktoren sind das, was Sie haben, wie ein physisches Gerät, und das, wer Sie sind, wie Fingerabdrücke oder die Netzhaut des Auges.

In den meisten Fällen ist die biometische Identifizierung schwer umsetzbar, insbesondere wenn wir über die Sicherheit von Webanwendungen sprechen, weshalb bei der Zwei-Faktor-Authentifizierung (Two Factor Authentication, 2FA) in der Regel das zweite Attribut – „das, was Sie haben“ – verwendet wird. Eine beliebte Variante dieses zweiten Faktors ist ein physisches Token, wie :

Physische Tokens werden häufig zur Authentifizierung in Unternehmens-VPNs und Finanzdienstleistungen eingesetzt. Zur Authentifizierung in einem Dienst müssen sowohl das Passwort als auch der Code auf dem Token (der oft geändert wird) in Kombination mit einer PIN verwendet werden. Theoretisch muss ein Angreifer sowohl das Passwort kennen als auch ein Token besitzen sowie die PIN des Tokens wissen. Im Szenario des Zurücksetzens des Passworts ist das Passwort offensichtlich unbekannt, aber der Besitz des Tokens kann verwendet werden, um den Besitz des Kontos zu bestätigen. Natürlich, wie bei jeder Schutzmaßnahme, , erhöht aber definitiv die Eintrittsbarriere.
Eine der Hauptprobleme dieses Ansatzes ist die Kosten und Logistik der Umsetzung; wir sprechen von der Bereitstellung physischer Geräte für jeden Kunden und deren Schulung in den neuen Prozess. Außerdem müssen die Benutzer das Gerät bei sich haben, was bei physischen Tokens nicht immer der Fall ist. Eine weitere Möglichkeit besteht darin, den zweiten Authentifizierungsfaktor über SMS zu realisieren, der im Falle von 2FA als Bestätigung dienen kann, dass die Person, die den Zurücksetzungsprozess durchführt, das Mobiltelefon des Kontoinhabers hat. So macht es Google:

Es ist auch notwendig, , aber das bedeutet, dass Ihr Mobiltelefon beim nächsten Zurücksetzen des Passworts möglicherweise ein zweiter Authentifizierungsfaktor werden kann. Lassen Sie mich dies anhand meines iPhones demonstrieren, aus Gründen, die bald klar werden werden:

Nachdem die E-Mail-Adresse des Google-Kontos identifiziert wurde, stellt es fest, dass 2FA aktiviert ist, und wir können das Konto mithilfe einer Überprüfung zurücksetzen, die per SMS an das Mobiltelefon des Kontoinhabers gesendet wird:

Jetzt müssen wir den Beginn des Zurücksetzvorgangs auswählen:

Diese Aktion führt zur Versendung einer E-Mail an die registrierte Adresse:

Diese E-Mail enthält die Zurücksetz-URL:

Bei Zugriff auf die Zurücksetz-URL wird eine SMS gesendet, und die Website fordert zur Eingabe auf:

Hier ist die SMS:

Nach der Eingabe im Browser kehren wir zum klassischen Passwort-Zurücksetzen zurück:

Das mag etwas wortreich erscheinen, und das ist es auch, aber das Formular bestätigt, dass die Person, die das Zurücksetzen vornimmt, Zugang zur E-Mail-Adresse und zum Mobiltelefon des Kontoinhabers hat. Aber es kann neunmal sicherer sein als das Zurücksetzen des Passworts nur per E-Mail. Allerdings gibt es Probleme…
Das Problem liegt bei Smartphones. Das unten gezeigte Gerät kann nur einen Authentifizierungsfaktor bestätigen — es ist in der Lage, SMS zu empfangen, aber keine E-Mails:

Dieses Gerät kann jedoch SMS empfangen und Erhält E-Mails zum Zurücksetzen des Passworts:

Das Problem ist, dass wir die E-Mail als ersten Authentifizierungsfaktor und die SMS (oder eine App, die Tokens generiert) als zweiten betrachten, aber heute sind sie in einem Gerät kombiniert. Das bedeutet selbstverständlich, dass, wenn jemand Zugang zu Ihrem Smartphone erhält, all dieser Komfort darauf hinausläuft, dass wir wieder bei einem Kanal sind; dieser zweite Faktor „das, was Sie haben“ bedeutet, dass Sie auch den ersten Faktor haben. Und all dies ist durch eine PIN aus vier Ziffern geschützt… wenn das Telefon überhaupt eine PIN hat und es war gesperrt.
Ja, die von Google implementierte 2FA-Funktion bietet eindeutig zusätzlichen Schutz, aber sie ist nicht „dummensicher“ und hängt definitiv nicht von zwei vollkommen separaten Kanälen ab.
Zurücksetzen per Benutzername gegen Zurücksetzen per E-Mail
Sollte der Password-Reset nur per E-Mail erlaubt sein? Oder sollte der Benutzer auch die Möglichkeit haben, den Reset über den Benutzernamen durchzuführen? Das Problem beim Reset über den Benutzernamen besteht darin, dass es keine Möglichkeit gibt, den Benutzer über einen falschen Benutzernamen zu informieren, ohne offenzulegen, dass jemand anderes ein Konto mit diesem Namen haben könnte. Im vorherigen Abschnitt stellte der Rücksetzprozess per E-Mail sicher, dass der rechtmäßige Eigentümer dieser E-Mail stets Rückmeldung erhält, ohne dass sein Bestehen im System öffentlich gemacht wird. Nur mit dem Benutzernamen ist dies nicht möglich.
Daher lautet die Antwort kurz: nur E-Mail. Wenn Sie versuchen, nur mit dem Benutzernamen zurückzusetzen, wird es Fälle geben, in denen der Benutzer ratlos ist, was passiert ist, oder Sie würden die Existenz von Konten offenbaren. Ja, es handelt sich nur um einen Benutzernamen und nicht um eine E-Mail-Adresse, und ja, jeder kann sich jeden (verfügbaren) Benutzernamen auswählen, aber es besteht trotzdem eine hohe Wahrscheinlichkeit, dass Sie indirekt die Kontoinhaber aufgrund der Neigung der Benutzer zur Wiederverwendung von Namen offenbaren.
Was geschieht also, wenn jemand seinen Benutzernamen vergisst? Setzt man voraus, dass der Benutzername nicht gleichzeitig eine E-Mail-Adresse ist (was häufig der Fall ist), ähnelt der Prozess dem, wie ein Passwort-Reset beginnt — wir geben die E-Mail-Adresse ein und senden dann eine Nachricht an diese Adresse, ohne deren Existenz offenzulegen. Der einzige Unterschied besteht darin, dass die Nachricht diesmal nur den Benutzernamen enthält und nicht die URL für den Passwort-Reset. Oder die E-Mail könnte auch einfach sagen, dass es kein Konto für diese Adresse gibt.
Identitätsprüfung und Genauigkeit von E-Mail-Adressen
Ein Schlüsselbereich beim Zurücksetzen von Passwörtern und wahrscheinlich auch der wichtigste Aspekt ist die Identitätsprüfung der Person, die versucht, den Reset durchzuführen. Ist es wirklich der rechtmäßige Eigentümer des Kontos, oder versucht jemand, es zu hacken oder dem Eigentümer Unannehmlichkeiten zu bereiten?
Es ist offensichtlich, dass E-Mail der bequemste und am weitesten verbreitete Kanal zur Identitätsprüfung ist. Sie ist nicht vor unsachgemäßer Handhabung („von Dummköpfen“) geschützt, und es gibt zahlreiche Fälle, in denen die einfache Möglichkeit, E-Mails an die Adresse des Kontoinhabers zu empfangen, nicht ausreicht, wenn eine hohe Vertrauenswürdigkeit bei der Identifizierung erforderlich ist (deshalb wird 2FA verwendet). Dennoch ist sie fast immer der Ausgangspunkt des Zurücksetzprozesses.
Wenn E-Mail eine Rolle bei der Sicherstellung von Vertrauen spielt, muss zunächst sichergestellt werden, dass die E-Mail-Adresse tatsächlich korrekt ist. Wenn jemand ein Zeichen falsch eingegeben hat, wird der Reset offensichtlich nicht beginnen. Der Verifizierungsprozess der E-Mail-Adresse während der Registrierung ist ein zuverlässiger Weg, um die Richtigkeit der Adresse zu überprüfen. Wir haben das alle schon erlebt: Sie registrieren sich, erhalten eine E-Mail mit einem einzigartigen URL, auf den Sie klicken müssen, was bestätigt, dass Sie in der Tat der Besitzer dieser E-Mail-Adresse sind. Die Unfähigkeit, sich anzumelden, bis dieser Prozess abgeschlossen ist, garantiert, dass es einen Anreiz gibt, die Adresse zu bestätigen.
Wie bei vielen anderen Sicherheitsaspekten verringert dieses Modell die Benutzerfreundlichkeit zugunsten einer erhöhten Sicherheit hinsichtlich des Vertrauens in die Identität des Benutzers. Das kann für eine Webseite akzeptabel sein, deren Registrierung der Benutzer hoch schätzt und gerne eine weitere Stufe im Prozess hinzufügen möchte (bezahlte Dienste, Banking usw.), aber solche Dinge können den Benutzer abschrecken, wenn er das Konto als „einmalig“ ansieht und es beispielsweise einfach als Mittel verwendet, um einen Beitrag zu kommentieren.
Identifizierung dessen, der den Rücksetzprozess initiiert hat
Es ist offensichtlich, dass es Gründe für den missbräuchlichen Gebrauch der Rücksetzfunktion gibt, und Angreifer können sie auf viele verschiedene Arten nutzen. Ein einfacher Trick, den wir zur Bestätigung der Quelle der Anfrage verwenden können (dieser Trick funktioniert normalerweise und wird) — besteht darin, die IP-Adresse des Anfragenden in die E-Mail, in der ein Rücksetzen vorgeschlagen wird, einzufügen. Dies versorgt den Empfänger mit einigen Informationen zur Identifizierung der Anfragequelle.
Hier ist ein Beispiel aus der Rücksetzfunktion, die ich derzeit in ASafaWeb integriere:

Der Link "find out more" ("Mehr erfahren") leitet den Benutzer zur Website , die Informationen wie den Standort und die Organisation des anfragenden Benutzers bereitstellt:

Natürlich haben alle, die ihre Identität verbergen möchten, zahlreiche Möglichkeiten, ihre echte IP-Adresse zu verschleiern, doch dies ist eine bequeme Methode, um eine teilweise Identifizierung des Anfragenden hinzuzufügen, und in den meisten vielen Fällen gibt Ihnen dies ausreichend Einblick, wer die Anfrage zum Zurücksetzen des Passworts stellt.
Benachrichtigung über Änderungen per E-Mail
Dieser Beitrag ist von einem Thema durchdrungen – Kommunikation; informieren Sie den Kontoinhaber so gut wie möglich über das, was in jedem Schritt des Prozesses geschieht, ohne etwas zu enthüllen, das böswillig verwendet werden könnte. Das Gleiche gilt für die Situation, in der das Passwort tatsächlich geändert wurde – informieren Sie den Inhaber darüber!
Die Gründe für eine Passwortänderung können aus zwei Quellen stammen:
- Änderung des Passworts nach dem Einloggen, weil der Benutzer ein neues Passwort möchte
- Zurücksetzen des Passworts ohne Einloggen, weil der Benutzer es vergessen hat
Obwohl dieser Beitrag hauptsächlich dem Zurücksetzen gewidmet ist, verringert die Benachrichtigung im ersten Fall das Risiko, dass jemand das Passwort ohne Wissen des rechtmäßigen Besitzers ändert. Wie kann das passieren? Ein verbreitetes Szenario ist, dass das Passwort des rechtmäßigen Besitzers (ein wiederverwendetes Passwort, das aus einer anderen Quelle geleakt wurde; ein Passwort, das durch Keylogging erhalten wurde; ein leicht zu erratendes Passwort usw.) erlangt wird, wonach der Angreifer beschließt, es zu ändern, wodurch er den Besitzer blockiert. Ohne eine Benachrichtigung per E-Mail würde der echte Besitzer nichts von der Passwortänderung erfahren.
Natürlich sollte der Besitzer im Falle eines Passwort-Resets den Prozess bereits selbst eingeleitet haben (oder die oben beschriebenen Identitätsüberprüfungsmechanismen umgangen haben), daher sollte die Änderung keine Überraschung für ihn sein, doch eine Bestätigung per E-Mail wäre ein positives Feedback und eine zusätzliche Überprüfung. Außerdem sorgt es für Konsistenz mit dem oben beschriebenen Szenario.
Oh, und für den Fall, dass das noch nicht offensichtlich ist – versenden Sie das neue Passwort nicht per E-Mail! Das mag manche zum Lachen bringen, aber :

Protokolle, Protokolle, Protokolle und noch ein bisschen Protokolle
Die Passwortzurücksetzfunktion ist für Angreifer attraktiv: Entweder möchte der Angreifer auf das Konto einer anderen Person zugreifen oder einfach dem Kontoinhaber/System Unannehmlichkeiten bereiten. Viele der oben beschriebenen Praktiken verringern die Wahrscheinlichkeit von Missbrauch, verhindern ihn jedoch nicht, und sie werden auf jeden Fall nicht verhindern, dass Menschen versuchen, die Funktion auf unerwartete Weise zu verwenden.
Eine absolut wertvolle Praxis zur Erkennung schädlichen Verhaltens ist das Logging, und ich meine sehr detailliertes Logging. Protokollieren Sie gescheiterte Anmeldeversuche, Passwortzurücksetzungen, Passwortänderungen (d.h. wenn der Benutzer bereits angemeldet ist) und praktisch alles, was Ihnen helfen kann, das Geschehen zu verstehen; dies wird in der Zukunft sehr hilfreich sein. Protokollieren Sie sogar einzelne Teile des Prozesses, zum Beispiel sollte eine gute Rücksetzfunktion die Initiierung des Zurücksetzens über die Website umfassen (protokollieren Sie Anfragen und Anmeldeversuche zum Zurücksetzen mit falschem Benutzernamen oder E-Mail), protokollieren Sie den Zugriff auf die Website über die Zurücksetz-URL (einschließlich der Versuche, ein falsches Token zu verwenden), und halten Sie schließlich den Erfolg oder Misserfolg der Antwort auf die geheime Frage fest.
Wenn ich von Logging spreche, meine ich nicht nur die Aufzeichnung des Seitenaufrufs, sondern das Sammeln so vieler Informationen wie möglich, sofern sie nicht vertraulich sind. Leute, bitte protokollieren Sie keine Passwörter! In den Protokollen sollte die Identität des autorisierten Benutzers erfasst werden (er wird autorisiert sein, wenn er sein vorhandenes Passwort ändert oder versucht, das Passwort eines anderen zurückzusetzen nachdem er sich angemeldet hat), alle ausprobierten Benutzernamen oder E-Mail-Adressen sowie alle Rücksetz-Token, die er zu verwenden versucht. Es ist auch sinnvoll, in den Protokollen solche Aspekte wie IP-Adressen und, wenn möglich, sogar die Header der Anfragen aufzuzeichnen. Das ermöglicht es Ihnen, nicht nur zu rekonstruieren, was was der Benutzer (oder Angreifer) versuchen will, sondern auch wer wer er ist.
Die Verantwortung an andere Dienstleister delegieren
Wenn Sie denken, dass das alles einen riesigen Arbeitsaufwand darstellt, dann sind Sie nicht allein. Tatsächlich ist der Aufbau eines zuverlässigen Systems zur Verwaltung von Konten keine einfache Aufgabe. Es liegt nicht daran, dass es technisch schwierig ist, es gibt einfach viele Besonderheiten. Es geht nicht nur um das Zurücksetzen, es gibt einen ganzen Registrierungsprozess, sichere Speicherung von Passwörtern, die Verarbeitung mehrerer falscher Anmeldeversuche usw. usw. Obwohl , muss dennoch viel mehr getan werden.
Heute gibt es zahlreiche Drittanbieter, die bereitwillig alle Mühen übernehmen und alles in einen verwalteten Dienst abstrahieren. Zu solchen Diensten gehören OpenID, OAuth und sogar Facebook. Einige Leute (OpenID war tatsächlich sehr erfolgreich bei Stack Overflow), während andere .
Zweifellos löst ein Dienst wie OpenID viele Probleme für Entwickler, doch es ist ebenso unbestreitbar, dass er neue hinzufügt. Haben sie eine Rolle? Ja, aber es ist offensichtlich, dass wir keine massenhafte Nutzung von Authentifizierungsdienstanbietern beobachten. Banken, Fluggesellschaften und sogar Geschäfte — alle implementieren ihre eigenen Authentifizierungsmechanismen, und es ist offensichtlich, dass es dafür triftige Gründe gibt.
Böswilliges Zurücksetzen
Ein wichtiger Aspekt jedes der oben genannten Beispiele ist, dass das alte Passwort nur dann als nutzlos angesehen wird nach der Bestätigung der Identität des Kontoinhabers. Das ist wichtig, denn wenn ein Konto ohne Identitätsprüfung zurückgesetzt werden könnte, würde das die Möglichkeit für allerlei böswillige Handlungen bieten. bis Hier ist ein Beispiel: Jemand nimmt an einer Auktion teil, und kurz vor Ende des Bietprozesses blockiert er die Wettbewerber, indem er den Zurücksetzungsprozess initiiert, und eliminiert sie so aus den Geboten. Offensichtlich kann eine schlecht gestaltete Zurücksetzungsfunktion, die missbraucht werden kann, zu ernsthaften negativen Ergebnissen führen. Es ist erwähnenswert, dass das Sperren von Konten durch falsche Anmeldeversuche eine ähnliche Situation darstellt, aber das ist bereits ein Thema für einen anderen Beitrag.
Hier ist ein Beispiel: Jemand nimmt an einer Auktion auf der Auktionswebsite teil und blockiert gegen Ende des Bietprozesses seine Konkurrenten, indem er den Rücksetzprozess initiiert und sie so aus den Geboten entfernt. Es ist offensichtlich, dass eine schlecht gestaltete Rücksetzfunktion missbraucht werden kann, was zu ernsthaften negativen Folgen führen kann. Es ist zu beachten, dass Kontoaus блокierungen durch falsche Anmeldeversuche eine ähnliche Situation darstellen, aber das ist bereits ein Thema für einen anderen Beitrag.
Wie ich oben erwähnt habe, wenn man anonymen Nutzern die Möglichkeit gibt, das Passwort eines beliebigen Kontos zurückzusetzen, nur indem sie die E-Mail-Adresse kennen, ist das eine ideale Situation für einen "Denial of Service"-Angriff. Das mag nicht das sein, , worüber wir normalerweise sprechen, aber es gibt keinen schnelleren Weg, den Zugang zu einem Konto zu blockieren, als mit einer schlecht durchdachten Passwortzurücksetzungsfunktion.
Das schwächste Glied
In Bezug auf den Schutz eines einzelnen Kontos ist alles, was oben geschrieben wurde, großartig, jedoch muss man immer das Ökosystem im Auge behalten, das das geschützte Konto umgibt. Lassen Sie mich ein Beispiel geben:
ASafaWeb wird von einem großartigen Dienst gehostet, der von AppHarbor bereitgestellt wird. Der Prozess des Passwortzurücksetzens für das Hosting-Konto verläuft so:
Schritt 1:

Schritt 2:

Schritt 3:

Schritt 4:

Nachdem ich alle vorhergehenden Informationen gelesen habe, wird schnell klar, welche Aspekte wir in einer idealen Welt etwas anders umsetzen würden. Dennoch möchte ich sagen, dass selbst wenn ich eine Website wie ASafaWeb im AppHarbor-Dienst veröffentliche, danach großartige geheime Fragen und Antworten erfinde, eine zweite Authentifizierung hinzufüge und alles andere nach den Regeln mache, das nicht die Tatsache außer Kraft setzt, dass das schwächste Glied des gesamten Prozesses in der Lage sein wird, alles zu brechen. Wenn jemand erfolgreich die Authentifizierung bei AppHarbor durchführt, indem er meine Informationen nutzt, kann er das Passwort jedes ASafaWeb-Kontos auf das von ihm gewünschte ändern!
Der Punkt ist, dass die Robustheit der Implementierung des Schutzes ganzheitlich betrachtet werden muss: Man muss die Bedrohungen an jedem Zugangspunkt des Systems modellieren, selbst wenn dies ein oberflächlicher Prozess ist, wie z. B. der Login in AppHarbor. Dies sollte mir ein gutes Gefühl dafür geben, wie viel Aufwand ich in den Passwortzurücksetzungsprozess von ASafaWeb investieren muss.
Alles zusammenfügen
Dieser Beitrag enthält eine große Menge an Informationen, deshalb möchte ich diese in einem einfachen visuellen Schema bündeln:

Denken Sie daran, dass Sie die größtmögliche Protokollierung jedes dieser Punkte durchführen sollten. Das ist alles, es ist ganz einfach!
Ergebnisse
Mein Beitrag scheint umfassend zu sein, dennoch gibt es viele weitere Materialien, die ich könnte Integrieren Sie es, aber ich beschloss, mich der Kürze halber davon zu distanzieren: die Rolle der Adresse für die Rettungs-E-Mail, die Situation, in der Sie den Zugriff auf die mit Ihrem Konto verbundene E-Mail verlieren (zum Beispiel, wenn Sie Ihren Job gekündigt haben) und so weiter. Wie ich bereits sagte, ist die Funktion zum Zurücksetzen nicht so kompliziert, es gibt jedoch viele Sichtweisen darauf.
Obwohl das Zurücksetzen nicht so kompliziert ist, wird es oft falsch implementiert. Oben haben wir ein paar Beispiele gesehen, bei denen die Implementierung plötzliche Fehler verarbeiten und nützliche Details zur Fehlersuche anzeigen, wie z. B. einen Stack-Trace. Die Fehlermeldung wurde vereinfacht – es reicht aus, auf den Link zu klicken. zu Problemen führen kann, und es gibt viele weitere Präzedenzfälle, bei denen ein falsches Zurücksetzen tatsächlich Probleme verursacht hat. Kürzlich stellte sich heraus, dass Das ist ein ernsthaft negatives Ergebnis!
Seien Sie also vorsichtig mit Ihren Rücksetzfunktionen, an verschiedenen Punkten, und ziehen Sie beim Entwerfen der Funktion nicht Ihre schwarze Mütze ab, denn die Wahrscheinlichkeit ist hoch, dass sie jemand anderes aufsetzt!
Als Werbung
VDSina bietet kostengünstige tägliche Zahlungen, jeder Server ist mit einem Internetanschluss von 500 Megabit verbunden und kostenlos gegen DDoS-Angriffe geschützt!
Quelle: habr.com
