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.
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.
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.
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.
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 .
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.
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.
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.
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.
La validación de paquete se muestra en la Figura 11, cuando el backdoor recibe un nuevo comando de su controlador.
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.
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 | |
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. |