
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 d’exploitation. Ces fonctionnalités protègent l’intégrité du code vérifié pendant son exécution. 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. Ces protections sont disponibles sur les appareils dotés d’un système sur une puce d’Apple compatible, notamment sous iOS, iPadOS, macOS sur les Mac avec puce Apple, tvOS, visionOS et watchOS.
Fonctionnalité | A10 | A11, S3 | A12 à A14 S4 à S10 | A15 à A18 | M1 | M2 à M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
Protection de l’intégrité de la mémoire avec l’extension d’étiquetage amélioré de la mémoire |
|
|
|
|
|
|
|
1 : Le moniteur de tables de pages sécurisées (SPTM) est pris en charge par les systèmes sur une puce A15 et M2 et les modèles plus récents, et remplace la couche de protection de page sur les plateformes compatibles.
2 : La couche de protection de page (PPL) et le moniteur de tables de pages sécurisées (SPTM) exigent que la plateforme exécute uniquement du code signé et de confiance. Ce modèle de sécurité s’applique à toutes les plateformes sauf macOS, ce système d’exploitation étant conçu pour exécuter n’importe quel code. Toutes les autres propriétés de sécurité, y compris la protection des tables de pages, sont présentes sur toutes les plateformes prises en charge.
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 de protection de l’intégrité du coprocesseur système (SCIP).
Le fonctionnement de la SCIP ressemble à celui de la KIP : 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 |
Pointeur de descripteur de bloc | DA | Adresse de stockage + 0xC0BB |
Cache de méthode Objective-C | IB | Adresse de stockage + classe + sélecteur |
Pointeur isa Objective-C | DA | Adresse de stockage + 0x6AE1 |
Pointeur SUPER Objective-C | DA | Adresse de stockage + 0xB5AB |
Ivars de type sélecteur Objective-C | DB | Adresse de stockage + 0x57C2 |
Pointeur de données en lecture seule Objective-C | DA | Adresse de stockage + 0x61F8 |
Entrées de la table des méthodes virtuelles C++ | IA | Adresse de stockage + hachage (nom de méthode mutilé) |
Pointeurs de la table des méthodes virtuelles C++ | DA | Adresse de stockage + hachage (nom mutilé de table virtuelle de base) |
É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 |
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, visionOS 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 KIP 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) sous iOS, iPadOS, macOS et visionOS sont conçus pour fonctionner ensemble afin de protéger les tables de pages des processus utilisateur et du noyau contre toute modification, y compris 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, M2 ou de génération ultérieure, 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 sur de nouvelles primitives de puces qui sont une version évoluée des restrictions rapides d’autorisation utilisées par la PPL et qui sont seulement disponibles sur les processeurs énumérés dans le tableau ci-dessus.
Application de l’intégrité de la mémoire
La protection de l’intégrité de la mémoire (MIE) est une mesure de sécurité complète pour la mémoire des plateformes Apple disponibles sur les processeurs A19 et M5 ou de génération ultérieure. La technologie MIE s’appuie sur la base solide des programmes d’affectation de mémoire sécurisés d’Apple et sur l’extension d’étiquetage amélioré de la mémoire (EMTE) en mode synchrone. Elle est soutenue par les politiques exhaustives de protection de la confidentialité des étiquettes. La MIE est intégrée à la puce Apple et offre une protection inégalée et toujours active de la mémoire pour les surfaces d’attaque des clés, y compris le noyau, tout en maintenant l’alimentation et les performances auxquelles les utilisateurs s’attendent. Pour en savoir plus, consultez le billet Protection de l’intégrité de la mémoire : une vision complète de la sécurité de la mémoire des appareils Apple du blogue Apple Security Research (en anglais).
Extension d’étiquetage de la mémoire
Arm a publié la spécification de l’extension d’étiquetage de la mémoire (MTE) en 2019 comme outil destiné au matériel pour cerner les bogues de corruption de mémoire. La MTE est un système d’étiquetage de la mémoire et de vérification de ces étiquettes selon lequel chaque allocation de mémoire est associée à un secret. Le matériel garantit que les demandes ultérieures d’accès à la mémoire sont approuvées uniquement si la demande contient le bon secret. Si les secrets ne concordent pas, l’app cesse de fonctionner, et l’événement est consigné. Les développeurs peuvent ainsi cerner les bogues de corruption de mémoire dès qu’ils surviennent.
Extension d’étiquetage amélioré de la mémoire
L’EMTE comble les lacunes qui empêchent la MTE de servir de moyen de défense actif, notamment en ne prenant en charge que le mode synchronie, qui est plus sûr. De plus, l’accès à la mémoire sans étiquette à partir d’une région de mémoire étiquetée nécessite de connaître l’étiquette de cette région. Les assaillants ont donc considérablement plus de difficulté à exploiter des bogues hors limites de la mémoire étiquetée dynamique pour contourner l’EMTE en modifiant directement les allocations non étiquetées.
Protection de la confidentialité des étiquettes
La protection de la confidentialité des étiquettes défend l’implémentation des programmes d’affectation sécurisés contre les menaces techniques et préserve la confidentialité des étiquettes EMTE, y compris contre les attaques par canal auxiliaire et celles par exécution spéculative. Le moniteur de tables de pages sécurisées protège la mémoire du programme d’affectation du noyau et le stockage des étiquettes. Par ailleurs, lorsque le noyau accède à la mémoire pour une application, le système l’assujettit aux mêmes règles de vérification des étiquettes que l’espace utilisateur. La protection de la confidentialité des étiquettes est également conçue pour atténuer les risques des fuites d’étiquettes dues à des attaques temporelles ou spéculatives, et comprend même une protection contre Spectre V1.