Recientemente hemos detectado varios programas maliciosos de robo de datos, como Remcos, DcRAT, AgentTesla, VIPKeyLogger , etc., distribuidos mediante una campaña esteganográfica. Tras investigar sus orígenes, descubrimos que la campaña lleva tiempo activa, aunque inactiva desde hace tiempo. Lo que la hace interesante es la forma en que se orquesta el ataque.
En este blog, discutiremos la distribución de Remcos y AsyncRAT a través de la campaña que observamos.
Cadena de infección:
La cadena de infección comienza con un correo de phishing que contiene un archivo de Excel que explota una vulnerabilidad en Excel y realiza una solicitud HTTP para descargar un archivo .hta. El archivo .hta, que consta de código .vbs, crea un archivo por lotes que se conecta a una URL y descarga otro script .vbs ofuscado. El script .vbs descarga un archivo .jpg que contiene una carga útil de segunda etapa (cargador malicioso) codificada en base64 con relleno, la cual se decodifica, y se invoca una función VAI a través del script. El archivo cargador, que recibe como argumentos una URL y el nombre del proceso objetivo, descarga un archivo codificado en base64 invertido que, al decodificarse, nos proporciona la carga útil final.

Correo electrónico de phishing: El punto de ataque inicial es un correo electrónico de phishing que contiene un documento de Excel malicioso que se hace pasar por un archivo legítimo, engañando a los usuarios para que abran el archivo adjunto que contiene el código malicioso.

Documento de Excel que contiene un paquete ole malicioso:
El archivo es un exploit que aprovecha la vulnerabilidad CVE-2017-0199. Contiene un objeto de enlace OLE2 incrustado que emite una solicitud http al abrirlo.

Script .HTA
El archivo .hta contiene código vbs (Fig.4) que escribe un archivo por lotes que se conecta a una URL de pegado y descarga un archivo vbs que es un script con una gran cantidad de código basura (Fig.5).

El script escribe VBS Script2:

Al eliminar el código basura y simplificarlo, obtenemos un script codificado en base64 que se ejecutará usando PowerShell (Fig. 6).


Tome nota, aquí mientras se invoca el método VAI, se pasa la URL en el primer argumento que se almacena en la variable $deject y el quinto argumento también es importante, lo cual discutiremos más adelante cuando tratemos nuestra segunda carga útil, que es la DLL del inyector.
De forma similar, encontramos que AsyncRAT se distribuía; la cadena inicial suele ser la misma, pero no pudimos rastrearla. En el caso de AsyncRAT, el script VBS se hace pasar por prnmngr.vbs, engañando al usuario para que lo considere un script legítimo que agrega, elimina y lista impresoras o conexiones de impresora, además de configurar y mostrar la impresora predeterminada. Sin embargo, se inserta un pequeño fragmento de código malicioso para evitar sospechas.

