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

57

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

Am1rr3zA
источник
Только для себя: stackoverflow.com/questions/11238457/… || unix.stackexchange.com/questions/15881/…
Сиро Сантилли 新疆 '中心 法轮功 六四 事件

Ответы:

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

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

gertvdijk
источник
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.

lzutao
источник