AvanzadoWindowskernelexploitationvulnerabilidadesmitigacionesanálisis

Windows Kernel Exploitation: Lo que Todo Analista de Malware Debe Saber

Introducción a la explotación del kernel de Windows desde la perspectiva del analista de malware. Arquitectura del kernel, tipos de vulnerabilidades (UAF, overflow, type confusion), mitigaciones (SMEP, SMAP, kCFG, VBS), y cómo analizar exploits de kernel en muestras reales.

MalwareIntel Research··9 min lectura
Serie: Malware en Windows — Parte 18

El kernel como objetivo final

El kernel de Windows es el último bastión de seguridad. Todo lo que ocurre en user-mode (ring 3) está sujeto a restricciones: permisos de archivo, tokens de acceso, integridad de procesos. Pero el código que se ejecuta en kernel-mode (ring 0) tiene acceso absoluto: puede leer y escribir cualquier byte de memoria, manipular cualquier estructura del sistema, y ejecutar cualquier instrucción del procesador.

Para un atacante, llegar al kernel significa control total. Para un defensor, entender cómo se llega allí es necesario para evaluar el riesgo de vulnerabilidades, priorizar parches, y comprender las capacidades del malware más avanzado.

Este artículo no es un tutorial de escritura de exploits. Es una guía para analistas de malware que necesitan entender las técnicas de explotación del kernel cuando las encuentran en muestras reales.

Arquitectura del kernel de Windows

Rings de privilegio

Ring 3 (User Mode)
├── Aplicaciones normales (.exe)
├── DLLs de Windows (kernel32.dll, ntdll.dll)
├── Servicios de Windows
└── Procesos de seguridad (AV, EDR user-mode component)

Ring 0 (Kernel Mode)
├── ntoskrnl.exe (kernel ejecutivo)
├── HAL (Hardware Abstraction Layer)
├── Drivers del sistema (ntfs.sys, tcpip.sys)
├── Drivers de terceros (AV, EDR kernel component)
└── Win32k.sys (subsistema gráfico del kernel)

Ring -1 (Hypervisor, si VBS está activo)
├── Secure Kernel (securekernel.exe)
├── Credential Guard
└── HVCI

Componentes del kernel relevantes para exploits

ComponenteFunciónVulnerabilidades comunes
ntoskrnl.exeKernel ejecutivo principalRaro: muy auditado
Win32k.sysSubsistema gráfico (GDI, USER)Muy frecuente: superficie de ataque enorme
NTFS.sysSistema de archivosOcasional
AFD.sysAncillary Function Driver (Winsock)Ocasional
Drivers de tercerosVariableMuy frecuente: menor auditoría
clfs.sysCommon Log File SystemMúltiples CVEs recientes

Win32k.sys: el target preferido

Win32k.sys es el subsistema gráfico del kernel de Windows. Maneja ventanas, menús, cursores, objetos GDI (bitmaps, brushes, fonts) y callbacks entre kernel y user-mode. Es el componente del kernel con más vulnerabilidades históricas por varias razones:

  • Superficie de ataque enorme: miles de syscalls accesibles desde user-mode
  • Código legacy: originalmente diseñado cuando la seguridad no era prioridad
  • Callbacks a user-mode: el kernel llama a funciones en user-mode (user-mode callbacks), creando oportunidades para race conditions y UAF
  • Objetos complejos: GDI objects con reference counting manual, propensos a UAF

Tipos de vulnerabilidades del kernel

Use-After-Free (UAF)

La vulnerabilidad más explotada en el kernel moderno:

1. Se crea un objeto del kernel (ej. un bitmap GDI)
2. Se obtiene una referencia al objeto
3. El objeto se libera (free) pero la referencia sigue existiendo (dangling pointer)
4. Se crea un nuevo objeto que ocupa la misma memoria liberada
5. Se usa la referencia antigua (use-after-free)
6. El atacante controla el contenido del nuevo objeto, manipulando lo que la referencia antigua "ve"

Ejemplo real: CVE-2021-1732 (Win32k UAF), explotado in the wild por BITTER APT. Usaba un UAF en el manejo de objetos USER de Win32k para obtener escalada de privilegios local.

Integer Overflow / Buffer Overflow

