Mastodon Mastodon Mastodon Mastodon

ASLR

Оновлено: · CyberSecureFox Editorial Team

ASLR (рандомізація адресного простору) — механізм захисту від експлойтів, який розміщує код програми, бібліотеки, стек і купу за випадковими адресами, щоб зловмисник не міг передбачити потрібні адреси.

Як працює ASLR

Експлойти для пошкодження пам’яті традиційно спиралися на фіксовані адреси: зловмиснику, який перезаписав адресу повернення через переповнення буфера, треба було знати, де розташований корисний код, наприклад функція системної бібліотеки. З ASLR операційна система під час кожного запуску програми обирає нову базову адресу для виконуваного файлу, спільних бібліотек, стека й купи (у Windows для системних DLL — під час кожного завантаження ОС). Жорстко задані адреси зловмисника вказують на недопустиму ділянку пам’яті, і процес аварійно завершується, а не опиняється захопленим.

Проєкт PaX реалізував ASLR для Linux 2001 року; до основного ядра Linux механізм потрапив 2005 року, у Windows — із Vista 2007 року, пізніше — в iOS та Android. KASLR застосовує ту саму ідею до ядра операційної системи.

Значення ASLR та його обмеження

Разом із невиконуваною пам’яттю (DEP/NX) і стековими канарками ASLR зробив надійну експлуатацію значно складнішою й дорожчою. Проте повним захистом він не є:

  • витоки інформації — друга помилка, що розкриває бодай один вказівник, дає змогу обчислити реальне розташування, тому сучасні ланцюжки експлойтів поєднують витік, наприклад, з use-after-free;
  • низька ентропія — у 32-бітних системах кількість можливих позицій достатньо мала для перебору;
  • нерандомізовані модулі — одна бібліотека, зібрана без підтримки ASLR, дає зловмиснику фіксовані адреси;
  • апаратні сторонні канали — дослідження неодноразово показували, що кеші процесора й передбачувачі розгалужень розкривають зміщення KASLR.

Рекомендації

  • Збирати програми як позиційно-незалежні виконувані файли (PIE) і тримати ASLR увімкненим у всій системі.
  • Використовувати 64-бітні збірки заради вищої ентропії.
  • Поєднувати ASLR з іншими механізмами, як-от Control Flow Guard, і швидко виправляти помилки безпеки пам’яті.
Синоніми:
рандомізація адресного простору, address space layout randomization, KASLR