En agosto de 2013 fue lanzado Telegram como alternativa segura para WhatsApp. Las novedades que traía incluían su sencillez y su alto nivel de seguridad en comparación con sus competidores, pero tal vez la más llamativa era la posibilidad de autodestruir mensajes.

Por otra parte, los protocolos de comunicación creados por sus desarrolladores son gratuitos, y la aplicación que interactúa con sus servidores está abierta, al igual que el código del cliente oficial.

El Instituto Nacional de Tecnología de la Comunicación (INTECO) de España, ha realizado una investigación sobre los protocolos de seguridad de Telegram que encontró fallas en su autenticación.

¿Cómo funciona el protocolo para su posterior explotación?

La autorización y autenticación de Telegram se compone de 3 intercambios de mensajes, por medio de los cuales una clave compartida se negocia usando el protocolo Diffie-Hellman. Generalmente, el primer centro de datos, con el que el cliente establece contacto, indica las direcciones IP y el número de puerto de otros centros de datos. El proceso se repite con los nuevos centros de datos, estableciendo una clave compartida diferente con cada uno de ellos.

Para completar el circuito, uno de los centros de datos pide el número de teléfono al cliente para que la clave esté asociada. El cliente lo introduce, y Telegram le envía un código a través de SMS. El cliente entonces tiene que enviar nuevamente el código con la finalidad de completar la activación del servicio en el dispositivo.

Este proceso se muestra a continuación de manera ilustrativa:

Autenticacion
Con este protocolo se autentica el cliente; el servidor lo hace mediante la inclusión de fingerprint (una huella particular implementada) en su clave pública.

Los puntos principales del proceso son:

  • El cliente comprueba si el fingerprint coincide con una de las claves preinstaladas por defecto en el software
  • En caso de ser afirmativo, usará su clave pública asociada para cifrar el segundo mensaje (req_DH_params)
  • Este mensaje cifrado tiene un número aleatorio que usa para derivar una clave temporal AES (algoritmo de cifrado), la cual cifra los mensajes restantes del protocolo
  • Teniendo en cuenta que este número aleatorio se cifra con la clave pública de Telegram, sólo la aplicación será capaz de descifrarlo, actuando así como un servidor de autenticación implícita

Evadiendo la autenticación

Para pasar por alto una autenticación de este tipo, teniendo en cuenta que utiliza métodos de intercambio de claves seguros como Diffie-Hellman, los investigadores de INTECO remarcan que Telegram promueve el desarrollo de clientes de terceros, lo cual cambia el escenario.

Su API es pública, permitiendo el acceso a sus servidores a cualquier persona que desarrolle uno siguiendo correctamente sus protocolos (que también son públicos). Si un atacante desarrolla alguno y obtiene una víctima para instalarlo, usando algunas modificaciones mínimas, podría eludir la autenticación previa.

Todo se basa en la modificación de la clave pública preinstalada en la aplicación de la víctima, junto con la dirección IP del primer centro de datos, para conectar con la aplicación de mensajería (es posible realizar ataques con efectos similares en un cliente sin modificar). Al establecer una clave pública y una dirección IP controlada por un atacante, se hace posible un ataque Man In The Middle (MITM).

Esto implica también que el fingerprint enviado por el servidor al cliente debe ser modificado.

En la siguiente imagen se muestra cómo el valor es fijado por el atacante:

TelegramMITM
Posible impacto

Una explotación exitosa del ataque le daría control total al atacante de la cuenta de Telegram de la víctima.

Más precisamente, permitiría:

  • Acceso transparente a toda la información intercambiada, excepto a chats secretos que no han sido interceptados (esto incluye el historial de mensajes y los que no han sido eliminados)
  • Hacerse pasar por la víctima, mediante la modificación de los mensajes recibidos y enviados en tiempo real
  • Enviar mensajes sin el conocimiento de la víctima, a excepción de los chats secretos
  • Bloquear mensajes
  • Abrir nuevos chats
  • Aceptar y abrir nuevas conversaciones secretas
  • Obtener la lista de contactos de Telegram de la víctima, junto con sus números de teléfono
  • Bloquear temporalmente el acceso desde otros dispositivos en los que la víctima ha instalado Telegram, al ejecutar la opción “Cerrar todas las demás sesiones”

En muchos casos, las acciones realizadas por el atacante pasan totalmente inadvertidas por la víctima ya que el comportamiento de la aplicación es exactamente el mismo que el de una legítima. Este no sería el caso si el atacante abre o cierra nuevos chats, ya que dicho comportamiento aumentaría sospechas.

Adicionalmente, las claves de autorización tienen una vida útil larga (a menos que el usuario las revoque), por lo que la persistencia de este ataque podría ser alta.

A continuación se muestra una captura de pantalla de cómo se ve una lista de contactos secuestrada:

Lista de contactos
Debemos destacar que la prueba de concepto fue realizada en un ambiente controlado por los investigadores, basándose en una aplicación Telegram para Linux. Está compuesto por el mensajero con su clave pública y dirección IP de servidor modificado; además, un ataque MITM actúa como servidor para los ojos de la víctima y como cliente para Telegram.

En esta prueba se llevó a cabo la autenticación completa, que permite a la víctima recibir el SMS y devuelve el código de activación. Por último, el servidor informa la autenticación exitosa.

Con el fin de evitar el uso malicioso de esta aplicación para pruebas de concepto, el programa se detiene al momento en que fue realizada la autenticación exitosa. El PoC (Proof of Concept, o prueba de concepto) se encuentra disponible en GitHub, mientras que el análisis completo se puede encontrar en la página de INTECO.

Desde el Laboratorio de Investigación de ESET Latinoamérica, recomendamos tomar los recaudos necesarios a la hora de conectarse a Internet. También contar con una solución antivirus instalada en el equipo para prevenir ataques de tipo ARPspoof y DNSspoof, evitando las conexiones abiertas de las cuales no tenemos control y los peligros en el aire en las conexiones sin protección.

Créditos imagen: ©Espumakid/Wikimedia Commons