Explotando vulnerabilidades en teléfonos autenticados: Yealink

24 Abr

Actualización 30/julio/2013: Podemos confimar que al usar el firmware más reciente en este momento (9.70.0.140) la funcionalidad de marcación sin autenticación que provocaba este problema de seguridad viene desactivado, y es necesario configurar el teléfono con la IP autorizada que podrá hacer uso del API, por lo que este problema ya no existe. Sin embargo, nunca está de más asegurar su red y cambiar las contraseñas default del teléfono para impedir cualquier acceso no autorizado.

Yealink T20P: teléfono básico

Hace unos días recibí una llamada de uno de mis clientes. La historia comienza con una de las frases que menos me gusta escuchar en mi medio:

– Christian, ¿puedes venir? Nos hackearon el conmutador de la oficina…

Acudí en menos de una hora al sitio (yo no tenía acceso remoto y ni siquiera tenía conocimiento de este equipo) y me dí a la labor de revisar los logs para tratar de reconstruir el caso. Sin embargo, me encontré con lo siguiente:

  • El equipo tenía servicios de iptables y fail2ban protegiéndolo
  • Las contraseñas de SIP eran seguras
  • No se recibían conexiones ni por SIP ni por HTTPS del exterior
  • Todas las llamadas habían sido originadas desde una extensión
  • Apache no tenía registros de IPs externas, tampoco Asterisk.

Todo parecía indicar que hubiera sido un inside job, y en efecto (al menos parcialmente), así fue.

Por más que busqué no encontré señales de como había logrado entrar, pero las llamadas estaban en el CDR y en el gateway SIP que terminaba la comunicación. ¿Qué ocurrió entonces?

De pronto, el empleado al que pertenece el teléfono cuya cuenta SIP ocasionó todas las llamadas, exclamó lo siguiente:

– Mi teléfono ha estado raro. Varias veces en la mañana estuvo “marcando solo” y yo solamente escuchaba una grabación a veces de que la llamada no había podido ser completada

Momento… ¿marcando solo? ¿Desde cuando los teléfonos se marcan solos? Se trataba de un Yealink T20, el cual es un modelo extremadamente sencillo y económico. ¿Qué funcionalidad podría tener que hiciera que marcara solo?

La respuesta es: los Yealink ofrecen la posibilidad de marcación automática a través de una simple y sencilla petición HTTP que requiere autenticación, pero si nunca cambian la contraseña de usuario y administrador del teléfono (lo cual casi nadie hace), cualquiera puede hacer que el teléfono marque solo hacia cualquier destino.

Si tienen un teléfono Yealink consigo (cualquier modelo), prueben hacer esto en su casa/oficina:

Supongamos que la IP de nuestro Yealink sea 192.168.1.101. Asumimos que en nuestro Asterisk existe un plan de marcación que nos permite marcar larga distancia. Imaginemos el número 018881234567. Ahora bien, abran el siguiente URL en su navegador favorito (recuerden cambiar los valores según corresponda):

http://user:user@192.168.1.101/cgi-bin/ConfigManApp.com?Id=34&Command=1&Number=018881234567&Account=0

¿Y qué ocurre? Simple y sencillamente, su teléfono marcará por ustedes hacia el número indicado usando la primer cuenta que tengan configurado en él. Si Asterisk no los autentica a nivel de usuario, ustedes tienen un severo problema de seguridad ya que cualquier persona podría manipular su teléfono para marcar hacia donde le viniera en gana.

Y bien, ¿qué pasa si abren el URL repetidas ocasiones? Fácil. El teléfono marcará una y otra vez a ese número sin colgar las otras llamadas. De manera que un solo teléfono podría hacer 100 llamadas a Afghanistan, Sierra Leona o cualquier otro destino caro del mundo. Esto es muy fácil de lograr con un script en Linux que invoque al wget. Lo demostré en laboratorio y creanme, los resultados asustan.

Imaginen por un momento que alguien tuviera acceso a su red interna, pero no conoce las contraseñas de los teléfonos. Con este truco no es necesario saberlas, ya que el teléfono se encuentra ya autenticado en su red interna y por lo tanto, las llamadas saldrán aún si ustedes confían en que su firewall no recibirá conexiones del exterior.

Por tal motivo, si ustedes deciden abrir erróneamente los puertos en su firewall y exponen la configuración del teléfono, le están abriendo la puerta a alguien a que haga cientos de llamadas sin autorización. En la historia que les acabo de contar, alguien aprovechó esta vulnerabilidad e hizo más de 40,000 minutos de llamadas a los destinos más caros del mundo en tan solo 12 horas, y sin tener que usar su ancho de banda para generar esas llamadas.

Piénsenlo muy bien antes de que expongan equipos al internet. Hay un mundo peligroso allá afuera, y si no se protegen, más temprano que tarde acabarán siendo víctimas de la cyber delincuencia.

¡Suerte!

Christian Cabrera

