05 diciembre 2012

Pentesting VoIP en 2012

Buenas, tras mi último post aquí sobre riesgos en la tecnología VoIP me llegaron dudas de algún pentester por no estar demasiado familiarizados con esta tecnología. Lo cual veo lógico ya que no existe casi documentación actualizada y completa sobre el tema. Así que, por si le sirve a alguien más, voy a comenzar con una serie de posts en donde explicaré los pasos que sigo yo durante una auditoría.

Si usas el Wireshark para hacer “eavesdropping” (escuchar conversaciones) creo que esto te puede ayudar, ya que existen herramientas mucho más potentes. Mostraré también como retocando algunos módulos de Metasploit (y añadiendo otros) este framework supera a herramientas mucho más conocidas para este propósito como la suite SIPVicious. Incluso acercándose al nivel del módulo VoIPPack para el framework Inmunity Canvas, en mi opinión la mejor herramienta de seguridad para este tipo de entornos. El problema de este último es su licencia privativa y su elevado coste. Para que os hagáis una idea del su potencial podéis echarle un ojo a esta demo, donde se automatiza el proceso de pentesting. Como curiosidad, comentar que el desarrollador de ambas alternativas es Sandro Gaucci.



Video: sipautohack (VoIPPack)

El host objetivo que voy a utilizar es la máquina virtual vulnerable (orientada a la seguridad en VoIP) publicada por los miembros del Busy Tone Group con este fin. En este enlace podéis visitar las transparencias de su presentación. Como comenté, usaré Metasploit como herramienta principal apoyándome en otras a medida que vaya superando las distintas fases de la auditoría. Cuando desarrollo me gusta el cliente de consola por ser más ágil pero para hacer pentesting creo que es más cómodo utilizar la interfaz gráfica libre Armitage. Voy a dividir el contenido en las fases típicas de un test de intrusión, que creo que no es necesario explicar a los lectores de este blog.

Búsqueda de información

Seguro que muchos de vosotros comenzáis a menudo con Shodan o algún Google Dork, que nos conocemos ... xD. Además estos últimos son muy útiles para lo que nos ocupa, ya que muchos servidores SIP disponen de paneles web para una configuración más sencilla. Así que vamos a ver como hacerlo en Metasploit, abrimos Armitage y buscamos el módulo auxiliar para consultar Shodan. Al cargarlo veremos las opciones disponibles, en este caso solo necesitamos pasarle la cadena de búsqueda y una key que nos permita usar la API (se obtiene en el panel de usuario), igual que si lo hiciésemos en la web. Las siguientes imágenes muestran ejemplos típicos.



Configuración módulo shodan_search



Uso módulo shodan_search: “Asterisk”



Uso módulo shodan_search: “kamailio”



Para los dorks no conozco ningún módulo de Metasploit así que recurrimos a la manera tradicional. En Exploit-DB es sencillo encontrar servidores SIP comunes, el siguiente es un ejemplo para buscar centralitas Cisco Call Manager


Google Dork: “Cisco Call Manager” 

Ambas herramientas son útiles si no tenemos un objetivo definido de antemano pero, como sabemos, también lo son para este caso ya que podrías encontrarte que alguno de los buscadores tiene indexada información útil sobre alguna de las direcciones IP en estudio. 

En una auditoría de típica se comienza por obtener las direcciones IP de los hosts que nos interesan (footprinting). En el protocolo SIP existen dominios, de forma análoga a la web, así que lo primero será obtener las mismas a partir de un dominio. El módulo enum_dns desarrollado por Darkoperator para Metasploit realiza esta tarea a la perfección (además de transferencias de zona, fuerza bruta, etc). Solo necesitamos pasarle un dominio tal y como muestra la imagen. Al lanzarlo realizará una consulta al DNS contra el mismo obteniendo los distintos registros, entre ellos los SRV relacionados con el protocolo SIP. No tengo ningún servidor DNS a mano así que dejo la máquina virtual para más tarde y esta vez probaré con sinologic.net que es, para que nos entendamos, como el SbD de la VoIP. Aprovecho la ocasión para recomendaros que lo visitéis si os interesa el tema.




Configuración módulo enum_dns


Uso módulo enum_dns



Otras herramientas que me gustan para esta primera fase son Maltego y la FOCA, pero creo que ambas son bastante famosas por aquí, por lo que no vamos a profundizar más. Una vez conocidas las direcciones IP que nos interesan, el siguiente paso sería escanearlas para obtener su firma (fingerprinting). Podríamos utilizar la integración de Nmap con Metasploit o el propio escáner incluído en el framework. Pero a mi me gusta más empezar sin hacer ruido para evitar posibles bloqueos en caso de existir protecciones. Prefiero hacer un escaneo mediante el envío de un solo paquete SIP válido. Además este proceso es mucho más rápido que el soporte para UDP del Nmap, como explica Sandro Gaucci en el blog de SIPVicious. Para ello disponemos del módulo auxiliary/scanner/options y de su versión para el protocolo TCP (options_tcp). 

