Délégation Centre-Auvergne-Limousin

- Home - News - Conseils - SécuritéMise à jour  -  Liens  -  Accès  -

Délégation Centre-Auvergne-Limousin

Protection d'exécution de la mémoire

La protection d'exécution (également appelée NX ou no execute) permet d'éviter l'exécution de code à partir de pages de données telles que le heap par défaut, les piles et les pools de mémoire. Cette protection peut être appliquée en mode utilisateur et en mode noyau.

Elle oblige les développeurs à ne pas exécuter de code à partir de pages de données sans apposer de marque explicite indiquant que les pages sont exécutables. Cela renforce les meilleures pratiques auprès des développeurs d'applications et de pilotes.

La protection d'exécution est une fonctionnalité du système d'exploitation qui permet de marquer la mémoire à l'aide d'un attribut indiquant qu'aucun code ne doit être exécuté à partir de cette mémoire. Elle fonctionne par page de mémoire virtuelle, modifiant le plus souvent un bit de l'entrée de table pour marquer la page de mémoire.

Actuellement, l'implémentation matérielle de la protection d'exécution et le marquage des pages de mémoire virtuelle varient en fonction de l'architecture du processeur. Toutefois, les processeurs qui prennent en charge la protection d'exécution sont capables d'envoyer une exception lorsque du code est exécuté à partir d'une page marquée à l'aide des attributs appropriés. La version 32 bits de Windows s'appuie actuellement sur la fonctionnalité no-execute page protections (protections de pages non exécutables) du processeur selon la définition AMD (Advanced Micro Devices). Pour cette fonction, le processeur doit fonctionner en mode PAE (Physical Address Extension).

Bien que les seules familles de processeurs prenant en charge le matériel compatible Windows pour la protection d'exécution soient actuellement les AMD K8 et Intel Itanium, les futurs processeurs 32 bits et 64 bits incluront également une protection d'exécution. Microsoft prépare et encourage cette tendance en prenant en charge la protection d'exécution dans ses systèmes d'exploitation Windows.

Les développeurs d'applications et de pilotes doivent être familiarisés avec la protection d'exécution et avec les conditions requises pour les logiciels exécutés sur une plate-forme qui gère ce mécanisme. Les applications qui pratiquent la génération de code juste à temps (JIT, Just-In-Time) ou qui exécutent de la mémoire à partir de la pile de processus par défaut ou du heap de mémoire doivent respecter les conditions requises en matière de protection d'exécution.

Les développeurs de pilotes doivent connaître le mode PAE sur les plates-formes prenant en charge la protection d'exécution. Le fonctionnement en mode PAE sur les systèmes Windows dotés de moins de 4 Go d'espace d'adresses physiques a été modifié afin de diminuer les incompatibilités de pilotes.

Microsoft prend en charge les processeurs récents qui incluent la protection d'exécution, via des ajouts à Windows (en commençant par Microsoft Windows XP Service Pack 2). La protection d'exécution présente des avantages évidents en empêchant les attaques par dépassement de tampons mémoire. Elle implique la mise en œuvre de bonnes techniques de codage, tant chez Microsoft qu'auprès des développeurs tiers.

Deux types de fonctionnalités ont été ajoutés à ce Service Pack.

  • Protection d'exécution sur les versions 64 bits de Windows
    Les versions 64 bits de Windows hébergées sur des processeurs 64 bits peuvent exécuter des applications en mode 64 bits (également appelé mode natif).

    Indépendamment de l'architecture des processeurs, la protection d'exécution en mode noyau pour versions 64 bits de Windows s'applique à la pile, à la réserve paginée et au pool de sessions. La protection d'exécution est activée par défaut dans Windows XP Service Pack 2 et il est impossible de la désactiver.

    Les applications 64 bits ne doivent pas exécuter de code à partir de la pile ou du heap de mémoire par défaut. Pour allouer de la mémoire exécutable dans les applications, vous devez utiliser VirtualAlloc() avec l'un des attributs de mémoire PAGE_EXECUTE.

  • Protection d'exécution sur les versions 32 bits de Windows et des applications
    Cette fonctionnalité comporte deux modes.
    • La protection d'exécution en mode utilisateur
      De nombreux ordinateurs exécutant des applications Windows et compatibles Windows utilisent des processeurs 32 bits exécutant des versions 32 bits de Windows. Toutefois, de nouveaux processeurs tels que les AMD Opteron et Athlon-64 prennent en charge à la fois le mode 32 bits et le mode 64 bits (hérité et natif, respectivement). Ces processeurs 32 et 64 bits sont capables de fonctionner en environnement purement hérité (système d'exploitation 32 bits et applications 32 bits) et d'appliquer la protection d'exécution lorsque le mode PAE est activé.

      Microsoft recherche des méthodes pour désactiver ou activer la protection d'exécution application par application (pour les applications 32 bits). Les applications 64 bits fonctionneront probablement avec une activation par défaut de la protection d'exécution.

      Sur les systèmes Windows, certaines exceptions de protection d'exécution renverront le code d'état STATUS_ACCESS_VIOLATION (0xc0000005). Dans la plupart des processus, ce type d'exception correspondra à une exception non gérée et entraînera l'arrêt du processus.

    • La protection d'exécution en mode noyau
      La protection d'exécution fonctionne de la même façon pour le mode utilisateur et pour le mode noyau. La protection d'exécution pour les régions de mémoire en mode noyau ne peut pas être activée ou désactivée pilote par pilote. Dans les versions 32 bits de Windows, la protection d'exécution s'applique uniquement à la pile par défaut. Cela diffère des versions 64 bits de Windows, dans lesquelles la protection d'exécution est activée pour la pile, la réserve paginée et le pool de session.

      En mode noyau, toute violation d'accès enregistrée par la protection d'exécution entraîne l'affichage suivant (Bugcheck 0xFC) :
      ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY.

L'avantage de la protection d'exécution est double.

Tout d'abord, elle empêche l'exécution de code à partir de pages de données telles que le segment de mémoire par défaut, les piles et les pools de mémoire. Ensuite, elle fonctionne à la fois en mode utilisateur et en mode noyau.

La protection d'exécution empêche toute exécution de données à partir de la pile. Par conséquent, si cette protection est mise en œuvre, l'action spécifique du récent ver MSBlaster aboutit à une violation d'accès mémoire et à l'arrêt du processus. Sur un système doté de la protection d'exécution, l'effet de MSBlaster est limité à une attaque de type déni de service ; il ne peut pas se répliquer et s'étendre à d'autres systèmes. La protection d'exécution ne constitue toutefois pas un moyen de défense complet contre la totalité des virus, des vers et autres codes malveillants. Si tous les systèmes cible avaient été dotés de la protection d'exécution et d'une pile non exécutable, MSBlaster aurait certainement été programmé différemment. La protection d'exécution constitue l'une des technologies utilisées par Microsoft pour accroître la sécurité des ordinateurs.

Elle renforce également les meilleures pratiques auprès des développeurs d'applications et de pilotes. En effet, elle oblige les développeurs à ne pas exécuter de code à partir de pages de données sans apposer de marque explicite indiquant que les pages sont exécutables.

 

1 2 3 4 5

 

Page Up Updated 11 juin, 2004 Hervé Chaudret
C.N.R.S.

 -   Home   -  News   -   Conseils   -  Sécurité   -  Mise à jour   -   Liens   -  Accès   -

C.N.R.S.