Rovnix, el bootkit que vuelve a hacer de las suyas
A mediados de abril, nuestros sistemas de monitoreo de amenazas detectaron unos archivos maliciosos que se distribuían con los nombres “acerca de una nueva iniciativa del Banco Mundial en relación con la epidemia de coronavirus.exe” o “acerca de una nueva iniciativa del Banco Mundial en relación con la epidemia de coronavirus.rar”. Dentro de los archivos estaba el conocido bootkit Rovnix. El uso del tema de la pandemia por parte de los ciberdelincuentes no es nuevo; la novedad es que Rovnix se ha convertido en una herramienta para evadir el UAC y se lo utiliza para propagar un inusual descargador. Entonces, procedamos al análisis del malware de acuerdo con todas las reglas de la dramaturgia.
Exposición: el archivo SFX entra en la habitación
El archivo “sobre una nueva iniciativa del Banco Mundial en relación con la epidemia de coronavirus.exe” es un archivo autoextraíble del que salen easymule.exe y 1211.doc.
Script SFX
El documento contiene información sobre una nueva iniciativa del Banco Mundial, y en los metadatos cita como autores a personas reales relacionadas con esta organización.
Contenido del documento 1211.doc
En cuanto a easymule.exe, sus recursos contienen una imagen de mapa de bits, que en realidad es un archivo ejecutable, que se desempaca y se carga en la memoria.
Extracción de la “imagen” contenida en los recursos
Nudo: evasión del UAC
En el código del PE cargado en la memoria, hay, notablemente, muchas partes similares a las del conocido kit de arranque Rovnix y sus módulos, cuyo código fuente “se filtró” en 2013.
A la izquierda está el código fuente del malware y a la derecha está el código fuente filtrado de Rovnix (bksetup.c)
Sin embargo, el archivo analizado contiene innovaciones que los nuevos autores obviamente agregaron, basadas en el código fuente original de Rovnix. Una de ellas es el mecanismo de evasión del UAC que utiliza una técnica conocida como “imitar el directorio de confianza”.
Su esencia es la siguiente: usando la API de Windows, el malware crea el directorio C:\Windows\ System32 (exactamente así, con un espacio después de Windows). Luego, copia allí el ejecutable firmado legítimo de C:\Windows\System32, que tiene derecho a elevar automáticamente los privilegios sin mostrar una solicitud de UAC (en este caso, wusa.exe).
Además, se usa la técnica de secuestro de DLL: en el directorio falso se pone una biblioteca maliciosa con el nombre de una de las bibliotecas importadas por el archivo legítimo (en este caso, wtsapi32.dll) Como resultado, al iniciarse desde un directorio falso, el archivo legítimo wusa.exe (o más bien, la ruta que conduce a éste) pasará la verificación de proxy debido a la API GetLongPathNameW, que elimina de la ruta el carácter de espacio. Sin embargo, el archivo legítimo se iniciará desde el directorio falso sin mediar una solicitud de UAC, y cargará una biblioteca maliciosa llamada wtsapi.dll.
Además de copiar el archivo legítimo del sistema en el directorio falso y crear una biblioteca maliciosa allí, el dropper crea otro archivo con el nombre uninstall.pdg. Después de eso, el malware crea y ejecuta archivos bat que primero ejecutarán wusa.exe desde el directorio falso, y luego “limpiarán los rastros” eliminando el directorio creado y el cuentagotas easymule.exe.
Desarrollo: los mismos y Rovnix
El archivo uninstall.pdg contiene explícitamente un ejecutable empaquetado. Está diseñado para desempaquetar la misma biblioteca maliciosa que se descargó previamente mediante wusa.exe y el secuestro de DLL.
Uninstall.pdg
El código de la biblioteca maliciosa es diminuto: la función WTSQueryUserToken exportada, obviamente no tiene las funciones requeridas por el wusa.exe original que la importa. En cambio, la función lee el archivo. uninstall.pdg y desempaqueta e inicia un archivo ejecutable desde allí.
Código de la función de biblioteca maliciosa exportada
El uninstall.pdg desempaquetado resulta ser una DLL con la función de exportación BkInstall, otro indicio de que el malware se basa en el código Rovnix “filtrado”. Un análisis más detallado del archivo lo confirma.
Uninstall.pdg contiene ejecutables “pegados” empaquetados por medio de aPLib. En este caso, el “pegado” se llevó a cabo utilizando la utilidad FJ (también de la suite Rovnix), como lo demuestra el algoritmo de desempaquetado de archivos y las firmas FJ que describen la ubicación del pegado en el archivo.
Firma de la utilidad FJ
Los archivos pegados son el controlador KLoader, elemento del conjunto Rovnix “filtrado” y el descargador. Uninstall.pdg los descomprime, sobrescribe el VBR con el gestor de arranque y coloca el VBR original empaquetado a su lado. Además, se escribe en el disco controlador-inyector KLoader, cuyo propósito es inyectar la carga útil en los procesos en ejecución.
A la izquierda, el código fuente del malware y a la derecha, el código fuente filtrado de Rovnix (kloader.c)
Como se puede ver en la captura de pantalla, el código fuente del malware no es muy diferente del original. Aparentemente, para que el controlador funcione con la red el código original fue compilado para su uso sin VFS y sin una pila de protocolos.
En el ejemplar que diseccionamos, el controlador inyecta en los procesos una DLL, que es el mismo gestor de arranque atípico de Rovnix del que hablamos al principio.
Por lo tanto, el diagrama de flujo general se ve así.
Esquema de ejecución
Climax: el gestor de arranque
Analicemos en detalle el nuevo gestor de arranque. Lo primero que llama la atención es la ruta pdb en el archivo.
Ruta PDB
Al comienzo de la ejecución, el malware llena la estructura con punteros a funciones. La memoria asignada se llena con punteros a funciones, y en el futuro se los llamará mediante un desplazamiento en el área de memoria asignada.
Estructura con funciones
Después de eso, el proceso obtiene acceso a los objetos “Winsta0” y al escritorio “Predeterminado”, para sí mismo y para todos los procesos creados por este proceso, y crea un hilo con un ciclo de comunicación con el servidor de administración.
Creación del flujo de comunicación con el servidor de administración
Comunicación con el servidor de administración
Después de crear el hilo, el malware usa OpenMutexA para verificar su presencia en el sistema. Luego, comienza un ciclo de comunicación con el servidor de administración, en cuyo marco se forma un paquete de datos sobre el dispositivo infectado. Este paquete se cifra con XOR, con una clave de un solo byte 0xF7, y se envía al servidor de administración.
Estructura de los datos enviados
Como respuesta, el malware recibe un archivo ejecutable que se carga en la memoria. El control se pasa al punto de entrada de este archivo PE.
Visualización del archivo PE cargado en la memoria
Desenlace: la prueba en pleno apogeo
El gestor de arranque no era único: como parte del análisis, se descubrieron varias instancias más. Todos tienen características similares, pero con ligeras diferencias. Por ejemplo, uno de ellos intenta registrar el controlador del servicio NetService para verificar la corrección de su lanzamiento. Si falla (es decir, si el servicio no se está ejecutando en el sistema), el malware deja de funcionar.
Ejemplo de otra versión del gestor de arranque
Otras instancias del cargador no usan el bootkit, pero usan el mismo método para evadir el UAC. Todo parece indicar que en este momento, el gestor de arranque está en etapa de pruebas y se lo equipa con varios medios para evadir los métodos de protección.
También descubrimos instancias que podrían servir como carga útil para el gestor de arranque. Contienen rutas pdb similares y los mismos servidores de administración que los cargadores. Es curioso que las direcciones API requeridas se obtengan por el nombre de la función, que a su vez se obtiene gracias a un índice de la cadena de configuración.
Obtención de las direcciones de la API
Este malware puede, a pedido del servidor de administración, lanzar un archivo exe con los parámetros especificados, grabar sonido desde el micrófono y enviar el archivo de audio al propietario, apagar o reiniciar la computadora, etc.
Procesamiento del comando recibido
El nombre del módulo (E:\LtdProducts\Project\newproject\64bits\64AllSolutions\Release\PcConnect.pdb) indica que los desarrolladores lo posicionan como una puerta trasera, que, además, puede tener elementos de troyano espía, a juzgar por las líneas de configuraciones.
Un fragmento de la configuración. Las cadenas en chino significan “Usuario actual:”, “contraseña de usuario:”, “*** La cuenta del sistema y la contraseña se enumeran a continuación [%04d-%02d-%02d %02d:%02d:%02d] *** “
Epílogo
El análisis del malware camuflado como una “nueva iniciativa del Banco Mundial” mostró que hasta las amenazas bien conocidas como Rovnix pueden traer algunas sorpresas cuando su código fuente se hace público. Al no haber necesidad de desarrollar desde cero sus propios medios para eludir la protección del sistema, los atacantes pueden prestar más atención a las capacidades de su propio malware y agregar un par de “extras” al código fuente, como por ejemplo, omitir el UAC. Los productos de Kaspersky Lab detectan esta amenaza y sus módulos relacionados como Trojan.Win32.Cidox, Trojan.Win32.Genérico, Trojan.Win32.Hesv, Trojan.Win32.Inject.
IOC
7CFC801458D64EF92E210A41B97993B0
Más vale boot conocido, que nuevo por conocer