Kürzlich hatte ich wieder Zeit, über die Funktionsweise eines sicheren Passwort-Rücksetzverfahrens nachzudenken. Zunächst, als ich diese Funktionalität in die Implementierung von einfügte, und dann, als ich einer anderen Person half, etwas Ähnliches zu entwickeln. In diesem zweiten Fall wollte ich ihm einen Link zu einer kanonischen Ressource mit allen Details zur sicheren Implementierung der Rücksetzfunktion geben. Das Problem ist jedoch, dass es eine solche Ressource nicht gibt, zumindest nicht eine, die alles beschreibt, was ich für wichtig halte. Daher habe ich beschlossen, sie selbst zu schreiben.
Sie sehen, die Welt der vergessenen Passwörter ist tatsächlich ziemlich rätselhaft. Es gibt viele verschiedene, durchaus akzeptable Perspektiven und eine Menge gefährlicher Ideen. Es ist wahrscheinlich, dass Sie den meisten von ihnen als Endbenutzer schon oft begegnet sind. Daher werde ich versuchen, diese Beispiele zu nutzen, um zu zeigen, wer alles richtig macht und wer nicht, sowie, worauf man sich für die korrekte Implementierung der Funktion in seiner eigenen Anwendung konzentrieren sollte.

Passwortspeicherung: Hashing, Verschlüsselung und (oh!) Klartext
Wir können nicht darüber sprechen, was mit vergessenen Passwörtern zu tun ist, bevor wir nicht besprochen haben, wie sie gespeichert werden. In der Datenbank werden Passwörter in einer von drei Hauptformen gespeichert:
- Im Klartext. Es gibt eine Spalte mit dem Passwort, das im offenen Textformat gespeichert ist.
- Verschlüsselt. Normalerweise mit symmetrischer Verschlüsselung (ein Schlüssel wird sowohl zum Verschlüsseln als auch zum Entschlüsseln verwendet), und die verschlüsselten Passwörter werden ebenfalls in einer Spalte gespeichert.
- Gehasht. Ein einseitiger Prozess (ein Passwort kann gehasht, aber nicht entschlüsselt werden); das Passwort, möchten wir hoffen, wird mit einem Salt versehen, und jedes befindet sich in seiner eigenen Spalte.
Lassen Sie uns gleich die einfachste Frage klären: speichern Sie niemals Passwörter im Klartext! Niemals. Eine einzige Schwachstelle, , eine unvorsichtige Sicherung oder einer von zahlreichen anderen einfachen Fehlern — und das war's, Game Over, all Ihre Passwörter — äh, entschuldigung, die Passwörter all Ihrer Kunden werden zum öffentlichen Gut. Natürlich würde das bedeuten, dass mit großer Wahrscheinlichkeit auch von all ihren Konten in anderen Systemen. Und das wird Ihre Schuld sein.
Verschlüsselung ist besser, hat jedoch ihre Schwächen. Das Problem der Verschlüsselung liegt in der Entschlüsselung; man kann diese verrückt aussehenden Chiffren nehmen und sie wieder in Klartext umwandeln. Wenn das passiert, kehren wir zu lesbaren Passwörtern zurück. Wie geschieht das? Ein kleiner Fehler dringt in den Code ein, der für die Entschlüsselung des Passworts zuständig ist, wodurch es öffentlich zugänglich wird – das ist eine Möglichkeit. Hacker erhalten Zugang zu dem Rechner, auf dem die verschlüsselten Daten gespeichert sind – das ist eine zweite Möglichkeit. Eine weitere Möglichkeit besteht darin, dass ein Backup der Datenbank entwendet wird und jemand auch den Schlüssel zur Verschlüsselung erhält, der oft sehr unsicher aufbewahrt wird.
Und das führt uns zum Hashing. Die Idee hinter Hashing ist, dass es einseitig erfolgt; der einzige Weg, das vom Benutzer eingegebene Passwort mit seiner gehashten Version zu vergleichen, besteht darin, das eingegebene Passwort zu hashen und die Ergebnisse zu vergleichen. Um Angriffe mit Werkzeugen wie „Rainbow Tables“ zu verhindern, fügen wir durch Salt Zufälligkeit in den Prozess ein (für die vollständige Darstellung lesen Sie meinen Artikel zur kryptografischen Speicherung). Letztendlich können wir bei korrekter Implementierung mit großer Wahrscheinlichkeit davon ausgehen, dass gehashte Passwörter niemals wieder im Klartext erscheinen (über die Vorteile verschiedener Hashing-Algorithmen werde ich in einem anderen Beitrag sprechen).
Ein kurzes Argument zum Hashing und zur Verschlüsselung: Der einzige Grund, warum Sie ein Passwort jemals verschlüsseln und nicht hashen müssten, ist, wenn Sie das Passwort im Klartext sehen möchten, und das sollten Sie auf keinen Fall wollen, zumindest nicht in der Situation mit einer Standard-Website. Wenn Sie das brauchen, machen Sie wahrscheinlich etwas falsch!
Achtung!
Weiter unten im Text gibt es einen Teil eines Screenshots der pornografischen Website AlotPorn. Er ist sorgfältig zugeschnitten, und es gibt nichts, was man nicht auch am Strand sehen könnte. Wenn das trotzdem Probleme verursachen könnte, scrollen Sie bitte nicht weiter nach unten.
Setzen Sie immer das Passwort zurück, nie erinnern Sie es sich nicht
Wurden Sie jemals gebeten, eine Funktion zur Erinnerung an das Passwort zu erstellen? Machen Sie einen Schritt zurück und denken Sie über diese Anfrage nach: Warum braucht man dieses "Erinnern"? Weil der Benutzer das Passwort vergessen hat. Was wollen wir tatsächlich erreichen? Ihm helfen, sich wieder anzumelden.
Ich verstehe, dass das Wort "Erinnern" (oft) im umgangssprachlichen Sinne verwendet wird, aber tatsächlich versuchen wir, dem Benutzer sicher zu helfen, wieder online zu sein.Da wir Sicherheit benötigen, gibt es zwei Gründe, warum eine Erinnerung (d.h. das Senden des Passworts an den Benutzer) nicht geeignet ist:
- E-Mail ist kein sicherer Kanal. Genau wie wir keine vertraulichen Informationen über HTTP übertragen würden (wir würden HTTPS verwenden), sollten auch über E-Mail keine sensiblen Daten gesendet werden, da die Transportebene unsicher ist. Tatsächlich ist dies viel gefährlicher als die einfache Übertragung von Informationen über ein ungesichertes Transportprotokoll, da E-Mails häufig auf Speichermedien abgelegt werden, für Systemadministratoren zugänglich sind, weitergeleitet und verteilt werden können, und somit dem Risiko von Malware und ähnlichem ausgesetzt sind. Unverschlüsselte E-Mails sind ein äußerst unsicherer Kanal.
- Sie sollten auf jeden Fall keinen Zugriff auf das Passwort haben. Lesen Sie den vorherigen Abschnitt über die Speicherung noch einmal durch – Sie sollten einen Passwort-Hash (mit einem guten Salz) haben, was bedeutet, dass Sie auf keine Weise in der Lage sein sollten, das Passwort zu extrahieren und es per E-Mail zu versenden.
Lassen Sie mich das Problem anhand des Beispiels demonstrieren : Hier ist eine typische Anmeldeseite:

Offensichtlich besteht das erste Problem darin, dass die Anmeldeseite nicht über HTTPS geladen wird, und die Website bietet außerdem an, ein Passwort zu versenden („Send Password“). Möglicherweise ist dies ein Beispiel für die oben erwähnte umgangssprachliche Verwendung dieses Begriffs, also lassen Sie uns einen weiteren Schritt machen und sehen, was passiert:

Leider sieht es nicht viel besser aus; und die E-Mail bestätigt das Vorhandensein des Problems:

Das weist uns auf zwei wichtige Aspekte von usoutdoor.com hin:
- Die Website hasht keine Passwörter. Im besten Fall werden sie verschlüsselt, es ist jedoch sehr wahrscheinlich, dass sie im Klartext gespeichert werden; wir sehen keine gegenteiligen Beweise.
- Die Website sendet ein langfristiges Passwort (wir können immer wieder darauf zurückkommen und es verwenden) über einen ungeschützten Kanal.
Nachdem wir das geklärt haben, müssen wir überprüfen, ob der Rücksetzprozess sicher durchgeführt wird. Zuerst sollten wir sicherstellen, dass der Anfragende das Recht hat, den Reset durchzuführen. Mit anderen Worten, wir benötigen eine Identitätsüberprüfung; schauen wir uns an, was passiert, wenn die Identität bestätigt wird, ohne zuvor zu prüfen, ob der Anfragende tatsächlich der Kontoinhaber ist.
Die Auflistung von Benutzernamen und deren Einfluss auf die Anonymität
Dieses Problem lässt sich am besten visuell veranschaulichen. Problem:

Sehen Sie? Achten Sie auf die Nachricht „There is no user registered with this email address“ („Es ist kein Benutzer mit dieser E-Mail-Adresse registriert“). Das Problem tritt offensichtlich auf, wenn eine solche Website bestätigt, die Existenz eines Benutzers, der mit dieser E-Mail-Adresse registriert ist. Bingo – Sie haben gerade das Porno-Fetisch Ihres Mannes/Vorgesetzten/Nachbarn entdeckt!
Es ist offensichtlich, dass Pornografie ein ziemlich klassisches Beispiel für die Bedeutung von Privatsphäre ist. Allerdings geht die Gefahr, eine Person mit einer bestimmten Website in Verbindung zu bringen, weit über die oben beschriebene potenziell peinliche Situation hinaus. Eine der Gefahren ist Social Engineering; wenn ein Angreifer in der Lage ist, eine Person mit einem Dienst zu verknüpfen, erhält er Informationen, die er nutzen kann. Zum Beispiel könnte er sich als Vertreter der Website ausgeben und die Person kontaktieren, um zusätzliche Informationen anzufordern und einen Versuch zu starten, .
Ähnliche Praktiken führen auch zur Gefahr des 'User Enumeration', bei dem die Existenz einer ganzen Sammlung von Benutzernamen oder E-Mail-Adressen auf einer Website durch einfache gruppenbasierte Anfragen und das Studium der Antworten überprüft wird. Verfügen Sie über eine Liste aller E-Mail-Adressen der Mitarbeiter und ein paar Minuten Zeit, um ein Skript zu schreiben? Dann sehen Sie, wo das Problem liegt!
Was ist die Alternative? Tatsächlich ist sie ziemlich einfach und großartig umgesetzt auf :

Hier offenbart Entropay absolut nichts über die Existenz einer E-Mail-Adresse in seinem System. für den, der diese Adresse nicht besitzt.. Wenn Sie die Adresse besitzen und sie nicht im System existiert, erhalten Sie eine ähnliche E-Mail:

