ASLR
Что такое ASLR?
ASLRASLR рандомизирует расположение в памяти кода, стеков, куч и библиотек, чтобы атакующие не могли надёжно предсказать целевые адреса для эксплойтов.
ASLR — это защитная мера, которая при каждом запуске программы рандомизирует базовые адреса ключевых областей процесса: исполняемого файла, разделяемых библиотек, кучи, стека и области mmap. Технику впервые реализовал проект PaX в 2001 году, в 2005 году её включили в основную ветку ядра Linux (2.6.12), а сегодня она поставляется в Windows (начиная с Vista), macOS, iOS и Android. Делая раскладку памяти непредсказуемой, ASLR вынуждает атакующего сначала получить утечку адреса, прежде чем проводить атаки повторного использования кода, такие как ROP или ret2libc.
Её стойкость зависит от энтропии: 32-битные системы дают лишь около 8–16 бит — настолько мало, что в исследовании Shacham 2004 года удалось методом перебора взломать порождённые через fork рабочие процессы Apache за считанные минуты, тогда как 64-битный Linux предлагает более 28 бит энтропии mmap. Полнота охвата важна ничуть не меньше: одна библиотека без PIE или бинарник, запущенный с неограниченным стеком (ADDR_NO_RANDOMIZE, усилено через CVE-2016-3672), оставляют фиксированную опорную точку. В 2014 году атака offset2lib авторства Marco-Gisbert и Ripoll показала, что GNU/Linux размещал PIE-исполняемый файл вплотную к его библиотекам, поэтому единственный утёкший адрес приложения де-рандомизировал каждую библиотеку с постоянным смещением, преодолевая полноценный ASLR, NX и стек-канарейки менее чем за секунду. Исправление отделило базу исполняемого файла от mmap_base.
ASLR никогда не работает в одиночку: сочетайте его с DEP/NX, стек-канарейками и контролем целостности потока управления (CFI) и помните, что любой надёжный примитив утечки информации полностью его обрушивает.
flowchart TD
E[exec / загрузка программы] --> R{ASLR включён?}
R -->|No| F[Фиксированные предсказуемые адреса]
R -->|Yes| RND[Рандомизировать базу стека, кучи, mmap, PIE, библиотек]
RND --> ENT{Достаточно энтропии и полный охват?}
ENT -->|No| BF[Перебор / опора без PIE]
ENT -->|Yes| LEAK{У атакующего есть утечка информации?}
LEAK -->|Yes| BYP[Пересчитать реальные адреса напр offset2lib]
LEAK -->|No| BLOCK[ROP / ret2libc ненадёжны]
F --> EXP[Эксплойт удаётся]
BF --> EXP
BYP --> EXP● Примеры
- 01
Linux рандомизирует базы стека, кучи и PIE-бинарника при каждом exec.
- 02
ASLR в Windows переразмещает kernel32.dll и ntdll.dll при каждой загрузке.
● Частые вопросы
Что такое ASLR?
ASLR рандомизирует расположение в памяти кода, стеков, куч и библиотек, чтобы атакующие не могли надёжно предсказать целевые адреса для эксплойтов. Относится к категории Безопасность приложений в кибербезопасности.
Что означает ASLR?
ASLR рандомизирует расположение в памяти кода, стеков, куч и библиотек, чтобы атакующие не могли надёжно предсказать целевые адреса для эксплойтов.
Как защититься от ASLR?
Защита от ASLR обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия ASLR?
Распространённые альтернативные названия: Рандомизация адресного пространства, PIE.