Estoy desarrollando una aplicación en este momento que contiene bastante información personal del usuario - cosas como contactos de Facebook, etc ... Ahora, uno de las cosas que quiero ser capaz de hacer (y lo he hecho de manera bastante efectiva) son abrir partes de la aplicación a aplicaciones de "terceros", utilizando el protocolo de comunicación interproceso (AIDL) incorporado de Android. Hasta aquí todo bien.Implementar seguridad de nivel de firma en servicios de Android con más de una firma permitida
Aquí está el truco: porque estamos involucrados en el manejo de una gran cantidad de información personal, tenemos que tener mucho cuidado sobre quién puede y no puede acceder a ella; específicamente, solo las aplicaciones "de confianza" deberían poder hacerlo. Entonces, la forma más natural de hacerlo es usar un permiso personalizado dentro del archivo AndroidManifest.xml donde declaramos los servicios. Mi problema es el siguiente: Quiero ser capaz de promulgar protección a nivel de firma (similar al nivel de permiso normal "firma"), pero con un poco de la captura:
yo no solamente desee solicitud firmada con nuestra firma interna para poder acceder a los servicios. Me gustaría poder crear una lista de "firmas de confianza" & en tiempo de ejecución (o si hay una forma mejor, ¿luego tal vez en algún otro momento?) Poder verificar las solicitudes entrantes con esta lista de claves de confianza.
Esto satisfaría las restricciones de seguridad del mismo modo que el nivel de permiso de "firma" normal, creo que solo los programas en la "lista de claves de confianza" podrían acceder a los servicios, y las claves son difíciles de falsificar (si posible en absoluto?) - pero con la ventaja adicional de que no tendríamos que firmar cada aplicación haciendo uso de las API con la clave de nuestro equipo interno.
¿Es esto posible por el momento en Android? Y si es así, ¿hay algún requisito especial?
Gracias
Excelente información, gracias. –
no podemos simplemente verificar el nombre del paquete en el enlace y si la aplicación no está autorizada. paquete intente acceder y luego devolver el valor nulo devolviendo el objeto ibinder. –
@kamal_tech_view Desafortunadamente, no creo que ese enfoque funcione como espera, ya que 'onBind()' solo se llama una vez, por el sistema operativo (consulte aquí: https://groups.google.com/d/msg/ android-security-discuss/4B9jwsAkp2c/QJc4A5FSWCMJ). Tenga en cuenta el consejo de utilizar una fábrica para proteger la parte sensible del sistema en el primer punto de llamada, no lo he investigado, pero creo que desearía verificar la configuración en el 'SecurityManager' actual (usted puede encontrar que el llamado puede obtener sus campos ocultos a través de la introspección y evitar su cheque). – jelford