Un hombre con uniforme de policía bloquea la entrada a un edificio acristalado con los brazos en alto. Los atacantes de ransomware introducen un nuevo asesino EDR en su arsenal. Sophos descubre el uso de EDRKillShifter por los atacantes del ransomware RansomHub. Por Andreas Klopsch. Fuente de la imagen: Shutterstock
Búsqueda de Ciberamenazas

Los atacantes de ransomware introducen un nuevo EDR killer en su arsenal

Sophos descubre que los autores del ransomware RansomHub utilizan EDRKillShifter en sus ataques

Los analistas de Sophos encontraron recientemente un nuevo EDR killer desplegado por un grupo criminal que intentaba atacar a una organización con un ransomware llamado RansomHub. Aunque el ataque de ransomware finalmente no tuvo éxito, el análisis postmortem del ataque reveló la existencia de una nueva herramienta diseñada para acabar con el software de protección de endpoints. A esta herramienta la hemos llamado EDRKillShifter.

Desde 2022, hemos visto un aumento de la sofisticación del malware diseñado para desactivar los sistemas EDR en un sistema infectado, a medida que los clientes adoptan cada vez más herramientas EDR para proteger los endpoints. Sophos publicó anteriormente una investigación sobre AuKill, un EDR killer que Sophos X-Ops descubrió el año pasado y que se vendía en mercados ilegales.

Durante el incidente de mayo, los actores de la amenaza (estimamos con una confianza moderada que esta herramienta está siendo utilizada por múltiples atacantes) intentaron utilizar EDRKillShifter para desactivar la protección de Sophos en el ordenador objetivo, pero la herramienta falló. A continuación, intentaron ejecutar el ejecutable del ransomware en la máquina que controlaban, pero también falló al activarse la función CryptoGuard del agente de endpoints.

Cómo funciona EDRKillShifter

La herramienta EDRKillShifter es un ejecutable “cargador”, un mecanismo de entrega para un controlador legítimo que es vulnerable al abuso (también conocido como herramienta “trae tu propio controlador vulnerable” o BYOVD). Dependiendo de los requisitos del actor de la amenaza, puede entregar una variedad de cargas útiles de controladores diferentes.

El proceso de ejecución de este cargador consta de tres pasos. El atacante debe ejecutar EDRKillShifter con una línea de comandos que incluya una cadena de contraseña. Cuando se ejecuta con la contraseña correcta, el ejecutable descifra un recurso incrustado llamado BIN y lo ejecuta en la memoria.

El código BIN desempaqueta y ejecuta la carga útil final. Esta carga útil final, escrita en el lenguaje de programación Go, suelta y explota uno de una variedad de diferentes controladores legítimos vulnerables para obtener privilegios suficientes para desactivar la protección de una herramienta EDR.

Un diagrama muestra una visión general de alto nivel del proceso de ejecución del cargador EDRKillShifter.
Visión general de alto nivel del proceso de ejecución del cargador

Quitando la primera capa

Un análisis superficial revela que todas las muestras comparten los mismos datos de versión. El nombre de archivo original es Loader.exe y su nombre de producto es ARK-Game. Algunos miembros del equipo de investigación especularon que el actor de la amenaza intentaba enmascarar la carga útil final como un popular juego de ordenador llamado ARK: Survival Evolved.

La propiedad de idioma del binario es ruso, lo que indica que el autor del malware compiló el ejecutable en un ordenador con ajustes de localización rusos.

Version info of EDRKillShifter as shown in CFF Explorer
Información sobre la versión de EDRKillShifter mostrada en el Explorador CFF

Todas las muestras requieren que se pase una contraseña única de 64 caracteres a la línea de comandos. Si la contraseña es incorrecta (o no se proporciona), no se ejecutará.

La ejecución falla si el usuario no proporciona la contraseña correcta. Una captura de pantalla de la línea de comandos con la contraseña añadida como indicador de comando
La ejecución falla si el usuario no proporciona la contraseña correcta en la consola mientras se ejecuta el programa

Cuando se ejecuta, EDRKillShifter carga en memoria un recurso cifrado llamado BIN, incrustado dentro de sí mismo. También copia esos datos en un nuevo archivo llamado Config.ini y escribe ese archivo en la misma ubicación del sistema de archivos donde se ejecutó el binario.

A continuación, el código del cargador asigna una nueva página de memoria utilizando VirtualAlloc y escribe el contenido cifrado en la página recién asignada. A continuación, el malware borra el archivo config.ini y procede a descifrar el siguiente conjunto de cargas útiles: el controlador abusivo y un binario Go. El cargador utiliza un hash SHA256 de la contraseña de entrada como clave de descifrado de las cargas útiles de segunda capa.

Pseudocódigo de la rutina de descifrado de segunda capa del malware EDRKillShifter
Pseudocódigo de la rutina de descifrado de la segunda capa del malware EDRKillShifter

Si el malware descifra con éxito las cargas útiles de segunda capa, crea un nuevo hilo y comienza la ejecución en ese hilo.

Carga final del EDR killer en memoria

La segunda etapa se ofusca mediante el uso de una técnica de código automodificable. Durante el tiempo de ejecución, la segunda capa altera sus propias instrucciones. Dado que las instrucciones reales ejecutadas solo se revelan durante la ejecución, se requiere una herramienta adicional o emulación para el análisis.

La siguiente figura ilustra mejor la técnica. La primera sección muestra el comienzo de la capa de código que se modifica a sí misma. Todas las instrucciones posteriores a la primera llamada en el desensamblaje carecen de sentido en este punto. Si volvemos a visitar el mismo bloque de instrucciones después de ejecutar la primera llamada, veremos un conjunto diferente de instrucciones. La primera llamada modifica el siguiente conjunto de instrucciones, que a su vez modifica el siguiente conjunto de instrucciones, y así sucesivamente.

Un diagrama ilustra cómo El EDRKillShifter utiliza código automodificable para cambiar cada instrucción posterior
El EDRKillShifter utiliza código automodificable para cambiar cada instrucción posterior

El único propósito de la capa final descodificada es cargar la carga útil final dinámicamente en la memoria y ejecutarla.

Análisis de la carga útil final

Todas las muestras que analizamos ejecutaban en memoria una variante diferente del EDR killer. Todas están escritas en Go y ofuscadas (posiblemente mediante el uso de una herramienta de código abierto llamada gobfuscate). Los ofuscadores son herramientas diseñadas para dificultar la ingeniería inversa. Puede haber razones legítimas para que los ingenieros de software ofusquen el software, como evitar que los competidores roben la propiedad intelectual. Sin embargo, los autores de malware también utilizan ofuscadores para dificultar a los investigadores de seguridad el análisis del malware.

La mayoría de los ingenieros inversos confían en estos datos ofuscados cuando analizan malware escrito en Go, pero en este caso, estos datos clave están ocultos en el código compilado. Algunos de estos datos son

  • Las cadenas están cifradas. Se descifrarán durante el tiempo de ejecución.

  • La información sobre la versión de Go ha desaparecido. Muchas herramientas de ingeniería inversa de código abierto se basan en esta información de la versión de Go para reconstruir estructuras en el desensamblado.

  • La información útil de los paquetes, o las rutas de los paquetes, se cifran o se eliminan del malware final.

Sin embargo, pudimos extraer información valiosa utilizando la herramienta GoReSym de Mandiant.

Similitudes entre las cargas útiles finales

Todos los EDR killers desempaquetados incrustan un controlador vulnerable en la sección .data. Su comportamiento es sencillo, como el de otros EDR killers que hemos analizado[1][2][3]. La única diferencia importante entre las dos variantes que hemos analizado es el controlador vulnerable que se carga y explota.

Tras la ejecución, ambas variantes adquieren los privilegios necesarios para cargar un controlador y colocar el archivo sys explotable en la carpeta \AppData\Local\Temp. El malware genera un nombre de archivo aleatorio para el controlador cada vez que se ejecuta.

Un registro de Process Monitor muestra que el malware deja caer el controlador abusivo en la carpeta TEMP
Un registro del Monitor de Procesos muestra cómo el malware deja caer el controlador malicioso en la carpeta TEMP

