Caches de confiance
Le cache statique de confiance fait partie de la chaîne de démarrage sécurisé. Il s’agit d’un registre de confiance de tous les fichiers binaires Mach-O qui sont maîtrisés dans un volume système signé. Chaque Mach-O est représenté par un hachage de répertoire de code. Pour permettre une recherche efficace, ces hachages sont triés avant d’être insérés dans le cache de confiance. Le répertoire de code est le résultat de l’opération de signature effectuée par codesign(1)
. Pour appliquer le cache de confiance, la SIP doit demeurer activée. Pour désactiver l’application du cache de confiance sur un Mac avec puce Apple, le démarrage sécurisé doit être réglé à « Sécurité permissive ».
Lorsqu’un fichier binaire est exécuté (qu’il s’agisse de générer un nouveau processus ou de mettre du code en correspondance avec un processus existant), son répertoire de code est extrait et haché. Si le hachage correspondant est détecté dans le cache de confiance, les privilèges de la plateforme seront accordés aux correspondances exécutables établies pour le fichier binaire. Autrement dit, ils pourront jouir de tout droit et s’exécuter sans qu’aucune autre vérification quant à l’authenticité de la signature ne soit requise. Cette méthode s’oppose à celle employée par les Mac avec processeur Intel, pour lesquels les privilèges de la plateforme sont transmis au contenu du système d’exploitation par le certificat Apple qui signe les fichiers binaires. (Ce certificat ne limite pas les droits dont le fichier binaire peut jouir.)
Les fichiers binaires qui ne se rapportent pas à la plateforme (par exemple du code tiers notarisé) doivent disposer de chaînes de certificats valides pour s’exécuter, et les droits dont ils peuvent jouir sont limités par le profil de signature du développeur qui lui est émis par le programme Apple pour les développeurs.
Tous les fichiers binaires inclus dans macOS sont signés par un identifiant de plateforme. Sur un Mac avec puce Apple, cet identifiant est utilisé pour indiquer que son hachage de répertoire de code doit être présent dans le cache de confiance pour être exécuté, et ce, même si le fichier binaire est signé par Apple. Sur un Mac avec processeur Intel, l’identifiant de plateforme est utilisé pour procéder aux révocations ciblées de fichiers binaires d’une version plus ancienne de macOS. Cette révocation ciblée contribue à empêcher l’exécution de ces fichiers sur des versions plus récentes.
Le cache statique de confiance verrouille complètement un ensemble de fichiers binaires en l’associant à une version précise de macOS. Ce comportement contribue à empêcher les fichiers binaires légitimement signés par Apple des systèmes d’exploitation plus anciens d’être introduits par un assaillant dans un système plus récent pour en tirer avantage.
Code de la plateforme contenu en dehors du système d’exploitation
Apple envoie certains fichiers binaires, comme Xcode et la suite d’outils de développement, qui ne sont pas signés par un identifiant de plateforme. Malgré tout, ils sont encore autorisés à s’exécuter avec les privilèges de la plateforme sur un Mac avec puce Apple ou puce T2. Étant donné que ce logiciel de la plateforme est inclus indépendamment de macOS, il n’est pas soumis aux pratiques de révocation imposées par le cache statique de confiance.
Caches de confiance chargeables
Apple fournit certains paquets logiciels avec des caches de confiance chargeables. Ces caches ont la même structure de données que le cache statique de confiance. Mais, même s’il n’y a qu’un cache statique de confiance et que le verrouillage dans des intervalles en lecture seule de son contenu est garanti une fois l’initialisation anticipée du noyau terminée, les caches de confiance chargeables sont ajoutés au système en cours d’exécution.
Ces caches de confiance sont authentifiés soit par le même mécanisme qui authentifie le programme interne de démarrage (personnalisation au moyen du service de signature de confiance d’Apple), soit en tant qu’objets validés par une signature globale (sans qu’ils soient liés à un appareil particulier par leurs signatures).
Un exemple de cache de confiance personnalisé est inclus avec l’image disque utilisée pour effectuer les diagnostics de terrain sur les Mac avec puce Apple. Ce cache de confiance est personnalisé, tout comme l’image disque, et est chargé dans le noyau de l’ordinateur Mac sujet alors qu’un mode de diagnostic a démarré sur ce dernier. Le cache de confiance permet l’exécution du logiciel qui se trouve dans l’image disque avec les privilèges de la plateforme.
Un exemple de cache de confiance validé par une signature globale est inclus avec les mises à jour logicielles de macOS. Ce cache de confiance permet à une portion de code de la mise à jour logicielle (le cerveau de mise à jour) de s’exécuter avec les privilèges de la plateforme. Le cerveau de mise à jour accomplit toute tâche liée à l’indexation de la mise à jour logicielle que le système hôte n’est pas en mesure d’effectuer de façon cohérente sur toutes les versions.