W^X

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

W^X (prononcé "W xor X") est le nom d'une fonctionnalité dédiée à la sécurité informatique présente dans le système d'exploitation OpenBSD. C'est une forme de protection de la mémoire avec laquelle une page peut être accessible ou en écriture, ou en exécution, mais en aucun cas ne peut être à la fois accessible en écriture et en exécution simultanément (d'où la référence à l'opérateur booléen xor, qui possède cette propriété). Ceci lutte contre les attaques par débordement de buffer, dont les attaques les plus communes basées sur l'exploitation de la pile : en s'assurant que la pile n'est pas exécutable (car accessible en écriture), les codes injectés ne peuvent être exécutés. Dans le cas où le contrôle est tenté d'être passé sur la pile, le programme s'arrête. W^X est apparu pour la première fois dans la version 3.3 de OpenBSD. Des fonctionnalités similaires sont offertes par d'autres systèmes d'exploitation, à l'aide par exemple des patches pour Linux PaX et Exec Shield.

W^X et les implémentations similaires sont relativement simples à implémenter sur un processeur supportant les permissions fines sur les pages de la mémoire, tels que le SPARC, le SPARC64 ou le processeur AMD64. Sur des processeurs disposant de fonctionnalités plus limitées, comme l'Intel i386, W^X est implémenté de manière "détournée", en utilisant le segment de code CX pour définir une limite dans l'espace mémoire au delà de laquelle l'exécution n'est plus autorisée. Cette zone est alors destinée à recevoir les données. Le code exécutable est placé en dessous de cette limite. Sur toutes les plateformes, des changements ont dû être apportés à l'édition de liens pour séparer le code (comme par exemple le trampoline et d'autres codes pour les fonctions de l'éditeur de lien ou des bibliothèques dynamiques) et les données.

Voir aussi[modifier | modifier le code]

Lien externe[modifier | modifier le code]