Después de que el malware crea un nuevo servicio para el controlador, inicia el servicio y carga el controlador, entra en un bucle sin fin que enumera continuamente los procesos en ejecución, terminando los procesos si su nombre aparece en una lista de objetivos codificada. Este comportamiento es coherente en ambas variantes.

También vale la pena señalar que ambas variantes explotan controladores legítimos (aunque vulnerables), utilizando exploits de prueba de concepto disponibles en Github. Sospechamos que los actores de la amenaza copiaron partes de estas pruebas de concepto, las modificaron y portaron el código al lenguaje Go. Esta es una tendencia común que también hemos observado en otros EDR killers, como Terminator.

Mismo cargador, diferentes cargas útiles finales

La muestra con SHA256 451f5aa55eb207e73c5ca53d249b95911d3fad6fe32eee78c58947761336cc60 abusa de un controlador vulnerable que también se ha visto utilizado en ataques y se hace llamar RentDrv2. Una prueba de concepto para explotar este controlador está disponible en Github.

La variante también puede recibir un argumento adicional de línea de comandos “-list”, que permite a los adversarios pasar una lista adicional de nombres de procesos como objetivos.

La primera variante también puede aceptar argumentos adicionales de la línea de comandos como entrada, incluida una lista personalizada de procesos como objetivo
La primera variante también puede aceptar argumentos adicionales de la línea de comandos como entrada, incluida una lista personalizada de procesos como objetivo

La variante con SHA256 d0f9eae1776a98c77a6c6d66a3fd32cee7ee6148a7276bc899c1a1376865d9b0, en cambio, abusa de un controlador vulnerable conocido llamado ThreatFireMonitor, un componente de un paquete de supervisión de sistemas obsoletos. Una prueba de concepto para este controlador específico también está disponible en Github.

Integración de EDRKillShifter en el panorama general de las amenazas

La carga útil final incrustada en el cargador cambia de un incidente a otro (y, presumiblemente, de un creador a otro). Si intentamos relacionar EDRKillShifter con el panorama de amenazas más amplio, también es plausible que el cargador y las cargas útiles finales sean desarrollados por actores de amenazas distintos.

La venta de cargadores u ofuscadores es un negocio lucrativo en la red oscura. Sophos X-Ops sospecha que el único propósito del cargador es desplegar la carga útil final BYOVD, y que podría haber sido adquirido en la red oscura. Las cargas útiles finales del asesino EDR son entonces simplemente entregadas por el propio cargador, que consiste en las capas 1 y 2 que hemos descrito en nuestro análisis anterior.

Ejemplo de un anuncio de una herramienta ofuscadora a la venta en un foro ilegal de la red oscura
Ejemplo de un anuncio de una herramienta ofuscadora a la venta en un foro ilegal de la red oscura

Cabe señalar que, por el momento, no podemos confirmar esta hipótesis.

Mitigación y consejos

Sophos detecta actualmente EDRKillShifter como Troj/KillAV-KG. Además, las reglas de protección de comportamiento que protegen contra la evasión de defensas y la escalada de privilegios bloquean el paso de estas llamadas al sistema. Las empresas y los particulares también pueden tomar medidas adicionales para defender sus máquinas contra el abuso de controladores:

  • Sophos X-Ops te recomienda encarecidamente que compruebes si tu producto de seguridad para endpoints implementa y activa la protección contra manipulaciones. Esta función proporciona una capa sólida contra este tipo de ataques. Si utilizas productos de Sophos pero no tienes activada la protección antimanipulación de Sophos, actívala ahora mismo.

  • Practica una higiene estricta de las funciones de seguridad de Windows. Este ataque solo es posible si el atacante escala los privilegios que controla, o si puede obtener derechos de administrador. La separación entre privilegios de usuario y de administrador puede ayudar a evitar que los atacantes carguen fácilmente los controladores.

  • Mantén tu sistema actualizado. Desde el año pasado, Microsoft ha empezado a impulsar actualizaciones que descertifican los controladores firmados de los que se sabe que se ha abusado en el pasado.