11 puntos por GN⁺ 2025-03-16 | 1 comentarios | Compartir por WhatsApp
  • El autor logró recuperar los datos de una empresa infectada con ransomware Akira sin pagar rescate
  • El código fuente usado durante la recuperación está disponible en GitHub
  • El ransomware Akira tiene múltiples variantes y esta variante ha estado activa desde finales de 2023
  • En versiones anteriores (antes de mediados de 2023), había un bug que permitió a Avast desarrollar un descifrador, pero después de que esto se hizo público, los atacantes actualizaron el cifrado
  • El hash de las muestras del ransomware puede consultarse en GitHub

Resumen del método de recuperación de archivos de Akira ransomware (variante Linux/ESXI 2024)

Enfoque de la solución

Análisis inicial

  • El ransomware usa como semilla la hora actual en nanosegundos
  • Como el tiempo de modificación de archivos en Linux tiene resolución de nanosegundos, se descubrió la posibilidad de recuperar la semilla
  • Se intentó un enfoque de fuerza bruta basado en las marcas de tiempo de los archivos modificados

Proceso de cifrado complejo

  • El ransomware usa 4 valores de semilla (tiempo en nanosegundos)
  • La generación de claves repite el hash SHA-256 1500 veces
  • El sistema de archivos VMware VMFS solo guarda el tiempo de modificación con resolución de segundos
  • Debido al cifrado basado en múltiples hilos, es difícil recuperar el momento exacto

Ingeniería inversa

  • El código estaba escrito en C++, lo que dificultó el análisis, pero no estaba ofuscado
  • A través de mensajes de error se confirmó el uso de la librería Nettle
  • El generador aleatorio se basa en el algoritmo Yarrow256 y usa el siguiente código
void generate_random(char *buffer, int size)  
{  
    uint64_t t = get_current_time_nanosecond();  
    char seed[32];  
    snprintf(seed, sizeof(seed), "%lld", t);  
    struct yarrow256_ctx ctx;  
    yarrow256_init(&ctx, 0, NULL);  
    yarrow256_seed(&ctx, strlen(seed), seed);  
    yarrow256_random(&ctx, size, buffer);   
}  
  • Durante la generación de claves se producen 4 llamadas a generate_random()
    • chacha8_key (32 bytes)
    • chacha8_nonce (16 bytes)
    • kcipher2_key (16 bytes) × 2

Revisión de la viabilidad de la fuerza bruta

Estrategia principal

  • Generar dos marcas de tiempo (t3, t4), convertirlas en semillas y luego generar números aleatorios
  • Usar esos números aleatorios como clave e IV de KCipher2, cifrar y comparar el resultado con el archivo cifrado

Análisis de rendimiento

  • Convertir 100 millones de marcas de tiempo toma 3 horas (en CPU)
  • Con GPU, la velocidad de conversión se reduce a menos de 6 minutos
  • En un rango de 1 segundo, hay alrededor de 500 billones de pares posibles
  • Tras optimizar para GPU, una RTX 3090 puede procesar 1.5 mil millones de cifrados por segundo

Tipos de archivos de VMware y estrategia de recuperación

FLAT-VMDK

  • Los primeros 8 bytes de un VMDK pueden recuperarse desde el bootloader
  • Es necesario instalar el mismo sistema operativo verificando la información del SO en el archivo VMX

SESPARSE

  • El patrón del encabezado del archivo se confirmó a partir del código fuente de QEMU
  • El encabezado comienza con 0x00000000cafebabe

Otros archivos

  • En archivos NVRAM, archivos VMX, logs y otros, se pueden identificar marcas de tiempo iniciales

Recuperación de marcas de tiempo

Logs de ESXi

  • Los logs de ESXi registran tiempos de ejecución con precisión de milisegundos
  • Si no hay logs con milisegundos, se puede estimar a partir del tiempo en segundos

Tiempo de modificación del sistema de archivos

  • En ESXi, como la resolución es de segundos, es difícil estimar la hora exacta

Cifrado multihilo

  • El cifrado de archivos se procesa en paralelo según la cantidad de núcleos de CPU
  • El tiempo de modificación del archivo suele estar cerca del momento en que termina el cifrado

Implementación de la herramienta de fuerza bruta

Algoritmo KCipher2

  • Se usa una versión modificada de KCipher2, no la estándar (incluyendo el manejo de endianess)
  • Se aplicó optimización para GPU usando CUDA

Mejoras de rendimiento

  • Se mejoró el rendimiento usando memoria compartida
  • Se aumentó la velocidad eliminando copias de memoria
  • Se implementó procesamiento paralelo de archivos → aproximadamente 1.5 mil millones de operaciones por segundo