Ambos, al igual que el resto de módulos relacionados con el protocolo SIP del framework, presentan el problema de que la función que crea la petición no respeta para nada el protocolo. Por ésto muchos servidores como el proxy SIP Kamailio y algunos Session Border Controller (sorprendentemente una minoría) rechazan (error SIP 400 Bad Request) el paquete por considerarlo malicioso, o simplemente lo descartan. Evitando, de esta forma, la obtención de información alguna válida para la auditoría. Con la intención de solucionarlo escribí mi propia versión de los mismos que tengo alojadas en mi repositorio de GitHub. Básicamente completé esa función para soportar todos los paquetes SIP comunes respetando lo que dice el estándar. Para este paso necesitamos el módulo sipscan, por defecto utiliza peticiones OPTIONS y el puerto 5060, así que solo debemos pasarle la dirección IP de la máquina a auditar. Es conveniente especificar un rango de puertos por si a caso, pero normalmente con añadir el 5061 para el caso de TCP es suficiente, por ser el que se utiliza por defecto para las conexiones TLS. Por cierto, estos módulos también funcionan sobre el protocolo TLS por ser una característica intrínseca a las conexiones TCP del propio framework. Usando las opciones avanzadas del módulo podemos seleccionar entre las distintas versiones del protocolo y demás opciones de la conexión. Para una mayor comprensión de la utilización y creación de módulos auxiliares en Metasploit enlazo aquí un par de posts que escribí con Roi Mallo también en este blog. 

Casi siempre este tipo de paquetes (OPTIONS) consigue los mejores resultados, ya que el registro (REGISTER) suele estar más controlado y el INVITE (llamada) podría hacer sonar los teléfonos, lo cual supone un problema evidente. No obstante, en un entorno real a menudo es necesario probar distintos tipos de peticiones, ya que depende de la configuración más o menos segura del objetivo. Los OK, BYE y ACK no suelen ser una buena opción debido a que representan respuestas a algo, pero decidí incluirlos de todas formas porque las múltiples implementaciones del protocolo no dejan de sorprenderme. 

A lo que íbamos, las opciones del módulo para nuestra prueba de concepto quedarían como se muestran en la primera imagen, obteniendo el resultado de la segunda. Donde podemos apreciar que el user-agent servidor SIP incluído en la máquina virtual indica que es un FreePBX (FPBX-2.8.1), por lo tanto un Asterisk (versión 1.8.7.0).




Configuración módulo sipscan



Uso módulo sipscan



Durante todo el proceso siempre tengo abierto el Wireshark filtrando todo el tráfico SIP para evitar posibles perdidas de información en el parseo de las respuestas. Es decir, el módulo busca las cadenas "User-Agent", "Allow", "Server" o "Proxy-Require" en la respuesta, pero en alguna ocasión me encontré servidores SIP que no incluyen ninguna de éstas y sí una llamada "Organization" por ejemplo. Además nos permite obtener diagramas de secuencia (como el de la segunda imagen) muy cómodos para comprender lo que está sucediendo cuando se utilizan herramientas con un comportamiento más complejo, como veremos más adelante.




Captura Wireshark




Diagrama de secuencia Wireshark

Aunque esto sea una auditoría orientada a la VoIP, como sabemos, el objetivo final es “entrar hasta la cocina". De momento solo escaneamos los servidores SIP que se ejecutan sobre el protocolo UDP, así que antes de terminar esta fase es necesario un escaneo completo de puertos para evitar dejarnos nada útil. Podemos usar el escáner de Metasploit o el Nmap, personalmente pasa esta situación prefiero el segundo, así que es momento de realizar un escaneo rápido (para no liarla mucho) sobre TCP. Una vez en este punto creo que no aportaría nada interesante escanear el resto de servicios UDP, así que lo evitamos para no dejar demasiadas huellas. 


Uso Nmap en Metasploit (TCP)



Como podríamos suponer tenemos servicios para entretenernos un rato :). Pues nada más por hoy, en unos días sigo con las etapas de búsqueda de vulnerabilidades y explotación.

Artículo cortesía de Jesús Pérez

7 comments :

CarŁoko Encrypted dijo...

Excelente aporte,Saludos desde Chile.

chmeee dijo...

Como mola el silbato del Cap'n Crunch. Nunca me había preocupado de buscar cómo era...

Anakin Peruwalker dijo...

Excelente aporte. Saludos desde la Estrella de la Muerte de Perú.

jose dijo...

genial!
Te quería comentar que en mi organización utilizan VLANs para separar el tráfico VoIP, y aunque va por los mismos canales, dificulta el ataque.
¿Alguna experiencia con VoIP y VLANs?

proseginv... dijo...

cordial saludo

Jesús Pérez dijo...

Eso queda para otro día, pero mientras puedes echarle un ojo a VoIPHopper o UCSniff, gracias :)

Daniel dijo...

muy muy buen aporte.. saludos!!