Le DEP (Data Execution Prevention)

Date : 10 Mai 2010

Le DEP (Data Execution Prevention) est une fonction implémentée sur les systèmes Windows depuis les versions XP et Vista. Il permet de prévenir l’exploitation de vulnérabilités informatiques (débordement de mémoire, etc.) lors de l’exécution de programmes. Lorsqu’elle est activée, cette technologie empêche des programmes d’attaques, d’insérer et d’exécuter des codes malveillants depuis certaines zones mémoires normalement réservées à des codes non exécutables. Il existe 2 formes de DEP ; le DEP matériel et le DEP logiciel.

DEP matériel

Le DEP matériel exploite des fonctionnalités implémentées au niveau du processeur. Il permet de marquer la mémoire à l’aide d’un attribut signalant qu’aucun code ne peut s’exécuter à partir de cette mémoire, sauf si l’emplacement est explicitement désigné comme exécutable. Le cas échéant, le DEP matériel va lever une exception lors de l’exécution de ce code.

La prévention de l’exécution des données de type matérielle est appliquée par page mémoire virtuelle. Cette prévention se caractérise généralement sous la forme d’un changement sur un bit de la table des pages (PTE), le but étant de marquer la page de mémoire à protéger.
L’utilisation du DEP matériel n’est possible qu’avec des processeurs récents ayant la capacité de restreindre l’usage des zones mémoires.

Processeurs compatibles DEP
Actuellement, les principaux fournisseurs de processeurs AMD et Intel commercialisent des architectures compatibles avec la prévention de l’exécution des données basée sur les technologies NX « No Execute » pour AMD et XD « Execute Disable Bit » pour Intel. Ces technologies sont supportées depuis Windows XP SP2 version 32 bits.
Les fonctionnalités « NX » ou « XD » du processeur ne peuvent fonctionner que si le processeur est utilisé en mode « Physical Address Extension » (PAE) c’est à dire extension d’adresse physique. Les logiciels ou systèmes d’exploitation peuvent déterminer si le processeur supporte le mode PAE en interrogeant son champ d’identification (CPUID).

DEP logiciel

Le DEP logiciel renforce les contrôles concernant la gestion des exceptions sous Windows, en vérifiant si des exceptions sont levées, dans le but de bloquer tout code malveillant profitant de ces mécanismes. Il est important de noter que par défaut, le DEP logiciel protège uniquement certains binaires systèmes. En effet, toutes les applications d’un système sur lequel DEP est activé, ne bénéficient donc pas de cette fonctionnalité.

Les niveaux de sécurité de DEP

Il existe 4 types de niveaux de sécurité DEP :
  • « OptIn » : Ce paramètre est activé par défaut pour les systèmes avec un processeur supportant le DEP matériel et les programmes utilisant explicitement l’option « OptIn ». C’est la configuration par défaut des systèmes d’exploitation comme Windows XP et Vista.
  • « OptOut » : DEP est activé sur tous les processus avec la possibilité de créer manuellement une liste de programmes spécifiques excluant l’utilisation de DEP. C’est la configuration par défaut des systèmes d’exploitation pour les serveurs comme Windows Server 2003 et 2008.
  • « AlwaysOn » : DEP est activé pour l’ensemble du système indépendamment du fait que le programme soit compatible avec DEP ou non.
  • « AlwaysOff » : Aucune protection DEP n’est activée pour aucun des processus.
Pour connaître la politique DEP activée sur un système, il est possible d’utiliser la commande  WMIC (Windows Management Instrumentation Command-Line). La commande suivante « wmic OS Get DataExecutionPrevention_SupportPolicy » retourne :
  • 0 quand l’option « AlwaysOff » est activée.
  • 1 quand l’option « AlwaysOn » est activée.
  • 2 quand l’option « OptIn » (par défaut) est activée.
  • 3 quand l’option « OptOut » est activée
Nota : Sous Windows Vista, le DEP matériel est activé par défaut pour tous les services et exécutables compilés avec l’option /NXCOMPAT.

Limitations de DEP

Utilisé seul, DEP est une solution « facilement » contournable par des codes malveillants au moyen de techniques de programmation diverses et variées. Par exemple, pour contourner DEP, certains programmeurs utilisent la technique d’exploitation « return-to-libc ». Cette technique permet de désactiver le DEP en passant directement dans la pile une adresse de retour pointant vers l’adresse d’une fonction d’une librairie. En effet, cette zone présente la particularité d’être exécutable, et donc permet l’exécution du code.

DEP et ASLR

ASLR (Address Space Layout Randomization) est une technique permettant de renforcer le DEP. Elle ajoute des fonctions de « randomisation » de l’espace d’adressage mémoire et permet d’améliorer significativement la protection du système. Cette technique permet notamment de placer les zones de données dans la mémoire virtuelle d’une manière aléatoire, réduisant les éventuelles attaques basées sur des adresses fixes.

Limitations de DEP et ASLR : L’attaque « JIT Spraying »

Les attaques contre ASLR ou contre DEP (prises individuellement), sont connues depuis quelques temps. Une attaque contre DEP est généralement bloquée par ASLR et inversement. L’utilisation conjointe de ces deux techniques a donc permis de réduire significativement celles-ci. Cependant, une nouvelle technique appelée « JIT Spray », a été présentée en février 2010 lors de la dernière conférence BlackHat DC.

Bien qu’encore peu documentée, cette technique permet d’attaquer des systèmes ayant mis en œuvre simultanément les mesures de protection ASLR et DEP. Cette méthode est similaire à la technique dite de « Heap Spray », c'est-à-dire qu’elle utilise la diffusion de sa charge utile (payload) dans de nombreuses pages mémoire marquées comme exécutables. Comme l’ASLR rend impossible la prédiction des adresses mémoire, l’écriture de la charge utile à plusieurs endroits de la mémoire permet de multiplier la probabilité que cette charge soit exécutée.

La démonstration faite à BlackHat DC a illustré comment il est possible de forcer la machine virtuelle d’Adobe Flash Player à générer une charge utile et à la placer à de multiples endroits en mémoire marqués comme exécutables, afin que le code Flash malveillant natif puisse être exécuté.

Nota : Cette attaque a été possible car le code Flash utilise une machine virtuelle et un compilateur qui convertit à la volée (Just In Time – JIT) le code portable de l’application (ici du code Flash) en code natif compréhensible par la machine.

Autres initiatives

Sans entrer dans les détails du fait de leur complexité, d’autres techniques existent. SEHOP (Structured Exception Handler Overwrite Protection) permet d’empêcher l’exploitation de buffer overflow en réécrivant le gestionnaire d’exception SEH pour les systèmes Windows. SafeSEH est une image dotée de gestionnaires d'exceptions sécurisés pour Windows. Sous Linux, il existe PaX qui est un module du noyau que l’on peut rajouter pour sécuriser  les systèmes, ou encore « Exec Shield » qui émule le bit NX (NoExecute) des processeurs x86 pour limiter l’exécution de code.

Conclusion

Aujourd’hui, la prévention de l’exécution des données (DEP) associée à l’ASLR améliore le degré de sécurité du système, mais si des techniques telles que le « JIT Spraying » permettent de les contourner, celles-ci ne sont pas faciles à mettre en œuvre et nécessitent des conditions d’exploitation particulières.
Aussi, et bien que leur utilisation puisse avoir des effets de bords pour certaines applications, DEP et ASLR restent des mesures de protection à ne pas négliger.
Précedent Précedent Suivant Suivant Imprimer Imprimer