¿Es seguro usar sal Bcrypt generado en la cookie para servir como token en lugar de una contraseña?

8

Tengo un sitio web (hobby) que solo se ejecuta en SSL. El sitio no se ocupa de las finanzas, los números de seguridad social o cualquier cosa de ese nivel de importancia. Sin embargo, me gustaría asegurarlo tanto como sea razonablemente posible. Las cookies están marcadas como seguras y httponly. Las contraseñas se almacenan en el lado del servidor utilizando bcrypt.

Estoy intentando implementar "recordarme" para aquellos usuarios que quieran usarlo. Examinando este sitio, sé que no desea almacenar una contraseña en una cookie; más bien, desea almacenar un "token" que permita un uso no crítico, pero luego solicite la contraseña real para acciones críticas (por ejemplo, cambiar la contraseña).

En lugar de generar aleatoriamente un token, luego crear una base de datos (u otro método) de coincidencia, ¿es demasiado inseguro utilizar el sal generado aleatoriamente de bcrypt como el token en la cookie?

Las ventajas son:

  1. Se genera al hashear la contraseña, por lo que no hay costo o código adicional
  2. Almacenado con contraseña, por lo que puede encontrar y hacer coincidir según sea necesario
  3. Único

Las desventajas pueden ser:

  1. El token no cambia de sesión a sesión

Si la cookie es robada de alguna manera, solo permite el acceso no crítico al sitio. Es decir, no revela la contraseña real, la contraseña no se puede cambiar, el correo electrónico asociado con la cuenta no se puede cambiar.

¿Estoy pasando por alto algo serio en el esquema anterior?

    
pregunta RPW 29.09.2012 - 23:44
fuente

3 respuestas

7

Mis dos centavos, no estás pasando por alto nada. Su esquema es correcto. Pero recuerda que lo que estás haciendo no es seguro. El identificador de sesión debe ser único para cada sesión. ¿Por qué puedes preguntar?

Bueno, sugiera que un atacante puede robar la cookie. Entonces él puede iniciar sesión como ese usuario. Hasta que el usuario cierre la sesión, porque entonces el identificador de sesión caduca. Sin embargo, si su ID de sesión permanece igual en todas sus sesiones, el atacante podrá seguir iniciando sesión como usuario, independientemente de si el usuario está desconectado o no.

En resumen, esto significa que, una vez que un atacante ha robado una cookie, tendrá una clave permanente para las sesiones de ese usuario (a menos que el usuario cambie la contraseña). Tenga en cuenta que esto se considera un alto riesgo. El impacto de tal ataque puede ser bastante alto.

    
respondido por el Lucas Kauffman 30.09.2012 - 01:21
fuente
4

No hagas esto.

Si un atacante olfateara el ID de la sesión por el cable, el atacante ahora tiene un acceso efectivo a la cuenta del usuario. Igualmente malo, no tiene forma de expirar la sesión si sabe que esto ha sucedido ya que no puede regenerar el resumen de bcrypt sin tener la contraseña del usuario.

No trates de ser creativo. Genere un token aleatorio en cada nueva visita y vuelva a generarlo al iniciar sesión para evitar ataques de fijación de sesión (cuando un atacante establece el ID de sesión de un usuario en un valor que conoce, luego espera que el usuario inicie sesión antes de acceder al sitio con ese ID) .

    
respondido por el Stephen Touset 30.09.2012 - 05:16
fuente
0

Además de las respuestas anteriores, al tratar la necesidad de que los tokens de sesión sean aleatorios y diferentes para cada sesión, también existe otro riesgo al exponer públicamente la sal de un hash de contraseña.

Si bien es cierto que una sal no debe ser secreta, al mismo tiempo no es una buena idea dar a conocer públicamente. Esto se debe a que un ataque que conoce la sal, puede construir una tabla de arco iris para esta sal en particular , antes de obtener una copia de las contraseñas con hash.

Cuando obtiene la copia de las contraseñas con hash (por ejemplo, mediante un ataque de inyección de SQL) ahora puede intentar buscar inmediatamente el valor del hash para el que ya construyó la tabla del arco iris. De este modo, se minimiza el tiempo entre el ataque y el uso malicioso real de los datos robados.

Polynomial ha respondido esto mejor que yo .

    
respondido por el Jacco 01.10.2012 - 08:18
fuente

Lea otras preguntas en las etiquetas