Я сейчас использую 32-битную Ubuntu 12.04 для эксперимента. Мне нужно отключить ASLR. Как я могу это сделать? и после этого, что я должен сделать, чтобы снова включить ASLR?
Согласно статье Насколько эффективна ASLR в системах Linux? , вы можете настроить ASLR в Linux, используя интерфейс /proc/sys/kernel/randomize_va_space
.
Поддерживаются следующие значения:
blockquote>
- 0 - Нет рандомизации. Все статично.
- 1 - Консервативная рандомизация. Общие библиотеки, стек,
mmap()
, VDSO и куча рандомизированы.- 2 - Полная рандомизация. В дополнение к элементам, перечисленным в предыдущем пункте, память, управляемая через
brk()
, также рандомизирована.Итак, чтобы отключить его, запустите
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
и снова включите его, запустите
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
. Это не переживет перезагрузку так что вам придется настроить это в
sysctl
. Добавьте файл/etc/sysctl.d/01-disable-aslr.conf
, содержащий:kernel.randomize_va_space = 0
должен навсегда отключить это.
Более постоянные способы отключения ASLR должны храниться в ВМ по очевидным причинам.
, чтобы протестировать способность перезаписывать адреса возврата стека и т. Д., Вам нужно будет компилировать без канареек стека -fno-stack-protector
, в то время как для того, чтобы выполнить код в стеке, вам нужно скомпилировать с помощью -z execstack
, делая
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
Вы можете просто использовать sudo sysctl kernel.randomize_va_space=0
для временного отключения ASLR.
Интерфейс /proc/sys/kernel/randomize_va_space
управляет ASLR в масштабе всей системы.
Если вы не хотите общесистемных изменений, используйте ADDR_NO_RANDOMIZE
personal , чтобы временно отключить ASLR. Управление этим флагом личности может быть выполнено с помощью setarch
и его опции -R
( manpage ), добавляя команду.
Мне действительно удобно открывать совершенно новую оболочку, используя:
setarch `uname -m` -R /bin/bash
Это откроет новую оболочку Bash для вас с отключенным ASLR, включая все дочерние процессы (программы запускаются из этого оболочки).
Просто exit
снаряд, как только вы закончите.
Кстати, на i386 ulimit -s unlimited
может «отключить» ASLR.
РЕДАКТИРОВАТЬ (апрель 2016 г.): ulimit -s unlimited
был исправлен и ему присвоено CVE-2016-3672 .