Address Space Layout Randomization (ASLR)

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)

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *