Destacados

 

Anubis Ransomware: Anatomía en profundidad de un RaaS con funcionalidad Wiper y su linaje con BlackPanther



1. Contexto y motivación

Durante estos últimos años he tenido la oportunidad de coleccionar diversas muestras de ransomware, ya sea en repositorios públicos, honeyptos y algunas de fuentes por recolección de inteligencia. Los análisis de los mismos no los realizaba para generar reportes sino por un gusto personal y de investigación. Ninguna de las muestras las había sometido a un análisis profunda por mi parte, pero es factible que ya hayan sido analizadas por otros investigadores.

Es común ver que la industria documenta preferentemente aquello que se encuentra activo en el momento, y rara vez retorna sobre situaciones pasadas, y es justamente lo que haré en esta publicación. El análisis que realizaré en las siguiente líneas se alineará con los estándares internacionales de gestión de vulnerabilidades y exposición continua (CETM), integrando inteligencia de amenazas para simular tácticas adversarias y validar defensas.

Nota: Al tratarse de la primera entrega de esta serie de publicaciones, se incluyen referencias a teoría elemental en las secciones donde resulta necesario para contextualizar el uso de las herramientas y los conceptos fundamentales de análisis de malware. Esto facilitará la comprensión por parte de analistas en formación sin sacrificar el rigor técnico del informe.

2. Metodología General

El análisis se articulará en dos bloques metodológicos diferenciados. 

  • Análisis estático : Examina la muestra sin ejecutarlo. Permite establecer la identidad, la estructura, las capacidades declaradas y la configuración embebida del binario. Presenta la ventaja de no requerir contención y la limitación de no observar el comportamiento real en tiempo de ejecución.
  • Análisis dinámico: Ejecuta la muestra en un entorno instrumento y aislado. Aporta la secuencia efectiva de operaciones, los artefactos generados y el tráfico de red, a costa de exigir una infraestructura de laboratorio con garantías de aislamiento.

Esta primera entrega cubre exclusivamente el bloque estático inicial. La metodología aplicada es secuencial: los resultados obtenidos en cada fase orientan y justifican las siguientes, garantizando un enfoque metódico y reproducible. Cada módulo incorpora el uso de una herramienta específica, combinando teoría y práctica para proporcionar una visión completa del artefacto.




3. Metodología General

La muestra objeto de este análisis es un ejecutable de Windows de 32 bits, identificado inicialmente con el nombre de zigv.exe. El archivo tiene un tamaño de 301.568 bytes (aproximadamente 294.5 KB) y carece de firma digital. La denominación zigv.exe corresponde al nombre con el que fue recibido la muestra; no se dispone de información adicional sobre su origen o método de distribución.

El primero paso en cualquier análisis de malware consiste en establecer identificadores inmutables que permitan la verificación independiente. Cuando dos analistas obtienen resultados divergenetes sobre lo que se presume la misma muestra, la primera hipótesis a descartar es que estén examinando muestras distintas. Los identificadores criptográficos resuelven esa ambiguedad.

Para extraer los metadatos estructurales del ejecutable se emplea pefile, una biblioteca de Python que permite parsear y analizar la cabecera PE (Portable Executable) de los binarios de Windows. Pefile es ampliamente utilizada en análisis forense por su capacidad para extraer información como el subsistema, la arquitectura y las tabla de importaciones, todo ello sin necesidad de ejecutar el binario.

El siguiente script se ejecutó sobre la muestra:

#!/usr/bin/env python3
"""
Analizador de archivos PE (Portable Executable).
Extrae hashes, metadatos de cabecera y propiedades del binario.
"""
import pefile
import argparse
import hashlib
import os
import sys
from typing import Dict, Optional

# ── Constantes de lookup ──────────────────────────────────────────────────────
ARCHITECTURES = {
    0x014C: "Intel 80386 (x86)",
    0x8664: "AMD64 (x86-64)",
    0x01C0: "ARM",
    0xAA64: "ARM64",
    0x0EBC: "EFI Byte Code",
}
PE_TYPES = {
    0x10B: "PE32",
    0x20B: "PE32+",
}
SUBSYSTEMS = {
    0:  "Desconocido",
    1:  "Native",
    2:  "Windows GUI",
    3:  "Windows Console",
    5:  "OS/2 Console",
    7:  "POSIX Console",
    8:  "Native Windows",
    9:  "Windows CE GUI",
    10: "EFI Application",
    11: "EFI Boot Service Driver",
    12: "EFI Runtime Driver",
    13: "EFI ROM",
    14: "XBOX",
    16: "Windows Boot Application",
}
HASH_ALGORITHMS = {
    "MD5":    hashlib.md5,
    "SHA-1":  hashlib.sha1,
    "SHA-256": hashlib.sha256,
}
CHUNK_SIZE = 8192  

# ── Principal ─────────────────────────────────────────────────────

def compute_hashes(filepath: str) -> Dict[str, str]:
    """
    Calcula hashes criptográficos del archivo leyendo por bloques.
"""
hashers = {name: algo() for name, algo in HASH_ALGORITHMS.items()} with open(filepath, "rb") as fh: while chunk := fh.read(CHUNK_SIZE): for hasher in hashers.values(): hasher.update(chunk) return {name: h.hexdigest() for name, h in hashers.items()} def get_architecture(machine: int) -> str: """Devuelve el nombre legible de la arquitectura.""" return ARCHITECTURES.get(machine, f"Desconocida (0x{machine:04X})") def get_pe_type(magic: int) -> str: """Devuelve el tipo de PE según el campo Magic.""" return PE_TYPES.get(magic, f"Desconocido (0x{magic:03X})") def get_subsystem(subsystem_id: int) -> str: """Devuelve el nombre del subsistema Windows.""" return SUBSYSTEMS.get(subsystem_id, f"Desconocido ({subsystem_id})") def analyze_pe(filepath: str) -> Optional[Dict]: """ Analiza un archivo PE y devuelve un diccionario con los resultados. Retorna None si el archivo no es un PE válido. """ if not os.path.isfile(filepath): print(f"Error: no existe el archivo '{filepath}'", file=sys.stderr) return None try: pe = pefile.PE(filepath) except pefile.PEFormatError as exc: print(f"Error: '{filepath}' no es un PE válido — {exc}", file=sys.stderr) return None try: file_size = os.path.getsize(filepath) hashes = compute_hashes(filepath) machine = pe.FILE_HEADER.Machine magic = pe.OPTIONAL_HEADER.Magic subsystem_id = pe.OPTIONAL_HEADER.Subsystem architecture = get_architecture(machine) pe_type = get_pe_type(magic) subsystem = get_subsystem(subsystem_id) imphash = pe.get_imphash() if hasattr(pe, "get_imphash") else "N/A" has_signature = hasattr(pe, "DIRECTORY_ENTRY_SECURITY") return { "sample": os.path.basename(filepath), "size_bytes": file_size, "size_kb": file_size / 1024, "hashes": hashes, "imphash": imphash, "format": f"{pe_type} ejecutable, {architecture}", "subsystem": subsystem, "signature": "Presente" if has_signature else "Ausente", } finally: pe.close() def print_report(data: Dict) -> None: """Imprime el informe formateado en columnas alineadas.""" print(f"{'Propiedad':<20} {'Valor'}") print("-" * 70) print(f"{'Nombre de la muestra':<20} {data['sample']}") print(f"{'Tamaño':<20} {data['size_bytes']:,} bytes ({data['size_kb']:.1f} KB)") for algo, digest in data["hashes"].items(): print(f"{algo:<20} {digest}") print(f"{'Imphash':<20} {data['imphash']}") print(f"{'Formato':<20} {data['format']}") print(f"{'Subsistema':<20} {data['subsystem']}") print(f"{'Firma digital':<20} {data['signature']}") # ── Punto de entrada ────────────────────────────────────────────────────────── def main() -> int: parser = argparse.ArgumentParser( description="Analizador de metadatos de archivos PE.", epilog="Ejemplo: python pe_analyzer.py malware.exe", ) parser.add_argument( "file", nargs="?", default="zigv.exe", help="Ruta al archivo PE a analizar (default: zigv.exe)", ) args = parser.parse_args() result = analyze_pe(args.file) if result is None: return 1 print_report(result) return 0 if __name__ == "__main__": sys.exit(main())
La información que se ha obtenido al ejecutar el script es el siguiente:



El script de pefile proporciona información estructural fundamental, pero también existen herramientas más completas que ofrecen una visión mas amplia de la muestra. Por ejemplo, Detect It Easy (DIE) no solo muestra hashes, sino que también calcula la entropía de las secciones, identifica el compilador y enlazador utilizado, detecta firmas de empaquetadores, y permite visualizar las secciones de PE, las importaciones y las cadenas de texto de forma gráfica e integrada.





La arquitectura de 32 bits, si bien técnicamente obsoleta para estaciones de trabajo modernas, maximiza la compatibilidad con sistemas legacy (Windows 7 y Server 2008) y reduce la superficie de análisis en sandboxes de 64 bits, lo que podría tener una intención táctica deliberada. Desde la perspectiva de CTEM (Continuous Threat Exposure Management), este hallazgo debe traducirse en una priorización de vulnerabilidades en sistemas legacy, que suelen carecer de parches de seguridad actualizados.

El subsistema de consola es particularmente revelador. Los ejecutables de Windows declaran en su cabecera si pertenecen al subsistema GUI (interfaz gráfica) o Consola (Terminal). Un ransomware destinado a distribución masiva no requiere consola; su presencia es característica del ransomware operado manualmente, concebido para ser invocado desde línea de comandos en la fase final de una intrusión ya consolidada.

Mapeo MITRE ATT&CK:
Táctica Técnica ID Descripción
Execution Command and Scripting Interpreter T1059.003 Uso de Windows Command Shell (capacidad observada)


Es importante matizar que esta técnica se mapea como una capacidad observada, no como un vector de acceso confirmado. El subsistema de consola indica que el binario está diseñado para ser invocado desde línea de comandos, pero no proporciona evidencia sobre el método de acceso inicial del atacante.

4. Correlación con Inteligencia Externa


Con los identificados establecidos, el siguiente paso consiste en determinar el grado de conocimiento previo existente sobre la muestra. Una muestra documentada aporta poco valor marginal; una muestra sin cobertura justifica una inversión mayor.

Para ellos empleamos VirusTotal, el cual agrega detecciones de más de  70 motores de antivirus  y proporciona inteligencia contextual sobre muestras maliciosas. Permite consultar un hash sin necesidad de cargar la muestra, extremo relevante cuando la muestra procede de un incidente sujeto a confidencialidad.

La consulta se realizó mediante el SHA-256 obtenido en el módulo anterior:
Hash (SHA-256) Tipo Detecciones Estado Enlace
2bae4cb7afe6ac172e8f5f013e209fc7aa136c7d07f48e92ce49ad9f1fdf83b5 EXE 52 / 69 Malicious Ver análisis

La etiqueta agregada asignada fue:
Info Etiqueta
Popular threat label ransomware.zusy/cylanceloader
Threat categories ransomware, trojan, downloader

Es crucial matizar que la etiqueta zusy es una agregación heurística automática de la plataforma, no una atribución confirmada. Zusy es un término genérico de detección heurística a menudo asociado a troyanos bancarios o loaders, y su aplicación aqui puede indudir a confusión. Esta imprecisión subraya la necesidad del análisis manual detallado que desarrollamos en este informe.

La selección representativa de detecciones (ya deduplicadas por tecnologías subyacentes) fue la siguiente:

Vendor Detección Nivel de especificidad
ESET-NOD32 Win32/Filecoder.BlackPanther.A Específica (Familia)
DrWeb Trojan.Wiper.3 Específica (Funcionalidad)
BitDefender Gen:Variant.Zusy.582289 Genérica (Heurística)
Avast/AVG Win32:MalwareX-gen [Trj] Genérica (Machine Learning)
CrowdStrike Win/malicious_confidence_100% Sin atribución

Se depuró el conjunto de detecciones: cinco de los seis primeros resultados consignan un identificador idéntico ( 582289 ), ya que ALYac, Emsisoft, eScan, GData y Arcabit licencian el motor de Bitdefender. El recuento agregado de detecciones que presenta VirusTotal cuantifica, por tanto, cuántos productos comerciales bloquean la muestra, no cuántos análisis independientes lo respaldan.

Dos elementos destacan sobre el resto. En primer lugar, una discrepancia funcional: DrWeb clasifica la muestra como Trojan.Wiper.3 mientras que el resto lo considera ransomware. Un cifrador realiza una transformación reversible condicionada a la posesión de la clave; un wiper ejecuta destrucción irreversible. La implicación operativa —viabilidad de recuperación— difiere por completo. Se consigna como línea de verificación prioritaria para las fases posteriores.

En segundo lugar, una atribución específica: ESET proporciona un nombre de familia: BlackPanther.A, lo que constituye la única hipótesis de atribución disponible. Cuatro motores emplean adicionalmente la denominación CylanceLoader, sin que se haya identificado correspondencia con el contenido de la muestra.

5. Evaluación de empaquetado y ofuscación


Determinar si el código esta accesible o requiere alguna clase de extracción condiciona la metodología. Un porcentaje elevado del malware incorpora empaquetado.

Para esta evaluación se emplea Detect It Easy (DIE), que analiza el ejecutable y lo contrasta con firmas de compiladores, enlazadores y empaquetadores. Complementariamente se aplica un análisis de entropía con la herramienta ent. La entropía de Shannon cuantifica la aleatoriedad (0 - 8 bits/byte): código compilado entre 5,5 y 6,5; datos comprimidos por encima de 7.
Propiedad Valor
Compiler Microsoft Visual C/C++ (19.00.24245) [LTCG/C++]
Linker Microsoft Linker (14.02.24245)
Tool Visual Studio (2015)

Análisis de entropía:



La indentificación inequívoca del toolchain indica que el código no esta empaquetado. La entropía de 6.44 está dentro del rango esperado para código compilado. El Rich header se conserva integro, la tabla de importaciones es completa y las cadenas son legibles. Finalmente se puede concluir que el análisis estático puede aplicarse directamente sobre la muestra original, sin volcado de memoria.

6. Extracción de cadenas y atribución de familia


La extracción de cadenas embebidas permite identificar la familia y localizar elementos de configuración: extensión de cifrado, nota de rescate y mutex.

La utilidad strings resulta insuficiente frente a stack strings u ofuscación. e empela FLOSS (FireEye Labs Obfuscated String Solver), que extrae cadenas convencionales, recupera stack strings y emula rutinas de descifrado para revelar cadenas ofuscadas sin ejecutar la muestra.

La extracción devolvío elementos identificativos localizados:
Categoría String / Comando Acción
Defense Evasion WinDefend Referencia al servicio Windows Defender para su desactivación
Defense Evasion /c for /F "tokens=*" %i in ('wevtutil el') do wevtutil cl "%i" Borra todos los logs de eventos del sistema
Impact /c vssadmin delete shadows /all /quiet Elimina todos los Shadow Copies (VSS) silenciosamente
Impact /c wbadmin delete catalog -quiet Borra el catálogo de backups de Windows
Defense Evasion /c powershell -Command "Set-MpPreference -DisableRealtimeMonitoring $true" Deshabilita la protección en tiempo real de Windows Defender
Defense Evasion /c powershell -Command "Stop-Service WinDefend -Force" Detiene el servicio Windows Defender forzosamente
Defense Evasion /c powershell -Command "Set-Service WinDefend -StartupType Disabled" Desactiva el inicio automático del servicio Windows Defender
Defense Evasion /c reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender" /v DisableAntiSpyware /t REG_DWORD /d 1 /f Modifica el registro para deshabilitar Windows Defender permanentemente
Discovery ROOT\CIMV2 Namespace WMI para consultas del sistema
Discovery SELECT * FROM Win32_ShadowCopy Enumera las Shadow Copies disponibles antes de eliminarlas
Discovery __ProviderArchitecture Propiedad WMI para identificar la arquitectura del proveedor
Discovery / Impact Win32_ShadowCopy.ID='%s' Filtra una Shadow Copy específica por su ID para eliminarla
Payload \Secrs.exe Nombre del ejecutable secundario desplegado por el ransomware
Impact /c "%s" /SHUTDOWN Apaga el sistema de la víctima
Impact /c "%s" /RESTART Reinicia el sistema de la víctima
Execution /c "%s" Ejecuta un comando genérico pasado como parámetro
Defense Evasion /c ping 127.0.0.1 -n 5 > nul & del "%s" Espera 5 segundos y autoelimina el ejecutable (autoborrado)
Resource Arial Fuente tipográfica usada en la nota de rescate o interfaz
Identification Anubi Ransomware Nombre identificador del ransomware
Impact All your files are stolen and encrypted Mensaje de la nota de rescate (extorsión)
Impact Find Anubi_Help.txt file and follow instructions Instrucciones de la nota de rescate para la víctima
Resource \1b.mp Archivo de recurso embebido (posible imagen/video de la nota)
Impact Control Panel\Desktop Ruta del registro para modificar el fondo de pantalla
Impact WallpaperStyle Valor del registro para el estilo del wallpaper (cambio visual)
Impact TileWallpaper Valor del registro para el modo de mosaico del wallpaper
Persistence SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon Ruta del registro Winlogon para persistencia en el arranque

