Comment désactiver temporairement ASLR (randomisation de la disposition de l'espace d'adressage)?

50

J'utilise Ubuntu 12.04 32 bits maintenant pour certaines expériences, je dois désactiver ASLR comment puis-je faire cela? et ensuite que dois-je faire pour réactiver ASLR?

    
posée Am1rr3zA 10.07.2013 - 02:15
la source

4 réponses

63

Selon un article Quelle est l’efficacité de ASLR sur les systèmes Linux? , vous pouvez configurer ASLR sous Linux à l'aide de l'interface /proc/sys/kernel/randomize_va_space .

  

Les valeurs suivantes sont prises en charge:

     
  • 0 - Pas de randomisation. Tout est statique.
  •   
  • 1 - Conservateur   randomisation. Les bibliothèques partagées, pile, mmap() , VDSO et heap sont   randomisé.
  •   
  • 2 - randomisation complète. En plus des éléments énumérés dans   le point précédent, la mémoire gérée via brk() est également aléatoire.
  •   

Pour le désactiver, lancez

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

et pour le réactiver, lancez

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

Cela ne survivra pas à un redémarrage, vous devrez donc configurer ceci dans sysctl . Ajouter un fichier /etc/sysctl.d/01-disable-aslr.conf contenant:

kernel.randomize_va_space = 0

devrait désactiver définitivement cette fonction.

    
réponse donnée gertvdijk 10.07.2013 - 13:17
la source
20

L’interface /proc/sys/kernel/randomize_va_space contrôle l’ASLR dans l’ensemble du système.

Si vous ne souhaitez pas de modification à l’échelle du système, utilisez ADDR_NO_RANDOMIZE la personnalité. pour désactiver temporairement ASLR. Le contrôle de cet indicateur de personnalité peut être effectué avec setarch et son option -R ( page de manuel ), en préfixant une commande.

Je trouve très pratique d’ouvrir un tout nouveau shell en utilisant:

setarch 'uname -m' -R /bin/bash

Cela ouvrira un nouveau shell Bash avec ASLR désactivé, y compris tous les processus enfants (programmes exécutés à partir de ce shell).

Juste exit le shell une fois que vous avez terminé.

Au fait, sur i386, ulimit -s unlimited peut "désactiver" ASLR.

EDIT (avril 2016): Le ulimit -s unlimited a été corrigé et assigné CVE-2016-3672 .

    
réponse donnée zhangyoufu 07.08.2014 - 07:53
la source
2

Les moyens plus permanents de désactiver ASLR doivent être conservés dans une machine virtuelle pour des raisons évidentes.

pour tester la possibilité de remplacer les adresses de retour des trames de pile, etc., vous devrez compiler sans pile canaris -fno-stack-protector , tout en vous permettant d'exécuter du code sur la pile dont vous avez besoin pour compiler avec -z execstack p>

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
    
réponse donnée NewPerson 10.07.2013 - 03:33
la source
1

Vous pouvez simplement utiliser sudo sysctl kernel.randomize_va_space=0 pour désactiver temporairement ASLR.

    
réponse donnée lzutao 19.03.2017 - 20:19
la source

Lire d'autres questions sur les étiquettes