2011-11-17 14 views
13

Escribo 1) una aplicación que almacena un nombre de usuario y una contraseña en AccountManager, y 2) una aplicación de servicio de fondo separada que accede a esas credenciales para iniciar sesión en mis servidores, etc. Jugando con esto, me parece que estoy capaz de llamar a AccountManager.getPassword (cuenta) desde el Servicio (aplicación 2) para acceder al tipo de cuentas que he agregado al AccountManager usando la otra aplicación (aplicación 1).¿Qué protege las contraseñas de Android AccountManager de ser leídas por otras aplicaciones?

Debido a esto, estoy empezando a preguntarme qué detiene una aplicación maliciosa arbitraria 1) incluyendo los campos en el manifiesto para tener acceso a la administración de cuentas, y luego 2) iterar a través de todas las cuentas de un tipo particular y llamando a mAccountManger.getPassword (cuenta) en ellos. Sé que durante la instalación, aparece un cuadro de diálogo con todos los permisos que solicita una aplicación, pero no creo que podamos contar con que el usuario promedio rechace una aplicación porque solicita permisos sospechosos.

¿Hay alguna manera de evitar que se llame a getPassword en un tipo de cuenta? ¿Hay formas de proteger cuentas en el Administrador de cuentas de aplicaciones que se han otorgado muchos permisos de cuenta?

Respuesta

9

La protección de datos de cuenta se basa en el Id. De usuario (UID) de Linux del proceso que realiza la solicitud. (Consulte Security and Permissions en la guía). Cada cuenta está asociada a un autenticador de cuenta (que tiene un UID), y el proceso que llama al getPassword (u otros métodos) debe tener el mismo UID que el autenticador.

Cuestiones relacionadas