Я сейчас использую 32-битную Ubuntu 12.04 для некоторого эксперимента. Мне нужно отключить ASLR. Как я могу это сделать? и после этого, что я должен сделать, чтобы снова включить ASLR?
Я сейчас использую 32-битную Ubuntu 12.04 для некоторого эксперимента. Мне нужно отключить ASLR. Как я могу это сделать? и после этого, что я должен сделать, чтобы снова включить ASLR?
Ответы:
Согласно статье Насколько эффективна ASLR в системах Linux? Вы можете настроить ASLR в Linux, используя /proc/sys/kernel/randomize_va_spaceинтерфейс.
Поддерживаются следующие значения:
- 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
должен навсегда отключить это.
brk()?
/proc/sys/kernel/randomize_va_spaceИнтерфейс управления ASLR всей системы.
Если вы не хотите общесистемных изменений, используйте ADDR_NO_RANDOMIZE личность, чтобы временно отключить 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 .
uname -mодного можно также использовать archдвоичный файл, который по сути делает то же самое.
archнедоступен как апплет
Более очевидные способы отключения ASLR должны храниться в ВМ по очевидным причинам.
чтобы проверить возможность перезаписывать адреса возврата стекового фрейма и т. д., вам нужно будет компилировать без канареек стека -fno-stack-protector, в то время как вы сможете выполнять код в стеке, с которым вам нужно скомпилировать -z execstack,
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c