Soy un ingenieron en comunicaciones con especial interés en el área de voz sobre IP y tecnologías sobre información. He usado Asterisk de manera diaria desde hace más de 12 años.En el 2011 co-fundé Enlaza Comunicaciones, una empresa que se especializa en brindar servicios profesionales de consultoría sobre voz sobre IP basadas en Asterisk.

  • Y no tenía pin sets o algo adicional?

    • No los tenía. Tampoco tenía limitante en la cantidad de llamadas simultáneas. Es un caso en el cual se confió en que con Asterisk seguro no había nada que temer, pero el ataque vino desde adentro

      • Mickegtz

         Interesante artículo Christian, pero tengo una duda, cómo hizo el supuesto hacker para hablar a través del web?, además el dueño del teléfono hackeado debió escuchar la conversación no?. Lo comento por que acabo de reproducir esta vulnerabilidad en mi Yealink T22P.

        • El cliente dejó el teléfono expuesto a Internet para “hacer pruebas”. La llamada era a un número de Sierra Leona que no daba audio, sino que solamente consumia tiempo en línea.

          El usuario habitual de este teléfono notó que marcaban, pero nunca escuchó nada. Esta es la razón por la cual pasó aún más tiempo antes de percatarse

          • Jorge Caucaly

            Pero estos ataques son con un objetivo, es sacar llamadas gratis para comunicarse el o venderlas, en este caso como le hubiera servidor a este atacante, si no se tiene audio?..

            Saludos desde Colombia.

          • Puedes imaginar el caso en el que el atacante toma tus líneas y llama a un número de pago por minuto que sea suyo. De esta manera, no importa que no se diga nada: él recibe $$$ por el simple hecho de que haya canales conectados a su número.

  • Gerardo Barajas

    Ooops, que fuerte! Sin call-limit, ta cañon.

    • Hola Gerardo,

      Dada mis primeras experiencias con el call-limit en Asterisk, no estoy muy convencido de que esa sea la mejor manera. A mi me gusta limitar por plan de llamadas, y en FreePBX es muy fácil hacerlo con este código:
      ; archivo extensions_custom.conf[from-internal-custom]exten => _X.,1,Macro(contador)exten => _X.,n,Goto(from-internal-additional,${EXTEN},1)[macro-contador]exten => s,1,GotoIf($[${GROUP_COUNT(${CALLERID(num)})} s,n,Congestion()exten => s,n(Permite),Set(GROUP(${CDR(uniqueid)})=${CALLERID(num)})Con este código, todas las llamadas pasaron por un macro-contador que determinará si no te excedes de la cantidad. Si lo ahces tendrás congestión. Si no lo haces, te reenvia al contexto from-internal-additional, que es donde caerias de cualquier manera si no pasaras por la autenticación.Saludos,

  • Navaismo

    Buenisimo el Articulo. Gracias por la info.ssadas

  • ¿Identificaron al atacante? es de los que andan haciendo experimentos vistos en google o erá alguien que realmente sabia lo que hacia?…

    • No lo identificamos dado que el atacante nunca pasó por Asterisk, sino por el Yealink, y este no guarda registro de las IPs que le solicitan hacer las llamadas.

      Es un hecho que quien lo hizo sabía lo que hacía, ya que no se fue sobre las vulnerabilidades mas conocidas como el FreePBX, sino que atacó directamente la de un teléfono que según me comentan, el parche para esto salió hace apenas 2 semanas. Tengo que confirmar este dato.

      • Fuiyo

        fui yo

  • Pingback: » Interesante falla de seguridad de los viejos firmwares de Equipos Yealink (hackers,Seguridad,voiip,yealink,)()

  • Leon Ramos

    Sin duda muchas formas de aprovecharse de una instalación.

  • AlbaT

    ¿Por qué?

  • albertojwars

    algo parecido me sucedio… en agosto del año pasado terminamos la
    implementacion de prueba en la oficina de asterisk y de repente me
    informaron los usuarios que no podian sacar llamadas, a lo cual
    solamente me conectaba remotamente al pbx y reiniciaba servicios, cual
    es la sorpresa que a los 15 dias se comunica cablevision para revisar
    los consumos de llamadas internacionales… $289,000.00

    la diferencia es que no teniamos telefonos ip, contabamos con 2 telefonos analogos y 3 softphone.
     

  • Hola, la información que brindas es correcta, el tema es que lo que comentas como un problema es parte del API de Yealink que te permite armar aplicaciones para integrar el telefono con sistemas CRM (por ejemplo). La realidad es que SIEMPRE hay que proteger la red, y por ningun motivo exponer puertos de ningun equipo. Los Yealink T22 en adelante (T26,T28, etc) tienen esta funcion. Los T18 y T20 no. 
    Tambien podes actualizar la agenda con funciones HTTP. 
    En fin, es uno de las marcas que mejor funciona hoy por hoy con Asterisk. Mucho mejor que Grandstream. Suerte y saludos desde Buenos Aires!

  • gnu forever

    buf cristhian  esas llamadas nadie las quiere recibir , buen post y gracias por compartir

  • Mcuevas

    Hola quisiera saber si alguien conoce el codigo para regresar un telefono yealink t18 a su estado de fabrica manualmente

  • Cesar

    Hola Christian Cabrera , estoy buscando un telefono que haga esa caracteristica de poder marcar con una petición web, ustedes tienen estos teléfonos ?

  • Jorge Caucaly

    >Tienes Razon