Warum sollte das Überprüfen eines falschen Passworts länger dauern als das Überprüfen des richtigen?


83

Diese Frage hat mich immer beunruhigt.

Wenn Sie unter Linux nach einem Kennwort gefragt werden und Ihre Eingabe korrekt ist, wird sie sofort und ohne Verzögerung überprüft. Wenn Sie jedoch das falsche Passwort eingeben, dauert die Überprüfung länger. Warum ist das so?

Ich habe dies bei allen Linux-Distributionen beobachtet, die ich jemals ausprobiert habe.


Sie werden feststellen, dass dies auch für Windows gilt. Ändern Sie den Titel in "Warum haben falsche Passwörter länger als richtige?". Würde es mehr programmierbezogen machen.
he_the_great

Ich habe mich gerade in mein Ubuntu-System eingeloggt, das falsche Passwort eingegeben und mir dieselbe Frage gestellt. :-)
Johngreen

Antworten:


106

Es soll verhindern, dass Brute-Force-Angriffe Millionen von Passwörtern pro Sekunde versuchen. Die Idee ist zu begrenzen, wie schnell Passwörter überprüft werden können, und es gibt eine Reihe von Regeln, die befolgt werden sollten.

  • Ein erfolgreiches Benutzer / Passwort-Paar sollte sofort erfolgreich sein.
  • Es sollte keinen erkennbaren Unterschied in den feststellbaren Fehlerursachen geben.

Letzteres ist besonders wichtig. Es bedeutet keine hilfreichen Nachrichten wie:

Your user name is correct but your password is wrong, please try again

oder:

Sorry, password wasn't long enough

Nicht einmal ein Zeitunterschied in der Antwort zwischen den Fehlergründen "ungültiger Benutzer und Passwort" und "gültiger Benutzer, aber ungültiges Passwort".

Jeder Fehler sollte genau die gleichen Informationen liefern, sowohl in Textform als auch auf andere Weise.

Einige Systeme gehen sogar noch weiter und erhöhen die Verzögerung mit jedem Fehler oder lassen nur drei Fehler zu, wobei eine massive Verzögerung auftritt, bevor ein erneuter Versuch zugelassen wird.


1
Wie verhindert dies, dass sich eine App gibt, ein Passwort versucht und wenn es in einiger Zeit keinen Erfolg zurückgibt, töte -9 das Kind und die Gabel erneut. Ja, das funktioniert nur, wenn Sie sich als Benutzer anmelden können, aber wann hat das jemanden gestoppt?
BCS

2
Es hält niemanden auf, aber Sie müssen immer noch für diese "gewisse Zeit" aufschieben. Selbst eine kleine Verzögerung macht Millionen von Passwörtern nutzlos, überprüft und Sie werden erkannt werden , wenn Sie es tun , während angemeldet - denkst du nichts für fehlgeschlagene Anmeldungen angemeldet ist?
Paxdiablo

5
BCS: Wenn Sie bereits über ein gültiges Login mit genügend Berechtigungen verfügen, um das zu tun, was Sie vorschlagen, besteht die Möglichkeit, dass Sie keine Brute-Force-Angriffe mehr benötigen (da Ihnen andere Angriffsmethoden zur Verfügung stehen). Die Verzögerung ist am nützlichsten gegen externe Angreifer.
Erich Kitzmüller


12

Ich bin mir nicht sicher, aber es ist durchaus üblich, nach Eingabe eines falschen Passworts eine Verzögerung zu integrieren, um Angriffe zu erschweren. Dies macht einen Angriff praktisch unmöglich, da Sie lange brauchen, um nur wenige Passwörter zu überprüfen.

Selbst das Ausprobieren einiger Passwörter - Geburtsdaten, Name der Katze und ähnliches - macht keinen Spaß.


Und oft ist das Timeout beim zweiten Fehler länger als das Timeout beim ersten - was auch gut ist.
Jonathan Leffler

Haben Sie den Nachrichtenbeitrag über die wahrscheinlichsten Passwörter gesehen? 123456 ist sehr sehr beliebt!
Spence

@Spence, ich habe diese Gegenstände tatsächlich gesehen, aber aus dem Gedächtnis ist es nicht so schlimm wie die Leute, die sie gemacht haben, sie haben sie (wie die Medien es gewohnt sind) überproportional gesprengt. Die Passwörter wurden aus Listen kompromittierter Online-Konten gezogen , was bedeutet, dass sie mit größerer Wahrscheinlichkeit unsicher sind (weil sie kompromittiert wurden). 123456könnte durchaus 30% (zum Beispiel) der kompromittierten Konten ausmachen, ist jedoch auf allen Konten wahrscheinlich nicht annähernd so bedeutend .
Paxdiablo

