Aller au contenu

NX : No-eXecute (bit de non-exécution)

Sécurité

NX : No-eXecute, bit de protection mémoire qui interdit au processeur d'exécuter des instructions depuis une page marquée comme contenant des données. « La règle qui dit que ce qui a été écrit comme donnée ne sera jamais lu comme ordre », par analogie avec une boîte aux lettres dont on lit le courrier sans jamais obéir aux lettres anonymes qui ordonnent d'ouvrir le coffre.

Principe : Chaque page de mémoire porte un bit qui indique si son contenu peut être exécuté. Avec NX, la pile et le tas, où un attaquant dépose ses données, ne sont plus exécutables : un débordement de tampon qui y injecte du code machine provoque une erreur au lieu d'une prise de contrôle. Les systèmes l'exposent sous le nom de DEP (Data Execution Prevention) chez Windows, ou de politique W^X (écriture ou exécution, jamais les deux).

Noms selon les fabricants : AMD l'a introduit avec ses processeurs 64 bits en 2003 sous le nom NX ; Intel l'appelle XD (eXecute Disable) et ARM XN (eXecute Never). Windows l'exploite depuis le Service Pack 2 de XP, en 2004. Trois sigles pour un seul bit, ce qui reste un rendement modeste pour l'industrie.

Limites : NX empêche d'exécuter du code injecté, pas de réutiliser celui qui existe déjà : la programmation orientée retour (ROP, Return-Oriented Programming) enchaîne des fragments d'instructions légitimes du programme. C'est pourquoi NX ne vaut qu'accompagné de la randomisation des adresses (ASLR, Address Space Layout Randomization) et des canaris de pile.

Ce qui arrive si on s'en passe

Un binaire compilé ou chargé sans NX, ou une région mémoire allouée à la fois en écriture et en exécution par commodité, rend à l'attaquant le cadeau qu'on lui retire depuis vingt ans : le moindre débordement de tampon redevient une exécution de code arbitraire, en déposant directement ses instructions sur la pile. Les micrologiciels, les systèmes embarqués et certains moteurs de compilation à la volée restent les derniers refuges de ces pages exécutables et inscriptibles. Un audit qui ne vérifie pas ce drapeau laisse ouverte la variante la plus simple, donc la plus appréciée, de l'exploitation mémoire.

Explication de la marmotte

La mémoire d'un ordinateur contient à la fois des programmes, c'est-à-dire des ordres à exécuter, et des données, comme du texte ou des images. Une attaque classique consiste à glisser des ordres malveillants au milieu des données, puis à faire croire au processeur qu'il doit les exécuter. Le bit NX marque les zones de données comme interdites à l'exécution : le processeur refuse alors d'y suivre des ordres. Cela ne bloque pas toutes les attaques, mais cela supprime la plus directe.

Où ce terme est utilisé

← Tout le glossaire