¿Por qué veo 2FA pero no veo "dos entidades separadas" siendo priorizadas en la autenticación del sitio web?

1

He visto varios métodos de autenticación de sitios web de 2 pasos por ahí. Algunos incluyen dos contraseñas, HOTP / TOTP, Yubikey, SMS a un número de teléfono, etc. Sin embargo, parece que todos estos sistemas dependen de su computadora o dispositivo principal para no ser comprometidos.

Para ser específico, permítame referirme específicamente a TOTP. Aquí hay un flujo típico de un sitio web de TOTP para un sitio:

  1. Escribes tu contraseña en tu computadora
  2. Abre su aplicación 2FA (por ejemplo, autenticación de FreeOTP, autenticación de Google)
  3. Escribe el token TOTP actual en tu computadora

Si un atacante tenía un registrador de teclas o un registrador de CPU en su computadora, ¿no pueden acceder a su cuenta? En el paso 3, asumiendo que su computadora está comprometida, tienen tanto su contraseña como su token TOTP actual. Entiendo que el atacante solo puede acceder a su cuenta una vez porque el token TOTP caducará después de 30 segundos.

Sin embargo, qué pasaría si el flujo típico de un sitio web de TOTP fuera el siguiente:

  1. Escribes tu contraseña en tu computadora
  2. Abre su aplicación 2FA (por ejemplo, autenticación de FreeOTP, autenticación de Google)
  3. Envía el token TOTP actual directamente desde su teléfono al servidor del sitio en el que estaba intentando iniciar sesión desde su computadora

No veo cómo sería mucho más esfuerzo en el lado del servidor del sitio. Supongo que solo necesitaría un punto final que escuche los tokens TOTP entrantes que se envían con un nombre de usuario para identificar para qué inicio de sesión está el token TOTP entrante. Ahora un atacante tendría que instalar un keylogger en su computadora (o dispositivo principal) y en su teléfono (o segundo dispositivo) para obtener acceso a su cuenta.

En mi opinión, con esta configuración propuesta, un mecanismo de seguridad definitivo sería una computadora + un dispositivo de hardware específico que sea capaz de enviar claves TOTP a un servidor (tal vez como un Bitcoin Trezor pero en lugar de mostrar una dirección de bitcoin, sería mostrar un nombre de dominio o dirección IP para confirmación). Pero por lo que sé, no veo un impulso para usar dos entidades separadas para realizar la autenticación del sitio web. ¿Hay alguna razón para esto?

    
pregunta kshikama 29.07.2016 - 17:22
fuente

2 respuestas

1
  

Comprendo que el atacante solo puede acceder a tu cuenta una vez porque el token TOTP caducará después de 30 segundos.

Este es el caso de TOTP. Pero hay muchos HOTP basados en el contador, que en realidad son contraseñas de un solo uso, lo que significa que su captura no le permite a nadie más iniciar sesión si ya lo hizo (el virus en su computadora tendría que evitar el envío del verdadero). contraseña de tiempo). Este también es el caso de la mayoría de tokens de hardware y tokens de SMS.

  

Envía el token TOTP actual directamente desde su teléfono al servidor del sitio en el que estaba intentando iniciar sesión desde su computadora

Existen tales herramientas, pero no estoy al tanto de la implementación para sitios web públicos. Por lo general, se denomina eliminación de puertos o autenticación de paquete único (SPA), generalmente se utiliza para abrir el puerto de Firewall, por ejemplo, para SSH. Es un buen nivel adicional de seguridad, pero excesivo para el uso diario. La buena implementación es fwknop y creo que podría vincularla a su aplicación como un "segundo factor".

    
respondido por el Jakuje 29.07.2016 - 22:00
fuente
0
  

Si un atacante tenía un registrador de teclas o un registrador de CPU en su computadora, puede   ¿No acceden a tu cuenta? En el paso 3, asumiendo que tu computadora es   comprometidos, tienen tanto su contraseña como su token TOTP actual.

Sí. Pero también tenga en cuenta que si el atacante puede modificar el software de su cliente (ya sea un cliente SSH o un navegador web), también puede modificar todo el contenido y los comandos transferidos después de la autenticación. El programa cliente tiene acceso a todos los datos, después de todo.

Con un servicio web, la autenticación generalmente solo proporciona una cookie de sesión que luego se usa para autenticar todas las solicitudes siguientes (ya que todas las solicitudes HTTP están separadas lógicamente en el nivel de protocolo), y la cookie se puede usar desde otro proceso completamente independiente de la misma máquina si es necesario. Con SSH, el cliente modificado necesitaría inyectar comandos en el mismo flujo (y asegurarse de no mostrarle su salida), lo que requeriría un poco de cuidado, pero de ninguna manera es imposible.

Para protegerse realmente de un programa cliente comprometido, necesitaría autenticar todas las transacciones independientes a través de un canal separado. Si el comando es algo así como "Transfiera $ 100000 a esta cuenta bancaria en algún país turbio", esto no sería una mala idea de todos modos, pero recibir un SMS de confirmación cada vez que quiera enumerar los archivos en su directorio de inicio se volverá viejo bastante rápido .

  

Comprendo que el atacante solo puede acceder a tu cuenta una vez porque el token TOTP caducará después de 30 segundos.

Claro, pero incluso iniciar sesión una vez es suficiente para copiar todos sus datos o instalar una puerta trasera (si el sistema tiene alguna capacidad de ejecución de código). El uso de las mismas credenciales también mostraría al usuario válido un error de inicio de sesión falso, ya que para que la conexión del atacante funcione, primero tendría que autenticarse, invalidando la OTP y fallando el inicio de sesión del usuario. Pero es probable que el usuario simplemente asuma que ha escrito mal su contraseña o OTP y lo intente nuevamente.

Por supuesto, es más fácil crear un keylogger pasivo, por lo que probablemente sea un modo de ataque más común que un comando personalizado en toda regla.

    
respondido por el ilkkachu 30.07.2016 - 11:07
fuente

Lea otras preguntas en las etiquetas