web-dev-qa-db-fra.com

Quelles attaques une politique w ^ x empêche-t-elle?

Ecrire XOR Exécuter (W ^ x) est une stratégie qu'un bloc (page) de la mémoire ne peut pas être marqué à la fois écrit et exécutable en même temps.

Quelles attaques empêchent W ^ x, avec et sans les suivantes:

  • Adresse Space Disposition Randomisation (ASLR)
  • Prévention de l'exécution des données (DEP)
  • Une fois-écrite, jamais exécutable - la page ne peut jamais être marquée comme exécutable après avoir été marquée comme écrite.
9
Polynomial

W ^ x et "une fois-joie, jamais exécutable" sont les deux sous-cas de DEP. DEP consiste à faire des accès en lecture et d'accès à l'exécution, distincts (une page d'écriture est également une page lisible). W ^ X consiste à utiliser DEP pour appliquer une stratégie spécifique, à savoir qu'une page donnée ne peut jamais être écritable et exécutable en même temps.

La conformité à la stratégie W ^ x peut être requise du programmeur car écrit des "données" puis l'exécutant fiable implique de rincer certaines caches, qui est une opération explicite et coûteuse. Passer par le noyau (avec un mprotect() appel) n'est pas une façon difficile de le faire. D'autre part, forcer le programmeur à faire de telles choses signifie explicitement que cela ne se produira pas dans d'autres situations, à savoir lorsqu'un attaquant essaie d'exploiter un débordement de tampon. Ceci est une généralisation de la fonctionnalité "Stack n'est pas exécutable". (Le débordement du tampon est toujours là, cependant; w ^ x rend la vie plus difficile pour l'attaquant.)

La politique "une fois-joie, jamais exécutable", vous semble suspicieuse: elle est incompatible avec les compilateurs JIT. Quoi qu'il en soit, ce serait un sous-cas de w ^ x: comme W ^ x, dans lequel la transition w-> x est interdite.

7
Thomas Pornin