Los investigadores de ESET descubrieron una campaña que atribuimos con mucha confianza al grupo de APT Tick. El incidente tuvo lugar en la red de una empresa del este de Asia que desarrolla software de prevención de pérdida de datos (DLP, por sus siglas en inglés).

Los atacantes comprometieron los servidores de actualización internos de la compañía de DLP para desplegar malware dentro de la red del desarrollador de software y troyanizaron instaladores de herramientas legítimas utilizadas por la empresa, lo que eventualmente resultó en la ejecución de malware en las computadoras de los clientes de la compañía.

En esta publicación compartimos los detalles técnicos del malware detectado en las redes de la empresa desarrolladora del software y de sus clientes. Durante la intrusión, los atacantes desplegaron un downloader que no había sido documentado previamente llamado ShadowPy, y también desplegaron el backdoor Netboy (también conocido como Invader) y el downloader Ghostdown.

De acuerdo al perfil del grupo Tick y la cartera de clientes de alto valor de la empresa comprometida, lo más probable es que el objetivo del ataque fuera el ciberespionaje. Se desconoce cómo fue que se comprometió inicialmente a la compañía de prevención de pérdida de datos.

Puntos clave de esta publicación:

  • Los investigadores de ESET descubrieron un ataque que se produjo en la red de una empresa que desarrolla software de prevención de pérdida de datos (DLP) del este de Asia que cuenta con una cartera de clientes que incluye entidades gubernamentales y militares.
  • Los investigadores de ESET atribuyen este ataque al grupo de APT Tick.
  • Los atacantes desplegaron al menos tres familias de malware y comprometieron los servidores de actualización y las herramientas utilizadas por la empresa. Como resultado, dos de sus clientes se vieron comprometidos.
  • La investigación reveló un downloader previamente no documentado llamado ShadowPy.

Descripción del grupo de APT Tick

Tick ​​(también conocido como BRONZE BUTLER o REDBALDKNIGHT) es un grupo APT que se cree está activo desde al menos 2006 y que apunta principalmente a países de la región de Asia-Pacífico. Este grupo es de interés por sus operaciones de ciberespionaje, las cuales se enfocan en robar información clasificada y propiedad intelectual.

Tick ​​utiliza malware personalizado diseñado para acceder y persistir en las máquinas comprometidas, así como realizar reconocimiento, exfiltración de datos y descarga de herramientas maliciosas. En 2021 observamos que el grupo Tick estuvo explotando la vulnerabilidad ProxyLogon para lograr comprometer a una empresa de TI de Corea del Sur antes de que la vulnerabilidad se divulgara públicamente. Si bien en ese entonces aún era una vulnerabilidad zero-day, el grupo usó un exploit para instalar un webshell para desplegar un backdoor en un servidor web.

Descripción del ataque

En marzo de 2021, por medios desconocidos, los atacantes obtuvieron acceso a la red de una empresa desarrolladora de software del este de Asia.

Los atacantes implementaron malware persistente y reemplazaron los instaladores de una aplicación legítima conocida como Q-Dir con copias troyanizadas que, cuando se ejecutaban, dropeaban un backdoor en VBScript de código abierto llamado ReVBShell, así como una copia de la aplicación legítima Q-Dir. Esto derivó en la ejecución de código malicioso en las redes de dos de los clientes de la empresa comprometida cuando los instaladores troyanizados se transfirieron a través de un software de soporte remoto. Nuestra hipótesis es que esto ocurrió mientras la compañía desarrolladora del software de DLP brindaba soporte técnico a sus clientes.

Los atacantes también comprometieron los servidores de actualización, que en dos ocasiones distribuyeron actualizaciones maliciosas a las máquinas dentro de la red de la compañía de DLP. Usando la telemetría de ESET, no detectamos ningún otro caso de actualizaciones maliciosas fuera de la red de la compañía.

La cartera de clientes de la empresa de prevención de pérdida de datos incluye entidades gubernamentales y militares, lo que la convierte en un objetivo especialmente atractivo para un grupo de APT como Tick.

Línea de tiempo

Según la telemetría de ESET, en marzo de 2021 los atacantes desplegaron malware en varias máquinas de la empresa desarrolladora de software. El malware incluía variantes de las familias Netboy y Ghostdown, y un downloader previamente no documentado llamado ShadowPy.

