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 une partition d'image système. Les partitions utilisées pour les versions Android sont :

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

Historiquement, les fabricants d'appareils avaient peu de contrôle sur la signature | des autorisations privilégiées pourraient être accordées aux applications privilégiées. À partir d'Android 8.0, les fabricants peuvent explicitement accorder des autorisations privilégiées dans les fichiers XML de configuration du système dans le répertoire /etc/permissions . Depuis Android 9, les implémenteurs peuvent explicitement accorder ou refuser toutes les autorisations privilégiées. Si les autorisations privilégiées ne sont pas accordées, 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 sur /product .

Ajouter une liste blanche

Les listes d'autorisation d'autorisation 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 :

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

Aucune règle stricte ne s’applique à la manière dont le contenu est organisé. Les responsables de la mise en œuvre des appareils peuvent déterminer la structure du contenu tant que toutes les applications de /system/priv-app sont sur la liste verte. Par exemple, Google a développé une liste blanche unique pour toutes les applications privilégiées. Nous recommandons l'organisation suivante :

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

Personnaliser une liste d'autorisation

AOSP inclut une implémentation de liste blanche qui peut être personnalisée selon les besoins.

Si une autorisation doit être refusée, modifiez le XML pour utiliser une balise deny-permission au lieu d'une balise permission . Par 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>
    ...

Rechercher les autorisations manquantes

Pour rechercher les autorisations manquantes lors du démarrage d'un nouvel appareil, activez le mode de journalisation transitoire :

ro.control_privapp_permissions=log

Les violations sont signalées dans le fichier journal. Des autorisations non privilégiées sont accordées. Cela garantit que l'appareil reste en état de fonctionnement tout en fournissant la liste des violations. Le format du message d'erreur est le suivant :

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 autorisées appropriées. Notez que dans :

  • Android 9 et supérieur, les violations des autorisations privilégiées empêchent le démarrage de l'appareil. Au lieu de cela, vous devez explicitement autoriser ou refuser toutes les autorisations privilégiées.
  • Android 8.0 et versions antérieures, les autorisations manquantes ne sont pas accordées aux applications concernées même si elles se trouvent dans le chemin priv-app .

Appliquer une liste blanche

Après avoir créé vos listes autorisées, activez l'application de l'exécution en définissant la propriété de construction ro.control_privapp_permissions=enforce .

La liste blanche est requise uniquement pour les autorisations déclarées par les applications avec package="android" . L'état de la propriété ro.control_privapp_permissions doit respecter les autorisations de la section 9.1 du document de définition de compatibilité (CDD).