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


57

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


Ответы:


75

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

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


1
Что именно означает «Полная рандомизация»? Включает ли это сам исполняемый файл? А что есть brk()?
Шужэн

26

/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 .


Незначительные детали в духе util-linux: вместо uname -mодного можно также использовать archдвоичный файл, который по сути делает то же самое.
барабанная дробь

1
@drumfire archнедоступен как апплет
busybox

+1 за возвращение через два года и добавление информации о CVE.
Multisync

3

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

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

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c

2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.