[shellcode] programme 32 bits et architecture 64 bits

Ce qui ne concerne ni le forum ni des problèmes
rasta
archer
Messages : 142
Inscription : mar. 21 févr. 2012, 02:16

[shellcode] programme 32 bits et architecture 64 bits

Message par rasta »

Bonjour à tous,

Je vien de me mettre à jour avec une machine 64 bits et une instal archlinux en 64 bits toute fraiche.
Avant ma toute nouvelle instal,je m'expérimentais sur les shellcodes classique sans ASLR (vraiment basique) sur architecture 32 bits x86.

Ayant changé d'architecture en passant de 32 à 64 bits j'ai installer des library de façon à pouvoir compiler à la fois en 64 bits et à la fois en 32 bits dans le but de garder une certaine cohérence dans ce que j'expérimente.

Ayant copié tout mon répertoire personnel sur mon système fraichement installé, je suis revenu voir mes petits shellcodes pour architecture 32 bits et à ma grande surprise il ne fonctionne plus même si les programmes exploités sont compilé en 32 bits et que l'ASLR est desactivé, j'obtiend un beau segfault alors que avant cela fonctionnait.
Pourtant le flux d'execution est bien détourné à la bonne adresse mémoire, de plus syslog consigne bien une trace du segfault qui me confirme que le pointeur d'instruction est redirigé au bon endroit.

Le point commun de mes programmes vulnérable de test est que j'utilisé la stack pour executer mon shellcode.

J'ai donc cherché sur le net des réponses à ce problème et j'ai trouvé ceci :

Code : Tout sélectionner

L'arrivée des architectures 64-bits a également changé la donne. En premier lieu, la protection des
permissions des pages ont été inclues au niveau matériel. Ainsi, la pile est non-exécutable par défaut.
source: http://bases-hacking.org/aslr-nx.html

J'ai donc émit l'hypothése que même si le programme est compilé et exécuté en 32 bits alors il bénéficie quand même de la protection des pages mémoire au niveau matérielle de l'architecture 64 bits, ce qui rend la pile non executable même pour un programme 32 bits classique.

Par conséquend tout les shellcodes injecté sur la pile d'un programme 32bits mais exécuté sur une architecture 64 bits qui fonctionnait avant ne fonctionne plus.

Je postais ce sujet juste pour savoir si cette hypothése est juste.

Dans l'autre cas de figure, peut-être que c'est le compilateur qui à définit le segment de pile comme non executable.
Dans le doute voici mes options de compilations, je n'ai pas encore touvé si c'est sa qui empêche l'execution de mes shellcodes:

Code : Tout sélectionner

$gcc -v
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configuré avec: /build/src/gcc-4.7.2/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --disable-ppl-version-check --disable-cloog-version-check --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --with-linker-hash-style=gnu --enable-multilib --disable-libssp --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-checking=release
Modèle de thread: posix
gcc version 4.7.2 (GCC) 
Ou alors une autre protection mémoire existe au niveau de la stack. Par exemple sous Open BSD il me semble qu'il existe des mecanismes qui renforce la protection de la pile.

Merci d'avance pour votre aide.
Dernière modification par rasta le ven. 12 avr. 2013, 20:53, modifié 1 fois.
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [shellcode] programme 32 bits et architecture 64 bits

Message par MrMen »

Alors j'ai eu des trucs là dessus mais de là à avoir des souvenirs potables…
La pile non exécutable n'a pas un rapport avec l'utilisation du bit Nx ? Je crois que c'est désactivable ça…
En deux deux, ici le monsieur à l'air de dire que généralement ça fonctionne.

PS : j'espère que j'avais bien compris ta question ;)
Arch 64 | Awesome | Zsh | Bépo
Répondre