El 28 de octubre de 2024, la Policía Nacional holandesa, junto con el FBI, Eurojust y otras fuerzas de seguridad, desmantelaron la infame operación de malware como servicio (MaaS) RedLine Stealer y su clon META Stealer. Este esfuerzo global, denominado Operación Magnus, dio como resultado el desmantelamiento de tres servidores en los Países Bajos, la incautación de dos dominios, la detención de dos personas en Bélgica y la presentación de cargos contra uno de los presuntos autores en los Estados Unidos.

Ya en abril de 2023, ESET había participado en una operación de interrupción parcial del malware RedLine, que consistió en la eliminación de varios repositorios de GitHub utilizados como dead-drop resolvers para el panel de control del malware. Por aquel entonces, investigamos módulos backend no documentados anteriormente de esta familia de malware en colaboración con otros investigadores de Flare. Estos módulos no interactúan directamente con el malware, sino que gestionan la autenticación y proporcionan funcionalidad al panel de control.

Dado que RedLine ha sido retirado, estamos revelando públicamente nuestros hallazgos de 2023, junto con algunos descubrimientos más recientes que se hicieron sobre la base de código fuente y muestras compartidas con nosotros por la Policía Nacional Holandesa.

Hay que tener en cuenta que, incluso con el desmantelamiento, RedLine puede seguir funcionando hasta cierto punto durante un tiempo: los paneles que ya estaban en funcionamiento seguirían siendo capaces de recibir datos, aunque no pudieran construir nuevas muestras o volver a conectarse después de cerrar la sesión. Además, también existen copias antiguas y crackeadas del malware que podrían seguir funcionando. Debido a estos factores, describimos la operación RedLine como si se tratara de una actividad en curso.

Puntos clave del blogpost:
  • En 2023, los investigadores de ESET, en colaboración con las fuerzas de seguridad, recopilaron múltiples módulos utilizados para ejecutar la infraestructura detrás de RedLine Stealer.
  • Analizamos estos módulos previamente indocumentados para proporcionar información sobre el funcionamiento interno de este imperio del malware as a service.
  • Pudimos identificar más de 1.000 direcciones IP únicas utilizadas para alojar los paneles de control de RedLine.
  • Las versiones 2023 de RedLine Stealer que investigamos en detalle utilizaban Windows Communication Framework para la comunicación entre los componentes, mientras que la última versión de 2024 utiliza una API REST.
  • Basándonos en nuestro análisis del código fuente y las muestras de backend, hemos determinado que Redline Stealer y META Stealer comparten el mismo creador.

RedLine Stealer es un malware de robo de información descubierto por primera vez en 2020 por Proofpoint. En lugar de ser operado de forma centralizada, RedLine opera en un modelo MaaS en el que cualquiera puede comprar una solución de infostealer llave en mano en varios foros en línea y canales de Telegram. Los clientes, llamados afiliados, pueden optar por una suscripción mensual o una licencia de por vida; a cambio de su dinero, obtienen un panel de control que genera muestras de malware y actúa como servidor de C&C para ellos. Las muestras generadas pueden recopilar una gran variedad de información, como monederos locales de criptomonedas; cookies, credenciales guardadas y datos de tarjetas de crédito guardados de navegadores; y datos guardados de Steam, Discord, Telegram y varias aplicaciones VPN de escritorio.

El uso de una solución ya preparada facilita a los afiliados la integración de RedLine Stealer en campañas de mayor envergadura. Algunos ejemplos notables incluyen hacerse pasar por descargas gratuitas de ChatGPT en 2023, y hacerse pasar por tramposos de videojuegos en la primera mitad de 2024.

Nota sobre la terminología utilizada
 
Debido a su modelo MaaS, cualquier debate exhaustivo sobre RedLine implicará múltiples componentes y capas diferentes de infraestructura de red. Para limitar cualquier posible confusión, utilizaremos los siguientes términos de forma coherente a lo largo del texto:
  • Malware RedLine: El malware RedLine Stealer o una muestra del mismo.
  • Panel RedLine: Panel de control GUI utilizado para gestionar campañas de robo de información.
  • RedLine backend: Colección de módulos que proporcionan autenticación y funcionalidad para el panel RedLine.
  • RedLine: Toda la operación del malware. Incluye el malware RedLine, el panel RedLine y los módulos backend RedLine.
  • Servidor backend: Un servidor en el que se ejecuta el backend de RedLine.
  • Víctima: Entidad a la que se dirige el malware RedLine.
  • Operador: Persona o equipo que desarrolla RedLine, vende licencias y opera la infraestructura de licencias y backend asociada.
  • Afiliado: Entidad que opera campañas de robo de información a través de una instancia del panel RedLine. Normalmente tienen una licencia comprada al operador, pero también pueden utilizar una versión crackeada del panel.

Visión general

