MoustachedBouncer es un grupo de ciberespionaje descubierto por ESET Research. El grupo ha estado activo desde al menos 2014 y su blanco solo fueron embajadas en Bielorrusia.

Desde 2020, puede realizar ataques de adversary in the middle, (AitM), a nivel de ISP (Internet Service Provider), para comprometer a sus objetivos.

El grupo usa dos sets de herramientas que hemos llamado NightClub y Disco.

Claves de este reporte:

  • MoustachedBouncer ha estado operativo desde, al menos, 2014.
  • Evaluamos, con un nivel intermedio de confianza que están alineados con los intereses de Bielorrusia.
  • Se especializa en el espionaje de embajadas extranjeras en Bielorrusia.
  • Ha usado técnicas de adversary in-the-middle desde 2020 para redireccionar un chequeo de portal cautivo a un servidor de C&C (Comand and Control) y distribuir plugins de malware compartidos a través del protocolo SMB (Server Message Block).
  • Creemos que MoustachedBouncer utiliza sistemas de intercepciones legítimas (como SORM) para guíar sus operaciones AitM.
  • Evaluamos con un nivel de confianza bajo que el grupo opera en contacto cercano con Winter Vivern, otro grupo que tiene de blanco a diplomáticos europeos, pero en este caso usarían distintas Tácticas, Técnicas y Procedimientos (TTPs).
  • Desde 2014, el grupo ha estado operando un framework de malware que hemos llamado NightClub. Este utiliza los protocolos SMTP e IMAP para las comunicaciones C&C.
  • El grupo, desde 2020, ha estado utilizando, en paralelo, un segundo framework de malware que hemos llamado Disco.
  • Ambos, NightClub y Disco, adminten plugins espías adicionales que toman capturas de pantalla, graban audio y roban información.

Victimología

De acuerdo a la telemetría ESET, el grupo tiene de blanco a las embajadas extranjeras en Bielorrusia, y hemos identificado que el personal de embajadas de cuatro países fueron atacados: dos de Europa, uno del sur de Asia y uno de África. 

Las fechas claves se muestran en el siguiente gráfico, en inglés:

MoustachedBouncer_Timeline_edited

Imagen 1: Línea de tiempo de las actividades de MoustachedBouncer.

Atribución

Mientras seguíamos a MoustacheBouncer como un grupo separado, encontramos elementos que nos hacen considerar con un nivel de confianza bajo que están colaborando estrechamente con otro grupo conocido como Winter Vivern. Este último fue descubierto en 2021 y continúa activo.

En marzo de 2023, Winter Vivern había usado una vulnerabilidad XSS (CVE-2022-27926) en el portal de mail Zimbra para robar credenciales de webmails de diplomáticos de varios países europeos. Esta campaña fue publicada fue revelada publicamente por investigadores de Proofpoint.

La actividad de MoustachedBouncer abarca desde el 2014 al 2022 y sus TTP (Tácticas, Técnicas y Procedimientos) evolucionaron con el tiempo. Por ejemplo, habíamos visto el uso de ataques AitM solo en 2020. De todas formas, el objetivo vertical es lo que no ha variado.

La tabla 1 muestra las características de cada campaña. Con estos elementos consideramos con un nivel alto de confianza que estan todos conectados a MoustachedBouncer.

Tabla 1. Conexiones entre las campañas MoustachedBouncer

 

VirusTotal
(2014)

Victim A (2017)

Victim B
 (2020-2022)

Victim C
(2020-2022)

Victim D
(2021-2022)

NightClub implant

X

X

 

X

 

NightClub plugins

 

X

X

X

 

Disco implant

 

 

X

 

X

SharpDisco dropper

 

 

X

 

 

Compromise via AitM

?

?

?

?

X

Malware delivery via AitM on SMB shares

 

 

X

 

X

Victims: foreign embassies in Belarus

?

X

X

X

X

 

Vector de compromiso: AitM

En esta sección, detallamos el acceso inicial mediante Disco. No sabemos aún cuál es el método que MoustachedBouncer usa para instalar NightClub.

Windows Update falsos

Para comprometer a sus blancos, los operadores de MoustachedBouncer manipulan el acceso a internet de sus víctimas, probablemente a nivel del ISP, para hacerle creer a  Windows que está detrás de un portal cautivo. Windows 10 chequea si está habilitado para acceder a internet con una solicitud HTTP a: http://www.msftconnecttest.com/connecttest.txt. En el caso de que la respuesta no sea Microsoft Connect Test, se abre una nueva ventana del navegador a: http://www.msftconnecttest.com/redirect. Para los rangos IP blancos de MoustachedBouncer, el tráfico de red es manipulado a nivel ISP, y las URL nombradas redirigen a una URL falsa de Windows Update, con apariencia legítima: http://updates.microsoft[.]com/. Por lo tanto, la página falsa de Windows Update se mostrará a la potencial víctima cuando se conecte a la red. La página de actualización falsa se muestra en la figura 2. Observamos que el texto esta en ruso, principalmente porque es el idioma principal en Bielorrusia, pero probablemente existan versiones en otros idiomas. La página indica que hay actualizaciones críticas del sistema de seguridad que necesitan ser instaladas. 

Figure 2. Fake Windows Update page
Imagen 2:. Página falsa de Windows Update

Nótese que utiliza HTTP no encriptado, y no HTTPS, y que el subdominio updates.microsoft[.]com no existe entre los nombres de servidores de Microsoft, por lo que no resuelve en la internet abierta. Durante el ataque, este dominio resolvió en  5.45.121[.]106 en la máquina del blanco de ataque. Esta dirección IP es usada para aparcar dominios y no está relacionada con Microsoft. Aunque es una dirección IP enrutable a internet, el tráfico de esta IP nunca alcanza la internet durante el ataque AitM. Ambos, la resolución DNS y las respuestas HTTP, fueron injectadas en el tránsito, probablemente a nivel del ISP. 

