SOC Prime Bias: Alto

07 Abr 2026 19:57

Cadena de Infección del Qilin EDR Killer

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
Cadena de Infección del Qilin EDR Killer
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

El informe cubre un cargador de múltiples etapas entregado como un msimg32.dll troyanizado que puede deshabilitar o eliminar más de 300 productos de detección y respuesta de terminales. El cargador combina abuso SEH/VEH avanzado, técnicas de controladores de kernel y puntos de interrupción de hardware para evadir hooks en modo usuario y eliminar procesos de seguridad. La actividad está vinculada al ecosistema de ransomware Qilin y se entrega con un controlador personalizado derivado de la herramienta ThrottleStop. El resultado final es una carga útil dedicada a matar EDR que termina servicios de seguridad y puede restablecer el control del atacante restaurando o neutralizando la lógica de callback de integridad de código.

Investigación

Los investigadores realizaron ingeniería inversa del DLL malicioso, su cargador PE, y dos controladores auxiliares, rwdrv.sys y hlpdrv.sys. El análisis detalla cómo el cargador construye una tabla de políticas de slot de syscall, manipula el despachador de excepciones y realiza hooking de IAT para redirigir la ejecución. Luego utiliza el manejo de excepciones vectorizadas para cargar y lanzar una carga basada en shell32. La capa de controladores expone el acceso a memoria física cruda y se utiliza para remover o deshabilitar callbacks del kernel relacionados con EDR, así como terminar procesos protegidos a través de una interfaz IOCTL personalizada.

Mitigación

Utilice defensas en capas y evite la dependencia de un único control EDR. Monitoree actividad anormal de carga de controladores, uso sospechoso de IOCTL de memoria física, y cambios inesperados en estructuras de callbacks del kernel. Prevenga el side-loading de DLLs donde los atacantes reemplazan bibliotecas del sistema legítimas, y añada cobertura para evasión de estilo de puntos de interrupción de hardware. Mantenga firmas de red y de terminales actualizadas, incluyendo reglas de herramientas como ClamAV y Snort.

Respuesta

Si se detecta, aísle el terminal, detenga el proceso malicioso y descargue cualquier controlador sospechoso. Capture imágenes completas de memoria para forenses, verifique específicamente rwdrv.sys y hlpdrv.sys, y valide la integridad de los callbacks del kernel y la telemetría de seguridad relacionada. Despliegue detecciones actualizadas para el nombre de archivo msimg32.dll, eventos de carga de controladores, y el patrón IOCTL 0x2222008. Complete una revisión de integridad del sistema y recupere de copias de seguridad conocidas como confiables si no se puede restablecer la confianza en el host.

"graph TB %% Class definitions classDef technique fill:#ffcc99 %% Node definitions tech_initial_appinit["<b>Técnica</b> – <b>T1546.010 AppInit DLLs</b>: Sideu2011cargar msimg32.dll malicioso<br/><b>Descripción</b>: Use el valor de registro AppInit_DLLs para causar que un DLL malicioso se cargue en cada proceso en modo usuario que cargue User32.dll."] class tech_initial_appinit technique tech_obfuscation["<b>Técnica</b> – <b>T1027 Archivos o Información Obfusca</b>: Carga cifrada con trucos SEH/VEH<br/><b>Descripción</b>: Cifre o de alguna manera esconda código malicioso y utilice trucos de Manejo de Excepciones Estructuradas o Manejo de Excepciones Vectorizadas para evadir el análisis estático."] class tech_obfuscation technique tech_dll_injection["<b>Técnica</b> – <b>T1055.001 Inyección de DLL</b>: Hook de IAT de ExitProcess<br/><b>Descripción</b>: Inyecte un DLL malicioso en un proceso objetivo y modifique su Tabla de Direcciones de Importación para secuestrar las llamadas a ExitProcess."] class tech_dll_injection technique tech_hijack_flow["<b>Técnica</b> – <b>T1574 Secuestro de Flujo de Ejecución</b>: Handlers de VEH/SEH y puntos de interrupción de hardware<br/><b>Descripción</b>: Reemplace o añada handlers de excepciones y configure puntos de interrupción de hardware para redirigir ejecución a código malicioso."] class tech_hijack_flow technique tech_reflective_load["<b>Técnica</b> – <b>T1620 Carga de Código Reflectivo</b>: Desencriptación y ejecución PE en memoria<br/><b>Descripción</b>: Desencripte un Ejecutable Portable en memoria y ejecútelo sin escribir en disco."] class tech_reflective_load technique tech_elev_control["<b>Técnica</b> – <b>T1548 Abuso de Mecanismo de Elevación de Control</b>: Cargar controlador rwdrv.sys para memoria física R/W<br/><b>Descripción</b>: Instale un controlador firmado o vulnerable para obtener acceso de lectura/escritura a memoria física."] class tech_elev_control technique tech_priv_esc["<b>Técnica</b> – <b>T1068 Explotación para Escalada de Privilegios</b>: Manipular objetos del kernel y deshabilitar callbacks de EDR<br/><b>Descripción</b>: Use el controlador cargado para alterar estructuras del kernel y neutralizar hooks de detección y respuesta de terminales."] class tech_priv_esc technique tech_persistence_appinit["<b>Técnica</b> – <b>T1546.010 AppInit DLLs (Persistencia)</b>: Mantener estado EDR deshabilitado<br/><b>Descripción</b>: Mantenga registrado el DLL malicioso a través de AppInit_DLLs para persistir a través de reinicios mientras EDR permanece deshabilitado."] class tech_persistence_appinit technique tech_sandbox_evasion["<b>Técnica</b> – <b>T1497.002 Evasión de Virtualización/Sandbox</b>: Comprobación de localización y detección de puntos de interrupción<br/><b>Descripción</b>: Detectar entornos de análisis comprobando configuraciones de localización del sistema y sondeando para puntos de interrupción de depurador."] class tech_sandbox_evasion technique %% Connections showing attack flow tech_initial_appinit –>|lleva_a| tech_obfuscation tech_obfuscation –>|lleva_a| tech_dll_injection tech_dll_injection –>|lleva_a| tech_hijack_flow tech_hijack_flow –>|lleva_a| tech_reflective_load tech_reflective_load –>|lleva_a| tech_elev_control tech_elev_control –>|lleva_a| tech_priv_esc tech_priv_esc –>|lleva_a| tech_persistence_appinit tech_persistence_appinit –>|lleva_a| tech_sandbox_evasion "

