Asegurar las solicitudes de descanso de aplicaciones móviles

3

Estoy utilizando el inicio de sesión de Facebook en una aplicación móvil nativa, y estoy tratando de averiguar si mi enfoque es lo suficientemente seguro.

Este es el flujo (toda la comunicación se realiza a través de SSL):

  1. Inicio de sesión de usuario en Facebook a través de la aplicación móvil.

  2. La aplicación pasa la clave de acceso a corto plazo de Facebook del usuario al servidor.

  3. El servidor usa la clave y realiza una solicitud a Facebook para recuperar los detalles del usuario y obtener la clave de acceso a largo plazo de Facebook.

  4. Si la solicitud a Facebook tiene éxito, se crea un usuario en mi base de datos.

  5. Luego se crea un objeto para ese usuario, que incluye su ID de Facebook, el token de Facebook y la fecha de creación. Ese objeto se encripta utilizando Rijndeal (256 bits) y se devuelve al cliente. De ahora en adelante, todas las solicitudes del cliente incluyen ese token. El token es válido por 48 horas. Cuando el token expira, una vez más uso la clave de acceso de Facebook y hago una solicitud a Facebook. Si la clave de acceso de Facebook sigue siendo válida, se genera un nuevo token y se devuelve al cliente.

  6. Cuando el usuario desea sus datos, el cliente envía el token, si el descifrado del token se realiza correctamente, uso su ID de Facebook (que también es el ID que uso para el usuario), que forma parte del token, para recupere su información y envíela al cliente.

Tengo dos preguntas -

  1. ¿Es seguro ese flujo?
  2. Cuando cifro el token, ¿debo usar IV y sal diferentes para cada token? (Supongo que es necesario, pero ¿significa que debo almacenar la IV y la sal en la base de datos, y recuperarla en cada llamada que haga el cliente? Parece bastante expansiva).
pregunta Udi Idan 28.03.2014 - 16:51
fuente

1 respuesta

0

La seguridad de esto depende de cómo hace exactamente el cifrado. Si está utilizando el modo CBC y no tiene verificación de integridad, veo una debilidad que podría permitir que un usuario de su aplicación se haga pasar por otro usuario:

  1. El atacante obtiene legítimamente un token para su propia cuenta de Facebook. Luego esperan 48 horas para que el token no sea válido. Si presentan este token a su servidor, obtienen un nuevo token. De manera crucial, en esta solicitud, solo importa la ID de Facebook; el token de Facebook es irrelevante.
  2. Si el cifrado no tiene una verificación de integridad, entonces pueden manipular su token para cambiar su ID de Facebook. Si el cifrado utiliza el modo CBC, esto es bastante trivial. Cuando presentan el token manipulado, obtienen un token legítimo para la ID de Facebook del otro usuario.

Puede solucionar este problema utilizando la comprobación de integridad y el cifrado. De hecho, es posible que desee deshacerse del cifrado y simplemente usar la verificación de integridad. De todos modos, tiene SSL para cifrar todo lo que hay en el cable.

Otra consideración: ¿cómo inician sesión los usuarios con Facebook? Debe usar el botón "Iniciar sesión con Facebook" ( información de iOS ) en lugar de presentar una página web directamente dentro de tu aplicación.

    
respondido por el paj28 30.03.2014 - 21:56
fuente

Lea otras preguntas en las etiquetas