¿Debería preocuparse por los ataques DoS si su servidor está usando bcrypt?

21

(Acabo de hacer esta pregunta en "cryptography SE" y se me sugirió que la hiciera aquí)

EDIT Acabo de darme cuenta de que mi pregunta es principalmente una duplicación de: ¿Impedir ataques de denegación de servicio contra funciones de hashing lento?

Si alguien elige bcrypt, ¿no están los servidores particularmente expuestos a un ataque DoS que intentaría maximizar la CPU?

Si tomamos, digamos, un servidor web: incluso si tiene un ancho de banda de red gigantesco, parece que martillar remotamente el servidor con solicitudes de inicio de sesión HTTP POST podría dificultar la CPU.

Si el servidor no limita la velocidad de lo que parece, incluso desde una sola máquina / IP, no sería demasiado difícil forzar al servicio a hacer muchos cálculos.

¿Es esto algo de lo que preocuparse (por ejemplo, necesita agregar algún tipo de cortafuegos especial de limitación de velocidad que tenga específicamente en cuenta los "ataques de cifrado remoto") o simplemente estoy siendo paranoico aquí?

    
pregunta Cedric Martin 27.09.2012 - 18:28
fuente

3 respuestas

16

bcrypt es lento, lo que sin duda aumenta el riesgo de un ataque DoS fácil, pero hay varias maneras en las que podría limitar a los clientes antes de que lleguen al paso bcrypt:

  • Realice un seguimiento de las direcciones IP e ignore a cualquier persona que intente iniciar sesión con demasiada rapidez (tal vez empiece por hacer una pausa durante cierto tiempo antes de la autenticación, luego trabaje hasta obtener una IP de lista negra).
  • Coloque los intentos de inicio de sesión en una cola de prioridad y establezca la prioridad según la cantidad de intentos fallidos de inicio de sesión en una dirección IP particular como se hizo recientemente. Esto dejará su servidor bajo una gran carga, pero los usuarios legítimos deberían poder ingresar.
  • Agregue un CAPTCHA . Los CAPTCHA son molestos, por lo que solo requiere esto si detecta un ataque en curso o si obtiene demasiados intentos de una sola dirección IP.
  • Haga que la máquina del cliente haga algo costoso como parte del proceso de inicio de sesión , como romper un hash corto o encontrar los factores primos de un pequeño número. Esto tiene la ventaja de que usar una IP diferente no ayudará, pero significa que se requiere JavaScript para iniciar sesión.
  • Detectar cuándo un usuario está intentando iniciar sesión desde una nueva ubicación y enviarles un correo electrónico. Ni siquiera se moleste en intentar verificar la contraseña hasta que se autentique la dirección IP. Esto tiene la desventaja de que los atacantes podrían molestar (y asustar) a sus usuarios si tienen un número suficientemente grande de direcciones IP para trabajar.
respondido por el Brendan Long 27.09.2012 - 19:05
fuente
6
  

Si el servidor no limita la velocidad de lo que parece, incluso desde una sola máquina / IP, no sería demasiado difícil obligar al servidor a hacer muchos cálculos.

DoS es un riesgo con cualquier servicio. Cuanto más procesamiento requiera, más importante será la limitación de velocidad si estamos hablando de contraseñas de hash o de hacer consultas a la base de datos.

Al considerar la cantidad de rondas, piense en cómo la compensación entre manejar la autenticación se carga y mantener los sistemas disponibles. Consulte otra respuesta mía que hace referencia a la determinación de cuántas rondas de bcrypt usar .

    
respondido por el Jeff Ferland 27.09.2012 - 18:51
fuente
1

Desde lo alto de mi cabeza, creo que te quedarías sin sockets o puertos antes de usar toda la CPU en una máquina moderna. Si no ha ajustado su máquina a un valor bajo por time_wait, los puertos se agotarán.

    
respondido por el rox0r 28.09.2012 - 02:37
fuente

Lea otras preguntas en las etiquetas