Cómo recordar una máquina confiable usando autenticación de dos factores (como el sistema de Google)

11

Estamos desarrollando una aplicación web que usará autenticación de dos factores. Es probable que intentemos emular algo similar al que usa Google, donde al iniciar sesión ingresas un nombre de usuario y contraseña, y luego recibamos un token en un mensaje SMS para ingresar también.

Nos gustaría permitir que los usuarios recuerden una máquina cliente si lo desean para que puedan iniciar sesión durante 30 días sin requerir el segundo método de autenticación. ¿A qué información tendremos acceso (a través de los encabezados de las solicitudes de la página web, etc.) que podemos usar para identificar de forma única esta máquina cliente confiable?

Obviamente, un usuario puede tener más de una máquina cliente de confianza, y espero por completo que si utilizan dos navegadores diferentes en la misma máquina de confianza, cada uno de ellos tendrá que ser confiable de forma independiente.

Establecer una cookie en la máquina con algún GUID, lo que significa que es de confianza, simplemente no sería lo suficientemente bueno, ya que otra persona podría simplemente copiar la cookie y crearla en su propio navegador evitando la autenticación de dos factores.

    
pregunta Marryat 22.02.2013 - 12:31
fuente

2 respuestas

9

No creo que sea completamente posible con solo JavaScript / PHP (o algún otro lenguaje del lado del servidor) para imprimir / identificar de forma única una computadora.

Recuerde, haga lo que haga, alguien con intenciones maliciosas puede copiar el directorio de datos de usuario de Chrome / Firefox en un sistema similar (el mismo sistema operativo, etc.). De hecho, esa es la cosa más fácil , ya que no tienes que buscar las cookies. JavaScript no puede leer nada fuera de estos directorios, por lo que acaban de duplicar el sistema.

Sin embargo, usted puede usar Flash / JavaScript para crear huellas digitales en el navegador . Desafortunadamente, la huella digital del navegador puede cambiar si el usuario instala fuentes / etc. Además, los usuarios tendrán que permitir que se ejecute Flash / JavaScript; en la actualidad, muchas personas están desactivando JavaScript debido a la reciente vulnerabilidad de 0 días. No quieres forzar a tus usuarios a usar estos. De todos modos, uno puede replicar fácilmente una huella dactilar replicando el sistema (lo que lleva tiempo, pero no es demasiado difícil).

Al final, la autenticación de dos factores tiene que ver con (a) tener una contraseña y (b) tener acceso físico a un dispositivo. Si le está dando a alguien acceso no supervisado a su computadora mientras está conectado como usted, la parte (b) está comprometida de todos modos, de una manera diferente.

Para responder a tu pregunta, sin embargo:

  • Puede poner un GUID único en una cookie
  • Puedes poner otro GUID en localStorage
  • Puede asociar parte del encabezado de solicitud del Agente de usuario con la cuenta. Por ejemplo, mi agente de usuario es User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11 . Desde aquí, puede extraer el nombre de mi navegador (que no cambiará), el nombre del sistema operativo y la versión (que cambiará ocasionalmente ), ya sea que mi computadora sea de 32 bits, etc.
  • navigator.plugins - Esta es una matriz de todos los complementos instalados en el navegador. Tal vez no sea una buena idea para la autenticación de 2 factores, ya que esto cambia con frecuencia.

Tenga en cuenta que todos estos pueden ser fácilmente falsificados. Solo es un problema adicional para que un pirata informático salte adelante.

Nuevamente, puede intentar usar técnicas de toma de huellas digitales que se ocupan de leer la lista de fuentes instaladas, etc. Una vez más, esto puede ser evitado, pero es mucho más difícil. También puede usar JavaScript para almacenar archivos de tipo cookie en lugares aleatorios en la computadora (no estoy seguro de si es una buena idea)

Editar: Como Joel menciona en los comentarios, también debería tener una forma de revocar "computadoras confiables" (simplemente disocie el GUID en su base de datos). Y esto debería aplicarse cuando la contraseña también se cambia.

    
respondido por el Manishearth 22.02.2013 - 13:22
fuente
1

No piense que esto se puede hacer de manera segura para un cliente arbitrario usando solo un navegador web estándar. Como usted dice, las cookies no son una opción segura para autorizar una computadora. Además, las cookies se establecen por navegador, no por computadora. Puede probar las técnicas de huellas dactilares del navegador , pero nuevamente esto es específico del navegador, no de la computadora. Y tenga en cuenta que las solicitudes HTTP, incluidas las cadenas de User Agent, pueden ser establecidas arbitrariamente por un cliente malicioso.

    
respondido por el Gruber 22.02.2013 - 13:22
fuente

Lea otras preguntas en las etiquetas