En este blogpost documentamos los módulos que se ejecutan en los servidores backend de RedLine para proporcionar una mayor comprensión del funcionamiento interno de este imperio MaaS. También proporcionamos información sobre el panel RedLine. La figura 1 contiene una visión simplificada de todo el funcionamiento de RedLine.

Normalmente, las muestras conocidas del panel RedLine que se distribuyen a los afiliados están muy empaquetadas y virtualizadas después de aplicar la primera capa de ofuscación. Pero mientras buscábamos en nuestra telemetría actividad relacionada con RedLine Stealer y su panel, nos encontramos con una versión antigua del panel RedLine que sólo estaba ofuscado con .NET Reactor, lo que facilitaba mucho su análisis.

Figure 1. Overview of actors and components involved in RedLine
Figura 1. Visión general de los actores y componentes implicados en RedLine

Conjunto de herramientas de RedLine

Todos los componentes de RedLine, desde el propio malware hasta el servidor de autenticación backend, están escritos en C# con el framework .NET. Las versiones que analizamos utilizaban el marco Windows Communication Foundation (WCF) para comunicarse entre sí. Este marco permite definir una API mediante contratos, que son declaraciones aplicadas a clases e interfaces para especificar cómo se traducen los objetos y las acciones entre su representación en el código y las comunicaciones de red. Así, los programas que interactúan utilizando este marco deben compartir las definiciones de estas estructuras de datos o clases. Estos modelos compartidos resultaron útiles en nuestro análisis de los componentes ofuscados.

Nótese que la última versión 2024 de RedLine utiliza una API REST en lugar de WCF para comunicarse con el backend.

Panel RedLine

Este panel de control es lo que los afiliados pueden comprar en foros y canales de Telegram. Las licencias se venden por 150 dólares al mes o 900 dólares por una licencia de por vida. A cambio del dinero, los afiliados obtienen una interfaz gráfica de usuario a través de la cual gestionan sus campañas, con funciones para configurar qué información recopilar, crear muestras de malware, ver y gestionar la información recopilada e integrarse con un bot de Telegram para vender la información robada.

Las versiones 2023 del panel que investigamos estaban fuertemente ofuscadas utilizando DNGuard, un conocido ofuscador .NET, y BoxedApp, un empaquetador comercial y biblioteca de virtualización. Por suerte para nosotros, RedLine utilizaba el marco WCF, por lo que el panel tenía que compartir algunas clases e interfaces con otros componentes. Analizando estos elementos compartidos de los componentes de malware y backend, que están menos protegidos, pudimos comprender gran parte de la funcionalidad del panel a pesar de las protecciones.

Todos los paneles RedLine de 2023 estaban firmados con certificados emitidos a AMCERT,LLC por Sectigo, que han sido revocados después de que informáramos de ellos. AMCERT,LLC corresponde a una empresa registrada en Armenia que no parece tener presencia online, algo bastante inusual para un supuesto desarrollador de software.

Autenticación

Para poder utilizar un panel RedLine, los afiliados deben autenticarse primero. La figura 2 muestra la pantalla de inicio de sesión.

Figure 2. RedLine panel login prompt
Figura 2. Mensaje de inicio de sesión en el panel RedLine

Los paneles RedLine que hemos analizado utilizan repositorios de GitHub, como el de la Figura 3, como dead-drop revolvers para sus servidores de autenticación. La dirección de este repositorio está codificada en el panel, pero no es la misma para todas las versiones del panel. Encontrar y eliminar varios de estos repositorios en colaboración con GitHub es lo que nos permitió interrumpir temporalmente las operaciones de RedLine en abril de 2023. Aunque la eliminación no afectó al backend del malware, obligó a los operadores a distribuir nuevas versiones de los paneles. Durante un breve periodo de tiempo tras la interrupción, trasladaron los dead-drop resolvers a Pastebin, antes de optar por utilizar sus propios dominios en mayo de 2023, tal y como describimos en nuestra charla conjunta con Flare en la Sleuthcon 2023. En la última versión del panel RedLine, los autores de la amenaza abandonaron por completo los resolvers de caída muerta y se limitaron a utilizar una URL codificada https://fivto[.]online/secure-api/. Encontrará más información sobre los dead-drop resolvers en la sección Infraestructura de red.

Al ejecutar los componentes del servidor backend en una red virtual, conseguimos crear cuentas de afiliados y autenticarnos con nuestra propia instancia sin tener que comprar una suscripción.

Figure 3. GitHub repository used as a dead-drop resolver
Figura 3. Repositorio de GitHub utilizado como dead-drop resolver

La primera pantalla que se muestra a los afiliados al iniciar sesión, que se ve en la Figura 4, está llena de anuncios. Aunque desconocemos la naturaleza exacta de los anuncios servidos por los servidores de autenticación reales, hemos podido crear algunos en nuestra propia instancia del servidor backend con fines de demostración. El servidor backend no aloja las imágenes reales presentes en esos anuncios, sólo sus URL.

Figure 4. Advertisement tab of the RedLine panel
Figura 4. Pestaña Anuncios del panel RedLine con anuncios falsos mostrados para fines de demostración

La pestaña Listas negras permite a los afiliados ignorar los datos entrantes por país, dirección IP, Build ID o HWID (un ID único calculado a partir del nombre de dominio, nombre de usuario y número de serie de una máquina víctima). Independientemente de las exclusiones seleccionadas aquí, todas las muestras de RedLine Stealer contienen código para impedir la ejecución si la configuración regional se establece en uno de los siguientes países: Armenia, Azerbaiyán, Bielorrusia, Kazajistán, Kirguistán, Moldavia, Tayikistán, Uzbekistán, Ucrania y Rusia.

La pestaña Telegram, mostrada en la Figura 5, permite a los afiliados configurar un bot de Telegram para publicar datos robados en chats o canales específicos. El afiliado debe proporcionar un token de API válido para el bot, y luego puede seleccionar qué entradas se compartirán basándose en el país, Build ID, versión de SO y dominios encontrados en cookies o inicios de sesión guardados. El bot también puede configurarse para compartir los registros completos o sólo información específica según se defina en el campo Formato de mensaje, y para compartir estadísticas con los destinatarios seleccionados (véase la Figura 6).

Figure 5. Telegram bot configuration in the RedLine panel
Figura 5. Configuración del bot de Telegram en el panel RedLine
Figure 6. Telegram bot code for sharing statistics
Figura 6. Código del bot de Telegram para compartir estadísticas

Creación de muestras de malware en el front-end

La pestaña Builder, mostrada en la Figura 7, permite a los afiliados crear nuevas muestras de RedLine Stealer proporcionando una dirección de servidor del panel RedLine, un Build ID, un mensaje de error a mostrar y una imagen a utilizar como icono para la muestra creada. Estos dos últimos son opcionales, sirviendo la imagen como icono del software que RedLine está suplantando, mientras que el mensaje de error puede utilizarse para engañar a la víctima sobre por qué no se inició la aplicación esperada.

El Build ID se utiliza como identificador de la campaña y es enviado por las muestras junto con la información robada. Mientras que algunas versiones filtradas anteriormente del panel RedLine incluían un ejecutable para crear compilaciones localmente, en las versiones más recientes esto lo realiza el servidor backend. Este cambio hace que cualquier panel RedLine filtrado o crackeado sea mucho menos útil, ya que los afiliados no podrán crear muestras para utilizarlas con él. Describimos el proceso de construcción en la sección RedLine.Nodes.LoadBalancer.

Figure 7. Builder tab of the RedLine panel
Figura 7. Pestaña Builder del panel RedLine

RedLine backend

El backend de RedLine que analizamos en 2023 consta de dos módulos. El primero, denominado RedLine.Nodes.DbController, gestiona los datos de afiliados y anuncios. A pesar de su nombre, este módulo no utiliza una base de datos tradicional, sino que almacena los registros como objetos codificados en Protobuf en archivos individuales, con un subdirectorio específico para cada tipo de datos. El segundo módulo, llamado RedLine.Nodes.LoadBalancer, funciona como servidor y proporciona la mayor parte de la funcionalidad utilizada por el panel RedLine.

También encontramos un módulo llamado RedLine.MainServer, que es probablemente el antepasado de RedLine.Nodes.DbController y RedLine.Nodes.LoadBalancer. En versiones posteriores, se separó como un módulo independiente que gestiona los datos de usuarios y anuncios.

En la versión 2024 del backend, DbController y LoadBalancer han sido sustituidos por un único módulo denominado Nodes.Api.

RedLine.Nodes.DbController

En DbController, los datos de los afiliados están representados por una clase llamada ClientData, detallada en la Tabla 1.

Tabla 1. Descripción de las propiedades de ClientData Descripción de las propiedades deClientData

Attribute Description
ID Unique numeric ID.
Login Username.
Password Password.
RegistrationDate Timestamp of the affiliate account’s creation.
Activated Whether the affiliate has bought a license.
LastActive Timestamp of the affiliate’s last activity.
LastIP IP from which the affiliate’s last activity occurred. Used together with LastActive to prevent authentication if the affiliate’s account was active from another IP address in the last five minutes.
We believe this is to prevent account sharing.
Premium Unused in the modules we analyzed.
ActivateUntil Expiration timestamp of the affiliate’s license.
BuildKey Unique string used to identify samples created by the affiliate.

Esto es sencillo en su mayor parte, pero presenta algunas peculiaridades interesantes, principalmente la forma en que se gestionan las contraseñas y las licencias de por vida.

Si nos fijamos en el código utilizado para autenticar a los afiliados (mostrado en la Figura 8), resulta obvio que las contraseñas se almacenan en texto claro. La contraseña enviada se compara directamente con la almacenada sin que intervenga ninguna función hash.

