Sécurité des processus d’exécution sous iOS et iPadOS
iOS et iPadOS contribuent à assurer la sécurité des processus d’exécution en utilisant un « bac à sable », des autorisations déclarées et la distribution aléatoire de l’espace d’adressage (ASLR).
Mise en bac à sable
Toutes les apps tierces sont mises en bac à sable afin qu’elles ne puissent pas accéder aux fichiers stockés par les autres apps ni apporter de modifications à l’appareil. Cette façon de faire vise à empêcher les apps de collecter ou de modifier les informations stockées par les autres apps. Chaque app se voit attribuer de façon aléatoire un répertoire de départ unique pour ses fichiers lors de son installation. Si une app tierce doit accéder à des informations autres que les siennes, elle ne peut le faire qu’en utilisant les services explicitement fournis par iOS et iPadOS.
Les fichiers et ressources système sont également protégés des apps des utilisateurs. La plupart des fichiers et ressources système d’iOS et d’iPadOS s’exécutent en tant qu’utilisateur non privilégié « mobile », comme toutes les apps tierces. L’ensemble de la partition du système d’exploitation est monté en lecture seule. Les outils qui ne sont pas indispensables, comme les services de connexion à distance, ne sont pas inclus dans le logiciel système, et les API ne permettent pas aux apps d’augmenter leurs propres privilèges afin de modifier les autres apps ou iOS et iPadOS.
Utilisation des autorisations
L’accès des apps tierces aux renseignements de l’utilisateur et à certaines fonctionnalités comme iCloud et les capacités d’extension est contrôlé au moyen d’autorisations déclarées. Les autorisations sont des paires clé-valeur qui sont connectées à une app et qui permettent l’authentification en dehors des facteurs d’exécution, comme l’identifiant d’utilisateur UNIX. Les autorisations étant signées numériquement, elles ne peuvent pas être modifiées. Les autorisations sont couramment utilisées par les apps et les démons système pour réaliser certaines opérations privilégiées pour lesquelles le processus devrait normalement s’exécuter en tant que racine. Cela réduit grandement la possibilité qu’une app ou un démon système compromis accède à des privilèges supérieurs.
En outre, les apps ne peuvent réaliser un traitement en arrière-plan qu’au moyen d’API fournies par le système. Cela leur permet de continuer à s’exécuter sans affecter les performances ni réduire de façon importante l’autonomie de la batterie.
Distribution aléatoire de l’espace d’adressage (ASLR)
La distribution aléatoire de l’espace d’adressage (ASLR, Address Space Layout Randomization) contribue à empêcher l’exploitation des bogues de corruption de la mémoire. Les apps intégrées utilisent l’ASLR pour contribuer à la distribution aléatoire de toutes les zones de la mémoire au lancement. En plus de fonctionner dès le lancement, l’ASLR organise de façon aléatoire des adresses mémoire du code exécutable, des bibliothèques système et des structures de programmation associées, ce qui réduit davantage la probabilité de nombreux exploits. Par exemple, une attaque de type return‑to‑libc tente d’amener un appareil à exécuter un programme malveillant en manipulant les adresses mémoire des bibliothèques système et de la pile. L’organisation aléatoire de celles‑ci rend l’attaque plus difficile à exécuter, en particulier sur plusieurs appareils. Xcode et l’environnement de développement d’iOS ou iPadOS compilent automatiquement les programmes tiers avec la prise en charge de l’ASLR activée.
Fonctionnalité Execute Never
Une protection supplémentaire est apportée par iOS et iPadOS à l’aide du bit XN (Execute Never) du processeur ARM, qui permet de marquer des pages mémoire comme non exécutables. Les pages mémoire marquées à la fois comme accessibles en écriture et exécutables ne peuvent être utilisées par les apps que dans des conditions étroitement contrôlées : le noyau vérifie la présence de l’autorisation de signature de code dynamique exclusive à Apple. Même dans ce cas, un seul appel mmap
est autorisé pour demander une page exécutable et accessible en écriture, laquelle se voit assigner une adresse de façon aléatoire. Safari utilise cette fonctionnalité pour son compilateur « à la volée » (JIT) JavaScript.