Operación TA505, Parte Dos: Aprendizaje de la puerta trasera ServHelper con NetSupport RAT



A finales de julio de 2019, descubrimos una muestra interesante de malware TA505 . El 22 de julio de 2019, se cargó en ANY.RUN para un análisis dinámico. Nos llamó la atención el hecho de que entre las etiquetas expuestas, además de la habitual para el TA505 Servhelper, también apareció la etiqueta netsupport, y entre los incendios de la firma de la red, se identificó el mismo nombre NetSupport RAT.



Fig. 1. Fecha de descarga para malware y etiquetas establecidas en el analizador en línea ANY.RUN



Fig. 2. Activación de firma de red en NetSupport RAT en ANY.RUN Sandbox

A primera vista, esto puede parecer extraño: después de todo, la puerta trasera del grupo ServHelper tiene una funcionalidad impresionante para controlar la PC de la víctima. Es hora de considerar el trabajo del malware en detalle.

Cuentagotas NSIS y PowerShell


El archivo PE ejecutable desde el que comienza nuestro análisis es un instalador basado en la plataforma Nullsoft Scriptable Install System (NSIS). El script NSIS que realiza el proceso de instalación extrae y ejecuta el script PowerShell incorporado:



Fig. 3. Instrucciones de script NSIS

El script PowerShell lanzado contiene un búfer codificado en Base64 (truncado en la figura a continuación para mayor claridad), que después de la decodificación es descifrado por Triple DES (3DES) en modo CBC:



Fig. 4. Descifrado de datos en un script de PowerShell

La primera parte del script es una función con el nombre heller y es responsable de aumentar los privilegios en el sistema y evitar la protección UAC. Para esto se utilizan dos técnicas:

Técnica n. ° 1: uso de la tarea SilentCleanup en el programador de tareas:

  • El usuario puede iniciar la tarea, pero funciona con privilegios elevados. Las propiedades de la tarea contienen la ruta al archivo ejecutable utilizando la variable de entorno% windir%. Puede cambiar el valor de la variable de entorno (por ejemplo, especificar el inicio de un script de PowerShell), luego, al iniciar la tarea, se ejecutará el script de PowerShell con derechos de administrador sin avisar a UAC.
  • Los atacantes usan esta técnica en sistemas Windows 8 y Windows 10.
  • El código que ejecuta esta técnica es idéntico a la implementación del módulo para el marco Metasploit.



Fig. 5. Parte del script con la técnica de omitir la tarea SilentCleanup

Técnica n. ° 2: uso de la utilidad del sistema sysprep.exe y la técnica DLL de carga lateral

  • Primero, se crea un script auxiliar para reiniciar el script de PowerShell en el directorio C: \ Windows \ Temp. Luego se forma un archivo CAB , que contiene la biblioteca auxiliar DLL CRYPTBASE.dll (el script PowerShell contiene las versiones x86 y x64 de la biblioteca). Usando la utilidad del sistema wusa.exe, este archivo se descomprime en el directorio C: \ Windows \ System32 \ Sysprep. Luego, se inicia la utilidad del sistema sysprep.exe, que cargará la biblioteca DLL previamente desempaquetada y, a su vez, ejecutará el script auxiliar. Como resultado, el script de PowerShell se reiniciará con derechos de administrador sin avisar a UAC.
  • Los atacantes usan esta técnica en un sistema Windows 7.
  • Puede encontrar una descripción detallada en este artículo y ejemplos de implementación, por ejemplo, en este proyecto en Github.



Fig. 6. Parte de la secuencia de comandos con la técnica de omitir la utilidad sysprep.exe

Hay muchos comentarios en el script, una función Test-Administrator no utilizada, algunas variables se usan sin inicialización: todas estas son señales de pedir prestado el código sin verificar cuidadosamente la brevedad.

Después de ejecutar el script con los privilegios necesarios, se ejecuta la segunda parte del script. En esta etapa, las cargas útiles objetivo se decodifican:

  • la cadena es decodificada por Base64,
  • el búfer se expande usando Deflate ,
  • Base64 vuelve a decodificar la cadena.