En abril, los atacantes comenzaron a introducir copias troyanizadas de los instaladores de Q-dir en la red de la empresa comprometida.

En junio y septiembre de 2021, en la red de la empresa comprometida, el componente que realiza las actualizaciones del software desarrollado por la empresa comprometida descargó un paquete que contenía un ejecutable malicioso.

En febrero y junio de 2022, los instaladores de Q-dir troyanizados fueron transferidos a los clientes de la empresa comprometida a través de herramientas de soporte remoto.

Figura 1. Cronología del ataque e incidentes relacionados.

Servidores de actualización comprometidos

El primer incidente en el que se registró una actualización que contenía malware fue en junio y luego nuevamente en septiembre de 2021. En ambos casos, la actualización se envió a máquinas dentro de la red de la compañía de DLP.

La actualización venía en forma de un archivo ZIP que contenía un archivo ejecutable malicioso. Fue desplegado y ejecutado por un agente de actualización legítimo desde el software desarrollado por la empresa comprometida. La cadena de compromiso se ilustra en la Figura 2.

Figura 2. Ilustración de la cadena de compromiso

El primer caso detectado ocurrió en junio de 2021 y la actualización se descargó y desplegó desde un servidor interno. El segundo caso ocurrió en septiembre de 2021, desde un servidor público.

El ejecutable malicioso emite una petición HTTP GET a http://103.127.124[.]117/index.html para obtener la clave para descifrar el payload embebido, que está cifrado con el algoritmo RC6. El payload se coloca en el directorio %TEMP% con un nombre aleatorio y una extensión .vbe y luego se ejecuta.

Aunque no obtuvimos la muestra droppeada en la máquina comprometida, según la detección (VBS/Agent.DL), tenemos confianza en que el script detectado era el backdoor de código abierto ReVBShell.

Con la telemetría de ESET no identificamos a ningún cliente de la compañía de DLP que hubiera recibido archivos maliciosos a través del software desarrollado por esa empresa. Nuestra hipótesis es que los atacantes comprometieron los servidores de actualización para moverse lateralmente en la red, no para realizar un ataque de cadena de suministro contra clientes externos.

Instaladores Q-Dir troyanizados

Q-Dir es una aplicación legítima desarrollada por SoftwareOK que permite a un usuario navegar por cuatro carpetas al mismo tiempo dentro de la misma ventana, como se muestra en la Figura 3. Teniendo en cuenta dónde se originaron las detecciones dentro de la red, creemos que la aplicación legítima es parte de un conjunto de herramientas utilizado por los empleados de la empresa comprometida.

Figura 3. Captura de pantalla de la aplicación Q-Dir

Según los datos de la telemetría de ESET, a partir de abril de 2021, dos meses antes de la detección de las actualizaciones maliciosas, los atacantes comenzaron a introducir en la red de la empresa comprometida instaladores troyanizados de la aplicación de 32 y 64 bits.

Encontramos dos casos, en febrero y junio de 2022, donde los instaladores troyanizados fueron transferidos por las herramientas de soporte remoto helpU y ANYSUPPORT, a computadoras de dos empresas ubicadas en el este de Asia, una que está en el sector de la ingeniería y otra de la industria manufacturera.

Estas computadoras tenían instalado el software de la empresa comprometida, y el instalador Q-dir troyanizado fue recibido minutos después de que los usuarios instalaran el software de soporte.

Nuestra hipótesis es que los clientes de la compañía de DLP comprometida estaban recibiendo soporte técnico de esa empresa mediante una de esas aplicaciones de soporte remoto y el instalador malicioso se utilizó sin saberlo para atender a los clientes de la compañía de DLP. Es poco probable que los atacantes instalaran herramientas de soporte para transferir ellos mismos los instaladores troyanizados.

Instalador de 32 bit

La técnica utilizada para troyanizar el instalador consiste en inyectar shellcode en una cavidad al final de la tabla de encabezados de sección: la aplicación se compiló usando 0x1000 para FileAlignment y SectionAlignment, dejando una cavidad de 0xD18 bytes —lo suficientemente grande como para acomodar la posición maliciosa del shellcode. El código del punto de entrada de la aplicación está parcheado con una instrucción JMP que apunta al shellcode y se encuentra justo después de la llamada a WinMain (Figura 4); por lo tanto, el código malicioso solo se ejecuta después de que el código legítimo de la aplicación finaliza su ejecución.

Figura 4. El código assembly muestra la instrucción JMP que desvía el flujo de ejecución al shellcode. El volcado hexadecimal muestra el shellcode al final de la sección encabezados de los PE.

El shellcode, que se muestra en la Figura 5, descarga un paylaod sin cifrar de http://softsrobot[.]com/index.html a %TEMP%\ChromeUp.exe de forma predeterminada; si no se puede crear el archivo, obtiene un nuevo nombre utilizando la API GetTempFileNameA .

Figura 5. Código descompilado de la función que orquesta la descarga del archivo binario y su escritura en el disco

Instalador de 64 bit

Si bien solo se encontró un instalador malicioso de 32 bits, los instaladores de 64 bits se detectaron en varios lugares de la red de la empresa de DLP. El instalador contiene la aplicación Q-Dir y un backdoor ReVBShell codificado (VBE) que fue personalizado por los atacantes. Ambos fueron comprimidos con LZO y cifrados con RC6. Los archivos son droppeados en el directorio %TEMP% y se ejecutan.

ReVBShell

ReVBShell es un backdoor de código abierto con capacidades muy básicas. El código de backdoor está escrito en VBScript y el código del controlador está escrito en Python. La comunicación con el servidor se realiza a través de HTTP con solicitudes GET y POST.

El backdoor admite varios comandos, incluidos:

  • Obtener el nombre de la computadora, el nombre del sistema operativo, la arquitectura y la versión de idioma del sistema operativo
  • Obtener nombre de usuario y nombre de dominio
  • Obtener información del adaptador de red
  • Listado de procesos en ejecución
  • Ejecutar comandos de shell y enviar la información de salida
  • Cambiar el directorio actual
  • Descargar un archivo desde una URL determinada
  • Cargar un archivo solicitado

Creemos que los atacantes usaron la versión 1.0 de ReVBShell.

Más sobre el compromiso de la compañía de DLP

En esta sección compartimos más detalles de las herramientas y las familias de malware que el grupo de APT Tick desplegó en la red de la compañía de software comprometida.

Para mantener persistencia los atacantes desplegaron DLL de loaders maliciosos junto con aplicaciones legítimas firmadas que eran vulnerables a la técnica DLL search-order hijacking. El propósito de estas DLL es decodificar e inyectar un payload en un proceso designado (en todos los casos de este incidente, todos los loaders fueron configurados para inyectar en svchost.exe).

El payload en cada loader es una de las tres familias de malware: ShadowPy, Ghostdown o Netboy. La figura 6 ilustra el proceso de carga.

Figura 6. Descripción del proceso de carga del malware del grupo Tick

En este informe nos centraremos en analizar el downloader ShadowPy y el backdoor Netboy.

ShadowPy

ShadowPy es un downloader desarrollado en Python y convertido en un ejecutable de Windows utilizando una versión personalizada de py2exe. El downloader contacta con su C&C para obtener scripts de Python para ejecutar.

De acuerdo a nuestros hallazgos, creemos que el malware se desarrolló al menos dos años antes del compromiso de la empresa de DLP en 2021. No hemos observado ningún otro incidente en el que se haya desplegado ShadowPy.

Loader py2exe personalizado

Como se describió anteriormente, la DLL maliciosa del loader se inicia a través de la carga lateral de DLL. En el caso de ShadowPy, observamos que vssapi.dll fue cargado lateralmente por avshadow.exe, un componente de software legítimo del paquete de software de seguridad Avira.

La DLL maliciosa contiene tres componentes principales: el loader personalizado py2exe, el motor Python y el código PYC. Primero, el código de la DLL del loader localiza el loader py2exe personalizado en su overlay y lo descifra usando un XOR que conserva NULL usando 0x56 como clave, luego lo carga en la memoria y lo inyecta en un nuevo proceso svchost.exe que crea. Luego, el punto de entrada del loader py2exe personalizado se ejecuta en el proceso remoto. La diferencia entre el código del loader py2exe original y la versión personalizada utilizada por Tick es que el loader personalizado lee el contenido del vssapi.dll malicioso del disco y busca en el overlay el motor de Python y el código PYC, mientras que el original localiza el motor y el código PYC en la sección de recursos.

