Cadena de Infección del Qilin EDR Killer
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
Detecciones
Posible Intento de Side-Loading de Biblioteca Dinámica Msimg32 (vía carga de imagen)
Ver
IOCs (HashSha256) para detectar: Cadena de Infección Qilin EDR Killer
Ver
IOCs (HashSha1) para detectar: Cadena de Infección Qilin EDR Killer
Ver
IOCs (HashMd5) para detectar: Cadena de Infección Qilin EDR Killer
Ver
Detección de Controladores de EDR Killer Cargados en Ataques de Ransomware Qilin [Creación de Procesos en Windows]
Ver
Detección de Técnicas de Evasión EDR vía Syscalls Nt* [Sistema Windows]
Ver
Detección de Msimg32.dll Malicioso Usado en Ataques de Ransomware Qilin [Carga de Imagen en Windows]
Ver
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