Un overflow en el cálculo de tamaño de un buffer resulta en un buffer más pequeño de lo esperado. Cuando se copian datos al buffer, se sobrescriben datos adyacentes en el kernel pool.

Type Confusion

El kernel trata un objeto como si fuera de un tipo diferente, permitiendo al atacante acceder a campos que no debería:

Objeto A (tipo Bitmap):  [header][width][height][pixels_ptr]
Objeto B (tipo Palette):  [header][size][entries_ptr][flags]

Si el kernel confunde A con B:
  Leer "entries_ptr" del objeto devuelve "pixels_ptr" del bitmap
  → Permite leer/escribir memoria arbitraria via el bitmap

Race Conditions

Condiciones de carrera entre threads del kernel o entre kernel y user-mode:

Thread 1 (kernel): verifica que un puntero es valido
  --- context switch ---
Thread 2 (user): modifica el puntero para apuntar a otra ubicacion
  --- context switch ---
Thread 1 (kernel): usa el puntero (que ahora apunta a ubicacion controlada por atacante)

Técnicas de explotación del kernel

Token stealing (la técnica más importante)

El objetivo más común de un kernel exploit es robar el token de SYSTEM:

1. El exploit obtiene read/write arbitrario en kernel memory
2. Lee la estructura EPROCESS del proceso actual
3. Navega a la lista de procesos para encontrar el proceso System (PID 4)
4. Lee el TOKEN del proceso System
5. Copia el TOKEN de System al EPROCESS del proceso del atacante
6. El proceso del atacante ahora ejecuta como SYSTEM

Estructuras relevantes:

EPROCESS (estructura de proceso en kernel)
├── UniqueProcessId (PID)
├── ActiveProcessLinks (lista doblemente enlazada de procesos)
├── Token (puntero al TOKEN de seguridad)
└── Protection (PPL level)

TOKEN (token de seguridad)
├── Privileges (privilegios habilitados)
├── UserAndGroups (SIDs del usuario y grupos)
└── IntegrityLevelSid (nivel de integridad)

Offsets por versión de Windows

Los offsets de campos en EPROCESS y TOKEN cambian entre versiones de Windows. El exploit necesita detectar la versión y usar los offsets correctos:

CampoWindows 10 1903 (x64)Windows 11 22H2 (x64)
EPROCESS.UniqueProcessId0x4400x440
EPROCESS.ActiveProcessLinks0x4480x448
EPROCESS.Token0x4B80x4B8
EPROCESS.Protection0x87A0x87A

Los offsets pueden cambiar con actualizaciones menores. El malware que explota el kernel típicamente incluye tablas de offsets para múltiples versiones de Windows.

Mitigaciones del kernel

Evolución de mitigaciones

MitigaciónWindows versiónProtección
DEP/NXXP SP2+No ejecución de datos en kernel memory
kASLRVista+Randomización del base address del kernel
SMEP8+ (hardware)Kernel no puede ejecutar código de páginas user-mode
SMAP10+ (hardware)Kernel no puede leer datos de páginas user-mode
kCFG10 1703+Control Flow Guard para código del kernel
VBS10 1607+Hypervisor protege kernel memory
HVCI10 1709+Hypervisor valida integridad de código del kernel
kASLR improvementsContinuoMejor randomización, menos info leaks
Arbitrary Code Guard10+Bloquea código generado dinámicamente

SMEP y SMAP

SMEP (Supervisor Mode Execution Prevention): feature del procesador que impide que código ejecutándose en kernel mode (ring 0) ejecute instrucciones en páginas marcadas como user-mode. Esto bloquea la técnica clásica de "poner shellcode en user-mode y saltar a él desde el kernel".

SMAP (Supervisor Mode Access Prevention): similar pero para lectura/escritura. El kernel no puede leer datos de páginas user-mode sin desactivar temporalmente SMAP.

VBS y Secure Kernel

Virtualization-Based Security usa el hypervisor de Windows para crear un entorno aislado (Secure World) donde se ejecuta un Secure Kernel. Las protecciones de VBS no pueden bypassearse desde el kernel normal:

  • Credential Guard: las credenciales (NTLM hashes, Kerberos tickets) se almacenan en el Secure Kernel. Un kernel exploit en el kernel normal no puede acceder a ellas
  • HVCI: el hypervisor verifica que el código del kernel es legítimo antes de permitir su ejecución. Bloquea modificación de código del kernel y carga de drivers no firmados

