Liste d'autorisation des autorisations privilégiées

Les applications privilégiées sont des applications système situées dans un répertoire priv-app sur l'une des partitions d'image système. Les partitions utilisées pour les versions Android sont

  • Android 8.1 et versions antérieures - /system
  • Android 9 et supérieur - /system, /product, /vendor

Tout au long de cette page, /etc/permissions/priv-app se résout en partition /etc/permissions/priv-app .

Historiquement, les fabricants d'appareils avaient peu de contrôle sur les autorisations de signature|privilégiées pouvant être accordées aux applications privilégiées. À partir d'Android 8.0, les fabricants doivent explicitement accorder des autorisations privilégiées dans les fichiers XML de configuration du système dans le répertoire /etc/permissions . À partir d'Android 9, les implémenteurs doivent explicitement accorder ou refuser toutes les autorisations privilégiées, sinon l'appareil ne démarrera pas.

Le fichier privapp-permissions.xml peut uniquement accorder ou refuser des autorisations pour les applications privilégiées sur la même partition. Par exemple, si une application sur la partition /product demande des autorisations privilégiées, la demande ne peut être accordée ou refusée que par un fichier privapp-permissions.xml qui se trouve également sur /product .

Ajouter des listes d'autorisation

Les listes d'autorisation d'autorisations pour les applications peuvent être répertoriées dans un seul fichier XML ou dans plusieurs fichiers XML situés dans le répertoire frameworks/base/etc/permissions comme suit :

  • /etc/permissions/privapp-permissions- OEM_NAME .xml
  • /etc/permissions/privapp-permissions- DEVICE_NAME .xml

Il n'y a pas de règle stricte pour organiser le contenu. Les implémenteurs d'appareils peuvent déterminer la structure du contenu tant que toutes les applications de /system/priv-app sont autorisées. Par exemple, Google dispose d'une liste d'autorisation unique pour toutes les applications privilégiées développées par Google et recommande l'organisation suivante :

  • Les autorisations pour les applications déjà incluses dans l'arborescence Android Open Source Project (AOSP) sont répertoriées dans /etc/permissions/privapp-permissions-platform.xml .
  • Les autorisations pour les applications Google sont répertoriées dans /etc/permissions/privapp-permissions-google.xml .
  • Pour les autres applications, utilisez des fichiers au format : /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Personnalisation des listes d'autorisation

AOSP inclut une implémentation de liste d'autorisation qui peut être personnalisée selon les besoins. Les autorisations pour les applications incluses dans AOSP sont déjà autorisées dans /etc/permissions/privapp-permissions-platform.xml .

Si certaines autorisations doivent être refusées, modifiez le XML pour utiliser une balise "deny-permission" au lieu d'une balise "permission". Exemple:

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

Recherche des autorisations manquantes

Pour rechercher les autorisations manquantes lors de la mise en place d'un nouvel appareil, activez le mode de journalisation de transition :

ro.control_privapp_permissions=log

Les violations sont signalées dans le fichier journal, mais les autorisations non privilégiées sont toujours accordées. Cela maintient l'appareil en état de fonctionnement tout en fournissant la liste des violations. Voici le format du message d'erreur :

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

Toutes les violations doivent être résolues en ajoutant les autorisations manquantes aux listes d'autorisation appropriées.

  • Sur Android 8.0 et versions antérieures, les applications concernées ne reçoivent pas les autorisations manquantes, même si elles se trouvent dans le chemin priv-app privée.
  • Sur Android 9 et supérieur, les violations (des autorisations privilégiées ) signifient que l' appareil ne démarre pas . Vous devez explicitement autoriser ou refuser toutes les autorisations privilégiées

Application des listes d'autorisation

Une fois les listes d'autorisation en place, activez l'application de l'exécution en définissant la propriété ro.control_privapp_permissions=enforce .