Warum gibt es eine große Verzögerung nach der Eingabe eines falschen Passworts?

89

Ich bemerke eine seltsame (naja, meiner Meinung nach) Sache mit Passwörtern. Wenn ich zum Beispiel beim Anmelden ein falsches Kennwort eingebe, dauert es einige Sekunden, bis das System dies mitteilt. Wenn ich es sudomit einem falschen Passwort versuche, muss ich auch warten, bis die Shell "Sorry, try again" sagt.

Ich frage mich, warum es so lange dauert, ein falsches Passwort zu "erkennen". Dies wurde bei mehreren Distributionen beobachtet, die ich verwende (und sogar bei OSX), daher denke ich, dass dies keine verteilungsspezifische Sache ist.

phunehehe
quelle
Ich habe dies nicht nur im Terminal bemerkt, sondern auch beim ersten Anmelden in der Sitzung nach dem Start oder wenn sich der Laptop im Energiesparmodus befindet. Das Entsperren des richtigen Passworts ist jedoch sofort möglich.
Freut

Antworten:

92

Dies ist eine Sicherheitssache, und es dauert nicht lange, sie zu realisieren. 2 Schwachstellen, die dadurch behoben werden:

  1. Dadurch werden die Anmeldeversuche gedrosselt, was bedeutet, dass jemand das System nicht so schnell zerstören kann, wie er versucht, es zu knacken (1 Million Versuche pro Sekunde? Ich weiß nicht).

  2. Wenn dies der Fall war, sobald überprüft wurde, dass Ihre Anmeldeinformationen falsch waren, können Sie die dafür benötigte Zeit zum Ungültigmachen Ihrer Anmeldeinformationen verwenden, um zu erraten, ob ein Teil Ihrer Anmeldeinformationen korrekt war.

Um diese 2 Dinge zu verhindern, braucht das System nur eine gewisse Zeit, um dies zu tun. Ich denke, Sie können die Wartezeit mit PAM konfigurieren ( siehe Michaels Antwort ).

Security Engineering ( 2ed, amazon | 1ed, kostenlos ) bietet eine viel bessere Erklärung für diese Probleme.

Xenoterracid
quelle
4
// offtopic g es ist kein Bug, es ist ein Feature ;-)
Echox
2
Ihr Affiliate-Link wurde übrigens automatisch in SEs umgeschrieben.
Gelatine
1
@ Tshepang: Siehe Kapitel 2 , insbesondere §2.4 und §2.5.3.3.
Gilles
4
Der Unterschied zwischen frühem und spätem Ausfall beim Vergleichen eines Passwort-Hash wird in Nanosekunden gemessen. Bei richtiger Codierung (konstanter Zeitspeichervergleich) gibt es überhaupt keinen Unterschied. Das ist keine Rechtfertigung für das Hinzufügen einer Verzögerung.
CodesInChaos
2
Ich stimme CodesInChaos zu: Der zweite Punkt der Antwort ist falsch. Was tatsächlich passiert, ist Folgendes: 1. Ein Hash Ihrer Eingabe wird berechnet. 2. dieser Hash wird mit dem gespeicherten Hash verglichen (jedes Byte davon, auch wenn bereits ein Unterschied festgestellt wurde); Beachten Sie, dass diese beiden Schritte in keiner Weise schneller oder langsamer sind, je nachdem, ob das eingegebene Passwort korrekt ist. (und wie andere bereits darauf hingewiesen haben, würde das Hinzufügen einer Schlafdauer einen Timing-Angriff nicht korrigieren, wenn dies möglich wäre.)
Beispiel:
41

Dies ist beabsichtigt, um das brachiale Erzwingen zu begrenzen. Sie können es normalerweise ändern, indem Sie nach dem FAIL_DELAYKonfigurationseintrag in suchen /etc/login.defsund dessen Wert ändern (meiner ist 3standardmäßig Sekunden), obwohl der Kommentar in dieser Datei den Eindruck erweckt, dass PAM 2unabhängig von der Einstellung mindestens eine zweite Verzögerung erzwingt

