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:
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 |
Victim A (2017) |
Victim B |
Victim C |
Victim D |
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.
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).
Al hacer click en el botón se ejecuta la función update, como se muestra en la imagen 4.
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.
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.
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.
Las tareas programadas son:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
La implementación el keylogger es mas vale tradicional, usando la función API GetKeyState de WindowsAPI – ver imagen 19.
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.
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 BCryptImportKeyPair y BCryptDecrypt.
La configuración se formatea en JSON, como se muestra en la imagen 22.
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 Starts. Estan 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>" "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.
"capture_on_key_press":"<value>",
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.
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.
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 + y -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 |
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 |
Drive-by Compromise |
Disco is delivered via a fake Windows Update website. |
|
Execution |
User Execution: Malicious File |
Disco needs to be manually executed by the victim. |
|
Persistence |
Scheduled Task/Job: Scheduled Task |
Disco persists as a scheduled task that downloads an executable from a “fake” SMB share every minute. |
|
Create or Modify System Process: Windows Service |
NightClub persists as a ServiceDll of a service named WmdmPmSp. |
||
Privilege Escalation |
Exploitation for Privilege Escalation |
Disco has a plugin to exploit the CVE-2021-1732 local privilege escalation vulnerability. |
|
Defense Evasion |
Deobfuscate/Decode Files or Information |
Since 2020, NightClub has used an external configuration file encrypted with RSA. |
|
Collection |
Data from Local System |
NightClub steals recent files from the local system. |
|
Data from Removable Media |
NightClub steals files from the local system. |
||
Input Capture: Keylogging |
NightClub has a plugin to record keystrokes. |
||
Screen Capture |
NightClub and Disco each have a plugin to take screenshots. |
||
Audio Capture |
NightClub has a plugin to record audio. |
||
Command and Control |
Application Layer Protocol: File Transfer Protocols |
Disco communicates via the SMB protocol. |
|
Application Layer Protocol: Mail Protocols |
NightClub communicates via the SMTP protocol. |
||
Application Layer Protocol: DNS |
One of the NightClub plugins is a backdoor that communicates via DNS. |
||
Data Encoding: Standard Encoding |
NightClub encodes files, attached to email, in base64. |
||
Data Encoding: Non-Standard Encoding |
NightClub encodes commands and responses sent via its DNS C&C channel with a modified form of base64. |
||
Encrypted Channel: Symmetric Cryptography |
NightClub receives plugins in email attachments, encrypted using AES-CBC. |
||
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 |
Exfiltration Over C2 Channel |
NightClub and Disco exfiltrate data over the C&C channel (SMTP, SMB, and DNS). |
|
Impact |
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. |