This website uses cookies. By continuing to browse this website, you accept our use of cookies and our Cookie Policy. Close

Our Blog

Analizando Bots de Telegram

Share

Jueves, Ene 17, 2019

At Forcepoint Security Labs we are always looking at the methods threat actors use to circumvent existing protections. One such investigation saw us looking into the usage of the Telegram encrypted messaging service as a Command and Control (C2) infrastructure for malware.

Malware that uses Telegram as a C2 channel typically uses the Telegram Bot API for communications. In the course of an investigation into one piece of malware, we discovered a significant flaw in the way Telegram handles messages sent through its Bot API.

En Forcepoint Security Labs estamos observando siempre los métodos que los creadores de amenazas utilizan para evadir la protección existente. Una investigación nos llevó a analizar el uso del servicio de mensajes cifrados de Telegram como una infraestructura de malware de Comando y Control (C2).

El malware que emplea Telegram como un canal C2 normalmente usa el Telegram Bot API para las comunicaciones. En el curso de una investigación de una pieza de malware, descubrimos una falla importante en la manera en que Telegram maneja los mensajes enviados a través de su Bot API.

Debido a la manera en que funciona el Bot API, todos los mensajes bot anteriores pueden enviarse otra vez por un adversario que es capaz de interceptar y desencriptar el tráfico HTTPS. En la práctica, esto puede proporcionarle al adversario el historial completo de todos los mensajes enviados o recibidos por el bot objetivo. Esto a menudo incluye mensajes entre usuarios humanos regulares ya que los bots comparten con frecuencia un chat grupal con ellos.

Acceso a los mensajes de Telegram C2

Telegram utiliza su encripción interna MTProto dentro del tráfico TLS para proteger los mensajes entre usuarios regulares ya que ve (con justa razón) a TLS como algo no muy seguro para una aplicación de mensajería encriptada.

Desafortunadamente, esto no se aplica en el caso de programas que utilizan los mensajes del Telegram Bot API enviados de este modo, los que sólo están protegidos por la capa HTTPS. Para empeorar las cosas, los adversarios que son capaces de obtener información clave transmitida en cada mensaje no sólo se limitan a espiar los mensajes en tránsito, sino que también pueden recuperar el hilo de mensajes completos del bot objetivo.

Una de estas piezas clave de información es el token bot API, el cual se inserta en todos los mensajes (así como en el binario de cualquier programa –malware o legítimo- usando el Telegram Bot API). Esto resulta trivial para un adversario que realiza MiTM en la conexión HTTPS del objetivo para obtener estos datos.

La otra pieza importante del rompecabezas es un Telegram chat_id generado aleatoriamente. En el caso de los chats individuales, este es un ID único del usuario, mientras que los chats grupales tienen su propio chat_id generado en el momento en que se crean. Sin embargo, esta información también se envía en cualquier solicitud del Bot API cuando el bot necesita saber a qué usuario y/o chat grupal enviar la información.