Un punto importante es que la técnica de AitM solo ocurre contra un par de organizaciones seleccionadas (tal vez, solo embajadas), y no en todo el país. No es posible reproducir la redirección desde una dirección de IP aleatoria en Bielorrusia.

Malware delivery

La página HTML, mostrada en la figura 2, carga el código JavaScript desde: http://updates.microsoft[.]com/jdrop.js. Esta secuencia de comandos primero llama a setTimeout para ejecutra la función jdrop un segundo después de que la página se cargó. Esta función (ver imagen 3) muestra una ventana modal con un botón llamado: Получить обновления (Traducción: obtener actualizaciones).

Figure 3. jdrop function

Imagen3. Función jdrop

Al hacer click en el botón se ejecuta la función update, como se muestra en la imagen 4.

Figure 4. update function

Imagen 4: Función update

Esta función gatilla la descarga de un instalador falso de Windows Update desde una url de apariencia legítima http://updates.microsoft[.]com/MicrosoftUpdate845255.zip. También muestra instrucciones para instalar la actualización: Для установки обновлений, скачайте и запустите "MicrosoftUpdate845255.msi". (Traducción: Para instalar actualizaciones, descargue y ejecute "MicrosoftUpdate845255.msi").

No hemos podido recuperar el archivo MicrosoftUpdate845255.zip descargado, pero, nuestra telemetría mostró que contiene un ejecutable malicioso llamado MicrosoftUpdate845255.exe.

Escrito en Go, crea una tarea programada que ejecuta \\35.214.56[.]2\OfficeBroker\OfficeBroker.exe a cada minuto. Como sugiere la ruta, recupera el ejecutable vía SMB desde 35.214.56[.]2. Esta dirección IP pertenece a un cliente de Google Cloud, pero igual que el servidor HTTP, creemos que SMB replica e injerta sobre la marcha vía AitM y que los atacantes no controlan la dirección IP enrutable a internet.

También observamos los siguientes servidores SMB, interceptados vía AitM:

  • \\209.19.37[.]184
  • \\38.9.8[.]78
  • \\59.6.8[.]25

Este comportamiento lo observamos en dos redes ISP separadas: Unitary Enterprise A1 and Beltelecom. Esto sugiere que esas ISP podrían no proveer una integridad y confidencialidad completas de la información. Recomendamos fuertemente que las organizaciones extranjeras en Bielorrusia usen un tunel VPN cifrado de extremo a extremo (end-to-end), idealmente fuera de banda (por ejemplo, desde endpoint), para proveer conectividad a internet desde una red confiable.

La Imagen 5, representa nuestra hipótesis sobre el vector de compromiso y la intercepción del tráfico.

 

Figure 5. Compromise via AitM scenario

Imagen 5. Escenario de compromiso vía AitM.

AitM – Reflexiones generales

El escenario de AitM nos recuerda a los actores de las amenazas Turla y StrongPity que han troyanizado instaladores de software sobre la marcha (on the fly) a nivel de ISP. 

Generalmente, el método de acceso inicial es usado por los actores de amenazas operando en su propio país, ya que requieren un acceso significativo en los proveedores de servicios de internet, o sus proveedores upstream. En muchos países, los servicios de seguridad tienen permitido ejecutar la llamada "interceptación legal" (lawful interception, en inglés) usando dispositivos especiales instalados en los locales de los ISP.

En Rusia, una ley de 2014 requiere que que los ISP instalen dispositivos llamados SORM-3 que premiten a los Servicios de Seguridad Federal (FSB, sus siglas en inglés) realizar vigilancia dirigida. Estos dispositivos tienen capacidades de inspección profunda de paquetes (Deep Packet Inspection, DPI) y es probable que hayan sido usado por Turla in su campaña Mosquito.

En 2018, el Citizen Lab reveló que los dispositivos DPI desarrollados por la compañía canadiense Sandvine fueron usados pora modificar el tráfico HTTP en Turquía y Egipto. En Turquía, los dispositivos fueron suspuestamente usados para redirigir usuarios de internet hacia servidores maliciosos cuando intentaban descargar ciertas aplicaciones de Windows, lo que está en línea con las actividades de StrongPity. En Egipto, esos dispositivos fueron usados, se presume, para inyertar series de comandos de ads y minería de cryptomonedas con el fin de generar dinero.

En 2020, un artículo de Bloomberg reveló que el National Traffic Exchange Center, de Bielorrusia, compró el mismo equipo DPI de Sandvine, pero de acuerdo a un artículo de Cyberscoop, el contrato fue cancelado en septiembre de 2020.

Según consta en un reporte de Amnistía Internacional publicado en 2021, “bajo la ley bielorrusa, todas los provedores de telecomunicaciones en el país deben hacer que su hardware sea compatible con el sistema SORM". También aseguran que "el sistama SORM permite a las autoridades un control remoto directo a las comunicaciones y datos de todos los usuarios sin notificar al proveedor". Asumimos con un nivel bajo de confianza que MoustachedBouncer usa este sistema SORM para llevar a cabo sus operaciones.

Mientras el compromiso de routers para llevar adelante AitM en las redes de embajadas no puede ser descartado, las capacidades de intercepción legal en Bielorrusia sugieren que la manipulación del tráfico está ocurriendo a nivel del ISP, más que con blanco en los enrutadores.

Implants: NightClub and Disco

Desde 2014, la familia de malware usada por MoustachedBouncer ha evolucionado, y un gran cambio ocurrió en 2020 cuando comenzaron a usar ataques AitM. En el mismo momento, comenzó a utilizar herramientas más simples, desarrolladas en .NET y Go. En referencia a NightClub, llamamos a este set de herramientas Disco.

MoustachedBouncer opera en paralelo dos familias de implantes, pero en una máquina dada, solo puede desplegar una a la vez. Creemos que Disco es usado en conjunto con ataques AitM, mientras que Nightclub es usada cuando la intercepción a nivel ISP no es posible debido a una mitigación, como lo es el uso de VPN con encriptación end-to-end, ya que el tráfico es enrutado fuera de Bielorrusia.

Disco