Figure 8. Excerpt of the function to handle affiliate logins in DbController
Figura 8. Extracto de la función para gestionar los inicios de sesión de afiliados en DbController

La figura 9 muestra que una licencia vitalicia, que los afiliados pueden comprar por 900 dólares, se representa estableciendo la fecha de caducidad de una licencia dada en cualquier fecha posterior a 2025. En otras partes del código se hace referencia a esta licencia como licencia Pro.

Figure 9. Code from the LoadBalancer module
Figura 9. Código del módulo LoadBalancer utilizado para comprobar si un afiliado tiene una licencia de por vida

RedLine.Nodes.LoadBalancer

Como se ve en la Figura 10, el módulo LoadBalancer escucha en el puerto 8778. Esta captura de pantalla también muestra los manejadores definidos en el contrato WCF MainPanelService. Los controladores relacionados con los datos de afiliación y publicidad, es decir, OnSignInInternal, OnConnect, OnCheckExpire y OnGetPartners, delegan las solicitudes en el controlador correspondiente de DbController. El controlador OnCheckConnect es utilizado por el panel Redline para comprobar si su servidor C&C es accesible desde el exterior. El resto de los manejadores están todos relacionados con la creación de muestras de malware.

Figure 10. Initialization code for the MainPanelService WCF service and its handlers
Figura 10. Código de inicialización del servicio WCFMainPanelService y sus controladores
Creación de muestras en el backend Redline

Desde que se documentó por primera vez en 2020, RedLine Stealer se ha reescrito para utilizar el marco WCF, y más tarde una API REST, para la comunicación de red. Como se ve en la Figura 11, el nombre interno de estas versiones reescritas parece ser RedLine.Reburn.

Figure 11. Code to obtain the path to the RedLine.Reburn solution
Figura 11. Código para obtener la ruta a la soluciónRedLine.Reburn

Para crear muestras del malware RedLine Stealer, el manejador OnCreateLastBuild mostrado en la Figura 10 utiliza el método CreateBuild de la clase personalizada VSBuilder. Cuando se recibe una solicitud CreateBuild, la contraseña en texto claro de la cuenta del afiliado se registra en la consola. Esto muestra un desprecio casual por prácticas de seguridad bien conocidas.

Si en la petición no se especifica ningún puerto para el servidor C&C, el constructor utiliza por defecto el puerto 6677. Cuando se construye una muestra, el código de la Figura 12 se utiliza para derivar un token a partir del ID de construcción de la campaña y la clave de construcción de la cuenta del afiliado. Creemos que esto corresponde al valor de la cabecera ns1.Authorization utilizada en la comunicación entre las muestras y el panel. Esta cabecera parece ser utilizada por el panel para filtrar conexiones de muestras no creadas por la cuenta actual.

Figure 12. Code used to derive token values for RedLine Stealer samples
Figura 12. Código utilizado para derivar valores de token para muestras RedLine Stealer

El método VSBuilder.CreateBuild utiliza una solución local de C# para crear muestras. Algunos de los archivos fuente se leen en memoria para sustituir valores específicos antes de volver a escribirse en el disco. Aunque no pudimos recopilar los archivos del proyecto, la salida del descompilador para este método junto con la de una muestra de RedLine Stealer proporcionan suficiente contexto para entender que los valores modificados son:

  • Dirección de C&C (encriptada),
  • ID de compilación (cifrado),
  • mensaje de error falso (cifrado),
  • clave de descifrado,
  • bandera para indicar si se envía la información robada por partes o toda a la vez,
  • token de autenticación, y
  • nombre del ensamblador.

Una vez sustituidos estos valores, se invoca a Visual Studio para construir el proyecto.

Si el afiliado ha seleccionado la opción correspondiente, y tiene una licencia de por vida, el ejecutable compilado se ofusca con el Babel Obfuscator disponible comercialmente. En la versión 2024, la ofuscación se implementa para todos los usuarios y se realiza a través de .NET Reactor.

Por último, se genera un certificado autofirmado con el código de la figura 13 y se utiliza para firmar el ejecutable. Los campos de su Nombre Distinguido (DN) se rellenan con palabras aleatorias del diccionario. Los certificados generados de este modo utilizan la contraseña codificada 123321 y tienen un periodo de validez que va desde siete días antes de su generación hasta 10 años después.

Figure 13. Function that generates self-signed certificates with random words in the DN
Figura 13. Función que genera certificados autofirmados con palabras aleatorias en el DN

El módulo LoadBalancer también proporcionaba un manejador OnCreateClipper. Como su nombre indica, se utilizaba para generar malware de secuestro del portapapeles; en este caso, se utilizaba para secuestrar transacciones de criptomonedas sustituyendo las direcciones de los monederos en el portapapeles por las de los monederos controlados por el atacante. Esta funcionalidad se ha eliminado en las últimas versiones del backend Redline.