La cadena de carga se ilustra en la Figura 7.

Figura 7. Descripción general de los pasos para ejecutar el payload de PYC

Downloader en Python

El código PYC es un downloader simple cuyo propósito es recuperar un script de Python y ejecutarlo en un nuevo hilo. Este downloader elige aleatoriamente una URL de una lista (aunque en las muestras que analizamos solo había una URL presente) y crea una ID única para la máquina comprometida mediante la creación de una string compuesta por los siguientes datos:

  • Dirección IP local de la máquina
  • Dirección MAC
  • Nombre de usuario (como lo devuelve la variable de entorno %username%)
  • Dominio y nombre de usuario (resultados del comando whoami)
  • Nombre de la red de la computadora (tal como lo devuelve la función platform.node de Python)
  • Información del sistema operativo (según lo devuelto por la función platform.platform de Python)
  • Información de arquitectura (tal como la devuelve la función platform.architecture de Python)

Finalmente, usa abs(zlib.crc32(<STRING>)) para generar el valor que servirá como ID. La ID se inserta en medio de una string compuesta por caracteres aleatorios y se ofusca aún más, luego se agrega a la URL como se muestra en la Figura 8.

Figura 8. Código Python descompilado que prepara la URL, agregando el ID de usuario único ofuscado

Emite una solicitud HTTP GET a travelasist[.]com para recibir un nuevo payload que es descifrado con XOR mediante una clave fija de un solo byte, 0xC3, luego decodificado en base64. El resultado se descifra utilizando el algoritmo AES en modo CFB con una clave de 128 bits y IV proporcionado con el payload. Por último, se descomprime usando zlib  y se ejecuta en un nuevo hilo.

Netboy

Netboy (también conocido como Invader) es un backdoor programado en Delphi que admite 34 comandos que permiten a los atacantes realizar capturas la pantalla, registrar eventos de mouse y del teclado en la máquina comprometida, manipular archivos y servicios y obtener información del sistema y la red, entre otras capacidades.

Protocolo Network

Netboy se comunica con su servidor de C&C a través de TCP. El formato de paquete utilizado para intercambiar información entre el backdoor y su C&C se describe en la Figura 9.

Figura 9. Ilustración del formato de paquete del C&C implementado por Netboy

Para realizar fingerprint de sus paquetes genera dos números aleatorios (los dos primeros campos en el encabezado) que se someten a XOR (como se muestra en la Figura 10) para formar un tercer valor que se usa para validar el paquete.

Figura 10. Código descompilado que genera dos números aleatorios y los combina para generar un valor de fingerprint de paquete

La validación de paquete se muestra en la Figura 11, cuando el backdoor recibe un nuevo comando de su controlador.

Figura 11. Código descompilado que realiza la validación de un paquete recién recibido

El encabezado del paquete también contiene el tamaño de los datos comprimidos cifrados, el tamaño de los datos sin comprimir y el tamaño (DWORD) de otro campo que contiene un número aleatorio (no utilizado para la validación) que se antepone a los datos antes de comprimirlos, tal como se observa en la Figura 12.

Figura 12. Código descompilado que crea un nuevo paquete para enviar al controlador

Para la compresión, Netboy utiliza una variante de la familia de algoritmos de compresión LZRW y para el cifrado utiliza el algoritmo RC4 con una clave de 256 bits formada por caracteres ASCII.

Comandos de backdoor

Netboy admite 34 comandos; sin embargo, en la Tabla 1 describimos solo 25 de los más destacados que brindan a los atacantes ciertas capacidades en los sistemas comprometidos.

Tabla 1. Comandos de backdoor más interesantes de Netboy

Command ID Description
0x05 Create new TCP socket and store received data from its controller to a new file.
0x06 Create new TCP socket and read file; send contents to the controller.
0x08 Gets local host name, memory information, system directory path, and configured operating hours range for the backdoor (for example, between 14-18).
0x0A List network resources that are servers.
0x0B List files in a given directory.
0x0C List drives.
0x0E Execute program with ShellExecute Windows API.
0x0F Delete file.
0x10 List processes.
0x11 Enumerate modules in a process.
0x12 Terminate process.
0x13 Execute program and get output.
0x16 Download a new file from the server and execute with ShellExecute Windows API.
0x1D Create reverse shell.
0x1E Terminate shell process.
0x1F Get TCP and UDP connections information using the WinSNMP API.
0x23 List services.
0x24 Start service specified by the controller.
0x25 Stop service specified by the controller.
0x26 Create a new service. Details such as service name, description, and path are received from the controller.
0x27 Delete service specified by the controller.
0x28 Set TCP connection state.
0x29 Start screen capture and send to the controller every 10 milliseconds.
0x2A Stop screen capture.
0x2B Perform mouse and keyboard events requested by the controller.

Atribución

Atribuimos este ataque al grupo de APT Tick con mucha confianza en función del malware encontrado que ha sido previamente atribuido a Tick —y que según nuestro conocimiento no se ha compartido con otros grupos de APT— y de las similitudes de código entre ShadowPy y el loader utilizado por Netboy.

Además, los dominios utilizados por los atacantes para comunicarse con sus servidores de C&C se atribuyeron previamente a Tick en casos anteriores: waterglue[.]org en 2015 y softsrobot[.]com en 2020.

Actividad posiblemente relacionada

En mayo de 2022 los investigadores de AhnLab publicaron un informe sobre un actor de amenazas no identificado apuntando a entidades e individuos de Corea del Sur con archivos CHM que despliegan un ejecutable legítimo y una DLL maliciosa para realizar carga lateral. El propósito de la DLL es descomprimir, descifrar, droppear y ejecutar un script VBE en la carpeta %TEMP%. El script decodificado revela una vez más un backdoor ReVBShell.

Creemos que es probable que esa campaña esté relacionada con el ataque descrito en este informe, ya que el backdoor ReVBShell personalizado de ambos ataques es el mismo y existen múltiples similitudes de código entre el instalador malicioso de 64 bits (SHA-1: B9675D0EFBC4AE92E02B3BFC8CA04B01F8877DB6) y la muestra de quartz.dll (SHA-1: ECC352A7AB3F97B942A6BDC4877D9AFCE19DFE55) descrita por AhnLab.

Conclusión

Los investigadores de ESET descubrieron el compromiso de una compañía de prevención de pérdida de datos (DLP, por sus siglas en inglés) del este de Asia. Durante la intrusión, los atacantes desplegaron al menos tres familias de malware y comprometieron los servidores de actualización y las herramientas utilizadas por la empresa. Como resultado, dos clientes de la compañía se vieron comprometidos posteriormente.

Nuestro análisis de las herramientas maliciosas utilizadas durante el ataque reveló malware no documentado anteriormente, al que llamamos ShadowPy. Basándonos en las similitudes del malware encontrado durante la investigación, hemos atribuido el ataque con mucha confianza al grupo de APT Tick, conocido por sus campañas de ciberespionaje dirigidas a la región de Asia-Pacífico.

Nos gustaría agradecer a Cha Minseok de AhnLab por compartir información y muestras durante nuestra investigación.

Indicadores de Compromiso

Archivos

SHA-1 Filename ESET detection name Description
72BDDEAD9B508597B75C1EE8BE970A7CA8EB85DC dwmapi.dll Win32/Netboy.A Netboy backdoor.
8BC1F41A4DDF5CFF599570ED6645B706881BEEED vssapi.dll Win64/ShadowPy.A ShadowPy downloader.
4300938A4FD4190A47EDD0D333E26C8FE2C7451E N/A Win64/TrojanDropper.Agent.FU Trojanized Q‑dir installer, 64‑bit version. Drops the customized ReVBShell version A.
B9675D0EFBC4AE92E02B3BFC8CA04B01F8877DB6 N/A Win64/TrojanDropper.Agent.FU Trojanized Q‑dir installer, 64‑bit version. Drops the customized ReVBShell version B.
F54F91D143399B3C9E9F7ABF0C90D60B42BF25C9 N/A Win32/TrojanDownloader.Agent.GBY Trojanized Q-dir installer, 32-bit version.
FE011D3BDF085B23E6723E8F84DD46BA63B2C700 N/A VBS/Agent.DL Customized ReVBShell backdoor version A.
02937E4A804F2944B065B843A31390FF958E2415 N/A VBS/Agent.DL Customized ReVBShell backdoor version B.