Como mencionamos en la sección previa, una página falsa de Windows Update entrega la primer etapa (SHA-1: E65EB4467DDB1C99B09AE87BA0A964C36BAB4C30). Este es un cuentagotas (dropper) simple escrito en Go que crea tareas programadas para ejecutar: \\35.214.56[.]2\OfficeBroker\OfficeBroker.exe a cada minuto. OfficeBroker.exe luego es descargado sobre el protocolo SMB vía ataque AitM. La principal función del dropper se muestra en la imagen 6.

Figure 6. Main function of the Go dropper

Imagen 6. Función principal del dropper Go.

Finalmente, realiza un consulta windows.system.update[.]com. Este domino no existe pero la consulta DNS es probablemente interceptada vía AitM, y seguramente sea como un faro que notifca a los operadores del exito en el compromiso de la máquina.

No hemos podido recuperar el archivo OfficeBroker.exe, pero es muy probable que actúe como downloader, ya que observamos otros plugins que se ejecutaron como recursos compartidos desde SMB. Estos plugins se desarrollaron en Go y son más vale simples porque se basan en bibliotecas externas de Go. La tabla 2 resume los diferentes plugins.

 

Table 2. Go plugins used by MoustachedBouncer in 2021–2022

Download URL / Path on disk

Description

\\209.19.37[.]184\driverpack\aact.exe

Takes screenshots using the kbinani/screenshot library. Screenshots are saved in .\AActdata\<d>_<s>.dat (on the SMB share) where <d> is the active display number and <s> the date. It sleeps 15 seconds between each screenshot.

C:\Users\Public\driverpack\driverpackUpdate.exe

Executes PowerShell scripts with powershell.exe -NoProfile -NonInteractive <command>, where <command> is read from the file .\idata. The output is written in .\odata.

C:\Users\Public\driverpack\sdrive.exe

Executes C:\Users\Public\‌driverpack\driverpackUpdate.exe (the plugin above) using elevated rights via CVE-2021-1732. The code was likely inspired by a PoC on GitHub and uses the zydis code generation library.

\\209.19.37[.]184\driverpack\officetelemetry.exe

A reverse proxy strongly inspired by the GitHub repository revsocks. We were unable to retrieve the command line parameters with the proxy IP address.

\\38.9.8[.]78\driverpack\DPU.exe

Another sample of the PowerShell plugin.

%userprofile%\appdata\nod32update\nod32update.exe

Another sample of the reverse proxy plugin.

\\59.6.8[.]25\outlooksync\outlooksync.exe

Takes screenshots; it is similar to the first plugin. Images are saved in ./logs/${DATETIME}.dat.

\\52.3.8[.]25\oracle\oracleTelemetry.exe

Screenshot plugin packed with Themida.

Estoy plugins también usan recursos compartidos SMB para filtrar datos. No hay un servidor C&C fuera de las premisas de los atacantes para observar o  derribar. Tampoco parace haber una forma de alcanzar ese servidor C&C desde internet. Esto les da a infraestructura de red de los atacantes una alta resilencia.

Complementos de SharpDisco y NightClub

En enero de 2020 observamos un dropper de MoustachedBouncer, al que llamamos SharpDisco, que era descargado desde https://mail.mfa.gov.<redacted>/EdgeUpdate.exe Por un proceso de Microsoft Edge. No está claro cómo los atacantes fueron capaces de manipular el tráfico HTTPS, pero es probable que se haya mostrado a la víctima una alerta de certíficado TLS inválido. Otra posibilidad es que MoustachedBouncer comprometa este sitio web gubernamental.

SharpDisco (SHA-1: A3AE82B19FEE2756D6354E85A094F1A4598314AB)

SharpDisco es un dropper desarrollado en C#. Muestra una ventana de actualización falsa, mostrada en la imagen 7, mientras que crea dos tareas programadas en el fondo.

Figure 7. Fake Microsoft Edge update window

Fmagen 7. Ventada de actualizacion de Microsoft Edge falsa.

Las tareas programadas son:

scheduled tasks

WINCMDA.EXE y WINCMDB.EXE son probablemente solo cmd.exe renombrado. Cada minuto, la tarea lee qué hay en  \\24.9.51[.]94\EDGEUPDATE\EDGEAIN (en el recurso compartido SMB), lo canaliza a cmd.exe, y escribe el resultado en \\24.9.51[.]94\EDGEUPDATE\EDGEAOUT. Es igual con la segunda tarea, pero con los archivos EDGEBIN y EDGEBOUT. Desde un punto de vista más amplio, estas tareas son shells inversas de latencia de un segundo.

Luego, como se muestra en la imagen 8, el dropper envía una solicitud DNS a un dominio no registrado, edgeupdate-security-windows[.]com. Esto es similar a lo que el dropper Disco de 2022 hace.

Figure 8. Dropper used in 2020

Imagen 8. Dropper usado en 2020.

La telemetría de ESET muestra que las shells reversas fueron usadas para depositar un intérprete geniuno de Python en C:\Users\Public\WinTN\WinTN.exe. Luego observamos dos plugins colocados por cmd.exe en el disco, lo que significa que probablemente fueron, también, depositados por una shell inversa.

Los dos plugins son:

  • A recent-files stealer in C:\Users\Public\WinSrcNT\It11.exe
  • An external drive monitor in C:\Users\Public\It3.exe

Es interesante notar que esos complementos comparten código con NightClub (descripto debajo, en la sección NightClub – 2017 (SHA-1: F92FE4DD679903F75ADE64DC8A20D46DFBD3B277)). Esto nos permitió conectar los sets de herramientas de Disco y de NightClub.

Recent-files stealer (SHA-1: 0DAEA89F91A55F46D33C294CFE84EF06CE22E393)

Este complemento es un ejecutable de Windows llamado It11.exe. Creemos que fue ejecutado por la vía shell inversa mencionada anteriormente. No hay mecanismos de presistencia implementados en el plugin.

