ASLR означает рандомизацию адресного пространства, рандомизацию адресного пространства.
Это механизм безопасности, который включает рандомизацию адресов виртуальной памяти различных структур данных, чувствительных к атакам.
Местоположение целевой структуры в памяти предсказать сложно, поэтому шансы злоумышленника на успех невелики.
Реализация ASLR в Windows тесно связана с механизмом перемещения исполняемых изображений.
Перемещение позволяет загружать PE-файл не только по фиксированной предпочтительной базе.
Раздел перемещения в PE-файле является ключевой структурой при перемещении изображения.
В нем описывается, какие изменения необходимо внести в определенные элементы кода и данных, чтобы приложение корректно функционировало под другим базовым адресом.
Ключевую роль в работе ASLR играет генератор случайных чисел и пара функций, изменяющих базовый адрес загружаемого PE-файла.
Windows 8 использует генератор случайных чисел, который по сути представляет собой генератор Фибоначчи с задержкой и параметрами j=24 и k=55. Его зерно инициализируется в модуле winload.exe при запуске системы.
Winload.exe собирает энтропию из различных источников: ключей реестра, TPM, текущего времени, ACPI, а также с помощью новой инструкции rdrand. Инициализация ядерного генератора случайных чисел подробно описана в источнике [1].
Давайте подробнее рассмотрим новые инструкции rdrand. В процессорах на базе архитектуры Ivy Bridge реализована технология Intel Secure Key для генерации высококачественных псевдослучайных чисел.
Он реализован с помощью аппаратного цифрового генератора случайных чисел (DRNG) и инструкции rdrand для программного извлечения из него значений.
С аппаратной точки зрения DRNG представляет собой отдельный модуль на чипе процессора.
Он работает асинхронно с ядрами процессора на частоте 3 ГГц.
DRNG использует тепловой шум в качестве источника энтропии; Кроме того, он имеет встроенную систему тестирования, которая выполняет серию проверок качества извлеченных случайных значений.
Если результат теста неудовлетворительный, DRNG прекращает генерировать случайные значения.
Инструкция rdrand используется для извлечения случайных чисел из DRNG. В документации к нему отмечается, что теоретически DRNG может возвращать нулевые значения, если результат теста неудовлетворительный или внутренняя очередь случайных значений пуста.
Однако на практике опорожнить DRNG не удалось.
Intel Secure Key — мощный генератор случайных чисел, который генерирует случайные значения высокого качества с очень высокой скоростью.
Предсказать начальное состояние генератора, инициализированного с помощью инструкции rdrand, практически невозможно (в отличие от других источников энтропии).
Внутренней интерфейсной функцией ядра PRNG является ExGenRandom().
Он также имеет экспортированную функцию-оболочку RtlRandomEx().
ASLR в Windows 8 использует ExGenRandom() — в отличие от предыдущих версий, которые полагались на инструкцию rdtsc. Последний используется для получения счетчика времени на ЦП, который изменяется линейно и, следовательно, не может обеспечить требуемое качество формируемых значений, что небезопасно.
Основная функция механизма ASLR — MiSelectImageBase().
В Windows 8 это можно описать следующим псевдокодом.
Теги: #windows 8 #ASLR #информационная безопасность#define MI_64K_ALIGN(x) (x + 0x0F) >> 4 #define MmHighsetUserAddress 0x7FFFFFEFFFF typedef PIMAGE_BASE ULONG_PTR; typedef enum _MI_MEMORY_HIGHLOW {
-
Как Перемешать Песни?
19 Oct, 24 -
App Store Теперь Классифицирует Отказы
19 Oct, 24 -
Не Создавайте Скопление Людей
19 Oct, 24 -
Microsoft Судится Со Всем Миром
19 Oct, 24