Curiosamente, la clase Builder también contenía código muerto para generar una muestra de malware a partir de un ejecutable stub. Creemos que se trata de un resto del método utilizado para generar versiones anteriores de RedLine Stealer. La última versión del backend Redline ya no contiene este código.

Otro controlador, llamado OnSignFile, permite a los afiliados con licencias de por vida firmar archivos arbitrarios con un certificado ubicado en el servidor backend. No hemos podido recopilar este certificado, pero tenemos razones para creer que puede ser el mismo certificado utilizado para firmar los paneles RedLine, ya que también se ha utilizado para firmar un gran número de muestras de RedLine Stealer y otros programas maliciosos. Otro posible candidato es el certificado con la huella 28F9A8E7601F5338BF6E194151A718608C0124A8, emitido a nombre de Hangil IT Co. Este certificado, probablemente robado, se ha utilizado para firmar muchas muestras de RedLine Stealer y otros archivos maliciosos. Ya ha sido revocado.

RedLine.MainServer

El módulo RedLine.Main Server combina algunas de las funciones de los dos módulos anteriores con una interfaz gráfica de usuario que permite al administrador gestionar fácilmente las cuentas de afiliados y los datos de los anuncios. A pesar de esta funcionalidad añadida, múltiples factores indican que esta versión de MainServer es probablemente un ancestro de LoadBalancer y DbController más que un sucesor:

  • Las muestras deMainServer se compilan con una versión anterior del marco .NET (4.6.2 frente a 4.8).
  • El año de copyright del ensamblado es 2020 en lugar de 2021.
  • Algunas muestras de MainServer no contienen funcionalidad para anuncios.
  • El contrato del servicio WCF principal(MainPanelService) no incluye el manejador IsAlive que está presente en la misma clase que LoadBalancer. Este manejador es utilizado por todos los paneles RedLine más recientes que hemos analizado.

Tenga en cuenta que en versiones posteriores del backend RedLine, el panel de administración GUI se ha dividido en su propio módulo también llamado MainServer.

La versión examinada de la interfaz gráfica de usuario nos proporcionó una visión interesante de la gestión de RedLine. Proporciona un formulario para crear y editar datos de cuentas de afiliados, como se muestra en la Figura 14. Los campos corresponden a la clase ClientData descrita anteriormente.

Figure 14. RedLine MainServer affiliate account management interface
Figura 14. Interfaz de gestión de cuentas de afiliadosRedLine MainServer

Existe un formulario similar, en la Figura 15, para gestionar los anuncios.

Figure 15. RedLine MainServer advertisement management interface
Figura 15. Interfaz de gestión de anunciosde RedLine MainServer

Por último, el rudimentario cuadro de mandos de la Figura 16 ofrece al operador una visión general de las ventas de licencias.

Figure 16. Statistic dashboard of the MainServer
Figura 16. Cuadro de mandos estadístico de MainServer
Nodos.Api

El análisis de las muestras compartidas por las fuerzas de seguridad holandesas muestra que en las últimas versiones de RedLine, las funcionalidades de los módulos LoadBalancer y DbController se han combinado en uno nuevo denominado Nodes.Api. Este módulo backend se empaqueta como una aplicación .NET de un solo archivo y utiliza la clase WebApplication de ASP.NET para proporcionar la API REST utilizada por los paneles. Como se puede ver en la Figura 17, el módulo gestiona las peticiones enviadas a los servidores RedLine(fivto[.]online) y META(spasshik[.]xyz), lo que demuestra que los dos infostealers comparten los mismos operadores.

Figure 17. Code to set up the listener for requests sent to both RedLine and META servers
Figura 17. Código para configurar la escucha de peticiones enviadas a los servidores RedLine y META

La Tabla 2 enumera los puntos finales expuestos por la API REST junto con el manejador WCF correspondiente de versiones anteriores.

Tabla 2. Puntos finales de RedLine

Endpoint Corresponding WCF Handler Description
/api/test N/A Probably used to test connectivity. This simply returns the value OK.
/secure-api/sign-in OnSignInInternal Handles logins from the panel.
/secure-api/getBanners OnGetPartners Returns the ads to be displayed in the panel.
/secure-api/createFile OnCreateLastBuild Creates an instance of the stealer malware.
/secure-api/checkConnect OnCheckConnect Pings the specified address and port to check whether it is externally reachable.
/secure-api/updateDb N/A Makes the backend reload affiliate data. This is only done if the request comes from a loopback address.
/edk92hd/createRandom N/A Creates a new affiliate entry with a random username and password.
/edk92hd/renew N/A Extends the license validity period of the specified affiliate.
/Panel.zip N/A Returns the Panel.zip file from disk. This password-protected archive contains the latest version of the panel.

