ASLR

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

ASLR

Address Space Layout Randomization (ASLR) - це техніка безпеки, яка використовується в операційних системах для випадкового розташування адрес пам'яті, використованих системними та програмними процесами. Це значно ускладнює передбачення місця розташування конкретних процесів та даних для атакування, таких як стек, купа та бібліотеки, тим самим запобігаючи певним типам експлойтів, зокрема переповненням буфера.

ASLR Not So Random

PaX розділяє простір адрес процесу на 3 групи:

  • Код та дані (ініціалізовані та неініціалізовані): .text, .data та .bss —> 16 бітів ентропії у змінній delta_exec. Ця змінна випадково ініціалізується для кожного процесу та додається до початкових адрес.

  • Пам'ять, виділена за допомогою mmap() та спільні бібліотеки —> 16 біт, позначена як delta_mmap.

  • Стек —> 24 біти, позначена як delta_stack. Однак фактично використовується 11 бітів (від 10-го до 20-го байта включно), вирівняних до 16 байт —> Це призводить до 524,288 можливих реальних адрес стеку.

Попередні дані стосуються систем з 32-бітною архітектурою, а зменшена кінцева ентропія дозволяє обійти ASLR, спробувавши виконання знову і знову, поки експлойт успішно завершиться.

У 64-бітних системах ентропія набагато вища, і це неможливо.

Перевірка статусу ASLR

Для перевірки статусу ASLR в системі Linux можна прочитати значення з файлу /proc/sys/kernel/randomize_va_space. Значення, збережене в цьому файлі, визначає тип застосованого ASLR:

  • 0: Немає випадковості. Все статичне.

  • 1: Консервативна випадковість. Спільні бібліотеки, стек, mmap(), сторінка VDSO випадкові.

  • 2: Повна випадковість. Крім елементів, які випадковізуються консервативно, пам'ять, керована через brk(), випадковізується.

Статус ASLR можна перевірити за допомогою наступної команди:

bashCopy codecat /proc/sys/kernel/randomize_va_space

Вимкнення ASLR

Для вимкнення ASLR встановіть значення /proc/sys/kernel/randomize_va_space на 0. Зазвичай не рекомендується вимикати ASLR, крім випадків тестування або налагодження. Ось як це можна вимкнути:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

Ви також можете вимкнути ASLR для виконання за допомогою:

setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args

Увімкнення ASLR

Для увімкнення ASLR можна записати значення 2 у файл /proc/sys/kernel/randomize_va_space. Зазвичай для цього потрібні привілеї root. Повну рандомізацію можна ввімкнути за допомогою наступної команди:

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

Постійність після перезавантаження

Зміни, внесені за допомогою команд echo, є тимчасовими і будуть скинуті при перезавантаженні. Щоб зробити зміну постійною, вам потрібно відредагувати файл /etc/sysctl.conf та додати або змінити наступний рядок:

kernel.randomize_va_space=2 # Enable ASLR
# or
kernel.randomize_va_space=0 # Disable ASLR

Після редагування /etc/sysctl.conf застосуйте зміни за допомогою:

sudo sysctl -p

Це забезпечить, що ваші налаштування ASLR залишаться після перезавантаження.

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated