Зараз я використовую 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