Nein, diese Listen stammen aus Kennwortdatenbank-Hacks und die meisten repräsentieren Beispielsätze in Millionenhöhe. Die Ergebnisse dieser Hacks wurden in mehreren Online-Datensätzen bestätigt und sind sehr repräsentativ für den "durchschnittlichen" Verbraucher. Der einzige Weg, um bessere Passwörter zu erhalten, besteht darin, sie bei der Erstellung durchzusetzen oder noch besser die 2-Faktor-Authentifizierung zu verwenden, die ohnehin weitaus nützlicher ist.
Spence

12

Grundsätzlich gegen Brute-Force- und Wörterbuchangriffe.

Aus dem Entwicklerhandbuch für Linux-PAM-Anwendungen :

Planen von Verzögerungen

extern int pam_fail_delay(pam_handle_t *pamh, unsigned int micro_sec);

Diese Funktion wird von Linux-PAM angeboten, um Zeitverzögerungen nach einem fehlgeschlagenen Aufruf von pam_authenticate () und vor der Rückgabe der Steuerung an die Anwendung zu erleichtern. Bei Verwendung dieser Funktion sollte der Anwendungsprogrammierer prüfen, ob sie verfügbar ist mit:

#ifdef PAM_FAIL_DELAY
    ....
#endif /* PAM_FAIL_DELAY */

Im Allgemeinen fordert eine Anwendung an, dass ein Benutzer durch Linux-PAM durch einen Aufruf von pam_authenticate () oder pam_chauthtok () authentifiziert wird. Diese Funktionen rufen jedes der gestapelten Authentifizierungsmodule auf, die in der entsprechenden Linux-PAM-Konfigurationsdatei aufgeführt sind. Gemäß den Anweisungen in dieser Datei kann eines der Module fehlschlagen, wodurch der Aufruf von pam _... () einen Fehler zurückgibt. Es ist wünschenswert, dass auch eine Pause eingelegt wird, bevor die Anwendung fortgesetzt wird. Der Hauptgrund für eine solche Verzögerung ist die Sicherheit: Eine Verzögerung verhindert in erster Linie Brute-Force-Wörterbuchangriffe, hilft aber auch, zeitgesteuerte Angriffe (verdeckte Kanäle) zu verhindern.


8

Es ist eine sehr einfache und praktisch mühelose Möglichkeit, die Sicherheit erheblich zu erhöhen. Erwägen:

  1. Das System Ahat keine Verzögerung. Ein Angreifer hat ein Programm, das Kombinationen aus Benutzername und Passwort erstellt. Bei einer Rate von Tausenden von Versuchen pro Minute dauert es nur wenige Stunden, um jede Kombination auszuprobieren und alle erfolgreichen Anmeldungen aufzuzeichnen.

  2. Das System Bgeneriert nach jeder falschen Vermutung eine Verzögerung von 5 Sekunden. Die Effizienz des Angreifers wurde auf 12 Versuche pro Minute reduziert, was den Brute-Force-Angriff effektiv lähmt. Anstelle von Stunden kann es Monate dauern, bis ein gültiges Login gefunden ist. Wenn Hacker so geduldig wären, würden sie legitim werden. :-)


4

Fehlgeschlagene Authentifizierungsverzögerungen verringern die Anmelderate. Die Idee, dass, wenn jemand ein Wörterbuch oder einen Brute-Force-Angriff gegen einen oder mehrere Benutzerkonten versucht, dieser Angreifer auf die Fehlerverzögerung warten muss, um ihn zu zwingen, sich mehr Zeit zu nehmen und Ihnen mehr Chance zu geben, sie zu erkennen.

Möglicherweise möchten Sie auch wissen, dass es je nach Verwendung als Anmeldeshell normalerweise eine Möglichkeit gibt, diese Verzögerung zu konfigurieren.

In GDM wird die Verzögerung in der Datei gdm.conf festgelegt (normalerweise in /etc/gdm/gdm.conf). Sie müssen RetryDelay = x setzen, wobei x ein Wert in Sekunden ist.

Die meisten Linux-Distributionen unterstützen heutzutage auch die Definition von FAIL_DELAY in /etc/login.defs, sodass Sie nach einem fehlgeschlagenen Anmeldeversuch eine Wartezeit festlegen können.