A diferencia de las versiones 2023 del backend que analizamos inicialmente, las licencias de por vida ya no aparecen en el código del nuevo módulo. Dado que las licencias de este tipo se seguían vendiendo, creemos que probablemente se gestionaban simplemente fijando su caducidad en una fecha muy lejana en el futuro. También se ha eliminado por completo la funcionalidad relacionada con la firma de código.

Las muestras creadas por el módulo Nodes.Api se ofuscan utilizando .NET Reactor si está presente en la ruta codificada C:\Archivos de programa (x86)\Eziriz\.NET Reactor\dotNET_Reactor.exe. Esto corresponde a su ruta de instalación por defecto.

Más allá de los cambios mencionados, las funcionalidades que estaban presentes en versiones anteriores se comportan prácticamente igual que antes. Sin embargo, se han añadido un par de funcionalidades interesantes.

Gestión de afiliados

Se exponen tres puntos finales utilizados para gestionar los datos de los afiliados. Estos parecen estar destinados a ser utilizados únicamente por el operador, pero esto se maneja de dos maneras muy diferentes. El endpoint /secure-api/updateDb hace que el servidor recargue los datos del usuario desde el disco. La figura 18 muestra el método de actualización invocado por el módulo MainServer cada vez que se crea o modifica una nueva entrada. La operación sólo es realizada por el módulo Nodes.Api si la petición procede de una dirección loopback, lo que impide que los usuarios del Panel la utilicen.

Figure 18. Method invoked by the MainServer module
Figura 18. Método invocado por el módulo MainServer

Los otros dos endpoints, /edk92hd/createRandom y /edk92hd/renew, utilizan un método diferente para mitigar el acceso no autorizado. Como se ve en la Figura 19, sólo pueden ser invocados si la petición contiene una cabecera sko3s con un valor codificado aparentemente aleatorio.

Figure 19. Code for checking whether request contains the correct sko3s header
Figura 19. Código para comprobar si la solicitud contiene la cabecera sko3scorrecta
Copias de seguridad

La otra característica interesante es la posibilidad de realizar copias de seguridad de los datos de afiliación, funcionalidad que faltaba en las versiones anteriores del código. Dado que estos datos se almacenan en una serie de ficheros en el disco, la copia de seguridad es un archivo ZIP del directorio que contiene los ficheros. Este archivo se envía a través de Telegram utilizando un ID de chat codificado que se muestra en la Figura 20.

Figure 20. ZIP archive creation
Figura 20. Creación de archivo ZIP

Enlaces con META Stealer

META Stealer es el otro infostealer desbaratado junto a RedLine Stealer. Según un artículo de Kela, META Stealer se anunció por primera vez en foros de ciberdelincuentes en marzo de 2022. El autor afirmaba que utilizaba el mismo código que RedLine Stealer y ofrecía la misma funcionalidad y panel. META Stealer no ha sido investigado tan a fondo como RedLine Stealer, pero nuestra investigación indica que las afirmaciones que hizo inicialmente son exactas. Basándonos en el código fuente, lo más probable es que los dos infostealers hayan sido creados por la misma persona. Aunque hay algunas diferencias, la mayor parte del código es el mismo, con instancias de la cadena RedLine sustituidas por Meta. Como puede verse en la Figura 21, el código que se comenta como inactivo en RedLine está presente en META.

Figure 21. RedLine Stealer (left), and META Stealer (right) source code comparison
Figura 21. Comparación del código fuente de RedLine Stealer (izquierda) y META Stealer (derecha)

Como ya hemos mencionado, otra prueba que apunta a que RedLine y META tienen los mismos operadores se ve en el código del módulo Nodes.Api, que gestiona las peticiones enviadas tanto a los servidores RedLine como META, como se muestra en la Figura 17.

También encontramos dos muestras del panel META firmadas con un certificado que también se utilizó para firmar muestras del panel RedLine. Este panel utilizaba los mismos esquemas de resolución dead-drop, llegando incluso a utilizar las mismas claves AES y RSA, sólo que con un repositorio GitHub diferente. Además, como muestra la Figura 22, una comparación de los paneles utilizados por META y RedLine revela sólo pequeñas diferencias cosméticas.

Figure 22. Panel login prompts for RedLine (top) and META (below)
Figura 22. Panel de inicio de sesión de RedLine (arriba) y META (abajo)

META Stealer utiliza la misma combinación de DNGuard y BoxedApp para proteger su panel del análisis. Sin embargo, el proceso de autenticación de META no pudo completarse cuando se ejecutó contra nuestra instancia del backend RedLine de 2023, por lo que parece haber sido modificado con respecto al de RedLine.

Infraestructura de red