Fig. 7. Algoritmo de decodificación de carga útil

  • Como resultado, se crearán los siguientes archivos en el sistema:
  • % systemroot% \ help \ hlp11.dat: versión x86 / x64 de la biblioteca RDP Wrapper . Se utiliza para ampliar la funcionalidad del servicio RDP, incluida la posibilidad de varias conexiones simultáneas. Es importante tener en cuenta que la biblioteca se modifica: al comienzo de la ejecución, la línea c: \ windows \ help \ hlp12.dat se decodifica con XOR lineal, luego la DLL se carga en la ruta recibida:



Fig. 8. Descifrado de la ruta a la biblioteca DLL y su carga

  • % systemroot% \ help \ hlp12.dat es la versión x86 / x64 de la puerta trasera ServHelper, que se discutirá en la siguiente sección;
  • % systemroot% \ help \ hlp13.dat: archivo de configuración para la biblioteca RDP Wrapper,
  • % systemroot% \ system32 \ rdpclip.exe: un componente del servicio RDP para la capacidad de intercambiar datos del portapapeles;
  • % systemroot% \ system32 \ rfxvmt.dll es un componente de servicio RDP para transmitir datos utilizando tecnologías RemoteFX .

Después de extraer y registrar la carga útil, el script configura el funcionamiento correcto de sus componentes:

  • cambia el propietario del componente rfxvmt.dll a NT SERVICE \ TrustedInstaller y le otorga los derechos necesarios;
  • Cambia el valor del puerto para las conexiones RDP del estándar 3389 a 7201;
  • Agrega una cuenta de servicios de red al grupo de administradores locales.
  • registra hlp11.dat como un servicio RDP y reinicia el servicio;
  • elimina los archivos temporales creados.

ServHelper RAT → Cuentagotas


Uno de los resultados de los droppers es la DLL hlp12.dat, que es un malware ServHelper. Se pueden crear versiones x86 y x64 de la biblioteca según el tamaño de bits del sistema operativo (no hay diferencias fundamentales entre ellas). Ambas versiones están escritas en Delphi, empaquetadas con UPX 3.95 (x64) y PeCompact 2.20 (x86). Nuestros colegas de Proofpoint y Trend Micro presentaron previamente un análisis de la distribución y el funcionamiento de esta puerta trasera. El arsenal de capacidades de nuestra muestra en muchos aspectos converge con lo que ya se conoce: en particular, el algoritmo para descifrar las cadenas utilizadas ( cifrado de Vigenere ) no ha cambiado:



Fig. 9. Pseudocódigo para descifrar cadenas utilizando el cifrado Vigenere

Curiosamente, el cifrado no se implementa para todas las cadenas: por ejemplo, las direcciones de los dominios de control y los enlaces web con componentes adicionales permanecen abiertos:



Fig. 10. Dominios no cifrados y enlaces web