Natürlich gibt es akzeptable Situationen, in denen jemand denkt, dass er sich auf der Webseite registriert hat. Aber das ist nicht der Fall, oder er hat dies mit einer anderen E-Mail-Adresse getan. Das oben gezeigte Beispiel geht erfolgreich mit beiden Situationen um. Offensichtlich, wenn die Adresse übereinstimmt, erhalten Sie eine E-Mail, die den Passwortreset erleichtert.
Die Raffinesse der gewählten Entropay-Lösung besteht darin, dass die Identitätsprüfung über E-Mail vor jeder Online-Überprüfung erfolgt. Einige Webseiten fragen die Nutzer nach der Antwort auf eine geheime Frage (weiter unten mehr dazu), bis zu bevor der Reset beginnen kann; das Problem dabei ist jedoch, dass man die Frage beantworten muss, während man eine Art Identifikation (E-Mail oder Benutzername) angibt, wodurch es nahezu unmöglich wird, intuitiv zu antworten, ohne die Existenz eines anonymen Benutzerkontos zu offenbaren.
Mit diesem Ansatz gibt es klein eine reduzierte Benutzerfreundlichkeit, da es im Falle eines Versuchs, ein nicht existierendes Konto zurückzusetzen, keine sofortige Rückmeldung gibt. Natürlich ist genau das der Sinn des Versendens einer E-Mail, aber aus der Sicht des tatsächlichen Endbenutzers erfährt dieser erst beim Erhalt der E-Mail, dass er eine falsche Adresse eingegeben hat. Dies kann bei dem Benutzer gewisse Spannungen hervorrufen, doch ist dies ein kleiner Preis für einen so seltenen Prozess.
Ein weiterer Hinweis, der ein wenig vom Thema abweicht: Die Funktionen zur Unterstützung des Logins, die die Richtigkeit des Benutzernamens oder der E-Mail-Adresse offenbaren, haben dasselbe Problem. Antworten Sie immer mit der Nachricht "Benutzername und Passwort-Kombination ist ungültig" und bestätigen Sie nicht eindeutig das Vorhandensein von Identifikationsdaten (z.B. "Benutzername ist korrekt, aber das Passwort ist falsch eingegeben").
Versand eines Passwort-Reset-Links vs. Versand einer URL zum Zurücksetzen des Passworts
Das nächste Konzept, das wir besprechen müssen, betrifft die Methode zum Zurücksetzen des Passworts. Es gibt zwei gängige Lösungen:
- Generierung eines neuen Passworts für den Server und dessen Zusendung per E-Mail
- Versendung einer E-Mail mit einem einzigartigen URL, der den Rücksetzprozess erleichtert
Trotz , der erste Punkt sollte niemals verwendet werden. Das Problem damit ist, dass es bedeutet, dass ein gespeichertes Passwort, auf das man jederzeit zurückgreifen und es wiederverwenden kann; es wurde über einen unsicheren Kanal übermittelt und bleibt in Ihrem Posteingang. Es besteht die Möglichkeit, dass die Eingänge mit mobilen Geräten und E-Mail-Clients synchronisiert werden, außerdem können sie sehr lange online in einem E-Mail-Dienst gespeichert werden. Der Punkt ist, dass ein Postfach nicht als zuverlässiges Mittel zur langfristigen Speicherung angesehen werden kann..
Aber abgesehen davon gibt es ein weiteres ernstes Problem mit dem ersten Punkt - er vereinfacht es maximal. eine böswillige Kontosperrung durchführen. Wenn ich die E-Mail-Adresse des Kontoinhabers auf der Website kenne, kann ich sein Konto jederzeit sperren, indem ich sein Passwort zurücksetze; das ist ein klassischer DoS-Angriff, der auf einem Silbertablett serviert wird! Aus diesem Grund sollte ein Passwortreset nur nach erfolgreicher Berechtigungsüberprüfung des Anfragenden durchgeführt werden.
Wenn wir vom Reset-URL sprechen, meinen wir die Webadresse, die für diesen spezifischen Reset-Prozess einzigartig ist.Natürlich sollte sie zufällig sein, leicht zu erraten und keine externen Links zum Konto enthalten, die das Zurücksetzen erleichtern. Zum Beispiel sollte die Reset-URL nicht einfach einen Pfad wie „Reset/?username=JohnSmith“ aufweisen.
Wir möchten ein einzigartiges Token erstellen, das als URL für die Rücksetzung des Passworts per E-Mail versendet werden kann. Dann wird es mit der Benutzerdatenbank auf dem Server abgeglichen, um sicherzustellen, dass der Kontoinhaber tatsächlich die Person ist, die versucht, das Passwort zurückzusetzen. Zum Beispiel könnte das Token so aussehen: „3ce7854015cd38c862cb9e14a1ae552b“ und wird in einer Tabelle zusammen mit der ID des Benutzers, der das Zurücksetzen anfordert, und dem Zeitpunkt der Token-Generierung gespeichert (darüber später mehr). Wenn die E-Mail gesendet wird, enthält sie eine URL wie „Reset/?id=3ce7854015cd38c862cb9e14a1ae552b“. Wenn der Benutzer diese URL aufruft, überprüft die Seite die Existenz des Tokens, bestätigt die Benutzerdaten und erlaubt die Änderung des Passworts.
Selbstverständlich muss der oben beschriebene Prozess (hoffentlich) es dem Benutzer ermöglichen, ein neues Passwort zu erstellen. Daher sollte die URL über HTTPS geladen werden. Nein, Dieses URL mit dem Token muss die Sicherheit des Transportprotokolls nutzen, um Angriffe auf das Eingabeformular für das neue Passwort zu verhindern. und das vom Benutzer erstellte Passwort wurde über eine gesicherte Verbindung übertragen.
Für die URL zum Zurücksetzen muss auch eine Zeitlimitierung für das Token hinzugefügt werden, um sicherzustellen, dass der Zurücksetzprozess innerhalb eines bestimmten Zeitrahmens, beispielsweise innerhalb einer Stunde, durchgeführt werden kann. Dies garantiert, dass das Zeitfenster für den Zurücksetzprozess minimal ist, sodass der Empfänger dieser Zurücksetz-URL nur innerhalb dieses sehr kleinen Zeitfensters handeln kann. Natürlich kann ein Angreifer den Zurücksetzprozess erneut starten, aber er benötigt eine weitere einzigartige Zurücksetz-URL.
Schließlich müssen wir die Einmaligkeit dieses Prozesses sicherstellen. Nach Abschluss des Zurücksetzprozesses muss das Token gelöscht werden, damit die Zurücksetz-URL nicht mehr funktioniert. Der vorherige Punkt soll sicherstellen, dass der Angreifer nur ein sehr kleines Zeitfenster hat, um mit der Zurücksetz-URL zu manipulieren. Außerdem ist das Token nach einem erfolgreichen Zurücksetzen natürlich nicht mehr erforderlich.
Einige dieser Schritte erscheinen möglicherweise übertrieben, aber sie beeinträchtigen die Benutzerfreundlichkeit in keiner Weise und tatsächlich erhöhen die Sicherheit, auch wenn wir hoffen, dass diese Situationen selten bleiben. In 99 % der Fälle wird der Nutzer die Zurücksetzung innerhalb eines sehr kurzen Zeitraums durchführen und wird das Passwort nicht so bald wieder zurücksetzen.
Die Rolle von CAPTCHA
Oh, CAPTCHA, das Sicherheitsmittel, das wir alle so lieben, zu hassen! Tatsächlich ist CAPTCHA weniger ein Schutzmittel als vielmehr ein Identifizierungstool — um zu prüfen, ob Sie ein Mensch oder ein Roboter (oder ein automatisiertes Skript) sind. Der Zweck besteht darin, das automatische Absenden von Formularen zu verhindern, was natürlich herausfinden, ob der Benutzer Animationseffekte deaktiviert hat und auch verschiedene Animationsmöglichkeiten auf der Website deaktivieren, wie beispielsweise den Wackeleffekt bei den Schaltflächen, die zur Aufmerksamkeit geworben werden; als Versuch gelten würde, die Sicherheit zu umgehen. Im Kontext der Passwortzurücksetzung bedeutet CAPTCHA, dass die Zurücksetzungsfunktion nicht durch Brute-Force-Angriffe geknackt werden kann, um entweder den Benutzer mit Spam zu bombardieren oder um zu versuchen, die Existenz von Konten zu erkennen (was selbstverständlich unmöglich ist, wenn Sie die Hinweise aus dem Abschnitt zur Identitätsüberprüfung befolgt haben).
Natürlich ist CAPTCHA selbst nicht perfekt; es gibt zahlreiche Beispiele für ihre programmatische 'Überwindung' und das Erreichen ausreichender Erfolgsquoten (60–70 %). Darüber hinaus gibt es eine Lösung, die in meinem Beitrag über , bei denen man Personen Bruchteile von Cent zahlen kann, um jede CAPTCHA zu lösen und eine Erfolgsquote von 94 % zu erreichen. Das bedeutet, dass sie anfällig ist, allerdings (leicht) die Einstiegshürde erhöht.
Schauen wir uns ein Beispiel von PayPal an:

