¿Es la identificación de la instalación lo suficientemente segura como para autenticar al usuario del dispositivo contra una API de servicio web?

5
¿

... o pedir de forma interactiva una contraseña o tener algún certificado es inevitable?

Context

Mi aplicación de Android quiere hacer transacciones seguras a través de mi API de servicios web. Sin embargo, no quiero molestar a mi usuario con pedir / registrar contraseñas, ni pedir instalar certificados.

Así que aquí hay una solución propuesta, pero tengo serias dudas al respecto, no puede ser falsificada.

Solución propuesta

  • La conexión entre mi aplicación de Android y la API de mi servidor está restringida a HTTPS
  • Antes de que la aplicación se comunique por primera vez con el servidor, consulta el ID de instalación de mi aplicación. Todas las llamadas API subsiguientes tendrán este ID único como primer parámetro.

Question(s)

¿Es posible que un tercero (criminal, pirata informático) conozca este ID de instalación (por ejemplo, instale otra aplicación maliciosa en el mismo dispositivo) para que pueda enviar solicitudes falsas a mi servidor con cualquier herramienta personalizada, como un escritorio? aplicación?

    
pregunta g.pickardou 27.03.2016 - 17:03
fuente

2 respuestas

3

Lo que puede hacer un atacante es, en un dispositivo rooteado, descompilar su apk y entender lo que se está comunicando con la API para realizar la autenticación o identificar al usuario en su back-end. Pueden volver a diseñar ese proceso de comunicación en cualquier aplicación (escritorio u otra plataforma móvil). Recuerde que una vez que alguien instala su aplicación de Android en sus dispositivos, no tiene ningún control sobre esa aplicación.

Su solución funcionaría en un entorno controlado como una red corporativa (asumiendo que está instalando la aplicación solo en dispositivos de confianza conocidos). En público, dudaba mucho que su solución funcionara.

Y de acuerdo con los estándares de la industria, no se recomienda abrir una API pública (si su API es pública) sin ningún mecanismo de autenticación.

    
respondido por el user3496510 22.01.2017 - 03:39
fuente
1

Una aplicación maliciosa en un dispositivo rooteado puede leer cualquier certificado o contraseña que usarás para ser más astuto que los enemigos. También en su caso, ¿cómo sabrá que la primera solicitud (la que recibe la clave API) proviene de una aplicación legítima y no de un pirata informático?

Dentro de estas limitaciones, un id de dispositivo 1 verificado no es peor que cualquier otra cosa.

Por identificación del dispositivo me refiero a cualquier identificación que sea única para el dispositivo verificado. Podría ser el android.provider.Settings.Secure.ANDROID_ID de 64 bits en formato sin procesar, o mezclado con alguna cadena específica de la aplicación, o un hash MD5 de eso, para que la solicitud sea menos obvia para el observador casual.

Update : dado que el propósito de la identificación es proteger los datos privados del usuario en la nube, está bien devolver una "contraseña" única del usuario desde el servidor en la primera solicitud, y utilizarlo más tarde sin inicio de sesión manual. Utilice HTTPS para todas las solicitudes, para protegerse contra la detección de esta contraseña en el aire.

Pero debe saber que un investigador determinado podrá interceptar la clave, al menos si tiene acceso físico al dispositivo, y puede romper la protección de desbloqueo.

Si el "disco" no está cifrado, la clave se puede recuperar incluso desde un dispositivo bloqueado.

    
respondido por el Alex Cohn 27.03.2016 - 17:45
fuente

Lea otras preguntas en las etiquetas