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

Des applications sont des applications privilégiées de système qui sont situés dans un priv-app répertoire sur l' une des partitions d'image du 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 décide de partition /etc/permissions/priv-app .

Historiquement, les fabricants d'appareils ont peu de contrôle sur lequel signature | autorisations privilégiées peuvent être accordées à des applications privilégiées. A partir de Android 8.0, les fabricants doivent accorder explicitement des autorisations privilégiées dans les fichiers XML de configuration du système dans le fichier /etc/permissions répertoire. À 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 privapp-permissions.xml fichier ne peut accorder ou refuser des autorisations pour des applications privilégiées sur la même partition. Par exemple, si une application sur le /product partition demande des autorisations privilégiées, la demande ne peut être accordé ou refusé par un privapp-permissions.xml fichier qui est aussi le /product .

Ajout de listes d'autorisation

Allowlists d'autorisation pour les applications peuvent être répertoriées dans un XML unique ou dans plusieurs fichiers XML situés dans les frameworks/base/etc/permissions répertoire 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. Exécutants de périphériques peuvent déterminer la structure du contenu aussi longtemps que toutes les applications de /system/priv-app sont allowlisted. 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 qui sont déjà inclus dans l'arborescence Android Open Source Project (AOSP de) sont répertoriés 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 d' autres applications, les fichiers d'utilisation de la forme: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Générer des listes d'autorisation

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

  1. Construire une image système:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Exécutez le privapp_permissions.py script pour générer un privapp-permissions.xml fichier qui répertorie toutes les signatures | autorisations privilégiées doit être allowlisted:
    development/tools/privapp_permissions/privapp_permissions.py
    Cette impression d'outils de contenu XML qui peut être utilisé soit comme un seul fichier, ou divisé en plusieurs fichiers dans le /etc/permissions chemin du répertoire. Si le dispositif comprend déjà allowlists dans les /etc/permissions des répertoires, l'outil affiche uniquement les différences (comme la signature manquante | autorisations privilégiées , vous devez ajouter au allowlist). 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 au approprié /etc/permissions répertoire, où le système lit les fichiers lors du démarrage.

Personnalisation des listes d'autorisation

AOSP comprend une implémentation de liste d'autorisation qui peut être personnalisée selon les besoins. Autorisations pour les applications incluses dans PSBA sont déjà allowlisted dans /etc/permissions/privapp-permissions-platform.xml .

Par défaut, le privapp_permissions.py script génère la 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>
    ...

Recherche des 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 plus bas, les applications concernées ne bénéficient pas des autorisations manquantes même si elles sont dans le priv-app chemin.
  • Sur Android 9 et plus, les violations (des autorisations privilégiées) signifie l'appareil ne démarre pas. Vous devez autoriser explicitement soit ou refuser toutes les autorisations privilégiées

Application des listes d'autorisation

Après allowlists sont en place, permettre l' exécution de l' exécution en définissant la propriété build ro.control_privapp_permissions=enforce .