Descripciones de malware

Ymir: nuevo ransomware furtivo en libertad

Introducción

En un reciente caso de respuesta a incidentes, descubrimos una nueva y notable familia de ransomware que los atacantes han estado usando de forma activa y a la que bautizamos “Ymir”. Este artefacto tiene funciones interesantes, que incluyen un gran conjunto de operaciones que se realizan en memoria con la ayuda de las llamadas a funciones malloc, memmove y memcmp.

En el caso que analizamos, el atacante logró obtener acceso al sistema a través de comandos de control remoto de PowerShell. Después, instaló varios instrumentos para llevar a cabo acciones maliciosas, como Process Hacker y Advanced IP Scanner. Y como paso final, después de debilitar la seguridad del sistema, el adversario ejecutó Ymir para alcanzar sus objetivos.

En esta publicación, proporcionamos un análisis detallado del ransomware Ymir, así como las tácticas, técnicas y procedimientos (TTP) que los atacantes emplean.

Análisis

Análisis estático

Nuestro análisis comenzó con una inspección básica del artefacto. Comenzamos analizando sus propiedades, como el tipo de archivo, y cadenas y capacidades pertinentes, como se muestra en la tabla e imágenes a continuación.

Hash Valor
MD5 12acbb05741a218a1c83eaa1cfc2401f
SHA-1 3648359ebae8ce7cacae1e631103659f5a8c630e
SHA-256 cb88edd192d49db12f444f764c3bdc287703666167a4ca8d533d51f86ba428d8
MD5 12acbb05741a218a1c83eaa1cfc2401f
SHA-1 3648359ebae8ce7cacae1e631103659f5a8c630e
SHA-256 cb88edd192d49db12f444f764c3bdc287703666167a4ca8d533d51f86ba428d8
Identificación de tipo de archivo

Identificación de tipo de archivo

Aunque el binario no levanta sospechas de estar empaquetado, ya que su entropía no es lo suficientemente alta, la presencia de llamadas API a funciones como malloc, memmove y memcmp indica que puede asignar memoria para ejecutar funciones maliciosas.

Llamadas a funciones de operación de memoria

Llamadas a funciones de operación de memoria

El binario también es sospechoso porque importa funciones, como CryptAcquireContextA, CryptReleaseContext, CryptGenRandom, TerminateProcess y WinExec, de las bibliotecas del sistema operativo. Estas llamadas a la API suelen encontrarse en diversas muestras de ransomware.

Importaciones sospechosas de malware

Importaciones sospechosas de malware

Aunque la mayoría de la información de la muestra se desempaqueta en la memoria durante el tiempo de ejecución, pudimos encontrar algunos indicadores útiles en las cadenas binarias, entre ellas el nombre del archivo de la nota de rescate y contenidos en un archivo PDF, la extensión de cifrado, comandos de PowerShell, y algunas claves utilizadas por los algoritmos de cifrado, como se muestra en las siguientes imágenes.

Contenido del PDF

Contenido del PDF

Comando de autoeliminación de PowerShell y claves de cifrado

Comando de autoeliminación de PowerShell y claves de cifrado

El atacante utilizó el compilador MinGW, una versión nativa de Windows del Conjunto de Compiladores GNU (GCC, GNU Compiler Collection).

Cadena del compilador

Cadena del compilador

La siguiente tabla muestra otros indicadores de cadena útiles que encontramos en el curso de nuestro análisis.

Tipo Valor Descripción
Cadena (comando) powershell -w h -c Start-Sleep -Seconds 5; Remove-Item -Force -Path Ejecución del comando de autoeliminación a través de PowerShell.
Cadena (URL) hxxps://github[.]com/qTox/qTox/releases/download/v1.17.6/setup-qtox-x86_64-release.exe Presente en el PDF y el software (cliente qTox) para contactar a los atacantes.
Cadena 6C5oy2dVr6 Extensión de cifrado.
Cadena (nombre del archivo) INCIDENT_REPORT.pdf Nombre del archivo PDF que contenía la nota de rescate. Los PDF se colocaban en varios directorios.
Cadena (fecha) D:20240831154833-06’00’ Fecha de creación de los metadatos del PDF.
Cadena x64dbg Nombre del depurador.

Un hecho interesante es que la fecha de creación del PDF fue el 31 de agosto de 2024, que coincide con la fecha de compilación binaria (2024-08-31), como se muestra en la imagen a continuación.

Fecha y hora de compilación del malware

Fecha y hora de compilación del malware

El análisis estático también muestra que el PDF utilizado como nota de rescate está presente en la sección .data del binario. La información codificada en este tipo de archivo es muy útil para crear reglas de detección e indicadores de compromiso.

Archivo PDF que contiene la nota de rescate

Archivo PDF que contiene la nota de rescate

Después de llegar a la función principal, el malware ejecuta otra función con llamadas a otras funciones para obtener información del sistema. Para agilizar nuestro análisis, cambiamos el nombre de esta función a Get_System_Information:

Punto de entrada del malware

Punto de entrada del malware

El malware también contiene algunas restricciones de ejecución que se activan cuando están establecidos ciertos parámetros. Por ejemplo, el parámetro --path desactiva la autoeliminación, permitiendo al atacante reutilizar el binario para otros directorios.

El artefacto no se elimina cuando se ejecuta con el parámetro --path.

El artefacto no se elimina cuando se ejecuta con el parámetro –path.

Mientras realizábamos la ingeniería inversa de la muestra, descubrimos que tomaba código de funciones relacionadas con CryptoPP, una biblioteca criptográfica de código abierto escrita en C++.

Funciones de CryptoPP

Funciones de CryptoPP

El malware también tiene una lista explícita inmodificable de extensiones de nombre de archivo que se deben excluir del cifrado.

Extensiones de nombre de archivo que se deben ignorar Extensiones de nombre de archivo que se deben ignorar

Extensiones de nombre de archivo que se deben ignorar

Análisis dinámico

Al ejecutar el ransomware, detectamos cientos de llamadas a la función memmove. Después de analizar los datos, encontramos que cargaba pequeñas piezas de instrucciones en la memoria para realizar funciones maliciosas. La siguiente imagen muestra un fragmento del malware cargando variables de entorno después de hacer una llamada a memmove.

Variables de entorno cargadas en la memoria

Variables de entorno cargadas en la memoria

El malware utiliza constantemente la función memmove al enumerar subdirectorios y archivos dentro del sistema afectado, para poder cifrarlos más adelante.

Enumeración de directorios

Enumeración de directorios

También utiliza memmove para cargar cadenas que contienen ubicaciones en el sistema de archivos de la víctima y que usa para comparar con nombres de directorios comunes durante la ejecución.

Cadenas cargadas vía memmove

Cadenas cargadas vía memmove

Durante la ejecución del malware se cargan algunas bibliotecas adicionales, como CRYPTSP.dll, rsaenh.dll, bcrypt.dll y kernelbase.dll.

Carga de DLLs en tiempo de ejecución

Carga de DLLs en tiempo de ejecución

El artefacto utiliza el algoritmo de cifrado de flujo ChaCha20 para cifrar archivos, que agrega la extensión .6C5oy2dVr6 a cada archivo cifrado.

Cifrado ChaCha20

Cifrado ChaCha20

Además, copia el contenido del PDF de la sección .data y utiliza las funciones _write y _fsopen para generar una nota de rescate en formato PDF dentro de cada directorio en el sistema afectado.

La operación de escritura de la nota de rescate

La operación de escritura de la nota de rescate

La nota de rescate informa a la víctima sobre lo que sucedió con el sistema afectado e instruye contactar a los atacantes para negociar un acuerdo. Aunque la nota menciona que los atacantes robaron los datos de la máquina afectada, el malware no tiene ninguna capacidad de red para la exfiltración de datos. Esto nos lleva a creer que los adversarios robarían datos con otros medios una vez que lograran el acceso a la computadora, como a través de HTTP, FTP o cargándoos a almacenamiento en la nube.

Fragmento de la nota de rescate

Fragmento de la nota de rescate

Detectamos una cadena extraña, un comentario escrito en el idioma Lingala. Este idioma se utiliza en la República Democrática del Congo, la República del Congo, Angola y la República Centroafricana.

Comentario en Lingala encontrado durante la ejecución de malware

Comentario en Lingala encontrado durante la ejecución de malware

Otro hecho interesante es que la muestra busca PowerShell en cada subdirectorio. Una vez que encuentra PowerShell, el malware lo utiliza para autoeliminarse. En nuestra investigación, copiamos powershell.exe en nuestra carpeta de Escritorio, así que se lo utilizó para eliminar la muestra.

Búsqueda binaria de PowerShell

Búsqueda binaria de PowerShell

El siguiente diagrama muestra un resumen de la ejecución de la muestra. Hay que tener en cuenta que el único proceso secundario creado fue powershell.exe, ya que el malware crea una instancia de PowerShell incluso si encuentra una en el sistema. Más adelante, PowerShell llama a conhost.exe, que se utiliza para ejecutar servicios en segundo plano.

Procesos maliciosos

Procesos maliciosos

Árbol de procesos

Árbol de procesos

El malware llama a PowerShell con el cmdlet Start-Sleep para que espere 5 segundos, y finalmente, utiliza el comando Remove-Item para autoeliminarse de la máquina, como se muestra en la imagen a continuación.

Ejecución de comandos PowerShell

Ejecución de comandos PowerShell

Regla YARA

A partir de nuestro análisis de la muestra, desarrollamos la siguiente regla YARA para detectar la amenaza en tiempo real. La regla toma en cuenta el tipo de archivo, las cadenas pertinentes y las importaciones de funciones de la biblioteca.

Telemetría

Usando la regla anterior, pudimos consultar los portales de inteligencia de amenazas y encontrar una muestra similar originada en Pakistán. Creemos que el atacante utilizó una red VPN o Tor para ocultar su IP. El artefacto que descubrimos parece ser un binario de prueba enviado por el atacante para verificar si sería detectado por los proveedores de seguridad. La muestra recibe un parámetro --path desde la línea de comandos, que le indica qué directorio cifrar. Sin embargo, ni cifra los archivos ni genera una nota de rescate.

Ejecución de la muestra de prueba

Ejecución de la muestra de prueba

Lo que nos llamó la atención fue que esta versión de prueba del ejecutable, al igual que la versión completa, no se eliminaba tras ejecutarse con el parámetro --path. Esto resultaba lógico, ya que el atacante podría elegir ciertos directorios durante el ataque.

Al comparar ambas detecciones, concluimos que la muestra final, con las funciones de cifrado totalmente activadas, a diferencia de la variante de prueba, incorporaba capacidades ampliadas mediante cadenas adicionales. Entre ellas, la extensión adjunta al nombre de los archivos encriptados ( .6C5oy2dVr6) y la información presente en el archivo PDF generado como nota de rescate.

Comparación de coincidencias YARA

Comparación de coincidencias YARA

Al momento de nuestra investigación, 12 proveedores de seguridad, incluyendo Kaspersky, ya habían detectado la amenaza.

El incidente de ransomware

Además de analizar el malware, logramos investigar un incidente en Colombia, país donde se obtuvo la muestra de Ymir. Nuestro análisis forense reveló que se había perdido evidencia crucial debido a los esfuerzos del atacante para cubrir sus huellas. En Kaspersky GERT pudimos identificar que dos días antes de la implementación del ransomware, se detectó una nueva amenaza de RustyStealer en múltiples sistemas, que permitía a los atacantes controlar las máquinas, enviar comandos y recopilar información de la infraestructura afectada. Poco después se detectó actividad maliciosa en un controlador de dominio, que incluía el acceso en nombre de usuarios legítimos, entre ellos uno con altos privilegios. La muestra inicial de RustyStealer era un archivo PE compilado con Rust y desplegado en Windows\Temp bajo el nombre AudioDriver2.0.exe.

Nombre del archivo AudioDriver2.0.exe
Tamaño 3334144 bytes (3.2 MB)
MD5 5ee1befc69d120976a60a97d3254e9eb
SHA-1 e6c4d3e360a705e272ae0b505e58e3d928fb1387

Esta muestra, que Kaspersky denominó Trojan.Win32.Sheller.ey, tiene la capacidad de recopilar información sobre el sistema de archivos. Esta muestra tiene contenido ofuscado para obstruir el análisis e incluye módulos compartidos que indican que el artefacto puede invocar funciones de APIs, como las DLL nativas de Windows.

Esta muestra también se conecta al servidor C2 74.50.84[.]181 en el puerto 443, que Kaspersky detectó como un anfitrión para archivos maliciosos desde agosto de 2024.

Servidor C2

Servidor C2

Los atacantes comprometieron el controlador de dominio y lo utilizaron para continuar infiltrándose en los sistemas de la infraestructura objetivo. Abusaron de las credenciales comprometidas recopiladas por el ladrón para saltar entre sistemas utilizando las capacidades de control remoto de WinRM y PowerShell, y luego ejecutaron un conjunto de dos scripts que se confirmó que eran parte de la amenaza de malware proxy SystemBC.

Nombre del archivo 1.ps1 1.ps1
Tamaño 16239 bytes (15 KiB) 4209 bytes (4 KiB)
MD5 5384d704fadf229d08eab696404cbba6 39df773139f505657d11749804953be5
Ruta %windir%\temp\ HKCU\Software\Microsoft\Windows\CurrentVersion\Run

Ambos scripts utilizan PowerShell para establecer un canal encubierto a la dirección IP 94.158.244[.]69 en el puerto 443. Basándonos en las cadenas de los scripts que pudimos obtener, implementamos reglas de Yara para identificar otras muestras y servidores C2 configurados con la misma codificación y detectados fuera de condiciones de laboratorio.

SHA256 Visto por primera vez Reportado por primera vez desde Servidor C2 Veredicto
8287d54c83db03b8adcdf1409f5d1c9abb1693ac
8d000b5ae75b3a296cb3061c
2024-09-16 03:24:06 UTC Australia 94.158.244[.]69
51ffc0b7358b7611492ef458fdf9b97f121e49e70f
86a6b53b93ed923b707a03
2024-08-18 18:59:01 UTC Ucrania 85.239.61[.]60 UDS:Trojan.PowerShell.
Dnoper.posh
b087e1309f3eab6302d7503079af1ad6af06d70a9
32f7a6ae1421b942048e28a
2024-08-17 02:43:55 UTC Ucrania 85.239.61[.]60 Trojan.MSIL.Dnoper.sb

Uno de estos scripts fue detectado en múltiples sistemas, recopilado como un bloque de script para PowerShell que incluía un enfoque diferente y un sistema C2 diferente (5.255.117[.]134 en el puerto 80). Probablemente se lo utilizó para exfiltrar información de la infraestructura de acuerdo con las siguientes funciones explicitas y sus instrucciones.

  • GetServerByFilename,
  • SendFile,
  • SearchRoot.
Función GetServerByFilename

Función GetServerByFilename

El script establece comunicación con el servidor C2 y envía información, incluyendo una clave específica que permite al atacante identificar a la empresa afectada.

La URI incluye una clave única para cada víctima

La URI incluye una clave única para cada víctima

Información que se enviará al servidor C2

Información que se enviará al servidor C2

La función SearchRoot contiene un bucle que busca todos los archivos que están incluidos en la carpeta solicitada y aplica un filtro específico: el malware sólo sube archivos con un tamaño mayor a 40 KB que fueron creados después de una fecha especificada.

Función de búsqueda

Función de búsqueda

Procedimiento de búsqueda de archivos

Procedimiento de búsqueda de archivos

El script está codificado en Base64 y se lo pasa al siguiente comando para su ejecución.

De acuerdo con nuestro análisis GERT, en el momento de la investigación, había un servicio configurado en esta dirección IP (5.255.117[.]134) para subir los archivos recopilados por los scripts de SystemBC.

Servicio web activo

Servicio web activo

Al mismo tiempo, se alertó sobre múltiples creaciones y ejecuciones de los conocidos programas Advanced IP Scanner y Process Hacker en varios sistemas.

  • advanced_ip_scanner.exe
  • processhacker-2.39-configuracion.exe

Finalmente, dos días después de la intrusión inicial de RustyStealer, los atacantes desplegaron el ransomware Ymir ejecutando conexiones remotas y subiendo la carga útil. Se detectaron algunos rastros de la ejecución, en particular aquellos asociados con el script de autodestrucción de PowerShell. Además, una parte de la nota de rescate estaba configurada en el campo de la clave del registro legalnoticecaption, ubicado en HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System, que invita al usuario a buscar detalles adicionales en la nota de rescate, llamada “INCIDENT_REPORT.pdf”:

Parte de la nota de rescate del registro

Parte de la nota de rescate del registro

Conclusión

Existe un vínculo evidente entre los botnets de malware que actúan como intermediarios de acceso y la ejecución de ransomware. El desarrollo de Ymir representa una amenaza para todo tipo de empresas y confirma la existencia de grupos emergentes que pueden impactar a los negocios y organizaciones con un malware configurable, potente y bien desarrollado. Hemos visto que los intermediarios de acceso inicial invadían una organización y aseguraban la persistencia del malware. Poco después, Ymir se desplegaba en el sistema objetivo. Esta nueva familia de ransomware estaba configurada en un esquema protegido, que hace imposible descifrar los archivos del sistema objetivo. El grupo detrás de esta amenaza aún no ha presentado un sitio dedicado a filtraciones ni ninguna información adicional, pero continuaremos monitoreando sus actividades. Se activaron alertas dos días antes del incidente de ransomware, y la falta de acción ante las advertencias críticas del sistema permitió a los atacantes lanzar el ransomware. Esto subraya la importancia de contar con estrategias de respuesta más robustas, que vayan más allá de las plataformas de protección en los puntos finales (EPP).

Los productos de Kaspersky detectan esta nueva amenaza como Trojan-Ransom.Win64.Ymir.gen.

Tácticas, técnicas y procedimientos

En la siguiente tabla se detallan los TTPs de Ymir identificados a partir de nuestro análisis de malware.

Táctica Técnica Id.
Discovery File and Directory Discovery T1083
Discovery System Information Discovery T1082
Execution Command and Scripting Interpreter: PowerShell T1059.001
Impact Data Encrypted for Impact T1486
Defense evasion Virtualization/Sandbox Evasion: Time Based Evasion T1497.003
Defense evasion Indicator Removal: File Deletion T1070.004

TTP de RustyStealer:

Táctica Técnica Id.
Discovery File and Directory Discovery T1083
Discovery Process Discovery T1057
Execution Shared Modules T1129
Defense evasion Obfuscated Files or Information T1027

Indicadores de compromiso

File Hashes
3648359ebae8ce7cacae1e631103659f5a8c630e
fe6de75d6042de714c28c0a3c0816b37e0fa4bb3
f954d1b1d13a5e4f62f108c9965707a2aa2a3c89 (INCIDENT_REPORT.pdf)
5ee1befc69d120976a60a97d3254e9eb
5384d704fadf229d08eab696404cbba6
39df773139f505657d11749804953be5
8287d54c83db03b8adcdf1409f5d1c9abb1693ac8d000b5ae75b3a296cb3061c
51ffc0b7358b7611492ef458fdf9b97f121e49e70f86a6b53b93ed923b707a03
b087e1309f3eab6302d7503079af1ad6af06d70a932f7a6ae1421b942048e28a

IPs
74.50.84[.]181:443
94.158.244[.]69:443
5.255.117[.]134:80
85.239.61[.]60

Ymir: nuevo ransomware furtivo en libertad

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Informes

BlindEagle vuela alto en LATAM

Kaspersky proporciona información sobre la actividad y los TTPs del APT BlindEagle. Grupo que apunta a organizaciones e individuos en Colombia, Ecuador, Chile, Panamá y otros países de América Latina.

MosaicRegressor: acechando en las sombras de UEFI

Encontramos una imagen de firmware de la UEFI infectada con un implante malicioso, es el objeto de esta investigación. Hasta donde sabemos, este es el segundo caso conocido en que se ha detectado un firmware malicioso de la UEFI usado por un actor de amenazas.

Suscríbete a nuestros correos electrónicos semanales

Las investigaciones más recientes en tu bandeja de entrada