Indicadores de kernel exploitation en malware

En el análisis estático

IndicadorAPI/PatternSignificado
DeviceIoControlkernel32.dllComunicación con driver (posible BYOVD)
NtQuerySystemInformationntdll.dllInfo leak del kernel (obtener base address)
NtDuplicateTokenntdll.dllManipulación de tokens
AdjustTokenPrivileges con SeDebugPrivilegeadvapi32.dllPreparación para escalada
Offsets hardcodeadosConstantes numéricas (0x4B8, 0x440)Offsets de EPROCESS fields
Version checksGetVersionEx, RtlGetVersionSeleccionar offsets por versión
Shellcode con token stealingPattern: read KTHREAD → EPROCESS → TokenShellcode de kernel exploit

En análisis dinámico

IndicadorHerramienta
BSOD (Blue Screen of Death)Exploit fallido: el kernel crasheó
Proceso que cambia de token repentinamenteProcess Hacker: token changes
Driver nuevo cargado antes de la escaladaSysmon Event ID 6
NtQuerySystemInformation con clase SystemModuleInformationAPI Monitor

CVEs del kernel explotados in-the-wild

CVEComponenteTipoExplotado porAño
CVE-2021-1732Win32kUAFBITTER APT2021
CVE-2021-40449Win32kUAFMysterySnail (APT)2021
CVE-2022-21882Win32kUAFIn-the-wild2022
CVE-2023-28252clfs.sysElevation of privilegeNokoyawa ransomware2023
CVE-2023-36802MSKSSRV.sysProxyIn-the-wild2023
CVE-2024-21338AppLockerKernel elevationLazarus Group2024
CVE-2024-30088Win32kUAFIn-the-wild2024

CVE-2023-28252: ransomware explotando el kernel

Caso notable: el grupo Nokoyawa ransomware explotó CVE-2023-28252 (vulnerabilidad en clfs.sys, Common Log File System) como zero-day para escalada de privilegios. Fue descubierto por Kaspersky. Es uno de los pocos casos documentados de un grupo de ransomware usando un zero-day del kernel (la mayoría usa BYOVD que es más simple).

Para el analista: qué hacer cuando encuentras un kernel exploit

  1. Identificar el CVE: buscar offsets, constantes y patterns en bases de datos de exploits
  2. Determinar el vector: ¿es un exploit directo del kernel o BYOVD?
  3. Verificar si está parcheado: comprobar si el parche de Microsoft está aplicado en los sistemas afectados
  4. Evaluar el impacto: ¿qué capacidades obtiene el atacante? (LPE, PPL bypass, rootkit)
  5. Documentar IOCs: hashes del exploit, del driver vulnerable (si BYOVD), offsets usados
  6. Recomendar mitigaciones: parchear, habilitar HVCI/VBS, actualizar driver blocklist

Mapeo MITRE ATT&CK

TécnicaIDContexto kernel
Exploitation for Privilege EscalationT1068Exploit de vulnerabilidad del kernel
RootkitT1014Instalación de rootkit post-exploit
Access Token ManipulationT1134Token stealing tras kernel exploit
Impair DefensesT1562Desactivar EDR desde kernel

Fuentes y referencias

  • Yosifovich, P. "Windows Kernel Programming." 2023.
  • Russinovich, M. et al. "Windows Internals Part 1." Microsoft Press, 2017.
  • Microsoft. "Kernel Security Mitigations." Microsoft Docs.
  • Kaspersky. "CVE-2023-28252: Nokoyawa Ransomware Kernel Exploit." Kaspersky GReAT, 2023.
  • Project Zero. "Windows Kernel Exploitation." Google Project Zero Blog.
  • MSRC. "Microsoft Security Response Center: Kernel Advisories." 2024.
  • j00ru (Mateusz Jurczyk). "Windows Kernel Exploitation Research." Google Project Zero.
  • connormcgarr. "Windows Kernel Exploitation Blog." 2021-2024.
  • MITRE ATT&CK. "Exploitation for Privilege Escalation (T1068)." https://attack.mitre.org/techniques/T1068/

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.