Al acceder a uno de estos enlaces (hxxp: //letitbe.icu/2.txt), se descarga un archivo cifrado (MD5: 0528104f496dd13438dd764e747d0778). Al analizar el final de un archivo en un editor hexadecimal, puede observar repeticiones frecuentes del valor del byte 0x09:



Fig. 11. Repita el byte 0x09 en el archivo descargado

Los valores de bytes duplicados son un signo común de usar un XOR de un solo byte como cifrado. En este caso, el código confirma esta teoría:



Fig. 12. Función de cifrado XOR de un solo byte



Fig. 13. Pasar un valor de un solo byte a la función XOR como argumento

Como resultado del descifrado, recibiremos un archivo ZIP con los siguientes contenidos:



Fig. 14. Contenido del archivo ZIP descifrado

Todos los archivos son software legítimo para el control remoto de la PC de NetSupport Manager, que ha sido utilizada repetidamente por atacantes de varios grupos.



Fig. 15. Descripción del software NetSupport Manager

Uno de los archivos (client32.ini) es un archivo de configuración, que contiene la dirección de la puerta de enlace intermedia a través de la cual la PC de la víctima se conectará a los atacantes:



Fig. 16. Los atacantes se dirigen como NetSupport Manager Gateway

Esta opción tiene sentido si la víctima está detrás de un firewall y el acceso a Internet está limitado por el puerto. Para funcionar correctamente en Internet, debe abrir el acceso a al menos dos puertos, 80 (HTTP) y 443 (HTTPS), por lo que aumenta la probabilidad de una conexión exitosa.

En septiembre de 2019, descubrimos varias muestras de ServHelper similares con una gama de opciones significativamente limitada. Usando uno de ellos como ejemplo (MD5: 5b79a0c06aec6126364ce1d5cbfedf66): entre los recursos de un archivo PE ejecutable hay datos cifrados con una característica similar en forma de un byte repetitivo:



Fig. 17. Datos cifrados en recursos ServHelper
Este es un archivo ZIP nuevamente "obstruido" con un byte, que contiene los mismos componentes de NetSupport Manager, aunque esta vez con una puerta de enlace intermedia diferente: 179 [.] 43.146.90: 443.

Conclusiones


En este artículo, examinamos una de las opciones para la entrega y el uso de la puerta trasera TA505: ServHelper. Además de las características curiosas que precedieron a la operación del componente principal (por ejemplo, omitiendo UAC y escalando privilegios), notamos interesantes metamorfosis de la puerta trasera principal: la funcionalidad básica (robo de datos, espionaje y ejecución de comandos) se complementó al incorporar otra herramienta para control remoto de PC: NetSupport RAT. Además, las nuevas versiones de ServHelper ya no tenían las características clave que lo convierten en una puerta trasera completa: ahora solo sirve como un cuentagotas intermedio para instalar NetSupport RAT. Probablemente, los atacantes encontraron este enfoque más efectivo tanto en términos de desarrollo como en términos de capacidades de detección. Sin embargo, la lista de herramientas grupales que nos interesan no termina ahí.

Publicado por Alexey Vishnyakov, Tecnologías positivas
COI
hxxp: //185.225.17.175/wrkn157.exe: el enlace web desde el que se cargó el cuentagotas NSIS
d2a062ca772fa3ace7c7edadbd95eaf7: el cuentagotas NSIS original
0cacea3329f35e88a4f9619190e3746f - Cuentagotas PowerShell shipkat.ps1
fb609b00e29689db74c853ca7d69f440 - CRYPTBASE.dll (x86)
843288a35906aa90b2d1cc6179588a26 - CRYPTBASE.dll (x64)
445cd6df302610bb640baf2d06438704 - hlp11.dat (x86)
083f66cc0e0f626bbcc36c7f143561bd - hlp11.dat (x64)
40bae264ea08b0fa115829c5d74bf3c1 - hlp12.dat (x86)
ac72ab230608f2dca1da1140e70c92ad - hlp12.dat (x64)
07f1dc2a9af208e88cb8d5140b54e35e - hlp13.dat
1690e3004f712c75a2c9ff6bcde49461 - rdpclip.exe
dc39d23e4c0e681fad7a3e1342a2843c - rfxvmt.dll
ServHelper C2:
179 [.] 43.156.32
185 [.] 163.45.124
185 [.] 163.45.175
185 [.] 225.17.150
185 [.] 225.17.169
185 [.] 225.17.175
185 [.] 225.17.98
195 [.] 123.221.66
195 [.] 123.246.192
37 [.] 252.8.63
94 [.] 158.245.123
94 [.] 158.245.154
94 [.] 158.245.232
fdguyt5ggs [.] pw
foxlnklnk [.] xyz
gidjshrvz [.] xyz
letitbe [.] icu
pofasfafha [.] xyz
0528104f496dd13438dd764e747d0778 - archivo ZIP cifrado con NetSupport RAT
Componentes de NetSupport Manager:
953896600dfb86750506706f1599d415 - cksini.exe
8d9709ff7d9c83bd376e01912c734f0a - client32.exe
2d3b207c8a48148296156e5725426c7f - HTCTL32.DLL
0e37fbfa79d349d672456923ec5fbbe3 - msvcr100.dll
26e28c01461f7e65c402bdf09923d435 - nskbfltr.inf
88b1dab8f4fd1ae879685995c90bd902 - NSM.ini
7067af414215ee4c50bfcd3ea43c84f0 - NSM.LIC
dcde2248d19c778a41aa165866dd52d0 - pcicapi.dll
a0b9388c5f18e27266a31f8c5765b263 - PCICHEK.DLL
00587238d16012152c2e951a087f2cc9 - PCICL32.DLL
2a77875b08d4d2bb7b654db33a88f16c - remcmdstub.exe
eab603d12705752e3d268d86dff74ed4 - TCCTL32.DLL
185 [.] 225.17.66: 443 - Dirección NetSupport RAT Gateway
5b79a0c06aec6126364ce1d5cbfedf66 - ServHelper con archivo NetSupport RAT
179 [.] 43.146.90: 443 - NetSupport RAT GatewayAddress

Source: https://habr.com/ru/post/471960/


All Articles