Red

IP Provider First seen Details
115.144.69[.]108 KINX 2021‑04‑14 travelasist[.]com
ShadowPY C&C server
110.10.16[.]56 SK Broadband Co Ltd 2020‑08‑19 mssql.waterglue[.]org
Netboy C&C server
103.127.124[.]117 MOACK.Co.LTD 2020‑10‑15 Server contacted by the malicious update executable to retrieve a key for decryption.
103.127.124[.]119 MOACK.Co.LTD 2021-04-28 slientship[.]com
ReVBShell backdoor version A server.
103.127.124[.]76 MOACK.Co.LTD 2020‑06‑26 ReVBShell backdoor version B server.
58.230.118[.]78 SK Broadband Co Ltd 2022-01-25 oracle.eneygylakes[.]com
Ghostdown server.
192.185.89[.]178 Network Solutions, LLC 2020-01-28 Server contacted by the malicious 32-bit installer to retrieve a payload.

Técnicas de MITRE ATT&CK 

Esta tabla fue creada utilizando la versión 12 del framework MITRE ATT&CK.

Tactic ID Name Description
Initial Access T1195.002 Supply Chain Compromise: Compromise Software Supply Chain Tick compromised update servers to deliver malicious update packages via the software developed by the compromised company.
T1199 Trusted Relationship Tick replaced legitimate applications used by technical support to compromise customers of the company.
Execution T1059.005 Command and Scripting Interpreter: Visual Basic Tick used a customized version of ReVBShell written in VBScript.
T1059.006 Command and Scripting Interpreter: Python ShadowPy malware uses a downloader written in Python.
Persistence T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder Netboy and ShadowPy loaders persist via a Run key.
T1543.003 Create or Modify System Process: Windows Service Netboy and ShadowPy loaders persist by creating a service.
T1574.002 Hijack Execution Flow: DLL Side-Loading Netboy and ShadowPy loaders use legitimate service and description names when creating services.
Defense Evasion T1036.004 Masquerading: Masquerade Task or Service Netboy and ShadowPy loaders use legitimate service and description names when creating services.
T1036.005 Masquerading: Match Legitimate Name or Location Netboy and ShadowPy loaders use legitimate service and description names when creating services.
T1027 Obfuscated Files or Information Netboy, ShadowPy, and their loader use encrypted: payloads, strings, configuration. Loaders contain garbage code.
T1027.001 Obfuscated Files or Information: Binary Padding Netboy and ShadowPy loaders DLLs are padded to avoid security solutions from uploading samples.
T1055.002 Process Injection: Portable Executable Injection Netboy and ShadowPy loaders inject a PE into a preconfigured system process.
T1055.003 Process Injection: Thread Execution Hijacking Netboy and ShadowPy loaders hijack the main thread of the system process to transfer execution to the injected malware.
Discovery T1135 Network Share Discovery Netboy has network discovery capabilities.
T1120 Peripheral Device Discovery Netboy enumerates all available drives.
T1057 Process Discovery Netboy and ReVBShell have process enumeration capabilities.
T1082 System Information Discovery Netboy and ReVBShell, gather system information.
T1033 System Owner/User Discovery Netboy and ReVBShell, gather user information.
T1124 System Time Discovery Netboy uses system time to contact its C&C only during a certain time range.
Lateral Movement T1080 Taint Shared Content Tick replaced legitimate applications used by technical support, which resulted also in malware execution within the compromised network on previously clean systems.
Collection T1039 Data from Network Shared Drive Netboy and ReVBShell have capabilities to collect files.
T1113 Screen Capture Netboy has screenshot capabilities.
Command and Control T1071.001 Application Layer Protocol: Web Protocols ShadowPy and ReVBShell communicate via HTTP protocol with their C&C server.
T1132.001 Data Encoding: Standard Encoding Tick’s customized ReVBShell uses base64 to encode communication with their C&C servers.
T1573 Encrypted Channel Netboy uses RC4. ShadowPy uses AES.
Exfiltration T1041 Exfiltration Over C2 Channel Netboy and ReVBShell have exfiltration capabilities.
T1567.002 Exfiltration Over Web Service: Exfiltration to Cloud Storage Tick deployed a custom tool to download and exfiltrate files via a web service.