Autenticación del usuario protegida contra todos los vectores de ataque

0

Después de haber pasado mucho tiempo investigando, no puedo confirmar si mi sistema es lo suficientemente seguro.

  • Los usuarios tienen un teléfono móvil e inician sesión en un servidor de autorización central al pasar su nombre de usuario, contraseña y un nombre. La contraseña será hasheada
  • Nombre de usuario, la contraseña se generará previamente y se entregará al usuario a través de métodos fuera de banda. es decir, no hay una página de registro, y el nombre de usuario, la contraseña que se asigna a un usuario nunca se verá comprometida
  • El usuario recibirá un jwt con un tiempo de caducidad de, por ejemplo, 12 horas
  • Para cualquier solicitud post o get , el usuario debe agregar jwt en el header según los estándares comunes
  • Se puede confiar completamente en el servidor

Ahora mis dudas son,

  • Si alguien intercepta los paquetes que se envían desde el móvil, puede obtener el token jwt , que se puede usar para enviar solicitudes de un pirata informático. ¿Qué impide que el pirata informático envíe solicitudes al agregar jwt a sus solicitudes?
  • Si se infringen los paquetes entrantes y salientes del dispositivo móvil durante la etapa de inicio de sesión, el pirata informático obtendrá acceso al hash de la contraseña (y salt) y al nombre de usuario al leer los paquetes. Lo que le impide enviar esos mismos datos en un punto posterior al servidor y obtener un jwt de su propio

Supongo que el hacker es extremadamente sofisticado.

Una cosa en la que pensé es que cada vez que el usuario intenta iniciar sesión, se inicia un intercambio de claves con el servidor y luego se usa para intercambiar la contraseña. Por lo tanto, si se obtiene esta información, el pirata informático no puede usar esto para autenticarse, ya que las claves de cifrado son de naturaleza efímera.

Otra opción más fácil, es hacer que el servidor simplemente envíe un nonce, que el cliente usará para firmar la contraseña. Esto es exclusivo de una sola sesión, por lo que, una vez que el usuario inicie sesión, si un pirata informático envía la misma contraseña firmada, se rechazará ya que el nonce en el lado del servidor habría caducado.

Sin embargo, no puedo protegerme en la eventualidad de que el pirata informático acceda al token jwt .

    
pregunta Varun Agarwal 24.11.2016 - 12:03
fuente

1 respuesta

2

Supongo que está utilizando https con una longitud de clave razonable, para acceder a la API de inicio de sesión y recibir el JWT y enviar el JWT son sesiones SSL. Si este es el caso, acceder a JWT desde una captura de paquetes de la sesión SSL (encriptada) no será rápido. Por lo tanto, su JWT debería tener un tiempo de vencimiento razonable y volver a publicarse al vencimiento.

Si le preocupa que su carga útil sea demasiado sensible para https , sugeriría usar una conexión privada (por ejemplo, túnel sobre VPN) antes de la conexión de la aplicación. Para las aplicaciones públicas, esto no es práctico.

    
respondido por el Tim Ebenezer 24.11.2016 - 12:08
fuente