Las aplicaciones privilegiadas son aplicaciones del sistema ubicadas en un directorio priv-app
en una partición de imagen del sistema. Las particiones utilizadas para las versiones de Android son:
- Android 9 y superior:
/system, /product, /vendor
- Android 8.1 y versiones anteriores:
/system
Históricamente, los fabricantes de dispositivos tenían poco control sobre qué firma | Se podrían otorgar permisos privilegiados a aplicaciones privilegiadas. A partir de Android 8.0, los fabricantes pueden otorgar explícitamente permisos privilegiados en los archivos XML de configuración del sistema en el directorio /etc/permissions
. A partir de Android 9, los implementadores pueden otorgar o denegar explícitamente todos los permisos privilegiados. Si no se otorgan permisos privilegiados, el dispositivo no arrancará.
El archivo privapp-permissions.xml
solo puede otorgar o denegar permisos para aplicaciones privilegiadas en la misma partición. Por ejemplo, si una aplicación en la partición /product
solicita permisos privilegiados, la solicitud solo puede ser concedida o denegada mediante un archivo privapp-permissions.xml
en /product
.
Agregar una lista de permitidos
Las listas de permisos permitidos para aplicaciones se pueden enumerar en un único archivo XML o en varios archivos XML ubicados en el directorio frameworks/base/etc/permissions
:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
No se aplica ninguna regla estricta sobre cómo se organiza el contenido. Los implementadores de dispositivos pueden determinar la estructura del contenido siempre que todas las aplicaciones de /system/priv-app
estén en la lista permitida. Por ejemplo, Google ha desarrollado una lista única de permitidas para todas las aplicaciones privilegiadas. Recomendamos la siguiente organización:
- Los permisos para aplicaciones que ya están incluidas en el árbol del Proyecto de código abierto de Android (AOSP) se enumeran en
/etc/permissions/privapp-permissions-platform.xml
. - Para otras aplicaciones, utilice archivos del formato
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
Personalizar una lista de permitidos
AOSP incluye una implementación de lista de permitidos que se puede personalizar según sea necesario.
Si se debe denegar un permiso, edite el XML para utilizar una etiqueta deny-permission
en lugar de una etiqueta permission
. Por ejemplo:
<!-- This XML file declares which signature|privileged permissions to grant to privileged apps that come with the platform --> <permissions> <privapp-permissions package="com.android.backupconfirm"> <permission name="android.permission.BACKUP"/> <permission name="android.permission.CRYPT_KEEPER"/> </privapp-permissions> <privapp-permissions package="com.android.cellbroadcastreceiver"> <!-- Don't allow the application to interact across users --> <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/> <permission name="android.permission.MANAGE_USERS"/> <permission name="android.permission.MODIFY_PHONE_STATE"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/> </privapp-permissions> ...
Encuentra permisos faltantes
Para encontrar permisos faltantes al iniciar un nuevo dispositivo, habilite el modo de registro de transición:
ro.control_privapp_permissions=log
Las infracciones se informan en el archivo de registro. Se conceden permisos sin privilegios. Al hacerlo, se garantiza que el dispositivo permanezca en funcionamiento y al mismo tiempo proporcione la lista de infracciones. El formato del mensaje de error es el siguiente:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Todas las infracciones deben abordarse agregando los permisos faltantes a las listas de permitidos correspondientes. Tenga en cuenta que en:
- En Android 9 y versiones posteriores, las violaciones de permisos privilegiados impiden que el dispositivo se inicie. En su lugar, debe permitir o denegar explícitamente todos los permisos privilegiados.
- En Android 8.0 y versiones anteriores, los permisos faltantes no se otorgan a las aplicaciones afectadas a pesar de estar en la ruta
priv-app
.
Hacer cumplir una lista de permitidos
Después de crear sus listas permitidas, habilite la aplicación del tiempo de ejecución configurando la propiedad de compilación ro.control_privapp_permissions=enforce
.
La lista de permitidos solo es necesaria para los permisos declarados por aplicaciones con package="android"
. El estado de la propiedad ro.control_privapp_permissions
debe cumplir con la Sección 9.1 Permisos en el Documento de definición de compatibilidad (CDD).