En este post vamos a hablar de una de las cosas mas interesantes y llamativas de hacking en VoIP, las escuchas o interceptaciones de llamadas.
En concreto, vamos a centrarnos en entornos Cisco que están bastante extendidos.Esto es, teléfonos VoIP cisco y centralitas Cisco Call manager. Nos vamos a centrar en este entorno ya que por defecto tienen una directiva de seguridad que impide la interceptación de llamadas.
Vamos a situarnos.Estamos en una auditoría interna (o externa en la que nos hemos hecho con el control de un equipo de la red interna) y nos encontramos un escenario con una red de voz con terminales Cisco y centralitas Call manager:
Lo primero que necesitamos es poder saltar a la VLAN de voz, aquí tenemos 2 opciones en función de como sea el escenario:
Opcion 1 -> Telefonos y PC's comparten switch (bastante habitual).
Esta configuración es muy habitual y se suele implementar por abaratar costes, en este caso, lo barato puede salir caro.Al estar en el mismo switch la red de voz y de datos el saltar a la VLAN de voz es más sencillo.
Simplemente , tenemos que detectar en los mensajes CDP del switch la VLAN de voz, esto es bastante sencillo, si tenemos conectado el pc al teléfono , con wireshark podemos ver estos mensajes.En la siguiente imagen se muestra un ejemplo de un mensaje CDP en el que se muestra la VLAN nativa y la VLAN de voz, en estos mensajes.
Opcion 2 -> Telefonos y pc's en distintos switches.
Si tenemos acceso físico, podemos probar a conectar nuestro equipo al cable del teléfono y así estaríamos conectados al switch y en la red de voz.Luego ya tendríamos que ver si tenemos que suplantar la MAC
o alguna otra cosa.
Si no, podemos hacerlo, nos queda ver si es posible hacer Vlan hopping por DTP y hacernos pasar por un trunk de un switch. Por ejemplo usando Frogger ( http://www.commonexploits.com/?p=444 ), que tira por debajo de Yersinia.
Una vez tenemos la VLAN de voz (por ejemplo VLAN 200) , tenemos que configurar el interfaz con la VLAN correspondiente , es recomendable hacerlo desde un Linux nativo, desde máquinas virtuales podemos encontrarnos problemas.
modprobe 8021q vconfig add eth0 200 dhclient eth0.200
Ya estamos en la VLAN de voz, vamos a intentar hacer un arpspoofing entre un teléfono y el gateway.
ettercap -T -M arp:oneway,remote /ip_telefono/ /ip_gateway/
Podemos comprobar que una vez hecho el arp spoofing, podemos ver trafico "Skinny" del telefono al descolgar:
Además, viendo el detalle de este tráfico SKINNY podemos ver información que nos puede valer para más adelante, como el número de extensión, nombre asociado, etc:
Pero a la hora de realizar una llamada, no observamos ningún tráfico RTP, no parece que podamos interceptar llamadas.Por que ?
Bien, aquí viene la parte interesante, estos escenarios de teléfonos Cisco con centralitas Callmanager, tienen un mecanismo de seguridad llamado GARP. En los teléfonos vienen una configuración por defecto de GARP-> Disabled .
Con esta configuración no será posible interceptar las llamadas aún haciendo arpspoofing, pero no lo harán imposible, en este caso podemos realizar un ataque para cambiar esa configuración en el teléfono y poder interceptar las llamadas. Ucsniff es la solución.
Ucsniff (http://ucsniff.sourceforge.net/usage.html) tiene una funcionalidad que nos permite realizar un ataque TFTP, que consiste en forzar al teléfono en volver a coger la configuración del servidor TFTP correspondiente, una vez ucsniff detecte que ha pedido la configuración y se le ha devuelto el xml de la configuración , parsea el xml y cambia la directiva GARP al vuelo (Con reiniciar el teléfono volverá la configuración anterior al volver a coger la configuración del servidor TFTP legítimo).
Teléfono -> Intenta realizar llamada -> pide configuración por TFTP -> Se intercepta el XML de configuración -> se modifica el valor GARP -> se devuelve al teléfono la configuración modificada.
Teléfono -> Intenta realizar llamada -> pide configuración por TFTP -> Se intercepta el XML de configuración -> se modifica el valor GARP -> se devuelve al teléfono la configuración modificada.
Ejemplo de configuración:
<vendorConfig> <g722CodecSupport>2</g722CodecSupport> <disableSpeaker>false</disableSpeaker> <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset> <pcPort>0</pcPort> <settingsAccess>1</settingsAccess> <garp>0</garp> <--------------- <voiceVlanAccess>0</voiceVlanAccess> <videoCapability>0</videoCapability> <autoSelectLineEnable>0</autoSelectLineEnable> <webAccess>1</webAccess> <daysDisplayNotActive>1,7</daysDisplayNotActive> <displayOnTime>08:00</displayOnTime> <displayOnDuration>10:30</displayOnDuration> <displayIdleTimeout>01:00</displayIdleTimeout> <spanToPCPort>1</spanToPCPort> </vendorConfig>
Ahora si que podemos interceptar las llamadas, para ello tenemos que hacer lo siguiente.
En un fichero targets.txt deberemos poner:
IP del teléfono, extensión,nombre persona de la extensión,protocolo (skinny protocol en nuestro caso -> sccp)
En realidad, el nombre no es necesario por lo que podría quedar:
192.168.1.100,443,,sccp
Recordemos que el número de extensión asociado a un nombre lo podemos conseguir observando el tráfico skinny, para así poder elegir nuestro objetivo, un alto cargo de la empresa por ejemplo :)
Una vez creado el targets.txt lanzamos ucsniff con el ataque TFTP especificando el interfaz virtual de la VLAN de voz:
ucsniff -i eth0.200 --tftpm -T -D
Ucsniff utiliza ettercap por debajo , haciendo un MitM entre el teléfono y el gateway, interceptando todas las llamadas entrantes y salientes del teléfono, ya sean entre extensiones internas o incluso llamadas a números moviles/fijos externos.
Además, ucsniff nos dejará en el directorio ficheros .wav con el audio de cada llamada interceptada.Si por algún casual no nos genera el .wav, podemos capturar el tráfico RTP con wireshark y reproducirlo:
En este punto nos podemos encontrar con otro problema.Si el codec de las llamadas es G.722, ni ucsniff ni wireshark seran capaces de reproducir las llamadas por defecto, para ello tenemos que encontrar otra solución:
(tráfico RTP G.722)
Para poder escuchar estas llamadas tenemos varias soluciones:
Poder reproducir en wireshark --> Es preciso compilar wireshark incluyendo un código fuente de una modificación que hicieron la gente de wireshark para tal fin.
Utilizar PCAP2WAV en su modalidad online o offline:
Online (No recomendado) --> http://pcap2wav.xplico.org/ Se trata de un sitio web donde se puede convertir los pcaps para distintos codecs:
(G711ulaw, G711alaw, G722, G729, G723, G726 and RTAudio (x-msrta: Real Time Audio)
Offline --> Si lo queremos tener offline no tenemos más que seguir este hilo:
http://wiki.xplico.org/doku.php?id=pcap2wav
En otro post veremos como podemos solucionar este problema de seguridad en las redes de VoIP.