.Anubi es la extensión de cifrado. Anubi_Help. txt identifica la nota de rescate. La familia queda establecida como Anubi. Esta afirmación no contradice de todo la información proporcionado por soluciones que mencionan que pertener a la familia BlackPhanter, esto puede ser posible ya que el código usado para el desarrollo de Anubi haya sido utilizado originalmente para BlackPhanter.

Mapeo MITRE ATT&CK:

Táctica Técnica ID Descripción
Impact Data Encrypted for Impact T1486 Cifrado de archivos
Impact Inhibit System Recovery T1490 Eliminación de VSS
Defense Evasion Virtualization/Sandbox Evasion T1497.001 Creación de mutex

7. Reconcialición de la discrepancia en la atribución


La divergencia entre ESET (BlackPanther) y la evidencia interna (Anubi) exige alguna clase de discrepancia, la cual se resuelve gracias a la revisión de fuentes públicas: Anubi comparte código base con Louis, Innok y BlackPanther, diferenciándose por la denominación comercial.
Familia Nota de rescate
BlackPanther Bpant_Help.txt
Anubi Anubi_Help.txt

Es la misma plantilla con distinto prefijo. Una firma antivirus reconoce código, no denominaciones comerciales. La firma de ESET se elaboró a partir del primer miembro del linaje; el rebautizado no alteró el motor de cifrado.
Un identificador de detección responde a qué se asemeja una muestra, no a qué es. La etiqueta del motor es un indicio, no una conclusión.

Advertencia: Existe una familia Anubi documentada en 2017 (extensión [anubi@cock.li].anubi) que no guarda relación con este análisis.

8. Mapeo de capacidades de alto nivel con CAPA

Con las cadenas extraídas y la familia identificada, el siguiente paso es obtener un mapa de capacidades del binario para orientar la ingeniería inversa. Para ello se emplea Capa v9.4.0, herramienta de Mandiant que escanea el binario en busca de patrones de código coincidentes con técnicas MITRE ATT&CK, traduciendo el código a un lenguaje de capacidades.

Dado que FLOSS reveló vssadmin y DeviceIoControl, se hipotetiza que CAPA identificará T1490 (Inhibit System Recovery) y T1485 (Data Destruction).

La ejecuación sobre la muestra arrojó el siguiente resumen:
Propiedad Valor
md5 801a35a51f44e5cf5dceaa92f713a723
sha1 0ab6ccb470d9686f2c1b1c7d7b2d8d247a910221
sha256 2bae4cb7afe6ac172e8f5f013e209fc7aa136c7d07f48e92ce49ad9f1fdf83b5
path zigv.exe
timestamp 2026-08-28 21:09:41.061891
capa version 9.4.0
os windows
format pe
arch i386
analysis static
extractor VivisectFeatureExtractor
base address 0x400000
rules capa-rules
function count 656
library function count 692
total feature count 28773

Capacidades de anti-análisis y evación:

  • Detección de depuración: Verifica el flag PEB.BeingDebugged (0x405DB0) y busca puntos de interrupción (0x409350). También usa GetTickCount para detectar retardos (0x405330, 0x4057A0, 0x4085A0). Estas técnicas permiten al malware detectar entornos de análisis y alterar su comportamiento.
  • Borrado de logs de eventos (0x405330, 0x4057A0): Limpia los registros de eventos de Windowws para eliminar rastros de su actividad, dificultando la investigación forense.
  • Autoeliminación (0x40EF60): La muestra puede eliminarse a sí misma una vez ejecutada, lo que dificulta su recuperación posterior.
  • Ocultación de ventana: Incluye la capacidad de ocultar la ventana gráfica (0x40EF60), lo que dificulta la observación del usuario.

Criptografía y ofuscación:

  • Cifrado Curve 25519 (0x404E60): Implementa cifrado de curva elíptica, utilizado para el intercambio de claves Diffie-Hellman. La descripción de Capa indica que la muestra aplica las restricciones de clave secreta de Curve25519 (clear bits, set bits), confirmando el uso correcto del algoritmo. Esto sugiere que la muestra genera un par de claves efímeras o emplea una clave pública embebida.
  • Hash SHA256 (0x408E20) y Murmur (0x40F160): Estas funciones se utilizan para calcular hash de datos, posiblemente para identificar archivos únicos, generar identificadores o verificar integridad.
  • Codificación XOR (7 matches): Empleada para ofuscar cadenas o datos en tránsito, lo que explica porqué FLOSS fue necesario para recuperar algunas cadenas.
  • Adicional : En esta versión de Capa no se detectó el algoritmo RC4, lo que sugiere que el cifrado simétrico de archivos podría implementarse mediante otro mecanismo no identificado por las reglas, o que Curve25519 se utiliza tanto para el intercambnio de claves como para el cifrado simétrico mediante derivación de clave.

Interración con el sistema y persistencia:

  • Línea de comando (3 matchers): Acepta argumentos, confirmando la hipótesis de operación manual. Se detectan en 0x401250, 0x401330 y 0x405280.
  • Persistencia: Modifica la clave Run del Registro (0x406930), programa tareas programadas mediante schtasks (0x405280), y crea servicio de Windows (0x405330), asegurando la ejecución al reinicio del sistema.
  • Desactivación de Windows Defender (0x405330, 0x4057A0): Modifica el registro para deshabilidar las protecciones de Windows Defender, facilitando la ejecución del malware sin ser detectado.
  • Eliminación de VSS (0x4057A0): Confirma la técnica T1490, impidiendo la recuperación mediante copias de sombra.
  • Eliminación de catálogo de backup (0x405844): Borra el catálogo de copias de seguridad de Windows, dificultando aún mas la recuperación del sistema.
  • Administración de procesos y servicios: Crea procesos (8 matches), finaliza procesos (3 matches). detiene servicios (0x405330) y modifica servicios. Esto le permite desactivar herramientas de seguridad y finalizar procesos que bloqueen archivos.
  • Operaciones sobre archivos y discos: Enumera volúmenes (0x4083D0), obtiene información de disco (6 matches), lee archivos (4 matches), escribe archivos (8 matches), mueve archivos y modifica atributos. Esto incluye las operaciones de cifrado.
  • Mutex y sincronización: Crea, verifica y termina procesos en base a mutex (0x40EF60), incluyendo Global\AnubisMutex y Global\FSWiper, para controlar la ejecución concurrente y evitar redundancias.
  • Recursos incrustados: Contiene una sección .tls (Threat Local Storage) y un archivo PE embebido (executable/subfile/pe). Esto sugiere que la muestra puede desempaquetar o inyectar un segundo ejecutable en memoria o disco.
  • Red y sistema: Enumeración de recursos de red (0x409720), acceso a WMI (0x4058F0), captura de pantalla (0x406260), y manipulación de variables de entorno.
  • Sesión de Restart Manager (0x408AD0): Capacidad de cerrar aplicaciones que mantienen archivos bloqueados, facilitando el cifrado de archivos en uso.
  • Limpieza de la papelera (0x40EF60): Vacía la papelera de reciclaje para eliminar posibles recuperaciones.

