Отключить и снова включить рандомизацию адресного пространства только для себя

Я хотел бы отключить рандомизацию размещения адресного пространства (ASLR) в моей системе (Ubuntu Gnu/Linux 2.6.32-41-сервер), но, если я использую

sysctl -w kernel.randomize_va_space=0

Я полагаю, что это изменение затронет всех пользователей системы. (Это правда?) Как я могу ограничить эффекты отключения ASLR для себя как пользователя или только для сеанса оболочки, в котором я вызываю команду для отключения?

Кстати, я вижу, что текущая (по умолчанию) настройка моей системы

sysctl -w kernel.randomize_va_space=0

Почему 2, а не 1 или 3? Где я могу найти документацию о числовых значениях параметров /proc/sys, их диапазонах и их значениях? Спасибо!

2 ответа

Решение

Документация для randomize_va_space настройка sysctl находится в Documentation/sysctl/kernel.txt в исходном дереве ядра. В принципе,

0 - отключить рандомизацию адресного пространства процесса.

1 - Сделать адреса базы mmap, стека и страницы VDSO рандомизированными.

2 - дополнительно включить рандомизацию кучи.

Лучший способ локально отключить ASLR в системе на основе Linux- использовать флаги индивидуальности процессов. Команда для манипуляции флагами личности setarch с

-R, --addr-no-randomize

Отключает рандомизацию виртуального адресного пространства (включает ADDR_NO_RANDOMIZE).

Вот как это сделать:

$> setarch $(uname -m) -R /bin/bash

Эта команда запускает оболочку, в которой ASLR был отключен. Все потомки этого процесса наследуют флаги личности отца и, следовательно, имеют отключенную ASLR. Единственный способ нарушить наследование флагов - вызвать программу setuid (поддержка такой функции была бы нарушением безопасности).

Обратите внимание, что uname -m здесь, чтобы не жестко программировать архитектуру вашей платформы и сделать эту команду переносимой.

Другие вопросы по тегам