Permisos de Android

Los permisos de Android proporcionan controles que aumentan el conocimiento del usuario y limitan el acceso de una app a datos sensibles. La configuración de permisos en Android 8.0 y versiones anteriores incluye la lista de entidades permitidas, sin la cual se inhabilitan las apps con privilegios, incluso si están en la ruta de acceso priv-app. En Android 9 y versiones posteriores, no se iniciará un dispositivo que intente usar apps que no estén correctamente en la lista de entidades permitidas.

Android 10 introdujo el concepto de un rol, un nombre único dentro del sistema asociado con ciertos requisitos y privilegios. Asigna roles a las apps para otorgarles permisos para un propósito específico y configura los roles predeterminados con recursos de configuración de la plataforma.

Las mayores protecciones contra las apps potencialmente dañinas (PHA) mejoran lo siguiente:

  • Transparencia en el comportamiento de aplicaciones potencialmente dañinas
  • Control del usuario sobre el comportamiento de la app
  • Discreción de los desarrolladores de apps cuando usan datos privados protegidos por permisos

Instalación de paquetes y permisos

En Android 9 y versiones anteriores, las funcionalidades de control de instalación de paquetes y permisos se incluían en el paquetePackageInstaller (//packages/apps/PackageInstaller). En Android 10 y versiones posteriores, la funcionalidad de control de permisos reside en un paquete independiente, PermissionController (//packages/apps/PermissionController). En la Figura 1 se muestra dónde residen los dos paquetes en Android 10.

Separación de las funcionalidades de control de permisos y de instalación de paquetes para las apps del sistema y las apps instaladas por el usuario

Figura 1: Funcionalidades de control de instalación de paquetes y permisos en Android 10

Listas de entidades permitidas y acceso

En Android 6.0 y versiones posteriores, las apps solicitan acceso a permisos peligrosos en el tiempo de ejecución. Android 10 agrega permisos de tiempo de ejecución de reconocimiento de actividad (AR), que le solicitan al usuario que modifique o permita permisos peligrosos.

Android 8.0 requería que incluyeras explícitamente en la lista de entidades permitidas las apps con privilegios en los archivos XML de configuración del sistema en el directorio /etc/permissions. En Android 9 y versiones posteriores, los permisos con privilegios deben incluirse en la lista de entidades permitidas o el dispositivo no podrá iniciarse.

Para limitar la visibilidad de la API interna y evitar que las apps accedan accidentalmente a las bibliotecas de la plataforma, Android 7.0 introdujo los espacios de nombres para las bibliotecas nativas. Esto separa las bibliotecas del sistema de las bibliotecas de apps, y los fabricantes de dispositivos pueden agregar sus propias bibliotecas nativas.

A partir de Android 10, las apps deben tener tanto permisos de firma como consentimiento del usuario para acceder al contenido de la pantalla de un dispositivo. Las apps con privilegios que dependen de la funcionalidad de captura silenciosa, como tomar una captura de pantalla, deben usar la clase MediaProjection en su lugar.

Android 15 requiere que incluyas explícitamente en la lista de entidades permitidas los permisos de firma de la plataforma que solicitan las apps que no son del sistema o que se solicitan recientemente con las actualizaciones de las apps del sistema en los archivos XML de configuración del sistema en el directorio /etc/permissions.

Transparencia y privacidad

En Android 6.0 y versiones posteriores, una dirección MAC de fábrica del dispositivo está protegida contra el acceso de proveedores de servicios Wi-Fi y analizadores de paquetes. Las restricciones adicionales a partir de Android 10 limitan el acceso de las apps a los IDs de dispositivos inmutables, a menos que estén en la lista de entidades permitidas para permisos con privilegios. (En la sección Conectividad , se proporciona un debate relacionado sobre los identificadores de dispositivos, ya que esto afecta a los operadores).

En Android 9 y versiones anteriores, los usuarios toman decisiones persistentes cuando otorgan acceso a la ubicación a las apps. A partir de Android 10, una función de permisos de ubicación de triestado les brinda a los usuarios tres opciones para permitir el acceso de la app a la ubicación de un dispositivo. Estos requisitos de permisos se aplican a las apps en Android 10, independientemente del SDK de destino.

Configura permisos para otras funciones de transparencia y privacidad a partir de Android 10.

Configuraciones optimizadas

Las configuraciones de permisos se optimizaron para Android 6.0 y versiones posteriores.

  • Las capacidades ambientales para los servicios iniciados por init mantienen todos los aspectos de la configuración del servicio en un solo archivo .rc. Cuando configures capacidades para servicios que no se iniciaron con init, configura las capacidades del sistema de archivos con fs_config.c en su lugar.
  • Android 7.x y versiones anteriores extienden el mecanismo de IDs de Android (AIDs) con un archivo android_filesystem_config.h específico del dispositivo para especificar las capacidades del sistema de archivos o los AIDs personalizados del fabricante del dispositivo. Android 8.0 y versiones posteriores admiten un nuevo método para extender las capacidades del sistema de archivos.
  • En Android 8.0, el manejo de los comandos USB se trasladó de las secuencias de comandos init específicas del dispositivo (una sustitución de las capas HAL) a un daemon USB nativo. La interfaz HAL de USB se debe implementar en todos los dispositivos que se inicien en Android 8.0 y versiones posteriores.