Mapeo MITRE ATT&CK
Táctica Técnica ID Descripción
Execution Command and Scripting Interpreter T1059.003 Uso de línea de comandos
Execution Native API T1106 Llamadas a funciones nativas
Persistence Registry Run Keys T1547.001 Modificación de clave Run
Persistence Scheduled Task T1053.005 Creación de tarea programada
Persistence Create or Modify System Process T1543.003 Creación de servicio de Windows
Defense Evasion Virtualization/Sandbox Evasion T1497.001 Creación de mutex y detección de depuración
Defense Evasion Obfuscated Files or Info T1027 Uso de XOR y ofuscación
Defense Evasion Indicator Removal on Host T1070 Borrado de logs de eventos y autoeliminación
Defense Evasion Impair Defenses T1562 Desactivación de Windows Defender
Discovery File and Directory Discovery T1083 Enumeración de archivos y volúmenes
Discovery System Information Discovery T1082 Obtención de información del sistema
Discovery Network Share Discovery T1135 Enumeración de recursos de red
Collection Screen Capture T1113 Captura de pantalla
Collection Data from Local System T1005 Lectura de archivos
Impact Data Encrypted for Impact T1486 Cifrado de archivos (Curve25519)
Impact Inhibit System Recovery T1490 Eliminación de VSS y catálogo de backup
Impact Data Destruction T1485 Posible destrucción de MFT (vía DeviceIoControl)

La muestra presenta un conjunto de capacidades extremadamente completo, típico de ransomware moderno de alto impacto: detección de entornos de análisis, cifrado asimétrico (Curve25519), persistencia múltiple (Run key, Scheduled Task, Servicio), eliminación de copias de seguridad (VSS y catálogo de backup), desactivación de Windows Defender, borrado de logs, autoeliminación y manipulación de procesos y archivos. Además, la presencia de un PE embebido y la capacidad de modificar el fono de pantalla (0x40658C) y vaciar la papelera (0x40EF60) refuerzan la naturaleza destructiva y la intención de maximizar el impacto.

9. Avance hace la Parte 2: Ingeniería inversa y análisis dinámico

El siguiente paso es confirmar el componente Wiper mediante examen directo del código desemsamblado con Ghidra, plataforma de ingeniería inversa desarrollada por la NSA. Ghidra permite desensamblar, decompilar y analizar binarios, con un sistema de referencias cruzadas (xrefs) para rastrear el uso de cadenas y funciones.

El enfoque consistirá en examinar la función que maneja el flag -mft,verificando la presencia de CreateFileW con path como \\.\C: seguido de DeviceControl con códigos FSCTL. Esto permitirá dilucidar la secuencia de ejecuación y confirmar la creación del mutex Global\FSWiper.

En la fase dinámica se emplearán:

  • ProcMon para operaciones de fichero y registro
  • RegShot para comparación de estados del registro
  • Wireshark para captura de tráfico
  • FakeNet-NG para simulacion de servicios de red
  • Volatility para volcado de memoria y extracción de claves.

10. Balance del análisis estático


El bloque estático permite establecer las siguientes conclusiones:
Conclusión Evidencia Herramienta MITRE
Familia Anubi .Anubi, Anubi_Help.txt FLOSS -
Linaje BlackPanther Comparativa de notas FLOSS -
Sin empaquetar VS2015, entropía 6.44 DIE, ent -
Despliegue manual Consola, flag -mft pefile, FLOSS T1059.003
Componente Wiper -mft, Global\FSWiper, DeviceIoControl FLOSS, Capa T1485
Cifrado Curve25519 Capa T1486
Sin C2 hardcodeada Sin dominios/IPs FLOSS -
Evasión Mutex, detección de depuración, borrado de logs, autoeliminación Capa T1497.001, T1070
Desactivación de defensas Desactivación de Windows Defender Capa T1562
Persistencia Run key, Scheduled Task, Servicio Capa T1547.001, T1053.005, T1543.003
Impacto Cifrado + destrucción MFT + VSS + catálogo backup Capa T1486, T1485, T1490


El análisis estático no permite establecer la secuencia de ejecución, el formato del fichero cifrado, ni la actividad de red. Estas cuestiones serán abordadas en la Parte 2.

11. Estrategía de defensa, gestión de vulnerabilidades y cuantificación del riesgo

Este módulo integra los hallazgos con marcos de gestión de riesgos: CTEM, DORA, MITRE DEFEND y FAIR.

11.1 CTEM (Continuous Threat Exposure Management)