Michael Mrozek
quelle
9
Dies soll verhindern, dass mehr als nur Gewalt angewendet wird. aber Bonuspunkte für das Wissen, wo man es konfiguriert.
Xenoterracide
5
Ich denke, dass das fail_delay auch in konfigurierbar ist /etc/pam.d/login. Suchen Sie nachpam_faildelay.so delay=
Steven D
8
Was hindert Sie daran, einen Wrapper für sudo zu schreiben, der eine neue sudo-Instanz startet, sobald ein Versuch nicht innerhalb von beispielsweise 0,1 Sekunden funktioniert?
Janus Troelsen
11

Auf modernen Linux-Systemen ist der Grund, dass pam_unix.so eine solche Verzögerung auferlegt. Wie bereits berichtet, kann dies durch eine Änderung auf zwei Sekunden eingestellt wird FAIL_DELAYin /etc/login.defs. Wenn Sie die Verzögerung weiter reduzieren möchten, müssen Sie pam_unix.so die Option "nodelay" zuweisen. Wenn Sie beispielsweise auf meinem System die Includes ab verfolgen /etc/pam.d/sudo, müssen Sie die folgende Zeile bearbeiten /etc/pam.d/system-auth:

auth      required  pam_unix.so     try_first_pass nullok

und ändere es so:

auth      required  pam_unix.so     try_first_pass nullok nodelay

Leider wird auf die Art und Weise, wie meine Linux-Distribution (Arch) die Dinge konfiguriert, genau dieselbe system-authDatei mit einbezogen system-remote-login, die von sshd verwendet wird.

Obwohl es sicher ist, die Verzögerung für sudo zu beseitigen, da diese protokolliert wird, nur von lokalen Benutzern verwendet wird und von lokalen Angreifern sowieso umgangen werden kann, möchten Sie diese Verzögerung wahrscheinlich nicht für Remoteanmeldungen beseitigen. Sie können das Problem natürlich beheben, indem Sie ein benutzerdefiniertes Sudo schreiben, das nicht nur die freigegebenen Systemauthentifizierungsdateien enthält.

Persönlich halte ich die Verzögerung bei sudo (und das Ignorieren von SIGINT) für einen großen Fehler. Dies bedeutet, dass Benutzer, die wissen, dass sie das Kennwort falsch eingegeben haben, den Vorgang nicht abbrechen und frustriert werden können. Natürlich können Sie sudo immer noch mit Strg-Z stoppen, da sudo SIGTSTP nicht abfängt, und nachdem Sie es gestoppt haben, können Sie es mit kill -9 (SIGKILL) beenden. Es ist nur ärgerlich zu tun. Das bedeutet, dass ein automatisierter Angriff Sudos auf Pseudo-Terminals mit einer super hohen Rate abfeuern könnte. Aber die Verzögerung frustriert legitime Benutzer und ermutigt sie, ihre Root-Shells auszusetzen, anstatt sie zu beenden, um zu vermeiden, dass sie erneut sudo müssen.

user3188445
quelle
1
Gleiches gilt für Fedora. Fantastische Analyse
Freedom_Ben
Geniale Antwort. Ich dachte auch, FAIL_DELAY ist in modernen Desktop-Systemen überholt. Sie sollten sich auf die Partitions- / Festplattenverschlüsselung verlassen und auf nichts anderes. In der Regel gibt es keinen zweiten Benutzer, der versucht, das root-Passwort zu erzwingen. Allerdings , potenziell schädliche Programme könnten eine unsichere FAIL_DELAY missbrauchen und damit Root - Zugriff bekommen.
Phil294
Durch Setzen von pam-unix auf nodelaywird die Wartezeit übrigens auf 0 gesetzt, und FAIL_DELAY wird dann ignoriert.
Phil294
Deaktivieren Sie die Verzögerung und anschließend die Remote-Kennwortanmeldung (nur SSH). Behebt das nicht das Problem, ohne eine Sicherheitslücke einzuführen?
Radon Rosborough