web-dev-qa-db-fra.com

Comment désactiver temporairement ASLR (randomization layout layout)?

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

55
Am1rr3zA

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 supportées:

  • 0 - Pas de randomisation. Tout est statique.
  • 1 - La randomisation conservatrice. Les bibliothèques partagées, la pile, mmap(), VDSO et le tas sont randomisés.
  • 2 - randomisation complète. Outre les éléments énumérés au point précédent, la mémoire gérée par brk() est également aléatoire.

Alors, 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 sysctlname__. Ajoutez un fichier /etc/sysctl.d/01-disable-aslr.conf contenant:

kernel.randomize_va_space = 0

devrait désactiver définitivement ceci.

70
gertvdijk

L'interface /proc/sys/kernel/randomize_va_space contrôle ASLR à l'échelle du système.

Si vous ne souhaitez pas modifier le système, utilisez ADDR_NO_RANDOMIZEpersonnalité pour désactiver temporairement ASLR. Le contrôle de cet indicateur de personnalité peut être effectué avec setarch et son option -R ( manpage ), en ajoutant une commande.

Je trouve très pratique d'ouvrir un shell complètement nouveau en utilisant:

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

Cela ouvrira un nouveau shell Bash pour vous 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é.


En passant, sur i386, ulimit -s unlimited peut "désactiver" ASLR.


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

25
youfu

Les moyens les plus permanents de désactiver ASLR doivent être conservés dans un VM pour des raisons évidentes.

pour tester la possibilité d'écraser les adresses de retour des cadres de pile, etc., vous devrez compiler sans les canaris de pile -fno-stack-protector, tout en vous permettant d'exécuter du code sur la pile pour compiler avec -z execstack, ce qui rend

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
3
NewPerson

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

2
lzutao