¿Cómo puedo deshabilitar temporalmente ASLR (asignación aleatoria del diseño del espacio de direcciones)?

Respuestas:

75

De acuerdo con un artículo ¿Cuán efectivo es ASLR en sistemas Linux? , puede configurar ASLR en Linux usando la /proc/sys/kernel/randomize_va_spaceinterfaz.

Se admiten los siguientes valores:

  • 0: sin aleatorización. Todo es estático
  • 1 - Aleatorización conservadora. Las bibliotecas compartidas, stack, mmap()VDSO y heap son aleatorizadas.
  • 2 - Aleatorización completa. Además de los elementos enumerados en el punto anterior, la memoria administrada brk()también es aleatoria.

Entonces, para deshabilitarlo, ejecute

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

y para habilitarlo nuevamente, ejecute

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

Esto no sobrevivirá a un reinicio, por lo que tendrá que configurar esto sysctl. Agregue un archivo que /etc/sysctl.d/01-disable-aslr.confcontenga:

kernel.randomize_va_space = 0

debería deshabilitar esto permanentemente.

gertvdijk
fuente
1
¿Qué es exactamente "Aleatorización completa"? ¿Eso incluye el ejecutable en sí? Y lo que es brk()?
Shuzheng
26

La /proc/sys/kernel/randomize_va_spaceinterfaz controla ASLR en todo el sistema.

Si no desea un cambio en todo el sistema, use la ADDR_NO_RANDOMIZE personalidad para deshabilitar temporalmente ASLR. Se puede controlar este indicador de personalidad setarchy su -Ropción (página de manual ), anteponiendo un comando.

Me parece realmente conveniente abrir un shell completamente nuevo usando:

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

Esto abrirá un nuevo shell Bash para usted con ASLR deshabilitado, incluidos todos los procesos secundarios (los programas se ejecutan desde este shell).

Solo exitel caparazón una vez que hayas terminado.


Por cierto, en i386, ulimit -s unlimitedpuede "deshabilitar" ASLR.


EDITAR (abril de 2016): ulimit -s unlimitedse corrigió y se le asignó CVE-2016-3672 .

youfu
fuente
Pequeños detalles en el espíritu de util-linux: en lugar de uname -muno también podría usarse arch, un binario que esencialmente hace lo mismo.
drumfire
1
@drumfire archno está disponible como applet busybox
youfu
+1 por regresar dos años después y agregar la información sobre CVE.
Multisync
3

Las formas más permanentes de deshabilitar ASLR deben mantenerse en una VM por razones obvias.

para probar la capacidad de sobrescribir las direcciones de retorno del marco de la pila, etc., deberá compilar sin los canarios de la pila -fno-stack-protector, mientras que para permitirle ejecutar código en la pila con la que necesita compilar -z execstack, haciendo

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
Persona nueva
fuente
2

Solo puede usar sudo sysctl kernel.randomize_va_space=0para deshabilitar temparaly ASLR.

lzutao
fuente