![](https://help.apple.com/assets/6537FB06A074DBB5E802EA07/6537FB31280588A5490B6E1D/fr_CA/52d714626638d3391623c853be0c593b.png)
Intégrité du système d’exploitation
Apple conçoit ses systèmes d’exploitation autour de la sécurité, avec une base matérielle sécurisée, qui assure la sécurité du démarrage, et un processus de mise à jour logicielle sécurisé sûr et rapide. Les systèmes d’exploitation d’Apple utilisent aussi les capacités du matériel (puces) spécialement conçu pour empêcher toute utilisation malveillante pendant le fonctionnement du système. Ces fonctionnalités protègent l’intégrité du code vérifié pendant son exécution. En résumé, le système d’exploitation d’Apple contribue à parer les exploits et les attaques, que ceux-ci proviennent d’apps malveillantes, du Web ou d’un autre canal. Les protections énumérées dans la présente section sont disponibles sur les appareils dotés d’un système sur une puce d’Apple compatible, c’est-à-dire les appareils iOS, iPadOS, tvOS, watchOS et maintenant les Mac avec puce Apple dotés de macOS.
Fonctionnalité | A10 | A11, S3 | A12, A13, A14 S4 à S9 | A15, A16, A17 | M1, M2, M3 |
Voir la remarque 1 ci-dessous. | |||||
Voir la remarque 2 ci-dessous. |
Remarque 1 : La couche de protection de page (PPL) exige que la plateforme exécute uniquement du code signé et de confiance. Ce modèle de sécurité ne s’applique pas sous macOS.
Remarque 2 : Le moniteur de tables de pages sécurisées (SPTM) est pris en charge sur A15, A16 et A17, et remplace la couche de protection de page sur les plateformes compatibles.
Protection de l’intégrité du noyau
Après l’initialisation du noyau du système d’exploitation, la protection de l’intégrité du noyau (KIP) est activée pour contribuer à empêcher la modification du code du noyau et des pilotes. Le contrôleur de mémoire fournit une zone de mémoire physique protégée qu’iBoot utilise pour charger le noyau et les extensions de noyau. Après le démarrage, le contrôleur de mémoire refuse l’écriture sur la zone de mémoire physique protégée. L’unité de gestion de la mémoire (UGM) du processeur d’application est configurée de manière à aider à prévenir la mise en correspondance du code privilégié de la mémoire physique à l’extérieur de la zone de mémoire protégée et la mise en correspondance microprogrammable de la mémoire physique à l’intérieur de la zone de mémoire du noyau.
Pour empêcher la reconfiguration, le matériel utilisé pour activer la KIP est verrouillé après le processus de démarrage.
Restrictions d’autorisation rapide
Les systèmes sur une puce A11 Bionic, S3 et de génération ultérieure d’Apple comportent une nouvelle primitive matérielle. Cette primitive, les restrictions d’autorisation rapides, comprend un registre de processeur qui restreint rapidement les autorisations par fil d’exécution. Grâce à ces restrictions d’autorisation rapide (aussi connues sous le nom de registres APRR), les systèmes d’exploitation compatibles peuvent supprimer les autorisations d’exécution de la mémoire sans subir le coût d’un appel système et de la consultation ou purge de la table de pages. Ces registres fournissent un niveau supplémentaire d’atténuation des attaques provenant du Web, particulièrement pour le code compilé à l’exécution (« à la volée »), car il est impossible d’exécuter efficacement la mémoire en même temps que sa lecture et son écriture.
Protection de l’intégrité du coprocesseur système
Le programme interne du coprocesseur gère de nombreuses tâches système essentielles, comme le Secure Enclave, le processeur de capteur d’image et le coprocesseur de mouvement. Par conséquent, sa sécurité est un élément essentiel de la sécurité de l’ensemble du système. Pour prévenir les modifications du programme interne du coprocesseur, Apple utilise le mécanisme SCIP (System Coprocessor Integrity Protection, protection de l’intégrité du coprocesseur système).
La SCIP utilise un mécanisme semblable à celui de la protection de l’intégrité du noyau (KIP, Kernel Integrity Protection). Au démarrage, iBoot charge chaque programme interne du coprocesseur dans une zone de mémoire protégée, réservée et séparée de la zone de KIP. iBoot configure chaque unité de la mémoire du coprocesseur de manière à contribuer à prévenir :
les mises en correspondance exécutables à l’extérieur de sa section de la zone de mémoire protégée;
les mises en correspondance microprogrammables à l’intérieur de sa section de la zone de mémoire protégée.
Toujours au démarrage, c’est le système d’exploitation du Secure Enclave qui est utilisé pour configurer la SCIP propre à ce coprocesseur. Après le processus de démarrage, le matériel utilisé pour activer la SCIP est verrouillé afin d’empêcher la reconfiguration.
Codes d’authentification des pointeurs
Les codes d’authentification des pointeurs (PAC) sont utilisés pour empêcher l’exploitation des bogues de corruption de mémoire. Les logiciels système et les apps intégrées utilisent les PAC pour contribuer à prévenir la modification des pointeurs de fonctions et des adresses de retour (pointeurs de code). Les PAC utilisent cinq valeurs secrètes 128 bits pour signer les instructions du noyau et les données. Chaque processus de l’espace utilisateur possède ses propres clés B. Les éléments sont salés et signés comme suit.
Élément | Clé | Sel |
---|---|---|
Adresse de retour des fonctions | IB | Adresse de stockage |
Pointeurs de fonctions | IA | 0 |
Fonction d’appel de blocs | IA | Adresse de stockage |
Cache de méthode Objective-C | IB | Adresse de stockage + classe + sélecteur |
Entrées de la table des méthodes virtuelles C++ | IA | Adresse de stockage + hachage (nom de méthode mutilé) |
Étiquette « aller à » calculée | IA | Hachage (nom de fonction) |
État du fil d’exécution du noyau | GA | • |
Registres d’état du fil d’exécution utilisateur | IA | Adresse de stockage |
Pointeurs de la table des méthodes virtuelles C++ | DA | 0 |
La valeur de signature est stockée dans les bits de remplissage inutilisés dans le haut du pointeur 64 bits. La signature est vérifiée avant son utilisation, et le remplissage est réinitialisé pour contribuer à garantir le fonctionnement de l’adresse de pointeur. Si cette vérification échoue, l’opération est annulée. Cette vérification rend de nombreuses attaques plus difficiles, par exemple les attaques par programmation orientée retour (ROP, Return-Oriented Programming), qui consistent à manipuler les adresses de retour des fonctions stockées sur la pile pour amener l’appareil à exécuter du code existant.
Couche de protection de page
La couche de protection de page (PPL) sous iOS, iPadOS et watchOS est conçue pour empêcher la modification du code de l’espace utilisateur une fois sa signature vérifiée. Tirant parti de la protection de l’intégrité du noyau et des restrictions d’autorisation rapide, la PPL gère le remplacement des autorisations de la table de pages afin de garantir qu’elle seule puisse modifier les pages protégées qui contiennent un code utilisateur et des tables de pages. Ce système réduit considérablement la surface d’attaque en favorisant le respect de l’intégrité du code à l’échelle du système, même si le noyau est compromis. Cette protection n’est pas offerte sous macOS, car la PPL ne s’applique qu’aux systèmes qui exigent la signature de l’intégralité du code exécuté.
Moniteur de tables de pages sécurisées et moniteur d’exécution de confiance
Le moniteur de tables de pages sécurisées (SPTM) et le moniteur d’exécution de confiance (TXM) sont conçus pour fonctionner ensemble afin de protéger les tables de pages des processus utilisateur et du noyau contre toute modification, même lorsque les assaillants disposent de capacités d’écriture dans le noyau et peuvent contourner les protections du flux de contrôle. Pour ce faire, le SPTM utilise un niveau de privilège plus élevé que le noyau, en utilisant le TXM, au niveau de privilège inférieur, pour appliquer les politiques qui régissent l’exécution du code. Ce système est conçu de telle sorte que la compromission d’un TXM ne se traduit pas automatiquement par un contournement du SPTM en raison de cette séparation des privilèges et de la relation de confiance entre eux. Sur les systèmes sur une puce A15, A16 et A17, le SPTM (en combinaison avec le TXM) est conçu pour remplacer la PPL. Le SPTM a été repensé avec une surface d’attaque plus petite, plus défendable, et qui ne repose pas sur la confiance dans le noyau, même lors du démarrage initial. Le SPTM s’appuie également sur de nouvelles primitives de puces qui sont une version évoluée des restrictions rapides d’autorisation utilisées par la PPL.