Al analizar las muestras de RedLine que detectamos entre el30 de noviembre de 2022 yel 23 de marzo de 2023, pudimos identificar más de 1.000 direcciones IP únicas utilizadas para alojar paneles RedLine. La figura 23 muestra la distribución geográfica de estos paneles alojados. Rusia, Alemania y los Países Bajos representan cada uno alrededor del 20% del total, mientras que Finlandia y Estados Unidos representan cada uno alrededor del 10%. Aunque estos datos sólo proceden de muestras dirigidas a nuestros clientes, creemos que ofrecen una imagen bastante precisa, ya que los ataques de RedLine suelen ser oportunistas más que dirigidos.

Figure 23. Heatmap showing the geographical distribution of hosted RedLine panels
Figura 23. Mapa de calor que muestra la distribución geográfica de los paneles RedLine alojados

También pudimos identificar varios servidores backend distintos. Es probable que hubiera más en los resolvers de caída muerta que no pudimos descifrar. Basándonos en su distribución geográfica, que se muestra en la Figura 24, los servidores se encuentran principalmente en Rusia (alrededor de un tercio de ellos), mientras que el Reino Unido, los Países Bajos y la República Checa representan cada uno alrededor del 15% de los servidores que identificamos.

Figure 24. Heatmap showing the geographical distribution of RedLine backend servers
Figura 24. Mapa de calor que muestra la distribución geográfica de los servidores backend de RedLine

Dead-drop resolvers

Como ya hemos mencionado, las versiones 2023 del panel RedLine utilizaban repositorios de GitHub como dead-drop resolvers para sus servidores de autenticación. Todos estos repositorios contenían un archivo con una lista cifrada de direcciones de servidores. El archivo se encriptaba utilizando un módulo personalizado llamado simplemente RSA. En una versión de este módulo, mostrada en la Figura 25, la lista se encriptó usando AES-CBC con una clave y un IV codificados, y se guardó en un archivo llamado nodesUpdate.config.

Figure 25. EncryptHosts function with hardcoded AES key and IV
Figura 25. Función EncryptHosts con clave AES codificada e IV

Versiones más recientes, que estuvieron en uso al menos hasta mediados de 2024, emplean en su lugar encriptación RSA (ver Figura 26), con la salida escrita en un archivo llamado nodes.config. En este caso, la clave se lee de un archivo en lugar de estar codificada en el ejecutable. Sin embargo, la clase utilizada para realizar el cifrado RSA también está presente en el módulo LoadBalancer, con valores predeterminados codificados para las claves pública y privada. Observe el uso de "nodos" de nuevo para referirse a los servidores backend.

Figure 26. RSA encryption and decryption functions with hardcoded default keys
Figura 26. Funciones de cifrado y descifrado RSA con claves predeterminadas codificadas

Hemos observado repositorios de GitHub que contienen al menos un archivo cifrado de este tipo. Junto con las claves mostradas anteriormente, pudimos extraer una clave privada RSA de una muestra del panel. Esto nos permitió obtener listas de servidores de autenticación, que compartimos con las fuerzas de seguridad.

Conclusión

Antes de la Operación Magnus, RedLine era uno de los malware infosteadores más extendidos, con un gran número de afiliados que utilizaban su panel de control. Sin embargo, la empresa de malware como servicio parece estar orquestada por sólo un puñado de personas, algunas de las cuales han sido identificadas por las fuerzas de seguridad.

META Stealer, clon de RedLine Stealer y muy probablemente creado por los mismos actores de amenazas, hizo su entrada en el campo en 2022. No parece ser un sucesor de RedLine, ya que el desarrollo de ambas familias ha continuado en paralelo. Fue eliminado junto con RedLine Stealer.

Esperamos que nuestro análisis en profundidad de los entresijos de RedLine -su panel de control y su backend- proporcione una comprensión más holística de esta amenaza.

Para cualquier consulta sobre nuestra investigación publicada en WeLiveSecurity, póngase en contacto con nosotros en threatintel@eset.com.
ESET Research ofrece informes privados de inteligencia APT y fuentes de datos. Para cualquier consulta sobre este servicio, visite la página de ESET Threat Intelligence.

IoCs

Puede encontrar una lista completa de indicadores de compromiso (IoCs) y muestras en nuestro repositorio GitHub.

Archivos

