Lista de permitidos de permisos privilegiados

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).