ASLR (англ. address space layout randomization — «рандомизация размещения адресного пространства») — технология, применяемая в операционных системах, при использовании которой случайным образом изменяется расположение в адресном пространстве процесса важных структур данных, а именно образов исполняемого файла, подгружаемых библиотек, кучи и стека.
Что бы узнать используется ли ASLR, можно несколько раз запустить ldd (для Solaris такой трюк не прокатит и нужно использовать либо sxadm, либо elfedit, но об этом ниже) для одного и того же бинарника несколько рад подряд и посмотреть, меняется ли адрес для libc.so: если меняется, значит включёно:
# ldd /usr/sbin/ppp | grep libc.so
libc.so.7 => /lib/libc.so.7 (0x80639d000)
# ldd /usr/sbin/ppp | grep libc.so
libc.so.7 => /lib/libc.so.7 (0x806f79000)
# ldd /usr/sbin/ppp | grep libc.so
libc.so.7 => /lib/libc.so.7 (0x806925000)
FreeBSD
По-умолчанию отключено. Включается/выключается налету, через sysctl:
kern.elf{32,64}.aslr.enable - Enable address map randomization (Default: 0)
kern.elf{32,64}.aslr.pie_enable - Enable ASLR for Position-Independent Executables (PIE) binaries (Default: 0)
kern.elf{32,64}.aslr.honor_sbrk - Assume sbrk is used (Default: 1)
vm.cluster_anon - Cluster anonymous mappings (Default: 1)
Так же, есть возможность менять это поведение налету для конкретного приложения через elfctl:
% elfctl -e +noaslr /usr/local/sbin/unbound
Linux
По умолчанию включёно. Включается/выключается налету, через sysctl kernel.randomize_va_space
0 = Disabled
1 = Conservative Randomization
2 = Full Randomization
OpenBSD
По умолчанию включёно (начиная с февраля 2002). Выключить нельзя
Solaris
По умолчанию включёно. Выключается через sxadm
# sxadm info|grep aslr
aslr enable (tagged-files) enable (tagged-files)
# sxadm disable aslr
Так же, есть возможность менять это поведение налету для конкретного приложения через elfedit:
% elfedit -e 'dyn:sunw_aslr enable' a.out
% elfdump -d a.out | grep ASLR
[29] SUNW_ASLR 0x2 ENABLE
% elfedit -e 'dyn:sunw_aslr disable' a.out
% elfdump -d a.out | grep ASLR
[29] SUNW_ASLR 0x1 DISABLE