In diesem Fall kann der Reset-Prozess einfach nicht beginnen, bevor die CAPTCHA gelöst ist, daher theoretisch ist es unmöglich, den Prozess zu automatisieren. Theoretisch.
Für die meisten Webanwendungen wäre dies jedoch übertrieben und stellt eindeutig eine Verringerung der Benutzerfreundlichkeit dar – Menschen mögen einfach keine CAPTCHAs! Zudem ist CAPTCHA etwas, zu dem man bei Bedarf leicht zurückkehren kann. Wenn der Dienst angegriffen wird (hier kommt das Logging ins Spiel, aber dazu später mehr), ist es einfach, CAPTCHA hinzuzufügen.
Geheime Fragen und Antworten
In allen bisher betrachteten Methoden hatten wir die Möglichkeit, das Passwort nur mit Zugriff auf das E-Mail-Konto zurückzusetzen. Ich sage "nur", aber selbstverständlich ist der unerlaubte Zugriff auf ein fremdes E-Mail-Konto sollte ein komplexer Prozess. Allerdings .
Der oben angegebene Link zum Hacken des Yahoo!-Accounts von Sarah Palin verfolgt zwei Ziele: Erstens veranschaulicht er, wie einfach es ist, (manche) E-Mail-Konten zu hacken; zweitens zeigt er, wie böswillig schlechte Sicherheitsfragen ausgenutzt werden können. Aber darauf kommen wir später zurück.
Das Problem beim Zurücksetzen von Passwörtern, das vollständig von E-Mail abhängt, ist, dass die Integrität des Kontos, dessen Passwort Sie zurücksetzen möchten, vollständig von der Integrität des E-Mail-Accounts abhängt. Jeder, der Zugriff auf Ihre E-Mail hat, hat Zugang zu jedem Konto, das durch den einfachen Empfang einer E-Mail zurückgesetzt werden kann.Für solche Konten ist die E-Mail der "Schlüssel zu allen Türen" Ihres Lebens online.
Eine Möglichkeit, dieses Risiko zu verringern, besteht darin, ein Muster aus Sicherheitsfrage und -antwort zu implementieren. Ohne Zweifel haben Sie diese bereits gesehen: Sie wählen eine Frage aus, auf die nur Sie eine Antwort kennen sollten. Sie müssen die Antwort wissen, die Ihnen beim Zurücksetzen des Passworts gestellt wird. Das schafft Vertrauen, dass die Person, die versucht, das Passwort zurückzusetzen, tatsächlich der Eigentümer des Kontos ist.
Lassen Sie uns zu Sarah Palin zurückkehren: Der Fehler lag darin, dass die Antworten auf ihre geheime Fragen leicht zu finden waren. Insbesondere wenn man eine so bedeutende öffentliche Person ist, sind Informationen wie der Mädchenname der Mutter, Bildungsgeschichte oder frühere Wohnorte nicht wirklich geheim. Tatsächlich kann ein Großteil davon von fast jedem gefunden werden. So geschah es auch mit Sarah:
Der Hacker David Kernell erhielt Zugriff auf Palins Konto, indem er Details zu ihrem Lebenslauf wie ihre Universität und das Geburtsdatum fand und dann die Funktion zum Zurücksetzen von vergessenen Passwörtern bei Yahoo! nutzte.
Zunächst handelt es sich um einen Entwurfsfehler seitens Yahoo! – Durch die Wahl solch einfacher Fragen hat das Unternehmen im Grunde den Wert der Sicherheitsfrage und damit auch den Schutz seines Systems untergraben. Natürlich gestaltet sich das Zurücksetzen von Passwörtern für ein E-Mail-Konto immer als schwieriger, da Sie die Identität nicht bestätigen können, indem Sie eine E-Mail an den Besitzer senden (ohne eine zweite Adresse zu haben). Glücklicherweise gibt es heutzutage jedoch nicht viele Möglichkeiten, ein solches System zu implementieren.
Kommen wir zu den Sicherheitsfragen zurück – es gibt die Option, dem Nutzer die Möglichkeit zu geben, eigene Fragen zu erstellen. Das Problem dabei ist, dass oft äußerst offensichtliche Fragen entstehen.
Welche Farbe hat der Himmel?
Fragen, die die Menschen in eine unangenehme Situation bringen, wenn die Sicherheitsfrage verwendet wird, um die Identität zu bestätigen. eine Person (zum Beispiel in einem Callcenter):
Mit wem habe ich an Weihnachten geschlafen?
Oder schlichtweg dumme Fragen:
Wie schreibt man 'Passwort'?
Wenn es um Sicherheitsfragen geht, müssen die Nutzer vor sich selbst geschützt werden! Mit anderen Worten, die Sicherheitsfrage sollte vom jeweiligen Dienst bestimmt werden, oder noch besser, eine Reihe geheime Fragen, aus denen der Nutzer auswählen kann. Und nicht einfach auswählen eins; idealerweise sollte der Nutzer zwei oder mehr geheime Fragen wählen zum Zeitpunkt der Registrierung des Kontos, die dann als zweiter Identifikationskanal verwendet werden. Das Vorhandensein mehrerer Fragen erhöht das Vertrauen im Überprüfungsprozess, bietet Zufälligkeit (nicht immer dieselbe Frage anzuzeigen) und sorgt für eine gewisse Redundanz, falls der tatsächliche Nutzer sein Passwort vergessen hat.
Was macht also eine gute geheime Frage aus? Es gibt mehrere Faktoren, die dabei eine Rolle spielen:
- Sie sollte kurz sein – die Frage sollte klar und eindeutig sein.
- Die Antwort sollte konkret sein – wir brauchen keine Frage, auf die verschiedene Personen unterschiedlich antworten können.
- Mögliche Antworten sollten vielfältig sein – eine Frage nach der Lieblingsfarbe einer Person bietet nur eine sehr kleine Menge möglicher Antworten.
- Поиск Die Antwort sollte schwierig sein – wenn sie leicht zu finden ist jede (denken wir an Personen in hohen Positionen), ist sie ungeeignet.
- Die Antwort sollte konstantem bei der Zeit — wenn man nach dem Lieblingsfilm einer Person fragt, kann die Antwort nach einem Jahr eine andere sein
Es gibt tatsächlich eine Website, die sich guten Fragen widmet, die heißt . Einige Fragen scheinen ganz gut zu sein, während andere die oben beschriebenen Tests, insbesondere die Überprüfung der "Suchbarkeit", nicht bestehen.
Lassen Sie mich zeigen, wie geheime Fragen bei PayPal implementiert sind und welche Schritte die Seite unternimmt, um die Identität zu prüfen. Zuvor haben wir die Seite gesehen, die den Prozess beginnt (mit CAPTCHA), und hier zeigen wir, was passiert, nachdem Sie die E-Mail-Adresse eingegeben und das CAPTCHA gelöst haben:

