1. Usando el módulo PIKE en Elastix MT
Juan Oliva
Security Consultant and VoIP at SILCOM
2. 2
$ Whois @jroliva
Juan Oliva
Linuxero de toda la vida
Consultor de proyectos de Telefonía y VoIP
Consultor de proyectos de Ethical Hacking
Certificaciones
C|EH, CPTE, OSEH, BNS, ECE, ESM, dCAA, LPIC-1, Novell CLA
Intructor & Training
- Certificación de Seguridad de Elastix “ESM” y “ECE”
- Certificación Linux Professional Institute LPI-C1
- Cursos Ethical Hacking y Voz sobre IP
8. 8
Qué es Kamailio ?
• Es un SIP PROXY
• Es un router de paquetes SIP
• Trabaja a bajo nivel
• No sabe que es una llamada, solo sabe
enrutar métodos SIP .. INVITE,
BYE,etc.etc..
11. 11
Kamailio
modo Stateful
• Se mantiene en el medio de todas las
"transacciones" SIP
• transacción petición y una respuesta
• Provee servicios como acounting
12. Servicios más conocidos
de kamailio
12
• Acounting y location
• Paralel forking
• Balanceo de carga
• Reescribir modificar métodos SIP
• Seguridad a bajo nivel
13. 13
Kamailio
Preguntas de rigor
• Es posible ponerle un E1/T1 a kamailio ?
• Puedo saber las llamadas concurrentes
en Kamailio como lo hago en Asterisk ?
• Puedo colgar una llamada en curso
como lo hago en Asterisk ?
• Se hace cargo de la media y/o video ?
14. ASTERISK
14
• Es un Back to back user Agent
• Control sobre las “llamadas”
• Mantiene activa y gestión el estado
• Si se cae .. se caen todas las llamadas :(
17. 17
WHITINDLG
request_route
Comprobaciones iniciales (REQINIT)
Descartar los Cancel
Quitar los request in dialog (WHITINGDLD)
Quitar Restransmisiones
Quitar cabeceras route externas
Agregar record_route para los invite y subscribe
Decartar peticiones que no son de nuestro dominio
Eliminación de route externos en request (SIPOUT)
Gestionar los registar (REGISTRAR)
Validar si llega la Request Uri – user
Buscar al usuario para enrutarlo (LOCATION)
Revisión si la request in dialog tiene todo lo
Necesario para enrutar ejem Notify , ACK
RelaySIPOUT
Ruta Peticiones dominio
Externas
REGISTRAR
Si el método es register
Guarda el registro del UA
LOCATION
Carga los datos de contacto
Guardados en el registro y
Lo enruta (relay)
Enruta en función a la
Request Uri
REQINIT
28. 28
Módulo PIKE
•Realiza un seguimiento de todas o IP de origen
solicitud entrante seleccionado.
•Bloquea los que superen un determinado umbral
•Soporta IPv6
•No hay acciones internas para bloquear
31. modparam("pike", "sampling_time_unit", 5)
modparam("pike", "reqs_density_per_unit", 50)
modparam("pike", "remove_latency", 60)
modparam("pike", "pike_log_level", 4)
modparam("htable", "htable", "ipban=>size=8;autoexpire=300")
Módulo PIKE
Cantidad de peticiones
Umbrar en segundos
Tiempo que la IP está en memoria
Nivel del syslog
Hash table, Tabla IPBAN , Tamaño 256 (2x8) , permanece 300 segundos o 5 minutos
2.- Configurar módulo
32. 32
Modulo PIKE
if(src_ip!=myself) {
if($sht(ipban=>$si)!=$null) {
xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)n");
exit;
}
if (!pike_check_req()) {
xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)n");
$sht(ipban=>$si) = 1;
exit;
}
}
Si la IP está en IPBAN
La IP está bloqueada
Sale
Si la IP superó el umbral definido
Crea una entrada en hastable IPBAN con la IP
Sale
Si la IP es diferente a mi
3.- Evaluar en el route ( lógica de enrutamiento)
33. 33
POR USER AGENT
$ua
•Realiza un análisis de todos los UA enrutados
•Bloquea los UA que se determinen
•No lee ningún tipo de log para realizar el bloqueo
34. 34
POR USER AGENT
$ua
U 192.168.10.33:5060 -> 192.168.10.35:5060
REGISTER sip:192.168.10.35 SIP/2.0.
Via: SIP/2.0/UDP 127.0.1.1:5060;branch=z9hG4bK-2962251035;rport.
Content-Length: 0.
From: "100" <sip:100@192.168.10.35>;tag=2475650193.
Accept: application/sdp.
User-Agent: friendly-scanner.
To: "100" <sip:100@192.168.10.35>.
Contact: sip:123@1.1.1.1.
CSeq: 1 REGISTER.
Call-ID: 3403204427.
Max-Forwards: 70.
35. 35
if($ua =~ "friendly-scanner" || $ua =~ "sipvicious" || $ua =~ "^sipcli.+") {
xlog("L_WARN","ALERT: BRUTEFORCE $rm TOOL $ua DESDE $fu (IP:$si:$sp)n");
exit;
}
BY USER AGENT
$ua
Si el $UA es
Sale del request
42. 42
Configurando PIKE en
ELASTIX MT
4.- Evaluar en la lógica de enrutamiento
route[REQINIT] {
if(src_ip!=myself) {
if($sht(ipban=>$si)!=$null) {
# ip is already blocked
xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)n");
exit;
}
if (!pike_check_req()) {
# blocking new ip
xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)n");
$sht(ipban=>$si) = 1;
exit;
}
}
46. 46
Aún así no entendiste
Descarga el kamailio.cfg
https://jroliva.wordpress.com/2015/10/07/configurando-seguridad-en-elastix-mt
47. 47
Enlaces de referencia
Variables en Kamailio
http://www.kamailio.org/wiki/cookbooks/4.0.x/pseudovariables
Elementos del archivo de configuración de kamailio
http://www.kamailio.org/wiki/cookbooks/4.0.x/core/cfg
Definición de parámetros del modulo PIKE
http://www.kamailio.org/docs/modules/4.2.x/modules/pike
Troncalización de Elastix MT y A2BILLING mediante SIP
https://jroliva.wordpress.com/2015/03/19/troncalizacion-de-elastix-mt-y-a2billing-mediante-sip/
Configuración y uso de la interfase web de Elastix MT
http://es.slideshare.net/ElastixMX/elastix-mt-al-descubierto-alfio-muoz-alteknativa
Protegiendo nuestro sistema VoIP con Kamailio
http://blog.pepelux.org/2014/07/30/protegiendo-nuestro-sistema-de-voip-con-kamailio/