it-swarm.com.de

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

Diese Frage hat mich immer beunruhigt.

Wenn Sie unter Linux nach einem Kennwort gefragt werden, wird Ihre Eingabe, wenn Ihre Eingabe die richtige ist, sofort und fast ohne Verzögerung geprüft. Wenn Sie jedoch ein falsches Kennwort eingeben, dauert die Überprüfung länger. Warum das?

Ich habe dies in allen Linux-Distributionen beobachtet, die ich jemals versucht habe.

80
Flávio Amieiro

Es soll eigentlich verhindern, dass Brute-Force-Angriffe Millionen Passwörter pro Sekunde versuchen. Die Idee ist, zu begrenzen, wie schnell Kennwö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 sollten keine erkennbare Unterschiede in den zu erkennenden Ausfallursachen bestehen.

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 Fehlern "ungültiger Benutzer und Passwort" und "gültiger Benutzer aber ungültiges Passwort".

Jeder Fehler sollte genau die gleichen Informationen liefern, inhaltlich und anderweitig.

Einige Systeme gehen noch weiter, indem sie die Verzögerung bei jedem Fehler erhöhen oder nur drei Fehler zulassen und dann eine massive Verzögerung haben, bevor ein erneuter Versuch ermöglicht wird.

104
paxdiablo

Dadurch dauert das Erraten von Passwörtern länger.

14
RossFabricant

Ich bin nicht sicher, aber es ist üblich, eine Verzögerung nach der Eingabe eines falschen Passworts zu integrieren, um Angriffe zu erschweren. Dies macht einen Angriff praktisch unmöglich, da nur wenige Passwörter geprüft werden müssen.

Ein paar Passwörter auszuprobieren - Geburtsdaten, Name der Katze und ähnliches - machen keinen Spaß.

12

Grundsätzlich gegen Brute-Force- und Wörterbuch-Angriffe zu mildern.

Von Das Handbuch für Entwickler von Linux-PAM :

Verzögerungen planen

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 bevor die Steuerung an die Anwendung zurückgegeben wird, zu vereinfachen. Bei Verwendung dieser Funktion sollte der Anwendungsprogrammierer prüfen, ob er verfügbar ist mit

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

Im Allgemeinen fordert eine Anwendung an, dass ein Benutzer von Linux-PAM über 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. Auf Anweisung dieser Datei kann eines oder mehrere Module fehlschlagen, was dazu führt, dass der Aufruf pam _... () einen Fehler zurückgibt. Es ist wünschenswert, dass es auch eine Pause gibt, bevor die Anwendung fortgesetzt wird. Der Hauptgrund für eine solche Verzögerung ist die Sicherheit: Eine Verzögerung wirkt in erster Linie von Brute-Force-Wörterbuchangriffen ab, hilft aber auch, zeitgesteuerte (verdeckte Kanal-) Angriffe zu verhindern.

12
user32542

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

  1. Das System A hat keine Verzögerung. Ein Angreifer verfügt über ein Programm, das Kombinationen aus Benutzername und Kennwort erstellt. Bei Tausenden von Versuchen pro Minute dauert es nur wenige Stunden, um jede Kombination zu testen und alle erfolgreichen Anmeldungen aufzuzeichnen.

  2. Das System B erzeugt nach jeder falschen Schätzung eine Verzögerung von 5 Sekunden. Die Effizienz des Angreifers wurde auf 12 Versuche pro Minute reduziert, was den Angriff mit rohen Kräften effektiv lähmt. Anstelle von Stunden kann es Monate dauern, bis ein gültiges Login gefunden wird. Wenn Hacker dieser Patient wären, würden sie legitim werden. :-)

8
Adam Liss

Fehlgeschlagene Authentifizierungsverzögerungen sorgen dafür, dass der Anmeldeversuch verringert wird. Die Idee, dass, wenn jemand ein Wörterbuch oder einen Brute-Force-Angriff gegen einen oder mehrere Benutzerkonten versucht, dieser Angreifer die Ausfallsverzögerung abwarten muss und ihn dazu zwingt, mehr Zeit in Anspruch zu nehmen und Ihnen mehr Gelegenheit gibt, diese zu erkennen.

Möglicherweise möchten Sie auch wissen, dass es in Abhängigkeit von der Verwendung der Login-Shell 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 festlegen, wobei x ein Wert in Sekunden ist.

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

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

4

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

Wenn die Antwort auf ein korrektes Passwort (ein gewisser Wert) sofort ist, müssen Sie nicht länger als diesen Wert warten, um zu wissen, dass das Passwort falsch ist. (Zumindest wissen Sie probabilistisch, was für Knackzwecke in Ordnung ist.) Und trotzdem würden Sie diesen Angriff parallel ausführen ... ist dies alles eine große DoS-Willkommensmatte?

1
Greg M

Was ich zuvor versucht habe, schien zu funktionieren, tat es aber nicht. Wenn Sie sich darum kümmern, müssen Sie den Wiki-Bearbeitungsverlauf überprüfen ...

