Liste d'autorisation d'autorisations privilégiées

Les applications privilégiées sont des applications système qui se trouvent 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 inférieur - /system
  • Android 9 et supérieur - /system, /product, /vendor

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

Historiquement, les fabricants d'appareils avaient peu de contrôle sur les signatures| autorisations 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 .

Ajout de listes d'autorisation

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 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 de périphériques peuvent déterminer la structure du contenu tant que toutes les applications de /system/priv-app sont sur liste d'autorisation. 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 de la forme : /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Génération de listes d'autorisation

Pour générer automatiquement une liste d'autorisation pour toutes les applications disponibles sur l'image système, utilisez l'outil de ligne de commande AOSP à l' development/tools/privapp_permissions/privapp_permissions.py . Pour générer une version initiale de privapp-permissions.xml spécifique à l' privapp-permissions.xml :

  1. Créer une image système :
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Exécutez le script privapp_permissions.py pour générer un fichier privapp-permissions.xml qui répertorie toutes les signatures|autorisations privilégiées requises pour être autorisées :
    development/tools/privapp_permissions/privapp_permissions.py
    Chemin du répertoire /etc/permissions . Si l'appareil inclut déjà des listes d' /etc/permissions répertoires /etc/permissions , l'outil n'imprime que les différences (telles que la signature manquante|les autorisations privilégiées que vous devez ajouter à la liste d'autorisation). Ceci est également utile à des fins d'audit : lorsqu'une nouvelle version de l'application est ajoutée, l'outil détecte les autorisations supplémentaires nécessaires.
  3. Copiez les fichiers générés dans le répertoire /etc/permissions approprié, où le système lit les fichiers pendant le démarrage.

Personnalisation des listes d'autorisation

AOSP comprend 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 .

Par défaut, le script privapp_permissions.py génère une sortie qui accorde automatiquement toute autorisation demandée par une application privilégiée. S'il y a des autorisations qui 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>
    ...

Trouver les autorisations manquantes

Pour rechercher les autorisations manquantes lors de l'ouverture d'un nouvel appareil, activez le mode journal 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 dans un é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 .
  • Sur Android 9 et versions ultérieures, les violations (d'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é de ro.control_privapp_permissions=enforce .