Flujo de Ataque

Ejecución de Simulación

Prerequisito: El Chequeo Preliminar de Telemetría y Línea de Base debe haber pasado.

Justificación: Esta sección detalla la ejecución precisa de la técnica (TTP) del adversario diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y buscan generar la telemetría exacta que se espera de la lógica de detección.

  • Narrativa del Ataque y Comandos:

    Un atacante crea un binario mínimo en C nativo que carga explícitamente ntdll.dll y llama a NtTraceEvent a través de su nombre exportado. El binario se compila en el host objetivo utilizando las Herramientas de Construcción de Visual C++, y luego se ejecuta. Porque la llamada se realiza a través de la superficie estándar de API de Windows, el evento de creación del proceso registra la imagen (ntdll.dll) y el campo CallTrace contiene la cadena “NtTraceEvent”, satisfaciendo la condición de Sigma. El atacante entonces elimina el binario para reducir los artefactos forenses.

  • Script de Prueba de Regresión:

    # ---------------------------------------------------------
    # Paso 1 – Cree un fuente C temporal que llame a NtTraceEvent
    # ---------------------------------------------------------
    $src = @"
    #include <windows.h>
    typedef NTSTATUS (NTAPI *pNtTraceEvent)(HANDLE, ULONG, PVOID, ULONG);
    int main() {
        HMODULE hNtdll = LoadLibraryA("ntdll.dll");
        if (!hNtdll) return 1;
        pNtTraceEvent NtTraceEvent = (pNtTraceEvent)GetProcAddress(hNtdll, "NtTraceEvent");
        if (!NtTraceEvent) return 1;
        // Llamada mínima – los argumentos se ignoran en gran medida para esta demo
        NtTraceEvent(NULL, 0, NULL, 0);
        return 0;
    }
    "@
    $tmpPath = "$env:TEMPNtTraceDemo.c"
    $exePath = "$env:TEMPNtTraceDemo.exe"
    $src | Set-Content -Path $tmpPath -Encoding ASCII
    
    # ---------------------------------------------------------
    # Paso 2 – Compile usando cl.exe (supone herramientas de construcción de Visual C++ instaladas)
    # ---------------------------------------------------------
    $vcVars = "$env:ProgramFiles(x86)Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuildvcvars64.bat"
    if (Test-Path $vcVars) {
        & cmd /c "`"$vcVars`" && cl /nologo /O2 /Fe:`"$exePath`" `"$tmpPath`""
    } else {
        Write-Error "Herramientas de Construcción de Visual C++ no encontradas. Instálelas antes de ejecutar este script."
        exit 1
    }
    
    # ---------------------------------------------------------
    # Paso 3 – Ejecute el binario (esto debería activar la regla)
    # ---------------------------------------------------------
    & $exePath
    
    # ---------------------------------------------------------
    # Paso 4 – Limpie artefactos
    # ---------------------------------------------------------
    Remove-Item -Force $tmpPath, $exePath
  • Comandos de Limpieza:

    # Asegúrate de que se eliminen cualquier archivo sobrante (ejecutar como administrador)
    Get-ChildItem "$env:TEMPNtTraceDemo.*" -ErrorAction SilentlyContinue | Remove-Item -Force