¿El hecho de proporcionar a los usuarios no existentes sales falsas impide la enumeración de usuarios?

4

Fondo

Actualmente estoy configurando un nombre de usuario básico & Proceso de inicio de sesión basado en hash para una aplicación web. El proceso consta de los siguientes pasos:

  1. El usuario envía su nombre de usuario.
  2. El servidor responde con sal.
  3. El usuario borra la contraseña y la envía junto con el nombre de usuario al servidor.
  4. El servidor autentica al usuario.

Obviamente, esto se simplifica un poco y se pasan por alto varios pasos durante el proceso de hashing real.

Lo que veo aquí es un potencial para enumerar los nombres de usuario existentes. Si un atacante envía un nombre de usuario que no existe, no se proporcionará sal, indicando al atacante si el nombre de usuario está en uso o no.

Pregunta

Cuando se proporciona un nombre de usuario no existente, si tuviera que proporcionar un salt al azar, ¿impide que el atacante enumere a los usuarios existentes?

¿Esa precosión sería tan pequeña que podría omitirse?

Preocupaciones

  • Un atacante podría ver que el servidor solo está arrojando valores aleatorios.
pregunta Alex 27.10.2015 - 11:10
fuente

1 respuesta

3

El principal problema con el sistema propuesto es que un atacante probablemente no se molestaría en obtener el paso de sal. No es necesario, la contraseña con sal es una contraseña equivalente, por lo que es más fácil saltar al paso 3 y enviar hashes generados previamente a su servidor.

En términos de enumeración de nombre de usuario, sí, sería posible determinar si un usuario existe dada la respuesta de salt o no. Dependiendo de su sistema, también podría ser posible determinar si un usuario existe solicitando el mismo nombre de usuario dos veces. Si obtiene el mismo valor de sal (que necesitaría usar para mantener el almacenamiento del lado del servidor de la contraseña segura) para dos llamadas, puede estar seguro de que el usuario era real. Puede mitigar eso almacenando las sales que ha enviado (lo que hace que su base de datos de usuario esté llena de basura después de un par de intentos de ataque) o generándolas algorítmicamente a partir del nombre de usuario (que debería ser aplicado a todos los usuarios para evitarlo). enumeración buscando los que no se generan de esta manera).

El sistema propuesto no ofrece realmente ninguna mejora de seguridad en un nombre de usuario / contraseña estándar, se sirve en HTTPS, pero aumenta el área de ataque y la información que los atacantes tienen sobre su sistema. Específicamente, saben que las contraseñas reales son hashes, con una sal conocida: tienen una longitud específica, contienen caracteres específicos (probablemente dígitos hexadecimales) y son una salida válida para cadenas que contienen la sal.

¡Sugiero seguir con el método probado de nombre de usuario / contraseña a través de HTTPS!

    
respondido por el Matthew 27.10.2015 - 11:36
fuente

Lea otras preguntas en las etiquetas