SHA-1 Filename Detection Description
1AD92153B56FC0B39F8FCEC949241EC42C22FA54 Nodes.Api.exe N/A RedLine backend single-file application.
8A0CAFE86C0774F1D9C7F198505AE15D04447DD6 MainServer.exe N/A RedLine backend user and advertisement management module (2024 version).
607DBA5F630A1DBFF0E13EEBA2730AB9AB2FB253 Nodes.Api.dll N/A RedLine backend main module.
FB3ABAC1FAC852AE6D22B7C4843A04CE75B65663 Panel.exe MSIL/Spy.RedLine.O META stealer panel (2024 version).
EE153B3F9B190B1492DEFBB1C70830A28F7C41B2 RedLine.MainPanel.exe MSIL/Spy.RedLine.H RedLine stealer panel (2024 version).
1AB006B1C5403BA4648059DF93B6DAEB0E3EC43F Panel.exe MSIL/Spy.RedLine.O RedLine stealer panel (2024 version).
DC3A236245AE8C4D5D079E429ED6B77A5B5245C2 RedLine.MainServer.exe N/A RedLine backend licensing server GUI.
06A2A900561C122F45088A5EAE9146F7675C63F6 rsa.exe N/A Tool to encrypt the list of C&C servers.
1626F2666782710FC28D4AFE607C7BE54F1FC67F RedLine.Nodes.LoadBalancer.exe N/A RedLine backend server module.
37D1221CE6BB82E7AD08FD22BD13592815A23468 RedLine.SharedModels.dll MSIL/Spy.RedLine.K RedLine WCF models and contracts definitions.
66C0E7E74C593196E0925A7B654E09258E3B1FB7 Panel.exe Win32/GenCBL.ATC RedLine panel (v22.4).
2E5D9F2ED82C81609F4C49EA31642B1FB5FC11B5 RedLine.MainPanel.exe MSIL/Spy.RedLine.H RedLine panel (non-virtualized).
47B78A5698A289C73175C5C69786DE40C7C93C12 RedLine.SharedModels.dll MSIL/Spy.RedLine.J RedLine models and contracts definitions.
49BE1D7C87AC919BB9083FA87F7B907E5F2C9835 Panel.exe MSIL/Spy.RedLine.H META Stealer Panel.
4BF4D42EED7FCA8FD52863B7020AC646EC6D97E9 RedLine.Nodes.DbController.exe N/A RedLine backend server user and advertisement management module.
27BD472729439D5B8814D4A8A464AF9832198894 Panel.exe MSIL/Spy.RedLine.H RedLine panel (v26).
A154DFAEDC237C047F419EB6884DAB1EF4E2A17D Panel.exe MSIL/Spy.RedLine.H RedLine Panel (leaked cracked version).

Red

Tenga en cuenta que los dominios de la siguiente tabla han sido incautados por las fuerzas de seguridad. El resto de direcciones de paneles y servidores que recopilamos se compartieron con las fuerzas del orden de forma regular para ayudar en sus acciones y ya no están activas.

IP Domain Hosting provider First seen Details
N/A spasshik[.]xyz N/A 2024⁠-⁠06⁠-⁠02 META backend REST server.
N/A fivto[.]online N/A 2024⁠-⁠08⁠-⁠03 RedLine backend REST server.

Técnicas ATT&CK de MITRE

Esta tabla se ha elaborado utilizando la versión 15 del marco MITRE ATT&CK.

Tactic ID Name Description
Resource Development T1583.003 Acquire Infrastructure: Virtual Private Server Instances of the RedLine back end are hosted on leased virtual private servers.
T1583.004 Acquire Infrastructure: Server Instances of the RedLine back end are hosted on servers that appear to be exclusive to RedLine.
T1587.001 Acquire Infrastructure: Web Services Operators of RedLine have created multiple GitHub accounts and repositories.
T1587.002 Develop Capabilities: Malware Operators of RedLine have developed their own malware families, control panels, and back-end servers.
T1588.003 Develop Capabilities: Code Signing Certificates The RedLine back end automatically generates self-signed certificates when creating samples.
T1608.002 Obtain Capabilities: Code Signing Certificates RedLine panels are signed with valid certificates issued to AMCERT,LLC.
T1608.001 Stage Capabilities: Upload Malware Back-end components of RedLine are uploaded to private servers.
Defense Evasion T1622 Debugger Evasion The RedLine panel automatically terminates itself if it detects a debugger or analysis tools.
T1027.002 Obfuscated Files or Information: Software Packing Samples of the RedLine panel are packed using DNGuard and BoxedApp.
Command and Control T1132.001 Data Encoding: Standard Encoding RedLine makes extensive use of base64 encoding in its network communications.
Network communication uses the standard binary encoder of the WCF framework.
T1573.001 Encrypted Channel: Symmetric Cryptography Communications between the panel and back-end server use AES encryption.
In some cases, dead-drop resolver content is encrypted with AES-CBC.
T1573.002 Encrypted Channel: Asymmetric Cryptography Communications between the panel and back-end server use RSA encryption.
In some cases, dead-drop resolver content is encrypted with RSA.
T1071.001 Application Layer Protocol: Web Protocols Network communication in recent versions is done via a REST API over HTTPS.
T1095 Non-Application Layer Protocol Network communication is done with the WCF Framework over TCP.
T1102.001 Web Service: Dead Drop Resolver The RedLine panel uses GitHub repositories as dead-drop resolvers to obtain the address of back-end servers.
T1571 Non-Standard Port By default, the RedLine panel’s Guest Links functionality runs an HTTP server on port 7766.