ASLR
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 можна перевірити за допомогою наступної команди:
Вимкнення ASLR
Для вимкнення ASLR встановіть значення /proc/sys/kernel/randomize_va_space
на 0. Зазвичай не рекомендується вимикати ASLR, крім випадків тестування або налагодження. Ось як це можна вимкнути:
Ви також можете вимкнути ASLR для виконання за допомогою:
Увімкнення ASLR
Для увімкнення ASLR можна записати значення 2 у файл /proc/sys/kernel/randomize_va_space
. Зазвичай для цього потрібні привілеї root. Повну рандомізацію можна ввімкнути за допомогою наступної команди:
Постійність після перезавантаження
Зміни, внесені за допомогою команд echo
, є тимчасовими і будуть скинуті при перезавантаженні. Щоб зробити зміну постійною, вам потрібно відредагувати файл /etc/sysctl.conf
та додати або змінити наступний рядок:
Після редагування /etc/sysctl.conf
застосуйте зміни за допомогою:
Це забезпечить, що ваші налаштування ASLR залишаться після перезавантаження.
Last updated