DetenerRansomware: Análisis de la Amenaza Gunra Ransomware
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Gunra es una operación de ransomware como servicio (RaaS) que sigue un modelo de doble extorsión combinando el cifrado de datos con la exfiltración. Los actores de la amenaza apuntan a infraestructuras críticas, entidades gubernamentales y una amplia gama de organizaciones comerciales en todo el mundo. El ransomware está basado en el código fuente filtrado de Conti y ha evolucionado para soportar tanto entornos Windows como Linux.
Investigación
El FBI y socios internacionales observaron a los actores de Gunra explotando vulnerabilidades expuestas a Internet y abusando de credenciales robadas para obtener acceso inicial. La investigación identificó el uso de bibliotecas Impacket para el movimiento lateral y múltiples herramientas de código abierto para la exfiltración de datos. El grupo también depende de un portal de negociación basado en Tor y qTox para comunicarse con las víctimas.
Mitigación
Las organizaciones deben priorizar el parcheo de vulnerabilidades conocidas explotadas en sistemas expuestos a Internet, especialmente puertas de enlace VPN e infraestructura RDP. Mantener copias de seguridad inmutables fuera de línea y aplicar una segmentación de red estricta son críticos para limitar el movimiento lateral. La autenticación multifactor (MFA) también debe estar habilitada en todos los servicios de acceso remoto.
Respuesta
Si se detecta actividad de Gunra, los hosts comprometidos deben ser aislados de inmediato mientras se preservan los artefactos forenses relevantes, incluidos archivos cifrados y registros del sistema. Debe iniciarse la caza de amenazas para determinar el alcance de la intrusión y revisar la actividad de las cuentas privilegiadas. Las organizaciones deben seguir luego procedimientos formales de desalojo para contener y eliminar completamente al adversario del entorno.
Flujo de Ataque
Detecciones
Posibles patrones de línea de comandos de Impacket (vía cmdline)
Proof of Value
Crear o Eliminar Copia Sombra vía Powershell, CMD o WMI (vía cmdline)
Proof of Value
Software de Acceso Remoto / Gestión Alternativo (vía sistema)
Proof of Value
Posible Comportamiento de Ejecución de Impacket (vía auditoría)
Proof of Value
Software de Acceso Remoto / Gestión Alternativo (vía auditoría)
Proof of Value
IOCs (HashSha256) para detectar: #StopRansomware: Gunra Ransomware
Proof of Value
IOCs (SourceIP) para detectar: #StopRansomware: Gunra Ransomware
Proof of Value
IOCs (DestinationIP) para detectar: #StopRansomware: Gunra Ransomware
Proof of Value
Detección de Manipulación de Cuentas y Escalamiento de Privilegios de Gunra Ransomware [Microsoft Windows Security Event Log]
Proof of Value
Detección de Vulnerabilidades Explotadas en FortiOS y FortiProxy [Firewall]
Proof of Value
Detección de Movimiento Lateral y Volcado de Credenciales de Gunra Ransomware [Windows Process Creation]
Proof of Value
Detección de APIs de Recorrido del Sistema de Archivos de Gunra Ransomware [Linux Process Creation]
Proof of Value
Simulación de Ejecución
Requisito previo: El Chequeo de Telemetría y Línea de Base Pre-vuelo debe haber sido aprobado.
Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTP identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.
-
Narrativa del Ataque & Comandos: El objetivo del adversario es prepararse para un despliegue de ransomware. Antes de que pueda comenzar el cifrado, el malware debe recorrer el sistema de archivos para construir una lista de archivos de alto valor (documentos, bases de datos, etc.). El ransomware Gunra utiliza específicamente las
APIs FindFirstFileWandFindNextFileWpara realizar esta enumeración a gran escala. Simularemos esto compilando y ejecutando un pequeño fragmento de C# que llama explícitamente a estas APIs mediante una importación de DLL, haciendo que Sysmon registre el uso de la API en elcampo ImageLoaded. -
Script de Prueba de Regresión:
# Guarde esto como TriggerDetection.cs using System; using System.Runtime.InteropServices; using System.IO; class Program { static void Main() { // Esto simula el comportamiento de recorrido del ransomware Gunra // al forzar la carga de estas API específicas. DirectoryInfo di = new DirectoryInfo(@"C:"); foreach (var file in di.GetFiles()) { // Acceder a propiedades de archivos activa las API de recorrido string name = file.Name; } Console.WriteLine("Recorrido completo."); } } # Compile y ejecute usando csc.exe (incluido en el .NET Framework) Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindFirstFileW(string lpFileName, out WIN32_FIND_DATA lpFindFileData); [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindNextFileW(IntPtr hFindFile, out WIN32_FIND_DATA lpFindFileData); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct WIN32_FIND_DATA { public uint dwFileAttributes; public uint ftCreationTime; public uint ftLastAccessTime; public uint ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; public uint dwFileIndexHigh; public uint dwFileIndexLow; public uint dwStreamSize; public string cFileName; public string cAlternateDataStream; } } "@ # Ejecute un pequeño script de C# que llama explícitamente a las funciones para asegurar la presencia de cadena en los registros $code = @" using System; using System.Runtime.InteropServices; class Program { [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindFirstFileW(string lpFileName, out FIND_DATA lpFindFileData); [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindNextFileW(IntPtr hFindFile, out FIND_DATA lpFindFileData); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct FIND_DATA { public uint dwFileAttributes; public uint ftCreationTime; public uint ftLastAccessTime; public uint ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; public uint dwFileIndexHigh; public uint dwFileIndexLow; public uint dwStreamSize; public string cFileName; public string cAlternateDataStream; } static void Main() { FIND_DATA data; IntPtr handle = IntPtr.Zero; // Esto activa las cadenas específicas en el campo ImageLoaded de Sysmon if (FindFirstFileW("C:*", out data)) { Console.WriteLine("Archivo encontrado vía FindFirstFileW"); FindNextFileW(handle, out data); } } } "@ $code | Out-File -FilePath "$env:TEMPTriggerDetection.cs" & csc.exe "$env:TEMPTriggerDetection.cs" & "$env:TEMPTriggerDetection.exe" -
Comandos de Limpieza:
Remove-Item "$env:TEMPTriggerDetection.cs" -ErrorAction SilentlyContinue Remove-Item "$env:TEMPTriggerDetection.exe" -ErrorAction SilentlyContinue