Як я можу тимчасово відключити 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.


EDIT (квітень 2016 р.): ulimit -s unlimitedВиправлено та призначено CVE-2016-3672 .


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

1
@drumfire archнедоступний як аплет
зайнятої програми

+1 за повернення через два роки та додавання інформації щодо CVE.
Multisync

3

Більш постійні способи відключення ASLR повинні зберігатись у ВМ з зрозумілих причин.

щоб перевірити можливість перезапису зворотних адрес кадру стека etcetera, вам потрібно буде компілювати без каналів стека -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.