Alcanza los archivos abiertos recientemente en la máquina mediante la lectura del contenido de la carpeta %USERPROFILE%\Recent (en Windows XP) o  %APPDATA%\Microsoft\Windows\Recent (en versiones más nuevas de Windows). Esas carpetas contienen archivos LNK, cada uno apuntando a un archivo abierto recientemente.

El plugin incorpora su propio analizador de formato LNK para extraer la ruta del archivo original.

No hemos podido hacer que este plugin funcionara, pero un análisis estadístico mostró que los archivos eran exfiltrados en el SMB share\\24.9.51[.]94\EDGEUPDATE\update\.  El plugin conserva una lista de archivos ya exfiltrados, y su CRC-32 checksum (suma de comprobación), en %TEMP%\index.dat. Estoy evitaría la retransmisión del mismo archivo más de una vez.

External drive monitor (SHA-1: 11CF38D971534D9B619581CEDC19319962F3B996)

Este plugin es un ejecutable de Windows llamado It3.exe. Al igual que el anterior, no implementa ningún mecanismo de persistencia.

El plugin invoca a GetLogicalDrives en bucle para conseguir un lista de todos las unidades conectadas, incluyendo los removibles, como llaves USB. Luego, hace una copia de los volúmenes NTFS de cada unidad removible y escribe en el directorio, C:\Users\Public\. El nombre del archivos es una cadena generada aleatoriamente de seis a ocho caracteres alfanuméricos, por ejemplo heNNYwmY.

Mantiene un archivo de registro en <working directory>\index.dat con las sumas de comprobación CRC-32 de los discos copiados.

El plugin no parece tener ninguna capacidad de exfiltración. Es probable que los depósitos por etapas de unidades sean recuperados luego usando shell reversa.

NightClub

Desde 2014, MoustachedBouncer se ha usado como framework del malware al que llamamos NightClub porque contienen una clase de C++ llamada así. Encontramos ejemplo de 2014, 2017, 2020, and 2022. Esta sección describe la evolución de NightClub desde un backdorr simple hasta un implante modular C++ completo.

En resumen, NightClub es una familia de implantes que utilizan emails para sus comunicaciones C&C. Desde 2016, modulos adicionales pueden ser entregados por email para extender sus capacidades de espionaje.

NightClub – 2014

Es la versión más antigua conocida de NightClub. Encontramos un dropper y un orquestador.

El dropper (SHA-1: 0401EE7F3BC384734BF7E352C4C4BC372840C30D) es un ejecutable llamado EsetUpdate-0117583943.exe, y fue subido a VirusTotal desde Ucrania el 2014-11-19. No sabemos cómo fue distribuido en ese entonces.

La función principal, ilustrada en la imagen 9, carga el recurso MEMORY y escribe su contenido en %SystemRoot%\System32\creh.dll. Es almacenado en cleartext en el recurso PE.

Figure 9. Main function of the dropper

Imagen 9. Función principal del dropper.

Luego, el dropper modifica las marcas de tiempo de Creation, Access, y Write creh.dll en los DLL de Windows genuinos user32.dll.

Finalmente, crea un servicio de Windows llamado WmdmPmSp y configura, en el registro, el ServiceDll como %SystemRoot%\System32\creh.dll – ver imagen 10.

Figure 10. Modification of the value ServiceDll

Imagen 10. Modificacion del Valor ServiceDll

El archivo previamente descartado, creh.dll (SHA-1: 5B55250CC0DA407201B5F042322CFDBF56041632) es el orquestador de NightClub. Tiene una sola exportación denominada ServiceMain y su ruta PDB es D:\Programming\Projects\Work\SwampThing\Release\Win32\WorkingDll.pdb.

Está escrito en C++ y los nombres de algunos métodos y clases se presentan en el RTTI data – ver imagen 11.

 

Figure 11. Method and class names from the RTTI data

Imagen 11. Metodos y nombres de clases de RTTI data

Algunos de las cadenas están encriptadas usando el siguiente generador de congruencia lineal (LCG): staten+1 = (690069 × staten + 1) mod 232. Por cada cadena encriptada, se provee un seed (estado0) entre 0 y 255. Para desencriptar una cadena, el  staten es subtraído de cada byten encriptado. Un ejemplo de la estructura de un cadena encriptada se muestra en la Imagen 12.

Figure 12. Encrypted string format

Imagen 12. formato de cadena encriptada

Un archivo de registro no encriptado se encuentra en C:\Windows\System32\servdll.log. Este contiene información muy básica sobre la iniciación del orquestador -ver Imagen 13.

Figure 13. Log file

Imagen 13. Archivo de registro

NightClub tiene dos capacidades principales:

Monitoreo de archivos

Exfiltración de datos vía SMTP (email)

Monitor de archivos

La funcionalidad implementada aquí, es muy similar a la del complemento de monitor de archivos vista en 2020 y descripta arriba. También explora los directorios %USERPROFILE%\Recent en Windows XP, y en las versiones más nueva de Windows %APPDATA%\Microsoft\Windows\Recent, e implementa el mismo analizador LNK -ver imágenes 14 y 15.

Figure 14. LNK parser (2014 sample – 5B55250CC0DA407201B5F042322CFDBF56041632)

Imagen 14. LNK parser (2014 sample – 5B55250CC0DA407201B5F042322CFDBF56041632)

Figure 15. LNK parser (2020 sample – 0DAEA89F91A55F46D33C294CFE84EF06CE22E393)

Imagen 15. LNK parser (2020 sample – 0DAEA89F91A55F46D33C294CFE84EF06CE22E393)

 

Los archivos recuperados desde los archivos LNK son copiados en %TEMP%\<original filename>.bin. Notése que al contrario de la variante 2020, solo son copiados los archivos con extensiones.doc, .docx, .xls, .xslx, o .pdf.

También monitorea unidades en bucle, como forma de robar archivos de ellos.

Comunicaciones SMTP C&C 