Infolgedessen erhält der Benutzer eine solche E-Mail:

Bis hierhin klingt alles recht gewöhnlich, aber was sich hinter dieser URL für das Zurücksetzen verbirgt:

Jetzt kommen die geheimen Fragen ins Spiel. Tatsächlich ermöglicht es PayPal auch, das Passwort zurückzusetzen, indem die Kreditkartennummer bestätigt wird, was einen zusätzlichen Kanal darstellt, auf den viele Seiten keinen Zugriff haben. Ich kann das Passwort einfach nicht ändern, ohne auf beide zu antworten Geheime Fragen (oder falls die Kartennummer nicht bekannt ist). Selbst wenn jemand meine E-Mail-Adresse hackt, kann er das Passwort für mein PayPal-Konto nicht zurücksetzen, wenn er nicht ein bisschen mehr persönliche Informationen über mich kennt. Welche Informationen? Hier sind die von PayPal angebotenen Optionen für geheime Fragen:

Die Fragen zur Schule und zur Arztpraxis können hinsichtlich der einfachen Auffindbarkeit etwas zweifelhaft sein, aber die anderen sind nicht so schlecht. Um die Sicherheit zu erhöhen, verlangt PayPal jedoch zusätzliche Identifikation für eingeführt wurde, die im Januar dieses Jahres in den Kernel übernommen wurde. Es betrifft ausschließlich die Version 5.1 und tritt in den meisten Fällen auf Systemen mit Samsung-SSD-Speichern auf, bei denen zur Verschlüsselung Daten mit dm-crypt/LUKS über device-mapper/LVM verwendet werden. die Antworten auf die geheimen Fragen:

