Prévention de l’exécution des données

Data Execution Prevention (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 fait de marquer les 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 complique 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 à la mémoire se produit et si l’exception n’est pas gérée, le processus appelant est terminé.

DEP n’est pas destiné à être une défense complète contre tous les exploits; il est destiné à être 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 status STATUS_ACCESS_VIOLATION. Si votre application doit exécuter du code à partir d’une page mémoire, elle doit allouer et définir les attributs de protection de la mémoire virtuelle appropriés. La mémoire allouée doit être marquée PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE ou PAGE_EXECUTE_WRITECOPY lors de l’allocation de mémoire. Les allocations de tas effectuées en appelant les fonctions malloc et HeapAlloc ne sont pas 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 pour le processus en cours en appelant la fonction SetProcessDEPPolicy .

Éléments de programmation à prendre en considération

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’une application définisse 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 des 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’interdiction 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 essayer 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 être situées 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 mémoire tampon de déborder dans la zone exécutable de mémoire.

Compatibilité des applications

Certaines fonctionnalités d’application sont incompatibles avec DEP. Les applications qui effectuent la génération de code dynamique (comme la génération de code juste-à-temps) et qui 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érieures peuvent tenter d’exécuter du code sur les 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 exécutables et de bibliothèques peuvent contenir du code exécutable dans la section de 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écutables, 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 fournie avec votre éditeur de liens.

Prévention de l’exécution des données

Comment configurer la protection de la mémoire dans Windows XP SP2