2012-06-28 10 views
16

Me gustaría deshabilitar la aleatoriedad de diseño de espacio de direcciones (ASLR) en mi sistema (Ubuntu Gnu/Linux 2.6.32-41-server), pero si usoDeshabilitar y volver a habilitar la aleatoriedad de diseño de espacio de direcciones solo para mí

sysctl -w kernel.randomize_va_space=0 

supongo que el cambio afectará a todos los usuarios del sistema. (¿Es esto cierto?) ¿Cómo puedo limitar los efectos de deshabilitar ASLR a mí mismo solo como usuario, o solo a la sesión de shell en la que invoco el comando para deshabilitar?

Por cierto, veo que ajuste actual (por defecto) de mi sistema es

sysctl -w kernel.randomize_va_space=0 

Por qué 2 y no 1 o 3? ¿Dónde puedo encontrar documentación sobre los valores numéricos de las configuraciones/proc/sys, sus rangos y sus significados? ¡Gracias!

+2

http://gcc.gnu.org/wiki/Randomization dice que 'setarch $ (uname -m) -RL bash' debe funcionar –

+0

http://unix.stackexchange.com/questions/15881/disable-address -space-layout-randomization-aslr-for-my-processes || http://askubuntu.com/questions/318315/how-can-i-temporarily-disable-aslr-address-space-layout-randomization –

Respuesta

11

La documentación para el ajuste randomize_va_spacesysctl está en Documentation/sysctl/kernel.txt en el árbol de fuentes del núcleo. Básicamente,

0 - Desactive la aleatorización del espacio de direcciones de proceso.

1 - Establezca las direcciones de la base de mmap, la pila y la página de VDSO aleatorizadas.

2 - Además, habilite la asignación al azar del montón.

+0

¡Gracias! Eso soluciona mi segunda pregunta ("por cierto") anterior, pero todavía no veo una forma de restringir el efecto de sysctl a una sola cuenta o sesión de shell. Supongo que debe ser imposible. : -/ –

+1

Sí, la configuración es global. Un grep rápido muestra que hay un código (quizás vestigial) en el código de "personalidad" (que maneja múltiples ABI) que puede hacer lo contrario. Establecer el indicador ADDR_NO_RANDOMIZE en el campo de personalidad de una task_struct deshabilitará el comportamiento incluso cuando esté habilitado globalmente.Pero eso es probablemente más vudú kernel de lo que quieres tratar. –

20

La mejor manera de deshabilitar localmente el ASLR en un sistema basado en Linux es usar indicadores de personalidad de procesos. El comando para manipular las banderas de personalidad es setarch con

-R, --addr-no-randomize

Desactiva la aleatorización del espacio de direcciones virtuales (se enciende ADDR_NO_RANDOMIZE).

Aquí es cómo proceder:

$> setarch $(uname -m) -R /bin/bash 

Este comando ejecuta una concha en la que el ASLR ha sido deshabilitado. Todos los descendientes de este proceso heredarán las banderas de personalidad del padre y, por lo tanto, tendrán una ASLR desactivada. La única forma de romper la herencia de las banderas sería llamar a un programa setuid (sería una violación de seguridad admitir dicha característica).

Tenga en cuenta que el uname -m está aquí para no codificar la arquitectura de su plataforma y hacer que este comando sea portátil.

Cuestiones relacionadas