Зараз я використовую 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.
EDIT (квітень 2016 р.): ulimit -s unlimitedВиправлено та призначено CVE-2016-3672 .
uname -mодного можна було б також використовувати archбінарний файл, який по суті робить те саме.
archнедоступний як аплет
Більш постійні способи відключення ASLR повинні зберігатись у ВМ з зрозумілих причин.
щоб перевірити можливість перезапису зворотних адрес кадру стека etcetera, вам потрібно буде компілювати без каналів стека -fno-stack-protector, при цьому, щоб дозволити виконувати код на стеці, з яким потрібно компілювати -z execstack, роблячи
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c