A continuación se muestra el fragmento de código que descargó la imagen JPG de la URL codificada [hxxps://watchonlinehotvideos[.]top/omfg[.]jpg] similar a lo explicado en el caso anterior.


Al igual que tomamos nota para el script anterior, aquí el primer argumento que se pasa es nuestra URL invertida en la variable $restoredtext y parece un valor sin sentido/cadena aleatoria que se pasa en otros argumentos y nuevamente tendremos en cuenta el quinto argumento.
En ambos casos, la muestra utiliza esteganografía. El archivo jpg (Fig. 11) descargado se oculta tras una imagen inofensiva que contiene malware codificado en base64. Como se puede ver en la Fig. 7, comprueba el marcador < > y < > para obtener el archivo malicioso completo y luego decodificarlo.

Ambos archivos son archivos dll de VB.NET con un nombre de archivo interno como “Microsoft.Win32.TaskScheduler.dll”, tal vez para engañar a los usuarios y hacerlos pensar que es un dll de Microsoft.

Ambas DLL están ofuscadas, pero a diferentes niveles. La que obtuvimos de la campaña de Remcos incluso tiene un nombre de función .NET común ofuscado, pero en otros casos, algunas eran directas. Sin embargo, el código de la DLL era el mismo y hacía lo mismo.
El código DLL está ofuscado, pero podemos ver los argumentos que se le pasan. El actor de amenazas invocó el método VAI con 15 argumentos. Según los argumentos pasados, el método tendrá capacidades como cargar otro ejecutable de malware mediante vaciado de procesos, crear persistencia, etc.

El primer argumento que se pasa en el script (Fig. 7/Fig. 10) al invocar el método es nuestra URL almacenada en la variable $deject/$restoredtext que se pasa aquí como QBXtX.
El valor de persistencia es nulo o incoherente, y el otro valor, que se pasa y se decodifica como 1, se pasa a Delegate11.smethod_0 y devuelve un valor booleano. Por lo tanto, el valor final será 0 y la condición fallará. Por lo tanto, no habrá actividad que permanezca persistente.

La URL invertida, que se pasa como argumento QBXtX y se almacena en "text5", se invierte y, con la ayuda del cliente web, descarga los datos en la cadena "text6", que consiste en datos codificados en base64 en formato inverso (Fig. 14). Esta es nuestra carga útil final, que junto con la ruta "C:\Windows\SysWOW64" (descodificada de Class219.smethod(10577)) de "caspol.exe" / "msbuild.exe" (quinto argumento) se pasa como argumento a la función "Tools.Ande". Esta función realiza el vaciado del proceso con el proceso de destino, que se proporciona como quinto argumento (Fig. 15).

Como se muestra arriba, se crea un nuevo proceso con la API CreateProcess en estado suspendido. El proceso recién creado se desasigna mediante NtUnmapViewOfSection y se asigna memoria mediante VirtualAllocEx, donde se inyecta el código malicioso. Con SetThreadContext, se agrega el punto de entrada al código inyectado y, finalmente, el proceso se reanuda con ResumeThread.
En nuestro caso, la carga útil final que obtuvimos es una muestra de Remcos y AsyncRAT (Fig. 16).

Carga útil final: Remcos
Remcos siempre ha estado presente en el mundo del malware desde su creación en 2016. Desde la versión 1.0 hasta la más reciente, lo que mantiene su relevancia reside en el manejo de su función principal de comando y control. Inicialmente una herramienta de código cerrado comercializada como software de control remoto y vigilancia, Remcos ha recorrido un largo camino.
Los Remcos suelen tener un bloque de configuración con un conjunto de configuraciones, cifrado y guardado en la sección "Configuración". Este bloque se descifra al inicio e inicializa los Remcos con dicho bloque.


Remcos se conecta al C2 para la comunicación de C&C y espera los comandos enviados por el atacante. Los detalles clave de los datos de configuración extraídos son los siguientes:
C2: cosasinteresadasparabesarchicaconamores[.]duckdns[.]org
Nombre del archivo: Remcos.exe
Nombre de la botnet: zyno007
Mutex creado: Rmc-IB3RDF
Además, en algunos casos se ha visto que Remcos también implementa malware como AgentTesla.
Carga útil final: AsyncRAT
AsyncRAT es un troyano de acceso remoto (RAT), escrito en C#, que ofrece características estándar de RAT y de robo de información, incluyendo la capacidad de registrar pulsaciones de teclas, ejecutar/inyectar carga útil adicional, comando y control, etc.
La puerta trasera tiene capacidades basadas en la configuración integrada. Como se puede ver en la figura a continuación (Fig. 19), la ejecución comienza con una función De_lay que define la duración del reposo, principalmente para evadir los entornos de prueba.

La función InitializeSettings() aquí accede a toda la configuración codificada que está cifrada con AES.

La función verifyhash() (Fig. 20) verifica finalmente si las configuraciones son válidas mediante el certificado y la firma del servidor. Los detalles clave de los datos de configuración extraídos son los siguientes:
Puertos: 7878
Anfitriones: 148[.] 113[.] 214[.] 176
Version: 1.0.7
MTX: asasasas2242dqwe
Pastebin: nulo
Grupo:Diama
El valor de Pastebin lo utiliza la API "WebClient.DownloadString" (Fig. 21), que puede descargar recursos adicionales y otras cargas útiles de Pastebin u otros dominios. En nuestro caso, es nulo, por lo que selecciona hosts y puertos de la configuración y utiliza una conexión de socket para interactuar con C2.

IOCS:
| Remcos IOC |
| 9d66405aebff0080cc5d28a1684d501fa7e183dc8b6340475fc06845509cb466 |
| 42813b301da721c34ca1aca29ce2e4c7d71ae580b519a3332a4ba71870b6a58e |
| f67c6341bfe37f5b05c00a0dda738f472fdabd6ea94ca8dc761f57f11ce12036 |
| aed291c023c3514fb97b4e08e291e03f52de91a2a8d311491b4ab8299db0aa0f |
| faed55ed0102b1b2e3d853e8633abecbb9cec6a5f41c630097d8eaeefafba060 |
| C2: cosasinteresadasparabesarchicaconamores[.]duckdns[.]org |
| C2: pájaro libre besándose en mis labios con buenos sentimientos [.]duckdns[.]org |
| AsyncRAT |
| b8fc29c02005c84131f34de083c2e81cdf615ff405877f9e73400bf35513c053 |
| 2d4ab87f9ea104075d372f4c211b1fb89adec60208d370b8fb2d748e1a73186c |
| b2e8f720740bbd46f6ae3f450f265ace1044fe232141fbd84f269eafeb290812 |
| a582e7e5b3ac37895e7cf484aaa8ea477deb90d99b47b2d9bfc018c604573889 |
| C2: 148[.]113[.]214[.]176 |
Detecciones:
Puerta trasera.Remcos
Puerta trasera.MsilFC.S13564499
Trojan.loaderCiR
TTP del ATAQUE MITRE:
| Táctica | Identificación de la técnica | Nombre |
| Acceso inicial (TA0001) | T1566 | Phishing |
| Ejecución (TA0002) |
T1204 |
Ejecución del usuario |
| Persistencia (TA0003) | T1547.001 | Claves de ejecución del registro/Carpeta de inicio |
| Evasión de defensa (TA0005) | T1055 | Inyección de proceso |
| T1027 | Archivos o información ofuscados | |
| T1036.004 | Tarea o servicio enmascarado | |
| Descubrimiento (TA0007) | T1614 | Descubrimiento de la ubicación del sistema |
| Exfiltración (TA0010) | T1041 | Exfiltración a través del canal de comando y control |
| Comando y Control (TA0011) | T1001.0012 | Esteganografía |
Conclusión:
En este blog, analizamos la cadena de ataque completa de la reciente campaña esteganográfica, donde se reveló que un archivo JPG de apariencia inofensiva contenía una DLL inyectora con capacidades maliciosas. También exploramos cómo cada carga útil maliciosa se descargó y ejecutó cuidadosamente de forma metódica. El ataque se basó en gran medida en sofisticadas técnicas de enmascaramiento que a menudo pueden engañar incluso a usuarios experimentados. Como es habitual, la cadena de eventos comenzó con un correo electrónico de phishing que contenía un exploit que, a través de varias etapas, finalmente implementó RemcosRAT/AsyncRAT (con la posibilidad de que otras RAT o puertas traseras se distribuyan de forma similar). El servidor de comando y control, en este caso, tiene la capacidad de implementar cargas útiles adicionales, comprometiendo aún más el sistema de la víctima.
Esta campaña destaca la importancia crucial de permanecer alerta y adoptar prácticas sólidas de ciberseguridad para salvaguardar tanto nuestra seguridad como la integridad de nuestros datos.
Escrito por
Kirti Kshatriya
Coautor:
Manoj Kumar Neelamegam



