Debilidades de seguridad de 3 golpes

10

He estado leyendo literatura sobre seguridad, específicamente seguridad / cifrado de contraseña, y me he estado preguntando algo: ¿es la regla de los 3 golpes una solución perfecta para la seguridad de contraseña? Es decir, si el número de intentos de contraseña se limita a un número pequeño, después de lo cual no se aceptarán todas las solicitudes de autenticación, ¿eso no protegerá a los usuarios de intrusiones? Me doy cuenta de que obtener acceso o control sobre algo no siempre significa pasar por el sistema de autenticación, pero ¿esta característica no hace obsoletos los ataques de diccionario / fuerza bruta? ¿Se me escapa algo?

prelic
fuente
3
Esta pregunta podría haberse hecho mejor en Seguridad para referencia futura.
maple_shaft
1
Como he encontrado, siempre hay un lugar más apropiado para preguntar. Gracias, intentaré recordarlo.
prelic

Respuestas:

13

Sí, hará que los ataques de diccionario sean imposibles a través del mecanismo de inicio de sesión . (Sin embargo, eso no significa mucho si obtienen acceso a la base de datos. Por razones de seguridad, tendrá que usar correctamente el hash y la sal de las contraseñas).

También permite la posibilidad de un ataque de DOS contra un determinado usuario. Digamos que quería evitar que inicie sesión. Todo lo que tendría que hacer es ejecutar tres intentos de inicio de sesión falsos en su cuenta, y luego volver a hacerlo cada vez que haga lo que sea necesario para restablecer el inicio de sesión. Tratar con ese problema es un poco más complicado.

Mason Wheeler
fuente
1
¡Gracias! Por curiosidad, ¿cuál sería un enfoque para tratar el último problema que describiste? Para un ejemplo del mundo real, toneladas de foros en línea usan el nombre de usuario público como ID de inicio de sesión (en lugar de un correo electrónico adjunto a la cuenta u otra cosa), lo que significa que puedo ver lo que cada usuario está utilizando para iniciar sesión. ¿Qué puede evitar que bloquee a cada usuario de su cuenta? ¿Un buen administrador? Parece que sería trivialmente fácil bloquear a todos los usuarios fuera del sitio.
prelic
@prelic: Bueno, para resolver ese problema, implementaría algo como "si una determinada dirección IP realiza demasiados intentos de inicio de sesión no válidos, bloquéelos". Eso detendrá el escenario que mencionaste, pero no tratará con un intento de pirateo serio como una botnet. Para eso necesitas mayor seguridad.
Mason Wheeler
44
La solución habitual es limitar la tasa de intentos que llegan para un usuario determinado desde una ip fija a 5 por minuto. No es perfecto, pero por lo general no crea problemas para otros usuarios, a menos que esté detrás del mismo proxy
Andrea
Otro enfoque es presentar un captcha después de 2 intentos fallidos de inicio de sesión desde la misma IP, pero luego, un atacante determinado puede alquilar un turco mecánico que rompe el captcha para este propósito, además es bastante difícil encontrar un buen captcha que realmente mantenga las máquinas afuera.
tdammers
3

También estoy de acuerdo en que hace que los ataques de diccionario sean menos efectivos como formas de obtener acceso a una cuenta sin la autorización adecuada. Sin embargo:

  • Este enfoque podría convertir un ataque de diccionario en un ataque de DOS contra el sistema que impide el acceso si se implementa mal. Por ejemplo, un servidor podría inundarse con intentos de autenticación. Una forma de evitar esto es hacer que el servicio de autenticación controle el flujo de accesos posteriores a una cuenta bloqueada. Por ejemplo, si una cuenta está bloqueada, presente un retraso antes de cada intento de inicio de sesión posterior. Sin embargo, se podría retrasar un intento de inicio de sesión y un "acceso denegado", que mantiene la puerta abierta a un ataque distribuido de denegación de servicio en el que un atacante lanza muchos intentos de autenticación simultáneos.

  • Como se mencionó en la otra respuesta, esto también podría convertir un ataque de diccionario en un crudo DOS contra el propietario legítimo de la cuenta que está siendo atacada. Las formas de mitigar el impacto para el propietario legítimo incluyen:

    • Retrasando la ejecución de los nombres de usuario al no proporcionar pistas sobre si el nombre de usuario o la contraseña son incorrectos. Esto hace que los ataques donde el culpable adivina los nombres de usuario sean más visibles para los administradores y menos efectivos.
    • En lugar de bloquear una cuenta después de un número fijo de intentos fallidos, simplemente bloquee ese modo de autenticación. En otras palabras, requiere que un usuario cuya cuenta está siendo atacada se autentique usando un método diferente (posiblemente más complicado, pero menos fácil de atacar). Un buen ejemplo es cómo un teléfono Android requerirá que un usuario use su información de inicio de sesión de Google después de no poder autenticarse usando un patrón de desbloqueo de pantalla o PIN. En teoría, esto es algo así como requerir que un usuario atacado solicite que se desbloquee su cuenta, sin embargo, no requiere la intervención inmediata de un administrador del sistema.
    • En lugar de bloquear una cuenta (o además de bloquear una cuenta, para este modo particular de autenticación, ver arriba), bloquee los intentos de autenticación desde la ubicación donde se origina el ataque. Por ejemplo, si la autenticación se realiza a través de un nombre de usuario y contraseña, a través de la red, después de tres intentos fallidos de autenticación, podría evitar que otros usuarios de la misma IP o subred inicien sesión con un nombre de usuario o contraseña. Cuando hay una buena posibilidad de que varios usuarios (incluido el atacante) puedan estar usando la misma IP o subred, simplemente puede deshabilitar la autenticación de nombre de usuario / contraseña para la IP o subred por un período de tiempo, dejando los métodos de autenticación más involucrados abiertos para inocentes usuarios en proximidad al atacante.
  • Si su temor es penalizar inadvertidamente a un usuario olvidadizo como si fuera un atacante, en lugar de controlar el flujo de intentos fallidos de inicio de sesión después de un número fijo de intentos fallidos, puede usar la frecuencia de los intentos de inicio de sesión como evidencia de que una cuenta está siendo atacada. Por ejemplo, si ve 10 intentos de autenticación en el lapso de un segundo, puede usar uno de los métodos anteriores para evitar más intentos de autenticación similares. Alternativamente, puede utilizar esta rápida inundación de intentos de inicio de sesión como una señal para comenzar a controlar el flujo. Este método se está volviendo cada vez más popular en los foros, mientras que, después de una cierta cantidad de intentos fallidos de inicio de sesión desde una IP en particular, se impide que la IP se autentique por un corto período de tiempo.

  • Finalmente, una buena manera de evitar que un usuario sea atacado repetidamente por un ataque DOS es permitiéndole restablecer tanto su contraseña como su nombre de usuario . En otras palabras, trate tanto el nombre de usuario como la contraseña como secretos. Cuando el nombre de usuario se usa en otro lugar (por ejemplo, en un foro, si el nombre de usuario es el nombre para mostrar del usuario), simplemente trate este nombre como algo separado. Este enfoque generalmente es utilizado por las redes sociales donde el nombre de usuario utilizado en la autenticación es la dirección de correo electrónico de uno, algo que se puede cambiar, pero rara vez se comparte, mientras que el nombre para mostrar utilizado en el sitio es algo definido por el usuario que puede o no ser cambiado.

De todos modos, espero que una o alguna combinación de estos enfoques sean útiles.

ctt
fuente