¿Por qué hay un gran retraso después de ingresar una contraseña incorrecta?


89

Noto algo extraño (bueno, según yo) sobre las contraseñas. Por ejemplo, si escribo una contraseña incorrecta durante el inicio de sesión, habrá un retraso de unos segundos antes de que el sistema me lo indique. Cuando intento sudocon una contraseña incorrecta, también tengo que esperar antes de que el shell diga "Lo siento, inténtalo de nuevo".

Me pregunto por qué lleva tanto tiempo "reconocer" una contraseña incorrecta. Esto se ha visto en varias distribuciones que uso (e incluso OSX), por lo que creo que no es una distribución específica.


He notado esto no solo en la terminal sino también en el inicio de sesión de sesión inicial después del inicio o cuando la computadora portátil está en modo de suspensión. Sin embargo, el desbloqueo de la contraseña correcta es instantáneo, me alegra ver surgidas estas preguntas :)
krozaine

Respuestas:


92

Esto es una cuestión de seguridad, en realidad no está tardando mucho en darse cuenta. 2 vulnerabilidades que esto resuelve:

  1. esto acelera los intentos de inicio de sesión, lo que significa que alguien no puede golpear el sistema tan rápido como puede intentar descifrarlo (¿1 millón de intentos por segundo? No lo sé).

  2. Si lo hizo tan pronto como verificó que sus credenciales eran incorrectas, podría usar la cantidad de tiempo que le tomó para invalidar sus credenciales para ayudar a adivinar si parte de sus credenciales eran correctas, reduciendo drásticamente el tiempo de adivinanzas.

Para evitar estas 2 cosas, el sistema solo toma una cierta cantidad de tiempo para hacerlo, creo que puede configurar el tiempo de espera con PAM ( vea la respuesta de Michaels ).

La ingeniería de seguridad ( 2ed, amazon | 1ed, gratuita ) ofrece una explicación mucho mejor de estos problemas.


44
// offtopic g no es un error, es una característica ;-)
echox

2
Su enlace de afiliado se reescribió automáticamente a SE, por cierto.
Gelatina

1
@Tshepang: Ver capítulo 2 , particularmente §2.4 y §2.5.3.3.
Gilles

44
La diferencia entre fallas tempranas y tardías al comparar un hash de contraseña se mide en nanosegundos. Con una codificación adecuada (comparación de memoria de tiempo constante) no hay ninguna diferencia. Eso no es justificación para agregar un retraso.
CodesInChaos

2
Estoy de acuerdo con CodesInChaos: el segundo punto de la respuesta es incorrecto. Lo que realmente está sucediendo es lo siguiente: 1. se calcula un hash de su entrada; 2. ese hash se compara con el hash almacenado (cada byte, incluso si ya se encontró una diferencia); Tenga en cuenta que estos dos pasos no son más rápidos ni más lentos, dependiendo de si la contraseña que ingresó es correcta. (y como otros ya han señalado, agregar una duración de sueño no solucionaría un ataque de tiempo si fuera posible)
ejemplo

41

Esto es intencional, para tratar de limitar la fuerza bruta. Por lo general, puede modificarlo buscando la FAIL_DELAYentrada de configuración /etc/login.defsy cambiando su valor (el mío es 3segundos por defecto), aunque el comentario en ese archivo hace que parezca que PAM aplicará al menos un 2segundo retraso sin importar qué


99
Esto es para evitar más que solo el forzamiento bruto. pero puntos de bonificación por saber dónde configurarlo.
xenoterracide

55
Creo que el fail_delay también es configurable en /etc/pam.d/login. Busquepam_faildelay.so delay=
Steven D

8
¿Qué le impide escribir un contenedor para sudo que inicie una nueva instancia de sudo una vez que un intento no funcione dentro de, digamos, 0.1 segundos?
Janus Troelsen

11

En los sistemas Linux modernos, la razón es que pam_unix.so impone tal retraso. Como se informó anteriormente, esto se puede configurar hasta dos segundos cambiando FAIL_DELAYen /etc/login.defs. Si desea reducir aún más el retraso, debe dar a pam_unix.so la opción "nodelay". Por ejemplo, en mi sistema, si rastrea las inclusiones a partir de /etc/pam.d/sudo, encontrará que tiene que editar la siguiente línea de /etc/pam.d/system-auth:

auth      required  pam_unix.so     try_first_pass nullok

y cámbialo a esto:

auth      required  pam_unix.so     try_first_pass nullok nodelay

Desafortunadamente, la forma en que mi Linux distro (arch) configura las cosas, ese mismo system-autharchivo se incluye system-remote-login, que es utilizado por sshd.

Si bien es seguro eliminar el retraso en sudo, porque eso está registrado, solo lo usan los usuarios locales y los atacantes locales pueden evitarlo de todos modos, probablemente no desee eliminar este retraso para los inicios de sesión remotos. Por supuesto, puede solucionarlo escribiendo un sudo personalizado que no solo incluya los archivos compartidos de autenticación del sistema.

Personalmente, creo que la demora en sudo (e ignorar SIGINT) es un gran error. Significa que los usuarios que saben que escribieron mal la contraseña no pueden matar el proceso y se frustran. Por supuesto, aún puede detener sudo con Ctrl-Z, ya que sudo no atrapa SIGTSTP, y después de detenerlo puede matarlo con kill -9 (SIGKILL). Es molesto hacerlo. Eso significa que un ataque automatizado podría disparar sudos en pseudo terminales a una velocidad súper alta. Pero la demora frustra a los usuarios legítimos y los alienta a suspender sus shells raíz en lugar de salir de ellos para evitar tener que sudo nuevamente.


1
Lo mismo con Fedora. Análisis impresionante
Freedom_Ben

Brillante respuesta. También estaba pensando que FAIL_DELAY se ha vuelto obsoleto en los sistemas de escritorio modernos. Debe confiar en el cifrado de la partición / disco duro y nada más. Por lo general, no hay un segundo usuario que intente forzar la contraseña de root de fuerza bruta. Sin embargo , los programas potencialmente maliciosos podrían abusar de un FAIL_DELAY inseguro y, por lo tanto, obtener acceso de root.
phil294

establecer pam-unix en nodelayestablecerá el tiempo de espera en 0 por cierto, y FAIL_DELAY se ignora.
phil294

¿Por qué no deshabilitar el retraso y luego deshabilitar el inicio de sesión con contraseña remota (solo SSH)? ¿Eso no resuelve el problema sin introducir ninguna vulnerabilidad de seguridad?
Radón Rosborough
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.