PayPal ist ein ziemlich utopisches Beispiel für einen sicheren Passwortreset: Es implementiert CAPTCHA, um die Gefahr von Brute-Force-Attacken zu verringern, verlangt zwei geheime Fragen und dann eine weitere Form einer völlig anderen Identifikation nur für die Änderung der Antworten – und das nachdem der Benutzer sich bereits eingeloggt hat. Offensichtlich ist genau das, was wir von PayPal erwartet haben; das ist eine Finanzorganisation, die mit hohen Geldsummen arbeitet. Das bedeutet jedoch nicht, dass jeder Passwortreset diesen Schritten folgen muss – in den meisten Fällen wäre das übertrieben – jedoch ist es ein gutes Beispiel für Situationen, in denen Sicherheit ernst genommen werden muss.
Der Vorteil des Systems mit Sicherheitsfragen liegt darin, dass Sie es später hinzufügen können, falls dies der Sicherheitslevel des Dienstes erfordert. Ein gutes Beispiel dafür ist Apple, welches dieses System erst kürzlich eingeführt hat. [Artikel wurde 2012 verfasst]. Als ich einmal begann, eine Anwendung auf meinem iPad zu aktualisieren, erhielt ich die folgende Anfrage:

Dann sah ich einen Bildschirm, auf dem ich mehrere Paare von Sicherheitsfragen und -antworten sowie eine Wiederherstellungs-E-Mail-Adresse auswählen konnte:

