Как я могу временно отключить ASLR (рандомизация расположения адресного пространства)?

Я сейчас использую 32-битную Ubuntu 12.04 для эксперимента. Мне нужно отключить ASLR. Как я могу это сделать? и после этого, что я должен сделать, чтобы снова включить ASLR?

57
задан 11 July 2013 в 05:19

4 ответа

Согласно статье Насколько эффективна 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

должен навсегда отключить это.

0
ответ дан 11 July 2013 в 05:19

Более постоянные способы отключения ASLR должны храниться в ВМ по очевидным причинам.

, чтобы протестировать способность перезаписывать адреса возврата стека и т. Д., Вам нужно будет компилировать без канареек стека -fno-stack-protector, в то время как для того, чтобы выполнить код в стеке, вам нужно скомпилировать с помощью -z execstack, делая

]
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
0
ответ дан 11 July 2013 в 05:19

Вы можете просто использовать sudo sysctl kernel.randomize_va_space=0 для временного отключения ASLR.

0
ответ дан 11 July 2013 в 05:19

Интерфейс /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 .

0
ответ дан 11 July 2013 в 05:19

Другие вопросы по тегам:

Похожие вопросы: