Prévention de l’exécution des données
La protection contre l’exécution des données (DEP) est une fonctionnalité de protection de la mémoire au niveau du système intégrée au système d’exploitation à partir de Windows XP et de Windows Server 2003. DEP permet au système de marquer une ou plusieurs pages de mémoire comme non exécutables. Le marquage des régions de mémoire comme non exécutables signifie que le code ne peut pas être exécuté à partir de cette région de mémoire, ce qui rend plus difficile l’exploitation des dépassements de mémoire tampon.
DEP empêche l’exécution du code à partir de pages de données telles que le tas, les piles et les pools de mémoire par défaut. Si une application tente d’exécuter du code à partir d’une page de données protégée, une exception de violation d’accès en mémoire se produit et si l’exception n’est pas gérée, le processus appelant est arrêté.
LE PED n’est pas destiné à être une défense complète contre toutes les attaques ; il s’agit d’un autre outil que vous pouvez utiliser pour sécuriser votre application.
Fonctionnement de la prévention de l’exécution des données
Si une application tente d’exécuter du code à partir d’une page protégée, l’application reçoit une exception avec le code d’état STATUS_ACCESS_VIOLATION. Si votre application doit exécuter du code à partir d’une page mémoire, elle doit allouer et définir la protection de la mémoire virtuelle appropriée attributs. La mémoire allouée doit être marquée PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITEou PAGE_EXECUTE_WRITECOPY lors de l’allocation de la mémoire. Les allocations de tas effectuées en appelant les fonctions malloc et HeapAlloc sont non exécutables.
Les applications ne peuvent pas exécuter de code à partir du tas de processus par défaut ou de la pile.
DEP est configuré au démarrage du système en fonction du paramètre de stratégie de protection de page sans exécution dans les données de configuration de démarrage. Une application peut obtenir le paramètre de stratégie actuel en appelant la fonction GetSystemDEPPolicy. Selon le paramètre de stratégie, une application peut modifier le paramètre DEP du processus actuel en appelant la fonction SetProcessDEPPolicy.
Considérations relatives à la programmation
Une application peut utiliser la fonction VirtualAlloc pour allouer de la mémoire exécutable avec les options de protection de la mémoire appropriées. Il est suggéré qu’un ensemble d’applications, au minimum, l’option de protection de la mémoire PAGE_EXECUTE. Une fois le code exécutable généré, il est recommandé que l’application définisse les protections de mémoire pour interdire l’accès en écriture à la mémoire allouée. Les applications peuvent interdire l’accès en écriture à la mémoire allouée à l’aide de la fonction VirtualProtect. L’exclusion de l’accès en écriture garantit une protection maximale pour les régions exécutables de l’espace d’adressage du processus. Vous devez tenter de créer des applications qui utilisent le plus petit espace d’adressage exécutable possible, ce qui réduit la quantité de mémoire exposée à l’exploitation de la mémoire.
Vous devez également tenter de contrôler la disposition de la mémoire virtuelle de votre application et de créer des régions exécutables. Ces régions exécutables doivent se trouver dans un espace mémoire inférieur à celui des régions non exécutables. En localisant les régions exécutables sous les régions non exécutables, vous pouvez empêcher un dépassement de capacité de mémoire tampon dans la zone exécutable de la mémoire.
Compatibilité des applications
Certaines fonctionnalités d’application sont incompatibles avec DEP. Les applications qui exécutent une génération de code dynamique (comme just-In-Time génération de code) et ne marquent pas explicitement le code généré avec l’autorisation d’exécution peuvent rencontrer des problèmes de compatibilité sur les ordinateurs qui utilisent DEP. Les applications écrites dans la bibliothèque de modèles actifs (ATL) version 7.1 et antérieure peuvent tenter d’exécuter du code sur des pages marquées comme non exécutables, ce qui déclenche une erreur NX et met fin à l’application ; pour plus d’informations, consultez SetProcessDEPPolicy. La plupart des applications qui effectuent des actions incompatibles avec DEP doivent être mises à jour pour fonctionner correctement.
Un petit nombre de fichiers et de bibliothèques exécutables peuvent contenir du code exécutable dans la section données d’un fichier image. Dans certains cas, les applications peuvent placer de petits segments de code (communément appelés thunks) dans les sections de données. Toutefois, DEP marque les sections du fichier image chargé en mémoire comme non exécutable, sauf si l’attribut exécutable est appliqué à la section.
Par conséquent, le code exécutable dans les sections de données doit être migré vers une section de code, ou la section de données qui contient le code exécutable doit être explicitement marquée comme exécutable. L’attribut exécutable, IMAGE_SCN_MEM_EXECUTE, doit être ajouté au champ Caractéristiques de l’en-tête de section correspondant pour les sections qui contiennent du code exécutable. Pour plus d’informations sur l’ajout d’attributs à une section, consultez la documentation incluse dans votre éditeur de liens.
Rubriques connexes
prévention de l’exécution des données
Comment configurer la protection de la mémoire dans Windows XP SP2