Was PayPal betrifft, so sind die Fragen im Voraus ausgewählt und einige davon sind tatsächlich recht gut:

Jedes der drei Paare von Fragen und Antworten stellt eine separate Menge möglicher Fragen dar, sodass es genügend Möglichkeiten zur Konfiguration des Kontos gibt.
Ein weiterer Aspekt, den es bezüglich der Beantwortung von Sicherheitsfragen zu beachten gilt, ist die Speicherung. Die Speicherung von einfachem Text in der Datenbank birgt nahezu dieselben Risiken wie bei einem Passwort. Die Offenlegung der Datenbank enthüllt sofort den Wert und gefährdet nicht nur die Anwendung, sondern potenziell auch andere Anwendungen, die dieselben Sicherheitsfragen nutzen. Dies ist erneut ). Eine Möglichkeit besteht darin, sicher zu hashen (ein widerstandsfähiger Algorithmus und kryptografisch zufälliges Salt). Im Gegensatz zu den meisten Fällen von Passwortspeicherung kann jedoch ein legitimer Grund bestehen, die Antwort als einfachen Text sichtbar zu machen. Ein typisches Szenario ist die Identitätsprüfung durch einen echten Operator am Telefon. In diesem Fall ist das Hashing ebenfalls anwendbar (der Operator kann einfach die vom Kunden genannte Antwort eingeben), aber im schlimmsten Fall sollte die geheime Antwort auf irgendeinem Niveau eines kryptografischen Speichers liegen, selbst wenn es sich dabei nur um symmetrische Verschlüsselung handelt. Zusammenfassend: Behandeln Sie Geheimnisse wie Geheimnisse!
Der letzte Aspekt der geheimen Fragen und Antworten ist, dass sie anfälliger für Social Engineering sind. Es ist eine Sache, direkt nach dem Passwort eines fremden Kontos zu fragen, aber es ist etwas ganz anderes, ein Gespräch über dessen Bildung zu beginnen (eine häufige geheime Frage). Tatsächlich können Sie ganz natürlich mit jemandem über viele Aspekte seines Lebens sprechen, die als geheime Fragen dienen könnten, ohne dabei Verdacht zu erregen. Das Wesen der geheimen Frage ist schließlich, dass sie mit den Lebenserfahrungen einer Person verbunden ist, was sie einprägsam macht, und genau darin liegt das Problem – Menschen erzählen gerne von ihren Lebenserfahrungen! Da gibt es nicht viel zu ändern, außer solche Optionen für geheime Fragen zu wählen, deren Wahrscheinlichkeit, sie durch Sozialengineering herauszufinden, geringer ist.
[Fortsetzung folgt.]
Im Auftrag der Werbung
VDSina bietet zuverlässige , jeder Server ist mit einem Internetanschluss von 500 Megabit verbunden und kostenlos gegen DDoS-Angriffe geschützt!
Quelle: habr.com
