Protección de fuerza bruta de dos factores

5

Si implemento la autenticación de dos factores mediante TOTP, (obviamente) tengo que protegerme contra los ataques de fuerza bruta simples del valor TOTP.

Si pido el valor TOTP después de iniciar sesión con contraseña, el atacante ya conoce la contraseña válida. Dado que la longitud predeterminada para el valor TOTP es de 6 dígitos, es fácil de fuerza bruta.

Posibles soluciones:

  • Bloquear cuenta de usuario: Desventaja de bloquear a un usuario legítimo sin manera de desbloquearlo.
  • Bloquear IP: puede funcionar, pero se puede omitir al aprovechar una red de bots. Debería bloquear más de una IP para IPv6.

Soluciones que no funcionan:

  • Bloquear sesión actual: no funciona, porque el atacante conoce la contraseña y puede abrir otra sesión.

¿Cómo se puede implementar una protección de fuerza bruta para que no bloquee al usuario legítimo, pero sigue bloqueando los ataques lo mejor posible?

    
pregunta kelunik 13.04.2016 - 16:25
fuente

1 respuesta

7

Lo que pasa con la fuerza bruta de un token TOTP es que tienes que adivinar correctamente en el momento adecuado . Por lo tanto, si no desea bloquear a un usuario después de x intentos fallidos (lo cual es una práctica común), puede ralentizar los intentos fallidos hasta el punto en que las probabilidades de obtener el TOTP correcto sean estadísticamente insignificantes.

Por ejemplo: el token TOTP de 6 dígitos tiene 1,000,000 de posibilidades. Pero la clave correcta cambia cada 30 segundos (en la implementación estándar de TOTP), por lo que la ventana de éxito no es el tiempo que lleva agotar todo el espacio del token, sino la cantidad de tokens que puede atravesar el atacante en un período determinado dividido por el tokenspace , y todavía es solo una oportunidad para el éxito. Haz que sea imposible atravesar el espacio del token en 30 segundos y reduce el ataque a una apuesta.

Ejemplo: el atacante obtiene una conjetura por segundo. Solo pueden superar 30 conjeturas de cualquier token dado, por lo que las probabilidades de éxito son básicamente aleatorias. Usando el proceso de Bernoulli de variables aleatorias (probabilidad de falla por el número de intentos), 24 horas de ataque de esta manera (86,400 intentos) produce solo un 8.2% de probabilidad de éxito. A los 10 días, se eleva al 57%. Entonces, simplemente convenza a su usuario para que cambie su contraseña o encuentre otra forma de bloquear al atacante (por IP, etc.) antes de que ese porcentaje sea muy alto.

    
respondido por el Jeff Meden 13.04.2016 - 16:58
fuente

Lea otras preguntas en las etiquetas