Schließlich können Sie mit PAM auch ein Nodelay-Attribut in Ihrer Authentifizierungsleitung festlegen, um die Fehlerverzögerung zu umgehen. ( Hier ist ein Artikel über PAM und Linux )


1

Ich sehe nicht, dass es so einfach sein kann, wie die Antworten vermuten lassen.

Wenn die Antwort auf ein korrektes Passwort sofort erfolgt (ein Wert von), müssen Sie dann nicht nur bis zu diesem Wert warten, um zu wissen, dass das Passwort falsch ist? (Zumindest wahrscheinlich, was für Cracking-Zwecke in Ordnung ist) Und trotzdem würden Sie diesen Angriff parallel ausführen ... ist das alles eine große DoS-Begrüßungsmatte?


das haben sie nicht gemeint. Es gibt einen offensichtlichen Unterschied zwischen falschem oder richtigem Passwort. Sie meinten damit, dass es keinen Unterschied zwischen einem falschen Benutzernamen und einem falschen Passwort geben sollte. und meinst du damit, diesen Angriff parallel auszuführen? Wie können Sie es parallel ausführen?
Mpen

@Mark, parallel laufen würde wahrscheinlich bedeuten, mehrere Verbindungen zu öffnen und zu versuchen, sich anzumelden. Immer noch zeitaufwändig und nicht sehr praktisch.
he_the_great

Wenn Sie eine Million Überprüfungen pro Sekunde für eine nicht verlangsamte Verbindung ausführen können und der Verbindung dann eine Verzögerung von 1 Sekunde für fehlgeschlagene Versuche hinzugefügt wird, benötigen Sie eine Million Angriffsclients, um den gleichen Effekt zu erzielen. Ich bezweifle, dass der Server die Erstellung so vieler Telnet-Sitzungen zulässt.
Paxdiablo

Der Punkt ist, dass Sie nicht auf die Verzögerung warten müssen, bevor Sie das nächste Passwort versuchen. Was nützt es also?

@Greg, Sie müssen erneut eine Verbindung zum Host herstellen. Falls erforderlich, besteht der nächste Schritt darin, die IP-Adressen zu überprüfen, um dies ebenfalls abzufangen.
Paxdiablo

1

Was ich vorher versucht habe, schien zu funktionieren, tat es aber tatsächlich nicht; Wenn es dich interessiert, musst du den Wiki-Bearbeitungsverlauf überprüfen ...

Was tut der Arbeit (für mich) ist, um sowohl den Wert der pam_faildelay.so Verzögerung zu senken = X in /etc/pam.d/login (ich es 500000 gesenkt, eine halbe Sekunde), und auch nodelay hinzufügen (durch ein voran Leerzeichen) bis zum Ende der Zeile in Common-Auth , wie von Gabriel in seiner Antwort beschrieben.

auth [success=1 default=ignore] pam_unix.so nullok_secure nodelay

Zumindest für mich (debian sid) verkürzt nur eine dieser Änderungen die Verzögerung nicht wesentlich unter die Standard-3 Sekunden, obwohl es möglich ist, die Verzögerung zu verlängern, indem nur der Wert in /etc/pam.d/login geändert wird.

Diese Art von Mist ist genug, um einen erwachsenen Mann zum Weinen zu bringen!


0

Unter Ubuntu 9.10 und meiner Meinung nach auch neuen Versionen befindet sich die gesuchte Datei in

/etc/pam.d/login

Bearbeiten Sie die Zeile:

auth optional pam_faildelay.so delay = 3000000

Ändern Sie die Nummer 3 durch eine andere, die Sie möchten.

Beachten Sie, dass Sie die Datei bearbeiten sollten, um eine "Nodelay" -Authentifizierung zu erhalten

/etc/pam.d/common-auth

auch. An der Leitung:

auth [Erfolg = 1 Standard = ignorieren] pam_unix.so nullok_secure

füge 'nodelay' zum Finale hinzu (ohne Anführungszeichen). Aber diese letzte Erklärung über das "Nodelay" ist, was ich denke.


0