RTX 3090 vs RTX 4090

  • La RTX 4090 es aproximadamente 2.3 veces más rápida7 días
  • RTX 3090 → aproximadamente 16 días

Pasos de recuperación

1. Extraer marcas de tiempo

  • Verificar la hora de modificación con el comando stat
  • Extraer la hora de inicio de ejecución desde los logs de ESXi

2. Extraer datos cifrados

  • Extraer bloques cifrados de VMDK, SESPARSE, etc.

3. Medir la velocidad del servidor

  • Usar la herramienta timing-patch de GitHub

4. Dividir el trabajo

  • Crear y dividir el archivo de configuración
  • Configurarlo para ejecución paralela en GPU

5. Alquilar GPU y ejecutar

  • Runpod → costo aproximado de 116 dólares por 7 días
  • Vast.ai → más barato, pero la velocidad puede variar según el estado del equipo

6. Ejecutar fuerza bruta de KCipher2

./akira-bruteforce run2 config.json  

7. Ejecutar fuerza bruta de Chacha8

  • Necesario en el caso de archivos grandes

8. Ejecutar el descifrado

./decrypt filename.vmdk <t1> <t2> <t3> <t4>  

Resultados de rendimiento

  • RTX 3090 → 1.5 mil millones de operaciones por segundo
  • RTX 4090 → 3.5 mil millones de operaciones por segundo
  • Usando 16 RTX 4090 → recuperación posible en menos de 10 horas

Posibilidades y límites de recuperación

  • La probabilidad de éxito al recuperar datos del ransomware es de menos de 0.1%
  • Si se cumplen ciertas condiciones, existe posibilidad de recuperación
  • El método de cifrado puede cambiar según la variante del ransomware

Conclusión

  • Recuperar datos de ransomware es muy difícil, pero en ciertas condiciones puede ser posible
  • La fuerza bruta basada en GPU es la herramienta clave
  • El autor publicó el código de recuperación como open source, pero le resulta difícil brindar soporte adicional

Referencias adicionales

  • Consultar el archivo README.md en GitHub
  • El código fue escrito para la situación de un cliente específico → no es una herramienta genérica
  • Generar el archivo de configuración, ajustar timings, etc., requiere habilidades de nivel administrador de sistemas

1 comentarios

 
GN⁺ 2025-03-16
Comentarios en Hacker News
  • Alguien mencionó la "vida útil limitada" del ransomware. Por eso se eliminó un comentario que decía que no afectaría a otras víctimas, pero se publicó una respuesta al respecto

    • Eso es información incorrecta. Lo que está limitado es la cantidad de ataques en los que las víctimas pueden recuperar sus archivos
    • Si piensan que el autor fue la única persona en usar este ataque, eso también es una idea equivocada
    • Recomiendan el libro The Ransomware Hunting Team. Es un libro interesante que trata la historia detrás de cómo las víctimas recuperan sus archivos
  • Hubo una pregunta sobre por qué se usan marcas de tiempo

    • Sin ánimo de ofender, me alegra que no lo hagan, pero parece un error de principiante
    • Me pregunto si hay algo que se me escapa, o si simplemente hay más gente que elige no dedicarse al crimen
  • Este artículo fue agradable de leer y tenía el nivel justo de detalle para satisfacer la curiosidad sobre el proceso

    • Gran reconocimiento al autor por idear este proceso y aportar detalles interesantes
  • Si las aplicaciones estuvieran aisladas en sandbox por defecto, el problema del ransomware se reduciría

  • "Estimé que la CPU de mi mini PC calcula 100,000 marcas de tiempo por segundo como bytes aleatorios (usando todos los núcleos)"

    • Me gustaría saber más detalles sobre esa mini PC. Tengo curiosidad por el procesador, la RAM, el precio y si es fanless
  • Me pregunto por qué cifran los primeros 65k con KCipher2 y el resto con otra cosa. Se ve extraño

  • "Espero que después de publicar esto los atacantes vuelvan a cambiar el cifrado"

    • Si creen que los atacantes se van a enterar, me pregunto por qué publicarlo. Dar un descifrador tan detallado por fama en internet parece irresponsable
    • Es una lectura interesante y despierta la curiosidad intelectual, pero sería mejor para toda la comunidad mantener los detalles en privado
  • "Cada vez que escribo sobre ransomware en mi blog de Indonesia, mucha gente me pide ayuda con ransomware"

    • Solo verificar si un ransomware es recuperable puede requerir horas de esfuerzo y tiempo (por ejemplo, si el malware está ofuscado/protegido)
    • Así que la idea es que no pidan que lo hagan gratis
    • Entonces, que cobren por ello