Известный гуру внутреннего устройства Windows, Alex Ionescu, раскрыл новые особенности ядра Windows 10, которые появились в новом билде Windows 10 Insider Preview 14332. Ранее в нашем блоге мы неоднократно упоминали Insider Preview версии Windows 10, которые используются разработчиками программ и драйверов для тестирования. Появляющиеся в них обновления затем будут выпущены для всех пользователей Windows 10 в качестве одного большого обновления этой ОС.
На сей раз речь идет об ASLR в режиме ядра (Kernel ASLR), о котором известно не так много, в отличие от его аналога для Ring3 компонентов Windows. До Windows 10 14332 Windows использовала лишь частичную реализацию KASLR только для системных образов (драйверов) и начиная с Windows Vista SP1. Теперь с каждой перезагрузкой Windows будет изменять виртуальные адреса размещения не только драйверов, но и, практически, всех структур ОС и компонентов, работающих в системном виртуальном адресном пространстве.
Главная цель, которую преследует Windows (как и Apple OS X, iOS, Google Android) при реализации ASLR заключается в перемещении важных структур данных и системных образов в системной части виртуального адресного пространства по новым адресам с каждой перезагрузкой. Кроме этого, структуры данных ядра Windows, которые она, в том или ином виде, может передавать в Ring3, не должны содержать прямых или косвенных указателей на объекты ядра. Это также является требованием к реализации ASLR.
По данным Ионеску, для диспетчера виртуальной памяти Windows произойдет ранее невиданное, адреса проецирования каталогов и таблиц страниц будут динамическими. Эксплойты Local Privilege Escalation (LPE), которые опирались на фиксированные адреса в системном виртуальном адресном пространстве перестанут корректно работать. Исключение составят только используемые HAL регионы памяти, а также все еще актуальные указатели в PEB.GdiSharedHandleTable. Данная лазейка все еще может быть использована для частичного обхода KASLR в эксплойтах.
Начиная с Win10 14332, Windows сможет менять виртуальные адреса базирования таких критичных структур данных диспетчера виртуальной памяти как каталог таблиц страниц (PDE), таблицы страниц (PTE), адреса системных PTE, гиперпространства, базы данных PFN и т. д. В концепциях распределения виртуального адресного пространства ядра Windows всегда подразумевался базовый стартовый адрес начала таблиц страниц и вышеперечисленных структур, адреса были зашиты еще на этапе компиляции ядра и могли различаться только в случае 32-битного или 64-битного виртуального адресного пространства, а также использования PAE-адресации.
Новая мера Microsoft существенно повысит иммунитет Windows к LPE-эксплойтам, которые опираются на фиксированные виртуальные адреса в виртуальном адресном пространстве ядра. Ранее мы писали про добавленную Microsoft меру по защите от LPE-эксплойтов, которая разрешит приложениям фильтровать доступ к системным сервисам Win32k ( Win32k syscalls filtering), часто используемым эксплойтами при срабатывании уязвимостей в win32k.sys. Обе эти функции станут доступны пользователям Windows 10 в новом большом обновлении ОС.