NightClub usa el protocolo SMTP para exfiltrar datos. Aunque la comunicación C&C por email no es excluyente de MoustachedBouncer y es también usada por otros adversarios como Turla (ver LightNeuron y el backdoor de Outlook), es bastante rara. El código esta basado en el proyecto CSmtp, disponible en GitHub. La información de las cuentas de email está codificada y encriptada con el algoritmo LCG. En el ejemplo analizado, el mail de configuracion es::

SMTP server: smtp.seznam.cz

Sender address: glen.morriss75@seznam[.]cz

Sender password: <redacted>

Recipient address: SunyaF@seznam[.]cz

seznam.cz es un portal web de República Chequa que ofrece un servicio de webmail gratuito. Creemos que los atacnates crearon sus propias cuenta de email, en lugar de comprometer cuentas legítimas.

NightClub exfiltra archivos previamente copiados en %TEMP% mediante la funcionalidad de monitor de archivos (FileMonitor en imagen 11). Estos estan codificados en  base64 y agregados como un adjunto cuyo nombre es el origial del archivo con la extensión .bin.

La imagen 16 muestra la exfiltración de un archivo vía SMTP. NightClub se autentica usando las credenciales para la cuenta  glen.morriss75@seznam[.]cz y envía mails a  SunyaF@seznam[.]cz con el archivo robado adjunto.

Figure 16. TCP stream of the SMTP communication from our test machine

Imagen 16. TCP stream de comunicación SMTP de nuestra máquina de prueba

 

Nótese que alguno de los encabezados que podrían parecer sospechosos en un primer momento son los usados por defecto en el proyecto CSmtp, por lo que puede no ser un rasgo distintivo. Estos incluyen:

X-Mailer: The Bat! (v3.02) Professional

Content-Type: multipart/mixed; boundary="__MESSAGE__ID__54yg6f6h6y456345"

The Bat! es un cliente de email usando en Europa del Este. Al igual que el encabezado X-Mailer se mezcla con el tráfico de emails a Bielorrusia.

NightClub – 2017 (SHA-1: F92FE4DD679903F75ADE64DC8A20D46DFBD3B277)

En 2017, encontramos una versión más reciente de NightClub, que fue compilada en 2017-06-05. En la maquina de la víctima, fue localizado en  C:\Windows\System32\metamn.dll. El nombre de archivo en el directorio de exportación DLL es DownloaderService.dll, y tiene un nombre unico de exportación ServiceMain. Eset contiene la ruta PDB D:\AbcdMainProject\Rootsrc\Projects\MainS\Ink\Release\x64\EtfFavoriteFinder.pdb. 

Para persistir, crea un servicio de Windows llamado WmdmPmSp, como en versiones previas. Desafortunadamente, no hemos podido recuperar el dropper.

Esta versión de NightClub incluye algunas clases de C++ y métodos, que incluyen nightclub, en la data RTTI – ver imagen 17.

Figure 17. Method and class names from the RTTI data of the 2017 NightClub version

Imagen 17. Método y clase de datos RTTI de la verisón 2017 de NightClub.

Así como en versiones anteriores, las comunicaciones C&C usan el protocolo SMTP, vía biblioteca CSmtp, con credenciales de código duro. En el ejemplo analizado, la configuración de mail es:

SMTP server: smtp.mail.ru

Sender address: fhtgbbwi@mail[.]ru

Sender password: [redacted]

Recipient address: nvjfnvjfnjf@mail[.]ru

La principal diferencia es que cambiaron el proveedor de email gratuito desde Seznam.cz a Mail.ru.

Esta versión de NightClub usa plugins externos alojados en la carpeta %APPDATA%\NvmFilter\. Son DLLs llamados <random>.cr (e.g., et2z7q0FREZ.cr) con una sola exportación denominada Starts. Hemos identificado dos complementos: un keylogger (registrador de teclas) y un monitor de archivos.

Keylogger (SHA-1: 6999730D0715606D14ACD19329AF0685B8AD0299)

Este plugin se alojó en %APPDATA%\NvmFilter\et2z7q0FREZ.cr y es una DLL de una sola exportación llamada Starts. Contiene la ruta PDB D:\Programming\Projects\Autogen\Kh\AutogenAlg\Release\x64\FileMonitoringModule.pdb y fue desarrollada en C++. Los datos RTTI muestran algunos nombres de clases – ver Imagen 18.

Figure 18. Method and class names from the RTTI data of the NightClub keylogger plugin

Imagen 18. Nombre de métodos y calses desde datos RTTI del Keylogger.

La implementación el keylogger es mas vale tradicional, usando la función API GetKeyState de WindowsAPI – ver imagen 19.

Figure 19. NightClub keylogger

Imagen 19. NightClub keylogger

El keylogger mantienen un archivo de registro cleartext en %TEMP%\uirtl.tmp. Contiene la fecha, el título de la aplicación y el registro de las pulsaciones de las teclas de esta aplicación específica. Un ejemplo, que hemos generado, se provee en la Imagen 20.

Figure 20. Example of the output of the keylogger (generated by us)
Imagen 20. Ejemplo de producción del keylogger (generado por nosotros)

Monitor de archivos (SHA-1: 6E729E84C7672F048ED8AE847F20A0219E917FA)

Este plugin se alojó en %APPDATA%\NvmFilter\sTUlsWa1.cr y es una DLL con una sola exportación llamada Starts. Su ruta PDB, D:\Programming\Projects\Autogen\Kh\AutogenAlg\Release\x64\FileMonitoringModule.pdb, no se ha eliminado y reutiliza código de monitores de archivos de entre 2014 y 2020. Estos monitorean unidades y archivos recientes, y copias archivos para exfiltrarlos a %TEMP%\AcmSym\rm. Su archivo de registro se almacena en %TEMP%\indexwti.sxd.

NightClub – 2020–2022

En noviembre 2020, observamos una nueva versión de NightClub implementada en Bielorrusia en las computadores del staff diplomático de un país europeo. En julio 2022 MoustachedBouncer nuevamente comprometio algunas de las mismas computadoras. Las versiones 2020 y 2022 son casi idénticas, y el vector de compromiso aun no se conoce.

