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

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

50 голосов | спросил Am1rr3zA 10 J000000Wednesday13 2013, 04:15:21

4 ответа


63

Согласно статье Насколько эффективна 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 10 J000000Wednesday13 2013, 15:17:00
21

Интерфейс /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 .

ответил zhangyoufu 7 AM00000090000005731 2014, 09:53:57
2

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

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

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
ответил NewPerson 10 J000000Wednesday13 2013, 05:33:21
1

Вы можете просто использовать sudo sysctl kernel.randomize_va_space=0, чтобы temparaly отключить ASLR.

ответил lzutao 19 MarpmSun, 19 Mar 2017 22:19:00 +03002017-03-19T22:19:00+03:0010 2017, 22:19:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132