Equipados con esta información, hay varios métodos que pueden ser tomados del Telegram Bot API. En nuestro caso, el método forwardMessage() es bastante útil, pues permite que un mensaje de cualquier chat al que un bot dado tiene acceso sea reenviado a un usuario de Telegram arbitrario. Para hacer esto, necesitamos que el token API y el chat_id (extraídos de los mensajes previos enviados por el bot o, en el caso del malware, del propio binario – junto con el chat_id objetivo (que es nuestro propio user id) y finalmente el message id que nos gustaría enviar.

Para nuestra suerte, los message_id crecieron gradualmente de 0, de modo que un simple script Python puede enviar todos los mensajes que se hayan enviado a un chat de Telegram del que es parte el bot actualmente.

Una pieza particular de malware demostró ser un caso de estudio excelente de por qué esto es peligroso, especialmente debido a que el creador de la amenaza no tiene la separación necesaria entre sus pruebas/desarrollo y los entornos operativos. Esto nos permitió seguir sus primeros pasos hacia la creación y despliegue del malware (ver el Cronograma de Actividades de abajo) hasta las campañas actuales en la forma de comunicaciones hacia y desde las víctimas y las máquinas de prueba.

En un despliegue de seguridad operativa extraordinariamente pobre, una de esas máquinas de prueba parece haber pertenecido al propio autor, la cual reveló su dirección IP, así como información personal sensible.

Un GoodSender no tan bueno

La pieza de malware en cuestión es un malware .NET bastante simple que el operador denominó ‘GoodSender’ y que utiliza Telegram como C2. Opera de una forma muy sencilla: una vez que el malware se descarga, crea un nuevo usuario administrador y habilita un escritorio remoto, y se asegura de que no sea bloqueado por el firewall. El nombre de usuario del nuevo administrador es estático, pero la contraseña se genera aleatoriamente.

Toda esta información (el nombre de usuario, la contraseña y la dirección IP de la víctima) se envía al operador a través de la red de Telegram, dándole al operador acceso a la computadora de la víctima a través de RDP.

Figura 1 – El código en GoodSender que construye la URL del Telegram Bot
Figura 2 - La pantalla de perfil del Telegram Bot

Cronograma de actividades, el creador de la amenaza y las víctimas

Inicialmente, el creador utilizó el Telegram bot en cuestión para una pieza de malware diferente que estaba desarrollando. Este primer malware se llamó ‘RTLBot’, y después de algunos meses agregó varias funcionalidades adicionales antes de abandonar el desarrollo a favor del malware ‘GoodSender’ descrito anteriormente.

Los detalles del timeline a continuación y las capturas de pantalla incluidas se recuperaron de las comunicaciones históricas de C2 del malware y demuestran la capacidad de usar el método descrito para recuperar los mensajes históricos de un canal de Telegram.

  • 4 de febrero de 2018 – Surge el Telegram bot
  • 18 de febrero de 2018 – El creador de la amenaza comienza a incorporar la funcionalidad Telegram C2 en RTLBot y cambia el desarrollo a Telegram
  • 20 de febrero de 2018 – Quita la infraestructura de su computadora personal para llevarla a AWS (Amazon Web Services)
  • 1 de abril de 2018 – GoodSender se active y envía la información de su primera víctima
  • 6 de junio de 2018 – Renta otro VPS para usarlo como un Telegram proxy
  • 5 de julio de 2018 – GoodSender envía la última información de la víctima real hasta la fecha.
  • 29 de septiembre 2018 – GoodSender envía la información de su última víctima a la fecha

El 23 de noviembre de 2018, el actor incorporó la misma clave de API del bot y el canal C2 en una herramienta que parece recopilar imágenes de las cuentas de Instagram. Dada la frecuente denominación de elementos como prueba (por ejemplo, testbot en la Figura 3 a continuación), parece probable que este canal se use para probar bots antes de cambiar la clave API y el canal a los valores de "producción".

Figura 3: una captura de pantalla, aparentemente de la máquina de desarrollo del autor, subido en el canal de Telegram por el bot
Figura 4 - Otra captura de pantalla del entorno de desarrollo del autor que muestra el nuevo proxy observado por primera vez el 6 de junio de 2018

Si bien no encontramos una respuesta definitiva respecto a qué vector de ataque debió haber usado el autor para dejar su malware, varias pistas indican que utilizó la explotación EternalBlue para descargar su malware a la máquina que no tenía parches.

  • Utiliza intensivamente el escáner de vulnerabilidades EternalBlue llamado ‘EternalBlues’
  • Tiene una lista de IPs escaneadas de Estados Unidos y de Vietnam que eran vulnerables a EternalBue, el cual que utilizó para infectar a algunas de sus víctimas

De acuerdo con nuestra telemetría, GoodSender ha infectado al menos a 120 víctimas, especialmente en Estados Unidos.

Mapa: Distribución de Víctimas

Figura 5: un mapa de rojo-calor/azul-frío de las víctimas de GoodSender basado en información de GeoIP
Figura 6 - Gráfico de barras de víctimas basado en información de GeoIP

Resumen

En nuestro caso de estudio, esta técnica particular para reenviar mensajes se utilizó para descubrir a un creador de amenazas, pero pudo haberse utilizado contra aplicaciones legítimas que emplean la Telegram Bot API.

Aunque Telegram se promociona como una ‘aplicación de mensajería segura’ y utiliza un esquema de encripción con controles más altos que TLS (por lo menos en teoría), durante los chats normales, los bots usan TLS tradicional para encriptar los datos en tránsito. Por lo tanto, un atacante en la posición MitM con capacidad para desencriptar TLS, puede tener acceso al bot token así como al chat_id comprometiendo completamente no sólo la comunicación actual sino también todas las comunicaciones previas.

Por ende, Forcepoint Security Labs recomienda a todos los usuarios evitar los Telegram bots así como los canales y grupos que utilicen bots.

Forcepoint ha informado a Telegram sobre esta vulnerabilidad.

Los clientes de Forcepoint están protegidos contra el malware GoodSender de nuestro caso de estudio en las siguientes etapas del ataque:

  • Etapa 5 (Dropper File) – Se evita que los archivos maliciosos se descarguen.

IOCs (GoodSender)

943eceb00ea52948c30deab1d5824ffcf2fd1cec

About the Author

AT

Abel Toro

Security Researcher

Abel Toro is a Security Research with Forcepoint Security Labs’ Special Investigations team, focusing on reverse engineering, malware analysis, and threat intelligence. He tracks existing threat groups and identifies new ones – focusing in particular on APTs – through analysing infrastructure,...