Su arquitectura es ligeramente diferente de las versiones previas, el orquestador implementa funciones de networking. El segundo componente, que los desarrolladores llaman el agente modular, solo es responsable de cargar los plugins. Todos los ejemplos fueron encontrados en la carpeta %APPDATA%\microsoft\def\ y fueron escritos en C++ con bibliotecas conectadas estaticamente, como CSmtp or cpprestsdk. Como resultado, los ejecutables son bastante grandes – cerca de 5MB.

Orquestador

En la computadora de la victimas, mabas variantes del orquestador (SHA-1: 92115E21E565440B1A26ECC20D2552A214155669 y D14D9118335C9BF6633CB2A41023486DACBEB052) fueron nombradassvhvost.exe. Creemos que MoustachedBouncer trata de enmascararse tras el nombre del ejecutable legítimo svchost.exe. Para su persistencia, crea un servicio llamado vAwast.

Al contrario que en versiones previas, para encriptar las cadenas simplemente agregan 0x01 a cada byte. Por ejemplo, la cadena cmd.exe estaría encriptada como dne/fyf%APPDATA%\Microsoft\def\Gfr45.cfg. Otra diferencia es que la configuración se almacena en un archivo externo, en lugar de estar codificada en el binario. Los datos son desencriptados con una clave privada RSA de 2048 bits (see Figure 21)  usando la función BCryptImportKeyPairBCryptDecrypt.

Figure 21. Hardcoded private RSA key

Imagen 21. Hardcoded private RSA key.

La configuración se formatea en JSON, como se muestra en la imagen 22. 

Figure 22. NightClub external configuration format

Imagen 22. Formato de configuración externa de NightClub.

Las claves más importantes son transport y modules. La primera contiene información sobre el uso comunicaciones C&C en la casilla de mail, como en las versiones previas. La última contienen la lista de módulos.

Agente modular

Las dos variantes del agente modular (SHA-1: DE0B38E12C0AF0FD63A67B03DD1F8C1BF7FA6128 y E6DE72516C1D4338D7E45E028340B54DCDC7A8AC) fueron nombradas schvost.exe, lo uqe es otra forma de imitación del archivo svchost.exe.

Este componente es reponsable de iniciar los módulos que están especificados en la configuración. Son DLLs, cada una con un nombre de exportación Start or StartsEstan almacenadas en un disco no encriptado con la extensión .ini, pero son, en realidad DLLs.

Módulos

A lo largo de la investigación, encontramos cinco módulos diferentes: un grabador de audio, dos capturadores de pantalla casi idénticos, un registrador de teclas, y un backdoor DNS. Para todos ellos: la configuración, que es formateada en JSON, pasa como un argumento a Start</span o Starts function.

Por defecto, el output del plugin se escribe en %TEMP%\tmp123.tmp. Esto puede ser cambiado usando el campo de configuración file. La tabla 3 muestra los diferentes plugins.

Table 2. NightClub plugins

DLL export name

Configuration

Description

NotifyLoggers.dll

{

    "name":"<value>",

    "enabled":"<value>",

    "max_size":"<value>",

    "file":"<value>",

    "chk_t":"<value>",

    "r_d":"<value>",

    "f_hs":"<value>",

    "t_hs":"<value>"

}

An audio recorder that uses the Lame library, and mciSendStringW to control the audio device. The additional configuration fields are likely used to specify options for Lame.

MicroServiceRun.dll

{

    "name":"<value>",

    "enabled":"<value>",

    "max_size":"<value>",

    "file":"<value>"
    "capture_on_key_press":"<value>",

    "period_in_sec":"<value>",

    "quality":"<value>",

    "app_keywords":"<value>"

}

A screenshotter that uses CreateCompatibleDC and GdipSaveImageToStream and writes captured images in file to disk. If app_keywords is not empty, it uses GetForegroundWindow to check the name of the active Window and capture it only if it matches app_keywords.

JobTesterDll.dll

{

    "name":"<value>",

    "enabled":"<value>",

    "max_size":"<value>",

    "file":"<value>"

}

A keylogger that uses the GetKeyState API. It writes the log in file to disk and the format is <Date><Title bar><content>.

ParametersParserer.dll

{

    "name":"<value>",

    "enabled":"<value>",

    "max_size":"<value>",

    "file":"<value>",

    "cc_server_address":"<value>"

}

A DNS-tunneling backdoor. cc_server_address specifies the IP address of a DNS server to which requests are sent. More details follow.

El backdoor del tunel DNS (ParametersParserer.dll) utiliza un protocolo personalizado para enviar y recibir datos desde el servidor DNS malicioso (cc_server_address). La imagen 23 muestra que la solicitud DNS se envía a la dirección IP provista en la configuración, usando el parametro pExtra de DnsQuery_A.

Figure 23. DNS request to the C&C server

Imagen 23. Solicitud DNS al servidor C&C.

El plugin agrega la información a filtar como parte del nombre de subdominio del dominio que utiliza la solicitud DNS (pszName arriba). El dominio es siempre 11.1.1.cid y los datos están contenidos en el subdominio. Usa el siguiente formato, donde x es una letra, no alguna variable:

x + <modified base64(buffer)> + x.11.1.1.cid

Por ejemplo, la primer solicitud DNS que envía es  xZW1wdHkx.11.1.1.cid, donde ZW1wdHk decoficica en empty

Nótese que la función base64 no es estándar. Se remueve el =, if any, desde el resultado del codificado en base64, también reemplaza los caracteres / con -s,y los caracteres + con -p. Esto es para crear subdominos válidos, porque el output de codificado estándar puede incluir los caracteres +, / y =,los cuales son todos inválidos en los nombres de dominio y pueden ser detectados en el tráfico de red.

Luego, el plugin lee el resultado que debería ser uno de tantos registros TXT DNS , ya que el flag DNS_TYPE_TEXT pasa a DnsQuery_A nMicrosoft nombra a la estructura subyacente DNS_TXT_DATAA. Contiene una matriz de cadenas, que se concatenan para calcular el búfer de salida.

