• [^] # Re: archi IA32

    Posté par . En réponse au journal question : est-ce que la zone de code est modifiable. Évalué à 1.

    sur les archi IA32, un segment marqué code n'est accessible en théorie, qu'en écriture par le systeme bas niveau.


    Définir "système bas niveau". Processus en espace utilisateur? Non, un tel processus ne peut pas écrire dans un tel segment. Ni le lire, d'ailleurs : il peut seulement y exécuter des instructions.


    Par contre, si la gestion disque est mal faite et qu'il y a un gestionnaire de mémoire paginée ... alors il est possible d'injecter du code en modifiant la partie sur le disque.

    Très très très mal faite, alors, mais c'est vrai. Cela dit, on appelle ça un bogue de l'OS, pas une fonctionnalité.

    Sinon, pour avoir un "segmentation fault", il te faut un systeme ayant des segments ...

    Faux. L'écriture dans une page marquée en lecture seule par un processus en espace utilisateur provoque (sur i386) la levée de l'interruption 14 du processeur (faute de page), avec un vecteur précisant que l'erreur est due à une écriture dans une page en lecture seule. Le système d'exploitation récupère alors cette erreur et la traduit par un SIGSEGV à l'égard du processus fautif.

    mais etrangement la mode au modele plat de mémoire lève cette bariere et permet de faire des merveille d'injection par buffer overflow ( qui ne font plus de segfault puisque pouvant acceder comme donnée au segment de code ).

    Adepte d'OpenBSD et de son modèle segmenté, hein? Ben non, ce n'est pas ça : les buffer overflows ont lieu sur la pile, pas dans la zone de code, et la protection supplémentaire qu'apporte le modèle segmenté tient non pas à ce qu'il interdit la modification des zones exécutables, mais à ce qu'il interdit à l'exécution de se poursuivre sur la pile.

    Cela dit, cette protection est elle aussi contournable, mais il faut une connaissance très fine du binaire attaqué.