AvanzadoWindowsBYOVDkerneldriversEDR bypassdetección

BYOVD: Bring Your Own Vulnerable Driver y Drivers Maliciosos en Windows

Análisis técnico de la técnica BYOVD (Bring Your Own Vulnerable Driver). Cómo el malware usa drivers firmados vulnerables para obtener acceso al kernel y desactivar EDR. Drivers más abusados, detección con driver blocklists, HVCI, y Sysmon.

MalwareIntel Research··7 min lectura
Serie: Malware en Windows — Parte 17

Del user-mode al kernel: por qué los EDR no pueden protegerse

Los EDR modernos protegen sus procesos con mecanismos como PPL (Protected Process Light). Un proceso PPL no puede ser terminado por otros procesos, incluso con privilegios de administrador. Esto parece robusto: ni siquiera un atacante con Domain Admin puede matar el agente de CrowdStrike o SentinelOne.

Pero hay una excepción: código ejecutándose en kernel mode (ring 0) tiene control absoluto sobre el sistema, incluida la capacidad de terminar procesos PPL. El problema es que cargar un driver en el kernel requiere firma digital, y obtener un certificado de firma de drivers es difícil.

La solución del atacante: no crear un driver nuevo. Usar uno que ya existe, que ya está firmado por un fabricante legítimo, y que tiene una vulnerabilidad explotable. Esto es BYOVD.

Cómo funciona BYOVD

Flujo de ataque

1. Atacante obtiene acceso con privilegios de admin (ya en la red)

2. Atacante trae un driver vulnerable firmado (ej. gdrv.sys de Gigabyte)
   - El driver es legítimo, firmado por Gigabyte
   - Windows verifica la firma: VALIDA
   - Windows carga el driver en kernel mode

3. Atacante envía IOCTL (I/O Control) al driver
   - El driver tiene una vulnerabilidad: permite read/write arbitrario
     en memoria del kernel sin validación adecuada
   - El atacante lee/escribe cualquier dirección de kernel memory

4. Desde kernel mode, el atacante:
   - Termina el proceso del EDR (incluso si es PPL)
   - Deshabilita callbacks de seguridad del kernel
   - Oculta su propia actividad
   - Ejecuta su payload sin interferencia

Tipos de vulnerabilidades en drivers

TipoDescripciónEjemplo
Arbitrary read/writePermite leer/escribir cualquier dirección de memoria del kernelgdrv.sys (Gigabyte), DBUtil (Dell)
MSR read/writePermite leer/escribir Model Specific Registers del procesadorCapcom.sys
Physical memory accessAcceso directo a memoria física (mapeo de direcciones físicas a virtuales)RTCore64.sys (MSI Afterburner)
Code executionPermite ejecutar código arbitrario en kernel modeCapcom.sys (función de callback en kernel)
Process manipulationPermite manipular objetos de proceso del kernelProcess Explorer driver (ironic)

Drivers vulnerables más abusados

DriverFabricanteCVEProducto originalGrupos que lo usan
gdrv.sysGigabyteCVE-2018-19320GIGABYTE App CenterRobbinHood, Cuba
DBUtil_2_3.sysDellCVE-2021-21551Dell BIOS UtilityLazarus, ransomware varios
RTCore64.sysMicro-Star (MSI)CVE-2019-16098MSI AfterburnerBlackByte, AvosLocker
mhyprot2.sysmiHoYoN/AGenshin Impact anti-cheatMúltiples ransomware
Capcom.sysCapcomN/ACapcom game driverResearch, PoC
IQVW64E.SYSIntelCVE-2015-2291Intel Ethernet DiagnosticsScattered Spider
AsIO.sys / AsIO64.sysASUSCVE-2023-33542ASUS AI SuiteBlackCat affiliates
WinRing0x64.sysMultipleN/AHardware monitoringMúltiples
HWiNFOREALiXCVE-2023-31160HWiNFO64Múltiples
Truesight.sysAdliceN/ARogueKiller (ironic)Scattered Spider

El caso de mhyprot2.sys

El driver anti-cheat del videojuego Genshin Impact es particularmente notable:

  • Firmado por un publisher conocido (miHoYo/Cognosphere)
  • No requiere que el juego esté instalado (el driver se puede cargar independientemente)
  • Proporciona capacidades de read/write en kernel memory
  • Usado en múltiples campañas de ransomware

La ironía: un driver diseñado para proteger contra trampas en un videojuego se usa como arma para desactivar software de seguridad.

Desactivar EDR desde kernel

Técnica 1: terminar el proceso del EDR

Una vez en kernel mode, el atacante puede terminar cualquier proceso:

// Pseudocodigo: terminar proceso protegido desde kernel
// 1. Encontrar EPROCESS del proceso EDR
PEPROCESS edrProcess = find_process_by_name("CrowdStrike\\CSFalconService.exe");

// 2. Usar el driver vulnerable para escribir en kernel memory
// Modificar la proteccion PPL del proceso
// (cambiar EPROCESS.Protection.Level a 0)
write_kernel_memory(
    &edrProcess->Protection,
    0,  // Sin proteccion
    sizeof(UCHAR)
);

// 3. Ahora el proceso ya no es PPL, se puede terminar normalmente
TerminateProcess(edr_handle, 0);

Técnica 2: eliminar kernel callbacks

Los EDR registran callbacks en el kernel para ser notificados de eventos:

  • PsSetCreateProcessNotifyRoutine: notificación de creación de procesos
  • PsSetCreateThreadNotifyRoutine: notificación de creación de threads
  • PsSetLoadImageNotifyRoutine: notificación de carga de imágenes
  • ObRegisterCallbacks: notificación de operaciones en objetos (handles)
  • CmRegisterCallback: notificación de operaciones en registro

