Hier, la prochaine mise à jour du système d'exploitation pour les appareils mobiles de Google a été publiée. L'une des principales innovations d'Android 10 a été le «Project Mainline». Je vais essayer de comprendre ce que c'est, pourquoi et comment cela fonctionne.
Depuis de nombreuses années, Google essaie de résoudre le problème des mises à jour de sécurité sur Android. Android est actuellement installé sur plusieurs milliards d'appareils, mais la plupart des fabricants sont très réticents à prendre en charge les appareils après leur sortie. Cela conduit au fait qu'il existe de nombreux appareils en fonctionnement sur lesquels une version avec des vulnérabilités connues est installée.
La première grande étape pour simplifier la mise à jour d'Android a été «Project Treble», qui a «divisé» Android en deux parties: dépendant du matériel et indépendant. Ce qui a facilité la sortie des mises à jour des nouvelles versions d'Android. La prochaine grande étape a été Project Mainline. Il vous permet de mettre à jour des composants individuels du système d'exploitation sans mettre à jour l'ensemble du système, comme pour la mise à jour des applications.
Pourquoi est-ce nécessaire?
Dans l'architecture Android, le système d'exploitation (souvent appelé micrologiciel) est étroitement séparé des données utilisateur et des applications. Il est situé sur une section distincte de la mémoire flash, est en lecture seule et dans les dernières versions d'Android est signé numériquement pour le contrôle d'intégrité. Pour les applications Android qui font partie du système d'exploitation, une mise à jour est possible avec le placement de nouvelles versions d'applications dans la section mémoire de l'utilisateur. La mise à jour d'autres parties du système d'exploitation (services, bibliothèques, etc.), par exemple en utilisant le gestionnaire de packages, comme sur les distributions Linux, était impossible. Pour ces corrections, le fabricant a été contraint de publier une mise à jour de l'ensemble du système. Dans le même temps, lors de l'utilisation de Google Mobile Services (la grande majorité des appareils les utilisent), chaque mise à jour nécessite une certification par Google. Et «Project Mainline» résout ce problème, maintenant les composants du système peuvent être mis à jour individuellement, comme les applications Android. Outre les mises à jour de sécurité, il simplifie également la mise à jour des paramètres système et des données, tels que les fuseaux horaires (tzdata).
Comment ça marche
Le cœur de Project Mainline est le nouveau conteneur pour les applications système APEX (abréviation d'Android Pony EXpress).
Dans Android 10, Google a identifié 13 packages APEX dans le système qui peuvent être mis à jour indépendamment:
- Sécurité: Codecs multimédias, Composants de l'infrastructure multimédia, Résolveur DNS, Conscrypt
- Confidentialité: Documents UI, Permission Controller, ExtServices
- Cohérence: données de fuseau horaire, ANGLE (opt-in pour les développeurs), métadonnées du module, composants de mise en réseau, connexion au portail captif, configuration des autorisations réseau
Les packages APEX peuvent être installés de la même manière que les APK en utilisant le "programme d'installation du package", adb ou Google Play.
Apex
Le fichier APEX est similaire à celui utilisé pour les applications Andoird APK.
APEX est une archive zip contenant 4 fichiers principaux:
- apex_manifest.json - contient le nom du package et sa version;
- AndroidManifest.xml - métadonnées de package (similaire à APK);
- apex_payload.img - image du système de fichiers ext4;
- apex_pubkey - clé publique pour vérifier la signature de l'image.
Le service système du gestionnaire APEX (apexd) fonctionne avec les packages APEX.
Gestionnaire d'apex
- Le programme d'installation du package, après avoir déterminé qu'il s'agit d'un package APEX, le transmet au gestionnaire APEX.
- Le gestionnaire APEX vérifie le package et sa version.
- Si les vérifications réussissent, il le déballe dans la section utilisateur de la mémoire, met à jour l'enregistrement dans sa base de données et redémarre les appareils.
- Lorsque APEX démarre, le gestionnaire vérifie tous les packages de la base de données, crée un périphérique de boucle pour l'image ext4 et le monte le long du chemin / apex / name @ ver.
À l'intérieur d'une image d'un package APEX, il peut y avoir:
- fichiers exécutables
- bibliothèques partagées (.so)
- Bibliothèques JAR,
- fichiers de données
- fichiers de configuration.
Forfait Signature APEX
Le paquet APEX est signé deux fois, avec deux clés différentes. L'image ext4 est signée avec une clé (dm-verity est utilisé, comme dans le démarrage Android Verified), le package APEX (fichier zip) est signé avec la deuxième clé, similaire au package APK.
Noyau Linux
APEX utilise un certain nombre de mécanismes du noyau Linux, tels qu'un périphérique de boucle, DM-verity.
APEX est pris en charge sur la version 4.4 et ultérieure du noyau. Pour les périphériques sur les anciennes versions du noyau, seul le fonctionnement en mode «plat», qui ne prend pas en charge la mise à jour, est pris en charge.
Références:
android.googlesource.com/platform/system/apex/+/refs/heads/master/docs/README.mdandroid-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html