Ich möchte eine Notiz aus Entwicklersicht hinzufügen. Obwohl dies mit bloßem Auge nicht offensichtlich wäre, würde ein intelligenter Entwickler aus einer Übereinstimmungsabfrage ausbrechen, wenn die Übereinstimmung gefunden wird. Im Zeugnis würde ein erfolgreiches Match schneller abgeschlossen werden als ein fehlgeschlagenes Match. Denn die Übereinstimmungsfunktion vergleicht die Anmeldeinformationen mit allen bekannten Konten, bis die richtige Übereinstimmung gefunden wird. Mit anderen Worten, es gibt 1.000.000 Benutzerkonten, die nach IDs sortiert sind. 001, 002, 003 und so weiter. Ihre ID ist 43.001. Wenn Sie also einen korrekten Benutzernamen und ein korrektes Kennwort eingeben, stoppt der Scan bei 43.001 und meldet Sie an. Wenn Ihre Anmeldeinformationen falsch sind, werden alle 1.000.000 Datensätze gescannt. Der Unterschied in der Verarbeitungszeit auf einem Dual-Core-Server kann in Millisekunden liegen. Unter Windows Vista mit 5 Benutzerkonten würde dies in Nanosekunden erfolgen.


Ich denke, Sie werden feststellen, dass 99% der Poster hier Entwickler der einen oder anderen Ebene sind. Hör auf so pompös zu klingen.

Ich benutze Ubuntu und es gibt nur einen Benutzer. Wenn ich jedoch ein falsches Passwort übermittle, dauert es 3 Sekunden, bis ich eine Antwort erhalte. Also, du liegst falsch :)
Halil Bilgin

0

Genau. Dies ist eine willkürliche Programmierentscheidung. Wenn Sie die Verzögerung auf eine Sekunde anstatt auf drei setzen, wird die Knackbarkeit des Kennworts nicht wirklich beeinträchtigt, aber benutzerfreundlicher.


0

Technisch gesehen dient diese absichtliche Verzögerung dazu, Angriffe wie den "Linearisierungsangriff" zu verhindern (es gibt auch andere Angriffe und Gründe) .

Betrachten Sie zur Veranschaulichung des Angriffs ein Programm (ohne diese absichtliche Verzögerung), das eine eingegebene Seriennummer überprüft, um festzustellen, ob sie mit der richtigen Seriennummer übereinstimmt, in diesem Fall " xyba " . Aus Gründen der Effizienz hat der Programmierer beschlossen, jeweils ein Zeichen zu überprüfen und zu beenden, sobald ein falsches Zeichen gefunden wird. Vor Beginn werden auch die Längen überprüft.

Die Verarbeitung der richtigen Serienlänge dauert länger als eine falsche Serienlänge. Noch besser (für Angreifer) ist, dass eine Seriennummer mit dem ersten korrekten Zeichen länger dauert als jede mit einem falschen ersten Zeichen. Die aufeinanderfolgenden Schritte in der Wartezeit sind, weil jedes Mal, wenn es eine weitere Schleife gibt, ein Vergleich durchgeführt wird, um die korrekte Eingabe durchzuführen.

  • Der Angreifer kann also eine vierstellige Zeichenfolge auswählen , wobei die mit x beginnende Zeichenfolge die meiste Zeit in Anspruch nimmt. (durch Vermutungsarbeit)
  • Der Angreifer kann dann das Zeichen als x festlegen und das zweite Zeichen variieren. In diesem Fall wird festgestellt , dass y am längsten dauert.
  • Der Angreifer kann dann die ersten beiden Zeichen als xy festlegen und das dritte Zeichen variieren. In diesem Fall wird festgestellt , dass b am längsten dauert.
  • Der Angreifer kann dann die ersten drei Zeichen als xyb festlegen und das vierte Zeichen variieren. In diesem Fall wird festgestellt , dass a am längsten dauert.

Daher können die Angreifer die Serienzeichen einzeln wiederherstellen.

Linearization.java.

Linearization.docx, Beispielausgabe

Die Seriennummer ist vier Zeichen lang und jedes Zeichen hat 128 mögliche Werte. Dann gibt es 128 4 = 2 28 = 268.435.456 mögliche Serien . Wenn der Angreifer zufällig vollständige Seriennummern erraten muss, würde er die Seriennummer in etwa 2 27 = 134.217.728 Versuchen erraten , was eine enorme Menge an Arbeit darstellt . Andererseits sind unter Verwendung des obigen Linearisierungsangriffs durchschnittlich nur 128/2 = 64 Vermutungen für jeden Buchstaben erforderlich, für eine erwartete Gesamtarbeit von ungefähr 4 · 64 = 2 8 = 256 Vermutungen, was eine triviale Menge ist der Arbeit.

Ein großer Teil der schriftlichen Kampf aus angepasst dies (aus Mark Stamp des „Informationssicherheit: Principles and Practice“). Die oben genannten Berechnungen berücksichtigen auch nicht die Menge an Vermutungen, die erforderlich sind, um die korrekte Serienlänge herauszufinden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.