Pourquoi y a-t-il un grand délai après la saisie d'un mot de passe incorrect?

89

Je remarque une chose étrange (bien, selon moi) à propos des mots de passe. Par exemple, si je tape un mot de passe incorrect lors de la connexion, quelques secondes s’écouleront avant que le système me le dise. Lorsque j'essaie d' sudoutiliser un mot de passe incorrect, je dois également attendre avant que le shell ne dise "Désolé, essayez à nouveau".

Je me demande pourquoi il faut tant de temps pour "reconnaître" un mot de passe incorrect? Cela a été vu sur plusieurs distributions que j'utilise (et même sur OSX), donc je pense que ce n'est pas une chose spécifique à la distribution.

phunehehe
la source
Je l’ai remarqué non seulement dans le terminal, mais aussi lors de la connexion à la session initiale après le démarrage ou lorsque le portable est en mode veille. Le déverrouillage du mot de passe à droite est instantané, mais
je suis

Réponses:

92

Ceci est une question de sécurité, il ne faut pas tarder pour le réaliser. 2 vulnérabilités que cela résout:

  1. cela accélère les tentatives de connexion, ce qui signifie que quelqu'un ne peut pas marteler le système aussi vite qu'il peut essayer de le casser (1 M tentatives par seconde? Je ne sais pas).

  2. S'il le faisait dès qu'il a vérifié que vos informations d'identification étaient incorrectes, vous pouvez utiliser le temps qu'il a fallu pour l'invalider afin de vous aider à deviner si une partie de vos informations d'identification était correcte, ce qui réduirait considérablement le temps nécessaire pour deviner.

Pour éviter ces deux problèmes, le système prend juste un certain temps, je pense que vous pouvez configurer le temps d'attente avec PAM ( voir la réponse de Michaels ).

L'ingénierie de la sécurité ( 2ed, amazon | 1ed, gratuit ) donne une bien meilleure explication de ces problèmes.

xénoterracide
la source
4
// offtopic g ce n'est pas un bug, c'est une fonctionnalité ;-)
echox le
2
Votre lien d'affiliation a été automatiquement réécrit en SE, au fait.
Gélatine
1
@Tshepang: voir le chapitre 2 , en particulier les § 2.4 et 2.5.3.3.
Gilles
4
La différence entre l'échec précoce et tardif lors de la comparaison d'un hachage de mot de passe est mesurée en nanosecondes. Avec un codage correct (comparaison de mémoire à temps constant), il n’ya aucune différence. Ce n'est pas une justification pour ajouter un délai.
CodesInChaos
2
Je suis d'accord avec CodesInChaos: le deuxième point de la réponse est incorrect. Voici ce qui se passe réellement: 1. un hachage de votre entrée est calculé; 2. ce hachage est comparé au hachage stocké (chaque octet, même si une différence a déjà été trouvée); Notez que ces deux étapes ne sont en aucun cas plus ou moins rapides selon que le mot de passe que vous avez entré était correct ou non. (et comme d'autres l'ont déjà fait remarquer, l'ajout d'une durée de sommeil ne résoudrait pas une attaque temporelle si c'était possible)
exemple le
41

C'est intentionnel, pour essayer de limiter le forçage brutal. Vous pouvez généralement le modifier en recherchant l' FAIL_DELAYentrée de configuration dans /etc/login.defset en modifiant sa valeur (le mien est 3secondes par défaut), bien que le commentaire dans ce fichier donne l'impression que PAM appliquera au moins un 2second délai, peu importe le type

Michael Mrozek
la source
9
Ceci afin d'éviter plus que le simple forçage brutal. mais des points bonus pour savoir où le configurer.
xenoterracide
5
Je pense que le fail_delay est également configurable dans /etc/pam.d/login. Rechercherpam_faildelay.so delay=
Steven D
9
Qu'est-ce qui vous empêche d'écrire un wrapper pour sudo qui démarre une nouvelle instance sudo une fois qu'une tentative ne fonctionne pas, par exemple, 0,1 seconde?
Janus Troelsen
11

Sur les systèmes linux modernes, la raison en est que pam_unix.so impose un tel délai. Comme indiqué précédemment, cela peut être configuré jusqu'à deux secondes en changeant FAIL_DELAYen /etc/login.defs. Si vous voulez réduire davantage le délai, vous devez donner à pam_unix.so l'option "nodelay". Par exemple, sur mon système, si vous tracez les inclus à partir de /etc/pam.d/sudo, vous devez modifier la ligne suivante de /etc/pam.d/system-auth:

auth      required  pam_unix.so     try_first_pass nullok

et changez cela en ceci:

auth      required  pam_unix.so     try_first_pass nullok nodelay

Malheureusement, de la même manière que ma distribution Linux (arch) configure les choses, ce même system-authfichier est inclus par system-remote-login, utilisé par sshd.

Bien qu'il soit prudent d'éliminer le délai sur sudo, car il est enregistré, utilisé uniquement par les utilisateurs locaux et contournable par les attaquants locaux de toute façon, vous ne souhaiterez probablement pas éliminer ce délai pour les connexions à distance. Vous pouvez bien sûr résoudre ce problème en écrivant un sudo personnalisé qui n'inclut pas uniquement les fichiers partagés avec l'authentification système.

Personnellement, je pense que le retard sur sudo (et ignorer SIGINT) est une grosse erreur. Cela signifie que les utilisateurs qui savent qu'ils ont mal saisi le mot de passe ne peuvent pas arrêter le processus et sont frustrés. Bien sûr, vous pouvez toujours arrêter sudo avec Ctrl-Z, car sudo ne capture pas SIGTSTP, et après l'avoir arrêté, vous pouvez le tuer avec kill -9 (SIGKILL). C'est juste ennuyant à faire. Cela signifie donc qu'une attaque automatisée pourrait déclencher très rapidement des sudos sur des pseudo-terminaux. Toutefois, ce délai frustrant les utilisateurs légitimes et les encourageant à suspendre leur shell racine au lieu de les quitter pour éviter de devoir à nouveau subir une erreur.

utilisateur3188445
la source
1
Même chose avec Fedora. Analyse impressionnante
Freedom_Ben
Réponse brillante. Je pensais également que FAIL_DELAY était devenu obsolète dans les systèmes de bureau modernes. Vous devez compter sur le chiffrement partition / disque dur et rien d’autre. Généralement, il n'y a pas de second utilisateur susceptible d'essayer de forcer brutalement le mot de passe root. Cependant , des programmes potentiellement malveillants pourraient utiliser abusivement FAIL_DELAY et obtenir ainsi un accès root.
phil294
définir pam-unix sur nodelaymettra le temps d'attente à 0 au passage, FAIL_DELAY est alors ignoré.
phil294
Pourquoi ne pas désactiver le délai, puis désactiver la connexion par mot de passe distant (SSH uniquement)? Cela ne résout-il pas le problème sans introduire de faille de sécurité?
Radon Rosborough le