Я сейчас использую 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