Was macht Arbeit (für mich) ist, um beide den Wert von pam_faildelay.so delay = X in /etc/pam.d/login zu senken (ich habe es auf 500000 halbiert ein zweiter), und auch nodelay (vorangestellt von einem Leerzeichen) am 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) wird die Verzögerung durch das Durchführen einer dieser Änderungen nicht wesentlich um 3 Sekunden verkürzt, 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 reicht aus, um einen erwachsenen Mann zum Weinen zu bringen!

1
user383869

Technisch gesehen dient diese absichtliche Verzögerung dazu, Angriffe wie den "Linearisierungsangriff" (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, die in diesem Fall " xyba ". Aus Gründen der Effizienz hat der Programmierer beschlossen, jeweils ein Zeichen zu prüfen und den Vorgang zu beenden, sobald ein falsches Zeichen gefunden wird, bevor die Längen ebenfalls geprüft werden.

Die korrekte Serienlänge dauert länger als eine falsche Serienlänge. Noch besser (für Angreifer) ist, dass eine Seriennummer, bei der das erste Zeichen korrekt ist, länger dauert als eine Seriennummer, bei der das erste Zeichen falsch ist. Die aufeinanderfolgenden Schritte in der Wartezeit sind, weil jedes Mal, wenn es eine weitere Schleife gibt, ein Vergleich durchgeführt werden muss, um eine korrekte Eingabe zu erhalten.

  • Der Angreifer kann also eine Zeichenfolge mit vier Zeichen auswählen, und die Zeichenfolge, die mit x beginnt, benötigt die meiste Zeit. (durch Vermutung)
  • Der Angreifer kann das Zeichen dann als x festlegen und das zweite Zeichen variieren. In diesem Fall dauert y am längsten.
  • Der Angreifer kann dann die ersten beiden Zeichen als xy festlegen und das dritte Zeichen variieren. In diesem Fall dauert b am längsten.
  • Der Angreifer kann dann die ersten drei Zeichen als xyb festlegen und das vierte Zeichen variieren. In diesem Fall dauert a am längsten.

Daher können die Angreifer die Seriennummer einzeln wiederherstellen.

Linearization.Java.

Linearization.docx, Beispielausgabe

Die Seriennummer ist vier Zeichen lang und jedes Zeichen hat 128 mögliche Werte. Dann gibt es 1284 = 228 = 268.435.456 mögliche Serien . Wenn der Angreifer zufällig vollständige Seriennummern erraten muss, würde er die Seriennummer in etwa 2 erraten27 = 134.217.728 Versuche, was einen enormen Arbeitsaufwand bedeutet . Auf der anderen Seite 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 = 28 = 256 Vermutungen, was eine triviale Menge an Arbeit ist.

Ein Großteil des schriftlichen Kriegsgeschehens ist aus this (entnommen aus Mark Stamps "Information Security: Principles and Practice"). Auch die obigen Berechnungen berücksichtigen nicht die Menge an Rätselraten, die erforderlich sind, um die korrekte Serienlänge zu ermitteln.

0

Unter Ubuntu 9.10, und ich denke, auch neue Versionen, befindet sich die Datei, nach der Sie suchen, in

/etc/pam.d/login

editiere die Zeile:

auth optional pam_faildelay.so delay = 3000000

Ändern Sie die Nummer 3 mit einer anderen, die Sie möchten.

Um eine "Nodelay" -Authentifizierung zu erhalten, denke ich, Sie sollten die Datei bearbeiten

/etc/pam.d/common-auth

auch. An der Leitung:

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

füge 'nodelay' zum Finale hinzu (ohne Anführungszeichen). Aber diese abschließende Erklärung zum "Nodelay" ist meiner Meinung nach.

0

Genau. Dies ist eine willkürliche Programmierentscheidung. Die Verzögerung auf eine Sekunde statt drei Sekunden zu setzen, schadet der Crackbarkeit des Passworts nicht wirklich, macht es jedoch benutzerfreundlicher.

0
Jim

Ich möchte eine Anmerkung aus Sicht der Entwickler hinzufügen. Obwohl dies für das bloße Auge nicht offensichtlich ist, bricht ein intelligenter Entwickler aus einer Übereinstimmungsabfrage heraus, wenn die Übereinstimmung gefunden wird. Ein erfolgreiches Spiel würde in Zeuge schneller abgeschlossen sein als ein fehlgeschlagenes Spiel. Denn die Abgleichfunktion würde die Anmeldeinformationen mit allen bekannten Konten vergleichen, bis sie die richtige Übereinstimmung findet. Mit anderen Worten, sagen wir, es gibt 1.000.000 Benutzerkonten in der Reihenfolge ihrer IDs. 001, 002, 003 und so weiter. Ihre ID lautet 43.001. Wenn Sie also einen korrekten Benutzernamen und ein korrektes Kennwort eingeben, stoppt der Scan um 43.001 und meldet Sie an. Wenn Ihre Anmeldeinformationen falsch sind, werden alle 1.000.000 Datensätze geprüft. 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 sein.

0
user368580