Fase Aplicación
Scoping Servidores legacy (Windows 7/Server 2008)
Discovery YARA rule basada en Rich Header + Imphash a8b94...
Prioritization Sistemas sin parches, sin EDR
Validation Simulación del ataque (Purple Team)
Mobilization Parcheo, segmentación, backups offline

11.2 DORA (Digital Operational Resilience Act (Continuous Threat Exposure Management)

PilarAplicación
ICT Risk ManagementIdentificar sistemas legacy expuestos
ICT Incident ReportingAlerta de Sysmon por mutex Global\AnubiMutex
Resilience TestingRed Team simulando flag -mft
Third-Party RiskEvaluar proveedores con sistemas legacy
Information SharingPublicar IOCs en MISP

11.3 MITRE DEFEND y Attack Flow

Hallazgo MITRE DEFEND Acción defensiva
Subsistema Consola D3-PR-A Monitoreo de procesos hijos de cmd.exe
Flag -mft D3-PR-C Detección de argumentos -mft
Mutex Global\FSWiper D3-SF-H Detectar creación del mutex (Sysmon Event 12)
DeviceIoControl D3-SF-H EDR con cobertura DeviceIoControl + FSCTL
Curve25519 D3-CR Monitoreo de llamadas criptográficas
Desactivación de Windows Defender D3-PR-A Monitoreo de cambios en claves de seguridad
Borrado de logs D3-LF Envío de logs a SIEM centralizado

11.4 FAIR (Factor Analysis of Information Risk)

Factor Valoración
Loss Event Frequency Moderado – Alto
Threat Agent Capability Alto
Control Strength Bajo
Primary Loss Crítico
Secondary Loss Alto

PRIORIZACIÓN DE ACCIONES: 

Acción Reducción de riesgo Costo
Parcheo de sistemas legacy 40% Medio
EDR con cobertura DeviceIoControl 25% Medio-Alto
Segmentación de red 20% Alto
Backups offline inmutables 35% Medio
Ejercicios de Purple Team 15% Bajo-Medio

Anexo A: Hoja de ruta de la investigación

Módulo Herramienta Estado
Identificación pefile
Inteligencia VirusTotal
Empaquetado DIE, ent
Cadenas FLOSS
Capacidades Capa v9.4.0
Ingeniería inversa Ghidra 📄 Parte 2
Análisis dinámico ProcMon, Wireshark, FakeNet 📄 Parte 2
Criptografía Volatility, hashcat 📄 Parte 2

Anexo B: Mapeo MITRE ATT&CK 

Táctica Técnica ID
Execution Command and Scripting Interpreter T1059.003
Execution Native API T1106
Persistence Registry Run Keys T1547.001
Persistence Scheduled Task T1053.005
Persistence Create or Modify System Process T1543.003
Defense Evasion Virtualization/Sandbox Evasion T1497.001
Defense Evasion Obfuscated Files or Info T1027
Defense Evasion Indicator Removal on Host T1070
Defense Evasion Impair Defenses T1562
Discovery File and Directory Discovery T1083
Discovery System Information Discovery T1082
Discovery Network Share Discovery T1135
Collection Screen Capture T1113
Collection Data from Local System T1005
Impact Data Encrypted for Impact T1486
Impact Inhibit System Recovery T1490
Impact Data Destruction T1485

Anexo C: YARA rule

rule Anubi_2025_Ransomware {
    meta:
        author = "Mihari Intelligence"
        description = "Detección de muestra Anubi 2025"
        hash = "2bae4cb7afe6ac172e8f5f013e209fc7aa136c7d07f48e92ce49ad9f1fdf83b5"

    strings:
        $rich_hash = {28 38 98 de 85 91 81 af 36 26 bf 62 ac 95 11 89}
        $imphash = "a8b9418358bd03d76905b89057b4527d"
        $mutex1 = "Global\\AnubiMutex" ascii
        $mutex2 = "Global\\FSWiper" ascii
        $ext = ".Anubi" ascii
        $help = "Anubi_Help.txt" ascii

    condition:
        uint16(0) == 0x5A4D and ($mutex1 or $mutex2 or $ext or $help)
}
















Comentarios

Entradas populares