Figure 24. The plugin reads the TXT record

Imagen 24. El plugin lee el registro TXT.

El formato de respuesta esperado es:

x + <argument encoded with modified base64> + x.<cmd_id>.<unknown integer>.1.<cmd_name>

Esto es similar al formato de las solicitudes. El <argumento codificado con base64 modificado> también usa el codificado base64 personalizado sin = y con -p en lugar de -s en lugar de /. <cmd_name> es una cadena arbitraria que no es usada por el  backdoor; Es más probable que sea usada por los operadores para mantener un seguimiento de los diferentes comandos. <cmd_id> es un número entero que corresponde un comando en el argumento  switch del backdoor

Por ejemplo, si los operadores quieren ejecutar calc.exe, el servicios DNS C&C podría enviar la respuesta xYzpcd2luZG93c1xzeXN0ZW0zMlxjYWxjLmV4ZQx.27.2.1.calc, donde Yzpcd2luZG93c1xzeXN0ZW0zMlxjYWxjLmV4ZQ decodifica a c:\windows\system32\calc.exe y 27 es el ID del comando para crear un nuevo proceso. Todos los comandos soportados por este backdoor se detallan en la tabla 4.

Tabla 4. Commands implemented by the DNS backdoor

ID

Description

0x15 (21)

Copy a directory (from a source to a destination)

0x16 (22)

Move a file (from a source to a destination)

0x17 (23)

Remove a file or a directory

0x18 (24)

Search a file for a given pattern (Note: we are unsure about the exact behavior of this command)

0x19 (25)

Write a buffer to a file

0x1A (26)

Read a file

0x1B (27)

Create a process

El resultado de los comando es filtrar hacia el atacante usando solicitudes DNS, com ose detalla arriba. La única diferencia es que 11 se reemplaza por 12 en el nombre del dominio, como se muestra en este ejemplo: xdGltZW91dAx.12.1.1.cid. En este caso, el plugin envió un mensaje de tiempo de espera C&C.

Conclusion

MoustachedBouncer es un hábil actor de amenazas dirigido a diplomáticos extranjeros en Bielorrusia. Utiliza técnicas bastante avanzadas para las comunicaciones de C&C, incluyendo la interceptación de redes a nivel de ISP para el implante Disco, correos electrónicos para el implante NightClub y DNS en uno de los plugins NightClub.

La principal conclusión es que las organizaciones en países extranjeros donde no se puede confiar en Internet deben utilizar un túnel VPN cifrado de extremo a extremo a una ubicación de confianza para todo su tráfico de Internet con el fin de eludir cualquier dispositivo de inspección de red. 

Para cualquier consulta sobre nuestras investigaciones publicadas en WeLiveSecurity, puedes contactarnos en threatintel@eset.com.

ESET Research ofrece informes privados de inteligencia APT y feeds de datos. Para cualquier consulta sobre este servicio, visita la página de ESET Threat Intelligence.

IoCs

Files

SHA-1

Filename

Detection

Description

02790DC4B276DFBB26C714F29D19E53129BB6186

index.html

JS/TrojanDownloader.Agent.YJJ

Fake Windows update webpage.

6EFF58EDF7AC0FC60F0B8F7E22CFE243566E2A13

jdrop.js

JS/TrojanDownloader.Agent.YJJ

JavaScript code that triggers the download prompt of the fake Windows update.

E65EB4467DDB1C99B09AE87BA0A964C36BAB4C30

MicrosoftUpdate845255.exe

WinGo/Agent.ET

Disco dropper.

3A9B699A25257CBD0476CB1239FF9B25810305FE

driverpackUpdate.exe

WinGo/Runner.B

Disco plugin. Executes PowerShell scripts.

19E3D06FBE276D4AAEA25ABC36CC40EA88435630

DPU.exe

WinGo/Runner.C

Disco plugin. Executes PowerShell scripts.

52BE04C420795B0D9C7CD1A4ACBF8D5953FAFD16

sdrive.exe

Win64/Exploit.CVE-2021-1732.I

Disco plugin. LPE exploit for CVE-2021-1732.

0241A01D4B03BD360DD09165B59B63AC2CECEAFB

nod32update.exe

WinGo/Agent.EV

Disco plugin. Reverse proxy based on revsocks.

A01F1A9336C83FFE1B13410C93C1B04E15E2996C

aact.exe

WinGo/Spy.Agent.W

Disco plugin. Takes screenshots.

C2AA90B441391ADEFAA3A841AA8CE777D6EC7E18

officetelemetry.exe

WinGo/Agent.BT

Disco plugin. Reverse proxy based on revsocks.

C5B2323EAE5E01A6019931CE35FF7623DF7346BA

oracleTelemetry.exe

WinGo/Spy.Agent.W

Disco plugin packed with Themida. Takes screenshots.

C46CB98D0CECCB83EC7DE070B3FA7AFEE7F41189

outlooksync.exe

WinGo/Spy.Agent.W

Disco plugin. Takes screenshots.

A3AE82B19FEE2756D6354E85A094F1A4598314AB

kb4480959_EdgeUpdate.exe

MSIL/TrojanDropper.Agent.FKQ

Disco .NET dropper.

4F1CECF6D05571AE35ED00AC02D5E8E0F878A984

WinSrcNT.exe

Win32/Nightclub.B

NightClub plugin used by Disco. Steals recent files.

0DAEA89F91A55F46D33C294CFE84EF06CE22E393

It11.exe

Win32/Nightclub.B

NightClub plugin used by Disco. Steals recent files.

11CF38D971534D9B619581CEDC19319962F3B996

It3.exe

Win32/Nightclub.B

NightClub plugin used by Disco. Makes raw dumps of removable drives.

F92FE4DD679903F75ADE64DC8A20D46DFBD3B277

metamn.dll

Win64/Nightclub.B

NightClub (2017 version).

6999730D0715606D14ACD19329AF0685B8AD0299

et2z7q0FREZ.cr

Win64/Nightclub.B