El atacante puede desregistrar estos callbacks desde kernel mode, cegando al EDR:

// Pseudocodigo: eliminar callback de creacion de procesos
// 1. Leer la lista de callbacks del kernel
PEX_CALLBACK_ROUTINE_BLOCK callbacks = read_kernel_array(PspCreateProcessNotifyRoutine);

// 2. Encontrar el callback del EDR (por address range del driver)
for each callback in callbacks:
    if callback.address is in EDR_driver_range:
        // 3. Eliminar el callback
        write_kernel_memory(&callbacks[i], 0, sizeof(PVOID));

Herramientas que automatizan BYOVD

HerramientaTipoFunción
KDU (hfiref0x)Open sourceKernel Driver Utility: automatiza carga y explotación de drivers vulnerables
EDRSandblastOpen sourceUsa BYOVD para desactivar EDR callbacks y hooks
BackstabOpen sourceTermina procesos PPL via driver vulnerable
PPLBladeOpen sourceBypass PPL con múltiples drivers
Terminator (SpyBoy)UndergroundHerramienta comercial del underground para matar EDRs

Detección y defensa

Microsoft Vulnerable Driver Blocklist

Microsoft mantiene una lista de drivers vulnerables conocidos que Windows puede bloquear:

# Verificar si la blocklist esta activa
Get-CimInstance -Namespace root\Microsoft\Windows\CI -ClassName MSFT_WDACSIPolicy | Select PolicyID, FriendlyName

La blocklist se actualiza con Windows Update pero puede estar desactualizada. Verificar manualmente que está activa y actualizada.

HVCI (Hypervisor-protected Code Integrity)

HVCI usa el hypervisor de Windows (VBS, Virtualization-Based Security) para validar la integridad del código en kernel:

  • Solo permite cargar drivers firmados Y no en la blocklist
  • Protege kernel code pages contra modificación
  • Complementa pero no reemplaza la blocklist
# Verificar si HVCI esta habilitado
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard | Select VirtualizationBasedSecurityStatus, CodeIntegrityPolicyEnforcementStatus

Sysmon Event ID 6: Driver Loaded

<!-- Sysmon config: monitorizar carga de drivers -->
<DriverLoad onmatch="include">
  <!-- Alertar en drivers vulnerables conocidos -->
  <ImageLoaded condition="end with">gdrv.sys</ImageLoaded>
  <ImageLoaded condition="end with">DBUtil_2_3.sys</ImageLoaded>
  <ImageLoaded condition="end with">RTCore64.sys</ImageLoaded>
  <ImageLoaded condition="end with">mhyprot2.sys</ImageLoaded>
  <ImageLoaded condition="end with">WinRing0x64.sys</ImageLoaded>
  <ImageLoaded condition="end with">Capcom.sys</ImageLoaded>
  <ImageLoaded condition="end with">IQVW64E.SYS</ImageLoaded>
  
  <!-- Alertar en drivers sin firma valida -->
  <Signed condition="is">false</Signed>
</DriverLoad>

LOLDrivers Project

El proyecto LOLDrivers (loldrivers.io) mantiene un catálogo actualizado de drivers vulnerables conocidos con:

  • Hash SHA256 de cada versión vulnerable
  • CVE asociado
  • Tipo de vulnerabilidad
  • Capacidades que ofrece al atacante
  • Referencias y análisis
URL: loldrivers.io
GitHub: github.com/magicsword-io/LOLDrivers

Regla Sigma

title: Known Vulnerable Driver Loaded (BYOVD)
id: c1234567-d2e3-f4a5-b678-90abcdef1234
status: stable
logsource:
    category: driver_load
    product: windows
detection:
    selection_hash:
        Hashes|contains:
            - 'SHA256=31F4CFB4C71DA44120752721103A16512444C13C2AC2D857A7E6F13CB679B427'  # gdrv.sys
            - 'SHA256=0296E2CE999E67C76352613A718E11516FE1B0EFC3FFDB8918FC999DD76A73A5'  # DBUtil
    selection_name:
        ImageLoaded|endswith:
            - '\gdrv.sys'
            - '\DBUtil_2_3.sys'
            - '\RTCore64.sys'
            - '\mhyprot2.sys'
            - '\WinRing0x64.sys'
    condition: selection_hash or selection_name
level: critical
tags:
    - attack.privilege_escalation
    - attack.t1068

Mapeo MITRE ATT&CK

TécnicaIDContexto BYOVD
Exploitation for Privilege EscalationT1068Explotar vulnerabilidad del driver para kernel access
Signed Binary Proxy ExecutionT1218El driver está legítimamente firmado
Impair Defenses: Disable or Modify ToolsT1562.001Desactivar EDR desde kernel
RootkitT1014Capacidades de rootkit una vez en kernel

Fuentes y referencias

  • LOLDrivers. "Living Off The Land Drivers." https://loldrivers.io/
  • hfiref0x. "KDU: Kernel Driver Utility." https://github.com/hfiref0x/KDU
  • Elastic Security Labs. "BYOVD: EDR Killer Techniques." 2023.
  • Microsoft. "Microsoft Recommended Driver Block Rules." Microsoft Docs.
  • Microsoft. "Hypervisor-protected Code Integrity (HVCI)." Microsoft Docs.
  • CrowdStrike. "BYOVD in Ransomware Operations." 2024 Global Threat Report.
  • Mandiant. "Kernel Driver Exploitation in APT Campaigns." 2023.
  • MITRE ATT&CK. "Exploitation for Privilege Escalation (T1068)." https://attack.mitre.org/techniques/T1068/
  • Yosifovich, P. "Windows Kernel Programming." 2023.

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.