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
:
- Construire une image système:
. build/envsetup.sh
lunch PRODUCT_NAME
make -j
- Exécutez le
privapp_permissions.py
script pour générer unprivapp-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. - 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
.