Automatizando el descifrado de comunicaciones de Warzone RAT
¡Buenas a todos! En el artículo de hoy os traemos un análisis del RAT (Remote Access Trojan) conocido como Warzone RAT o AveMaría, el cual se trata de un MaaS (malware as a service) que se encuentra activo desde el año 2018 y es vendido por un usuario que se hace llamar “Solmyr” en la red. En los últimos años, se han ido desarrollando diferentes versiones de esta herramienta maliciosa debido al negocio tan lucrativo que supone la venta de malware, mejorando así las funcionalidades y potencia de éste conforme ha pasado el tiempo.
Los RAT son considerados una gran amenaza, ya que permiten al atacante acceder a la máquina infectada de forma remota y tomar control de la misma prácticamente en su totalidad, pudiendo registrar las pulsaciones de teclado, obtener las contraseñas guardadas, monitorizar los ficheros del sistema, realizar conexiones por RDP (escritorio remoto) e incluso hasta grabar imágenes a través de la webcam.
En este artículo se abordará principalmente el análisis de las comunicaciones realizadas por Warzone RAT, habiendo desarrollado una herramienta que, a través de un PCAP, es capaz de detectar y descifrar todo el tráfico malicioso realizado por esta familia de malware.
Análisis inicial de las muestras:
Las muestras analizadas se han obtenido de Virus total y sus hash SHA256 son los siguientes.
0c7996e2af1a73034b75fb12c1cdcd799531c2e8ca33e3080bd63048b22146bc → versión antigua
ecc62758ef557c2ed6796ad203c9df3a19f2b10edbfa1c3291f7a64f04286233 → versión nueva
La primera se corresponde con una versión antigua del malware y la otra con otra más reciente.
Warzone RAT / AveMaria es un malware que se encuentra programado en C++, aunque debido al alto ratio de detección que tiene, normalmente viene empaquetado. Una de las muestras analizadas (versión antigua), se encontraba empaquetada con un software escrito en .NET que, a su vez, se encontraba ofuscado. El SHA256 del programa empaquetado es el siguiente:
0c7996e2af1a73034b75fb12c1cdcd799531c2e8ca33e3080bd63048b22146bc
Una vez se ejecuta la muestra anterior, se realiza el desempaquetado de la misma y posterior inyección en memoria del payload, es decir, la carga maliciosa del RAT, a través de la técnica conocida como Process Hollowing, la cual consiste en crear un proceso legítimo en estado suspendido, vaciar la imagen de memoria del mismo, sustituirla por la del malware y posteriormente relanzar la ejecución del proceso.
Una vez extraído el payload, podremos estudiar el mismo en IDA y ver la estructura empleada para la realización de las conexiones. Los hash SHA256 de los payloads extraídos son:
9708857c85f8558ac80ca32eb16d1055740e3bf3c63f40afc27a471aadcb91fd (muestra antigua)
3fe33fc2d532e5a1ccd77d132250f61f27b456144aa44d5874a71664e07ac238 (muestra nueva)
Por otra parte, una vez se ha ejecutado el payload, Warzone RAT intenta conectarse con el panel de administración del actor malicioso, el cual permite realizar todas las acciones que se ven en la siguiente imagen sobre la máquina infectada.
Análisis del cifrado de las comunicaciones
Las conexiones entre el actor malicioso y la víctima se realizan a través del protocolo TCP y además se encuentran cifradas, ya que esto proporciona al malware una capa adicional de seguridad, no permitiendo ver la información que se está intercambiando entre la víctima y el C2. Para las versiones antiguas de Warzone RAT, las comunicaciones se encuentran cifradas con el algoritmo RC4. Sin embargo, se ha podido contrastar que en las nuevas versiones el cifrado ha sido cambiado, sustituyéndolo por un RC4+ modificado con una nueva clave diferente a las versiones anteriores.
- Clave de cifrado versiones antiguas: warzone160+ 1 byte nulo
- Clave de cifrado nuevas versiones: nevergonnagiveyouup + 231 bytes nulos
Como se puede observar, la función que envía los datos encriptados al C2 es exactamente igual entre ambas versiones, únicamente cambiando la clave de cifrado.
El algoritmo RC4 emplea a su vez 2 algoritmos:
1-Key Scheduling Algorithm (KSA)
2- Pseudo-Random Generation Algorithm (PRGA).
En el RC4+, el algoritmo KSA es el mismo que en el RC4 normal, aunque el PRGA sufre modificaciones. En la siguiente imagen, se puede ver la diferencia existente entre ambos algoritmos en la implementación del PRGA:
Además, se ha podido encontrar en el foro de hacking underc0de una versión de RC4+ modificada, la cual a primera vista presenta grandes similitudes con el algoritmo empleado por las nuevas versiones de Warzone RAT, tanto en las llamadas API que emplea (LocalAlloc y LocalFree) como en el algoritmo en sí, ya que se pueden apreciar diferentes XOR y operadores desplazamiento hacia la derecha e izquierda (SHR y SHL) que coinciden exactamente entre ambos códigos.
Si se compara la versión de RC4+ encontrada en el foro underc0de con el algoritmo original, se puede apreciar una leve diferencia entre ambos, y es que en el original la i se incrementa una sola vez. Sin embargo, en este RC4+ modificado (código de la derecha), la i se incrementa dos veces, provocando que la salida sea totalmente diferente.
Finalmente, se ha contrastado que el algoritmo empleado por las nuevas versiones de Warzone RAT y el algoritmo encontrado en Internet en el foro underc0de es el mismo, por lo que se ha procedido a traducir a Python con el fin de poder descifrar los paquetes intercambiados por las nuevas versiones de Warzone RAT.
Por otra parte, comentar que los PCAP pertenecientes a las versiones antiguas de Warzone RAT se descifran con un RC4 normal y corriente empleando la key “warzone160\x00”
Análisis de las comunicaciones
Una vez se han conseguido capturar los paquetes asociados a Warzone RAT y descifrar los mismos, se va a proceder a realizar un estudio de estos con el fin de poder saber las acciones que el atacante está realizando sobre el sistema infectado. Si comparamos un gran número de paquetes, se puede verificar que todos poseen una misma estructura:
Los 4 primeros bytes de datos son siempre idénticos en esta familia de malware, es decir, en versiones antiguas del malware, todos los paquetes de datos cifrados empiezan por la cadena hexadecimal: “09123b42”. En versiones nuevas del malware, todos los paquetes cifrados empiezan por la cadena hexadecimal: “05386bf4”. Gracias a esto, somos capaces de identificar todos los paquetes maliciosos intercambiados por Warzone RAT.
Los 4 bytes siguientes se corresponden al tamaño de los datos que se envían / reciben. Los siguientes 4 bytes se corresponden con el comando que identifica la acción que el malware tiene que realizar sobre la máquina infectada o que identifica los datos recibidos de la máquina infectada.
Una vez se han descifrado las comunicaciones, se pueden interpretar todos los comandos enviados y recibimos por el C&C, los cuales son los siguientes: (fuente: Checkpoint)
Automatización del descifrado de comunicaciones:
Por último, y una vez se han identificado los comandos empleados por el malware para su funcionamiento, a través de un script escrito en Python se ha podido automatizar el descifrado de los paquetes para todas las versiones de Warzone RAT, pudiendo ver a través de un PCAP todas las acciones realizadas por el actor malicioso en la máquina infectada.
Para la realización del código, se han empleado las librerías scapy (para el procesamiento de los paquetes) y la librería Chepy (la cual nos permite hacer la mayoría de las operaciones que se pueden ver en Cyberchef). Podréis encontrar el mismo en el Github de Innotec.
https://github.com/InnotecSystem/Warzone-RAT-packet-decryptor
Y hasta aquí la entrada de hoy. Espero que os haya sido útil y que os haya gustado, ¡hasta la próxima!
Referencias:
- https://iopscience.iop.org/article/10.1088/1757-899X/420/1/012131/pdf
- https://research.checkpoint.com/2020/warzone-behind-the-enemy-lines/
- https://en.wikipedia.org/wiki/RC4
- https://underc0de.org/foro/codigos-fuentes-56/rc4-clase/