Supervisor Mode Access Prevention

From Wikipedia, the free encyclopedia

Supervisor Mode Access Prevention (SMAP) (prévention d'accès en mode superviseur) est une fonctionnalité de certaines implémentations de CPU telles que la microarchitecture d'Intel : Broadwell qui permet aux programmes en mode superviseur de définir éventuellement des mappages de mémoire dans l'espace utilisateur afin que l'accès à ces mappages à partir du mode superviseur provoque un piège. Cela a pour but de rendre plus difficile pour les programmes malveillants de "tromper" le noyau en utilisant des instructions ou des données d'un programme de l'espace utilisateur[1],[2].

La prévention d'accès en mode superviseur est conçue pour compléter la prévention d'exécution en mode superviseur (SMEP). La SMEP peut être utilisée pour empêcher le mode superviseur d'exécuter involontairement le code de l'espace utilisateur tandis que SMAP étend cette protection aux lectures et aux écritures[2].

Avantages

Sans la prévention d'accès en mode superviseur, le code superviseur a généralement un accès complet en lecture et en écriture aux mappages de mémoire de l'espace utilisateur (voir la capacité à en obtenir un accès complet). Cela a conduit au développement de plusieurs prouesses de sécurité, y compris dans l'élévation de privilèges qui fonctionnent en obligeant le noyau à accéder à la mémoire de l'espace utilisateur alors qu'il n'en avait pas l'intention[3].

Les systèmes d'exploitation peuvent bloquer ces avancées en utilisant la SMAP pour forcer les accès involontaires à la mémoire de l'espace utilisateur afin de déclencher des erreurs de page. De plus, la SMAP peut exposer un code de noyau défectueux qui ne suit pas les procédures prévues pour accéder à la mémoire de l'espace utilisateur[1].

Cependant, l'utilisation de SMAP dans un système d'exploitation peut entraîner une plus grande taille de noyau et des accès à la mémoire de l'espace utilisateur plus lents à partir du code superviseur. Le SMAP doit être temporairement désactivé chaque fois que le code superviseur a l'intention d'accéder à la mémoire de l'espace utilisateur ce qui induit des ralentissements[4].

Détails techniques

Les processeurs indiquent le support de la prévention d'accès en mode superviseur via la feuille des fonctionnalités étendues CPUID.

SMAP est activé lorsque la pagination de la mémoire est active et que le bit SMAP dans le registre de contrôle CR4 est défini. SMAP peut être temporairement désactivé pour les accès mémoire explicites en définissant l'EFLAGS au flag AC : Auxiliary Carry (contrôle d'alignement). Les "stac" (Set AC Flag) et "clac" (Clear AC Flag) peuvent être utilisées pour définir ou effacer facilement le flag[5].

Lorsque le bit SMAP dans CR4 est défini, les lectures / écritures de mémoire explicite sur les pages en mode utilisateur effectuées par du code exécuté avec un niveau de privilège inférieur à 3 entraîneront toujours une erreur de page si le flag AC de l'EFLAGS n'est pas défini. Les lectures / écritures implicites (telles que celles effectuées dans les tables de descripteurs) sur les pages en mode utilisateur déclencheront toujours une erreur de page si SMAP est activé, quelle que soit la valeur du flag CA de EFLAGS[5].

Prise en charge du système d'exploitation

Voir aussi

Références

Related Articles

Wikiwand AI