NightClub plugin. Keylogger.

6E729E84C7672F048ED8AE847F20A0219E917FA3

sTUlsWa1.cr

Win64/Nightclub.A

NightClub plugin.  File stealer.

0401EE7F3BC384734BF7E352C4C4BC372840C30D

EsetUpdate-0117583943.exe

Win32/Nightclub.C

NightClub dropper.

5B55250CC0DA407201B5F042322CFDBF56041632

creh.dll

Win32/Nightclub.C

NightClub (2014).

D14D9118335C9BF6633CB2A41023486DACBEB052

svhvost.exe

Win32/Nightclub.D

Orchestrator (NightClub).

E6DE72516C1D4338D7E45E028340B54DCDC7A8AC

schvost.exe

Win32/Nightclub.D

Module agent (NightClub).

3AD77281640E7BA754E9B203C8B6ABFD3F6A7BDD

nullnat.ini

Win32/Nightclub.D

Backdoor with DNS tunneling (NightClub plugin).

142FF0770BC6E3D077FBB64D6F23499D9DEB9093

soccix.ini

Win32/Nightclub.D

Keylogger (NightClub plugin).

FE9527277C06D7F986161291CE7854EE79788CB8

oreonion.ini

Win32/Nightclub.D

Screenshotter (NightClub plugin).

92115E21E565440B1A26ECC20D2552A214155669

svhvost.exe

Win32/Nightclub.D

Orchestrator (NightClub).

DE0B38E12C0AF0FD63A67B03DD1F8C1BF7FA6128

schvost.exe

Win32/Nightclub.D

Module agent (NightClub).

D2B715A72BBA307CC9BF7690439D34F62EDF1324

sysleg.ini

Win32/Nightclub.D

Records audio (NightClub plugin).

DF8DED42F9B7DE1F439AEC50F9C2A13CD5EB1DB6

oreonion.ini

Win32/Nightclub.D

Takes screenshots (NightClub plugin).

C&C servers

IP

Domain

First seen

Comment

185.87.148[.]86

centrocspupdate[.]com

November 3, 2021

Suspected NightClub C&C server.

185.87.151[.]130

ocsp-atomsecure[.]com

November 11, 2021

Suspected NightClub C&C server.

45.136.199[.]67

securityocspdev[.]com

July 5, 2022

NightClub C&C server.

45.136.199[.]129

dervasopssec[.]com

October 12, 2022

Suspected NightClub C&C server.

“Fake” domains used in AitM

Note: These domains are used in a context where DNS queries are intercepted before reaching the internet. They do not resolve outside the context of the AitM attack.

windows.network.troubleshooter[.]com

updates.microsoft[.]com

 

SMB share IP addresses while AitM is ongoing

Note: These IP addresses are used in a context where traffic to them is intercepted before reaching the internet. These internet-routable IP addresses are not malicious outside the context of the AitM attack.

24.9.51[.]94

35.214.56[.]2

38.9.8[.]78

52.3.8[.]25

59.6.8[.]25

209.19.37[.]184

Email addresses

fhtgbbwi@mail[.]ru

nvjfnvjfnjf@mail[.]ru

glen.morriss75@seznam[.]cz

SunyaF@seznam[.]cz

MITRE ATT&CK techniques

This table was built using version 13 of the MITRE ATT&CK framework.

Tactic

ID

Name

Description

Reconnaissance

T1590.005

Gather Victim Network Information: IP Addresses

MoustachedBouncer operators have collected IP addresses, or address blocks, of their targets in order to modify network traffic for just those addresses.

Initial Access

T1189

Drive-by Compromise

Disco is delivered via a fake Windows Update website.

Execution

T1204.002

User Execution: Malicious File

Disco needs to be manually executed by the victim.

Persistence

T1053.005

Scheduled Task/Job: Scheduled Task

Disco persists as a scheduled task that downloads an executable from a “fake” SMB share every minute.

T1543.003

Create or Modify System Process: Windows Service

NightClub persists as a ServiceDll of a service named WmdmPmSp.

Privilege Escalation

T1068

Exploitation for Privilege Escalation

Disco has a plugin to exploit the CVE-2021-1732 local privilege escalation vulnerability.

Defense Evasion

T1140

Deobfuscate/Decode Files or Information

Since 2020, NightClub has used an external configuration file encrypted with RSA.

Collection

T1005

Data from Local System

NightClub steals recent files from the local system.

T1025

Data from Removable Media

NightClub steals files from the local system.

T1056.001

Input Capture: Keylogging

NightClub has a plugin to record keystrokes.

T1113

Screen Capture

NightClub and Disco each have a plugin to take screenshots.

T1123

Audio Capture

NightClub has a plugin to record audio.

Command and Control

T1071.002

Application Layer Protocol: File Transfer Protocols

Disco communicates via the SMB protocol.

T1071.003

Application Layer Protocol: Mail Protocols

NightClub communicates via the SMTP protocol.

T1071.004

Application Layer Protocol: DNS

One of the NightClub plugins is a backdoor that communicates via DNS.

T1132.001

Data Encoding: Standard Encoding

NightClub encodes files, attached to email, in base64.

T1132.002

Data Encoding: Non-Standard Encoding

NightClub encodes commands and responses sent via its DNS C&C channel with a modified form of base64.

T1573.001

Encrypted Channel: Symmetric Cryptography

NightClub receives plugins in email attachments, encrypted using AES-CBC.

T1557

Adversary-in-the-Middle

MoustachedBouncer has performed AitM at the ISP level to redirect its targets to a fake Windows Update page. It has also done AitM on the SMB protocol to deliver malicious files from “fake” servers.

Exfiltration

T1041

Exfiltration Over C2 Channel

NightClub and Disco exfiltrate data over the C&C channel (SMTP, SMB, and DNS).

Impact

T1565.002

Data Manipulation: Transmitted Data Manipulation

MoustachedBouncer has modified the HTTP traffic from specific IP addresses at the ISP level in order to redirect its targets to a fake Windows Update page.