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