Windows 11 24H2 KASLR roto usando un controlador compatible con HVCI con acceso a memoria física

Un investigador de seguridad ha publicado un análisis detallado que demuestra cómo las protecciones de aleatorización del diseño del espacio de direcciones del kernel (KASLR) en sistemas Windows 11 24H2 pueden ser eludidas. Esto se logra explotando un controlador compatible con HVCI que posee capacidades de acceso a memoria física.

La investigación, divulgada por Yazid el 9 de junio de 2025, presenta un enfoque novedoso para obtener la dirección base del kernel de Windows. Para ello, se aprovecha el controlador eneio64.sys, que facilita primitivas de lectura y escritura en la memoria física del sistema.

Esta demostración es una continuación de investigaciones previas sobre la explotación de controladores de kernel compatibles con HVCI. Se centra específicamente en cómo los atacantes o investigadores de seguridad pueden simular la traducción de direcciones físicas a direcciones virtuales utilizando estructuras de paginación.

Esta técnica adquiere especial relevancia dadas las recientes mejoras de seguridad implementadas por Microsoft en Windows 11 24H2. Ahora, operaciones que antes funcionaban desde procesos de integridad media, como el uso de EnumDeviceDrivers o NtQuerySystemInformation para filtrar direcciones de módulos del kernel, requieren SeDebugPrivilege.

Los investigadores de Xacone observaron que los métodos tradicionales de derivación de KASLR se han vuelto cada vez más desafiantes en los sistemas Windows modernos, con herramientas como la herramienta de búsqueda previa que muestra resultados inconsistentes en diferentes entornos.

El investigador menciona específicamente que, si bien dichas herramientas funcionaron en máquinas host, no lograron funcionar de manera confiable en los entornos de máquinas virtuales Windows 11 24H2 utilizados para las pruebas.

La técnica explota Low Stub, una estructura de datos presente constantemente al comienzo de los diseños de memoria física en sistemas habilitados para HVCI, ubicada entre las direcciones físicas 0x10000 y 0x20000.

Esta estructura contiene varias direcciones del kernel, incluidas aquellas de funciones no exportadas, aunque muchas son específicas de la capa de abstracción de hardware (HAL).

La principal innovación de esta investigación radica en su enfoque para identificar el punto de entrada del núcleo dentro de la estructura Low Stub.

En lugar de depender de compensaciones codificadas o métodos de enumeración tradicionales, la técnica busca la dirección de la función KiSystemStartup, que sirve como punto de entrada al kernel.

El investigador demuestra cómo analizar la imagen PE de ntoskrnl.exe para recuperar la dirección virtual relativa (RVA) del punto de entrada y luego escanear el código auxiliar bajo en busca de direcciones que coincidan con los últimos tres bytes de este RVA.

La implementación implica un escaneo de memoria sistemático utilizando el siguiente enfoque: for (physical_offset = 0x10000; Physical_offset < 0x20000; Physical_offset += 8) para iterar a través de posibles ubicaciones de Low Stub, leyendo valores de 64 bits y comparándolos con el patrón de punto de entrada conocido.

Cuando se encuentra una coincidencia usando la condición if ((qword_value & 0xFFFFF) == (ntosEntryPoint & 0xFFFFF)), la dirección base del kernel se puede calcular restando el RVA del punto de entrada de la dirección descubierta.

La alineación del kernel de Windows con límites de 2 MB, aprovechando las asignaciones de memoria de páginas grandes, garantiza patrones de direcciones consistentes que facilitan este método de detección en diferentes configuraciones del sistema.