2. @pepeluxx
Sobre mi
Jose Luis Verdeguer (aka Pepelux)
Ingeniero Técnico de Sistemas Informáticos por la U.A.
Máster en Desarrollo y Programación de Apps y Servicios Web
CTO en Zoonsuite (operador de VoIP)
Ponente en diferentes congresos de seguridad nacionales
Autor del libro Hacking y Seguridad VoIP (de 0xWORD)
3. @pepeluxx
Agenda
¿Por qué nos atacan?
Herramientas
Tipos de ataques
Centralitas de VoIP
Tipos de centralitas
Securizando una PBX
Operadores de VoIP
Diferentes infraestructuras
Securizando un proxy
5. @pepeluxx
Ataques típicos
1. Ataque no dirigido => Escaneo de grandes rangos de red
2. Ataque dirigido => Fuerza bruta (REGISTER / INVITE)
Características
Protocolo UDP
Acceso por IP (nunca por dominio)
Herramientas conocidas y fácilmente detectables
6. @pepeluxx
Herramientas
Auditar / monitorizar / atacar sistemas de VoIP
SIPVicious (svmap.py, svwar.py, svmap.py - UDP)
Smap (SIP scanner - UDP y TCP)
Sipcli (emisión de llamadas - UDP, TCP y TLS)
VaxVoip (SIP SDK)
SIPp/SIPSak (generador de tráfico/realizar test)
Otras herramientas: SiVuS, SipDump, SipCrack, …
Monitorización: tcpdump, wireshark, ngrep, sngrep, …
7. @pepeluxx
SIPVicious
Ataque típico por fuerza bruta con SIPVicious
svmap para escanear rangos en busca de dispositivos/servidores
svwar para enumerar extensiones de un servidor
svcrack para crackear cuentas por fuerza bruta
10. @pepeluxx
Sipcli
Intentos de llamada sin registro
Envío de solicitud de llamada
Soporta UDP, TCP y TLS
Manipulación de SDP
Si el servidor no pide autenticación, a probar combinaciones
Diferentes países
Diferentes prefijos de salida
Diferentes usuarios en el From
12. @pepeluxx
SDK
Creando paquetes personalizados
Evitar la detección de aplicaciones conocidas
Estudiar la respuesta ante paquetes mal formados
SQL Injection
Fuzzing
Envíos de solicitudes de llamada (más sofisticado)
14. @pepeluxx
Securizando el sistema
Objetivos
Bloquear herramientas conocidas
Ocultar información de nuestro sistema
Evitar llamadas sin autenticar
Cifrar nuestras comunicaciones
Minimizar el daño ante un robo
15. @pepeluxx
Centralitas telefónicas
¿Para qué se utiliza?
¿Qué servicios se necesitan?
¿Dónde está montado?
¿Tipo de dispositivos conectados?
¿Necesario el acceso desde el exterior?
¿Cómo se conecta con los operadores?
16. @pepeluxx
Centralitas telefónicas
Caso 1: Oficina SIN terminales externos
No necesitamos abrir servicios al exterior
Trunk con operador:
Por usuario: es una conexión saliente
Por IP: filtro en el firewall
¿FreePBX? ¿Elastix?:
Cuidado con los paneles web
Mantenerse al día sobre los bugs
17. @pepeluxx
Centralitas telefónicas
Caso 2: Oficina CON terminales externos
Uso de VPN si es posible
Filtrado por IP
¿Conexiones con IP dinámica?:
Cambiar puertos por defecto
Intentar no usar UDP
Fail2ban
18. @pepeluxx
Centralitas telefónicas
Caso 3: Centralita en la nube
Filtro por IP si es posible
VPN si es posible
Publicar sólo los servicios necesarios
¿Conexiones con IP dinámica?:
Cambiar puertos por defecto
Intentar no usar UDP
Fail2ban
19. @pepeluxx
Securizando un Asterisk
Tipo de transporte (señalización)
UDP (5060/udp)
Nos van a llover los escaneos
TCP (5060/tcp)
Sufriremos muchos menos ataques
TLS (5061/tcp)
Nuestras comunicaciones van cifradas
27. @pepeluxx
Securizando un Asterisk
Información enviada ante errores
alwaysauthreject (sip.conf)
YES -> Siempre la misma respuesta ante una petición errónea
Importante para no dar información a un atacante
Para mensajes INVITE y REGISTER
30. @pepeluxx
Securizando un Asterisk
Uso de dominios
domain (sip.conf)
Podemos establecer dominios permitidos
Evitamos la conexión a través de la IP (usado por un atacante)
domain=mypbxdomain.com,internal
allowexternaldomains=no
32. @pepeluxx
Securizando un Asterisk
Mensajes OPTIONS
A través de un mensaje OPTIONS se pueden enumerar extensiones
Si es posible, debemos pedir autenticación ante este tipo de
mensajes
auth_options_requests=yes
35. @pepeluxx
Securizando un Asterisk
Configuración de las cuentas
Límite de canales
Dos por extensión
Usuario SIP
Diferente de la extensión (ej: regexten: 200 -> user: usuario200)
Almacenar la contraseña cifrada
md5secret en lugar de secret
36. @pepeluxx
Securizando un Asterisk
Política de llamadas
Bloquear destinos que no vamos a utilizar
¿Necesitamos llamar a Cuba o a Palestina?
; llamadas a cualquier destino
exten => _X.,1,Dial(SIP/trunk/${EXTEN},30)
; llamadas a números nacionales
exten => _[6789]XXXXXXXX,1,Dial(SIP/trunk/${EXTEN},30)
; llamadas internacionales
exten => _00X.,1,Dial(SIP/trunk/${EXTEN},30)
; llamadas a Francia
exten => _0033X.,1,Dial(SIP/trunk/${EXTEN},30)
37. @pepeluxx
Securizando un Asterisk
Política de llamadas
Restricciones de horarios
¿Necesitamos llamar por las noches o los fines de semana?
; permitir llamadas de lunes a viernes de 8:00 a 20:00
exten => _X.,1,GotoIfTime(08:00-20:00,mon-fri,*,*?open:close)
exten => _X.,n(open),Dial(SIP/trunk/${EXTEN},30)
exten => _X.,n(close),Hangup()
38. @pepeluxx
Securizando un Asterisk
Política de llamadas
Límites de consumo
Impedir la emisión de llamadas si el gasto mensual o diario supera
un tope establecido
; Comprobar si podemos llamar usando un AGI
exten => _X.,1,Agi(permissions.agi)
exten => _X.,n,GotoIf($[“${ALLOWCALL}”=“no”]?notallowed)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},30)
exten => _X.,n(notallowed),Hangup()
44. @pepeluxx
Proxy SIP
Ventajas de tener un proxy
Autenticación por Radius
Programación de scripts
Análisis de mensajes SIP (control total)
Módulos anti flood (pike)
Módulos de geolocalización (geoip)
Módulos para ocultar información interna de la red (topoh)
46. @pepeluxx
Securizando nuestro proxy
Proxy de clientes
Autenticación de usuarios
No dejamos esta tarea al Asterisk
Bloqueo temporal ante N registros erróneos
¿El usuario pone mal la contraseña o es un ataque por fuerza bruta?
Análisis de mensajes SIP
Detección de fuzzers
Detección de scanners conocidos
Ataques DoS, SQLi, spoofing, …
53. @pepeluxx
Securizando nuestro proxy
Ataques de SQL injection
Detectando ataques de SQLi
Usando transformaciones escape.common y unescape.common
Manualmente, en Auth-User, Contact, From, To, …
60. @pepeluxx
Securizando nuestro proxy
Proxy de carriers (el que decide si una llamada se cursa o no)
Accesible únicamente por nuestras máquinas
Antes de permitir llamar, verificar si el usuario …
¿Tiene saldo? ¿Cuánto lleva gastado hoy?
¿Tiene bloqueadas las llamadas salientes?
¿Puede llamar a ese destino?
¿Demasiadas llamadas seguidas a ese país?
¿Tiene canales disponibles?
¿Alguna actividad extraña en sus llamadas?
61. @pepeluxx
Securizando nuestro proxy
Permiso de llamada basado en estadísticas:
Límite de gasto mensual
Límite de llamadas internacionales
Límite de llamadas a ciertos países
Límite de canales concurrentes
62. @pepeluxx
Elección de carriers
Límites y bloqueos de nuestros carriers
¿Tenemos límite de gasto?
Nuestros carriers, ¿nos avisan/bloquean ante un uso elevado?
¿Dispone de herramientas de detección de fraude?
¿Cuántos canales nos ofrecen?
63. @pepeluxx
Monitorización del sistema
Monitorización constante del sistema. Alertas por SMS y Mail ante …
Uso elevado de llamadas a un cierto destino/país
Consumo elevado de algún cliente (métodos estadísticos)
Registro de detección de ataques
Cualquier comportamiento anómalo en el sistema
64. @pepeluxx
¿ Y si todo falla ?
Mejor prevenir
Establecer un gasto máximo diario en todo nuestro sistema
Autobloqueo de llamadas, servicios, …
Plan de emergencias
Tener preparada una acción de bloqueo masivo de clientes, grupos
de usuarios, destinos, conexiones de ciertos países, …