Usando el módulo PIKE en Elastix MT
Juan Oliva
Security Consultant and VoIP at SILCOM
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
3
Qué es Elastix MT ?
4
Qué es Elastix MT ?
• Conocido al inicio como Elastix 3.0
• Enfocada para PBX Providers y Cloud PBX
• Soporte Multi-Tenant
• SIP Proxy embebido
5
Qué es Elastix MT ?
6
Qué es Elastix MT ?
7
Qué es Kamailio ?
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..
9
Kamailio
Modos de trabajo
Stateful - Stateless
10
Kamailio
modo Stateless
• No existe ningún seguimiento
• Sólo reenvía mensajes
• No provee capacidad de control
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
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
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 ?
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 :(
15
Desmembrando
kamailio en Elastix MT
16
Kamailio.cfg
/etc/kamailio/kamailio.cfg
Definiciones globales
Sección de módulos
Sección de configuración de módulos
Bloques de rutas o lógica de enrutamiento
Principal (Main ó request_route)
Secundarias (REQINIT, WITHINDLG,REGISTRAR)
Failure (failure_route)
Branch (branch_route)
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
18
Y entonces …..
Como se integra
Kamailio y Asterisk en
Elastix MT ?
19
20
vim /etc/kamailio/kamailio.conf
#!define DBASTURL "unixodbc:///elxpbx-connector"
vim /etc/asterisk/res_odbc.conf
;;; odbc setup file
[elxpbx]
enabled => yes
dsn => elxpbx-connector
pre-connect => yes
sanitysql => select 1
21
Y donde se encuentran
los usuarios,
registros..etc..etc??
Tabla : sipBase datos : elxpbx
View : subscriberBase datos : elxpbx
View : subscriberBase datos : elxpbx
25
Tabla : sipView : subscriber BD : elxpbx
26
Seguridad en Kamailio
27
Dos formas :
Modulo PIKE User Agent
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
29
Qué necesitamos para
usar PIKE en Kamailio ?
30
Módulo PIKE
loadmodule "pike.so"
Cargar el módulo ( Not by Default)
1.- Cargar módulo
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
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
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
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
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
36
Seguridad en Elastix MT
36
37
Ummm y ahora
en donde van los códigos
en Elastix MT??
Modulo PIKE User Agent
WHITINDLG
request_route
RelaySIPOUT REGISTRAR LOCATION
REQINIT
AQUÍ !!
Ummm y en donde van los códigos
en Elastix MT??
39
Configurando PIKE en
ELASTIX MT
1.- Activar la variable en las definiciones globales
#!define WITH_ANTIFLOOD
40
Configurando PIKE en
ELASTIX MT
2.- Verificar la carga del módulo
#!ifdef WITH_ANTIFLOOD
loadmodule "pike.so"
#!endif
41
Configurando PIKE en
ELASTIX MT
3.- Configurar el módulo PIKE a gusto :D
#!ifdef WITH_ANTIFLOOD
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")
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;
}
}
43
Configurando bloqueo
por $UA en Elastix MT
43
44
Configurando bloqueo por
$UA en ELASTIX MT
1.- Evaluar en la lógica de enrutamiento
route[REQINIT] {
if($ua =~ "friendly-scanner" || $ua =~ "sipvicious" || $ua =~ "^sipcli.+") {
xlog("L_WARN","ALERT: HIJOIPUCHA ENVIANDO $rm CON LA TOOL $ua DESDE $fu (IP:$si:$sp)n");
exit;
}
}
45
Seguridad en Elastix MT
(POC - DEMO)
46
Aún así no entendiste
Descarga el kamailio.cfg
https://jroliva.wordpress.com/2015/10/07/configurando-seguridad-en-elastix-mt
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/
www.silcom.com.co
www.silcom.com.pe
Preguntas?
Juan Oliva
Consultor en seguridad informatica y VoIP
email : joliva@silcom.com.pe
hangout : jroliva@gmailcom
Twiter : @jroliva
Blog : http://jroliva.wordpress.com/
Gracias ElastixWorld !!

Usando el módulo PIKE en Elastix MT

  • 1.
    Usando el móduloPIKE en Elastix MT Juan Oliva Security Consultant and VoIP at SILCOM
  • 2.
    2 $ Whois @jroliva JuanOliva 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
  • 3.
  • 4.
    4 Qué es ElastixMT ? • Conocido al inicio como Elastix 3.0 • Enfocada para PBX Providers y Cloud PBX • Soporte Multi-Tenant • SIP Proxy embebido
  • 5.
  • 6.
  • 7.
  • 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..
  • 9.
  • 10.
    10 Kamailio modo Stateless • Noexiste ningún seguimiento • Sólo reenvía mensajes • No provee capacidad de control
  • 11.
    11 Kamailio modo Stateful • Semantiene en el medio de todas las "transacciones" SIP • transacción petición y una respuesta • Provee servicios como acounting
  • 12.
    Servicios más conocidos dekamailio 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 unBack to back user Agent • Control sobre las “llamadas” • Mantiene activa y gestión el estado • Si se cae .. se caen todas las llamadas :(
  • 15.
  • 16.
    16 Kamailio.cfg /etc/kamailio/kamailio.cfg Definiciones globales Sección demódulos Sección de configuración de módulos Bloques de rutas o lógica de enrutamiento Principal (Main ó request_route) Secundarias (REQINIT, WITHINDLG,REGISTRAR) Failure (failure_route) Branch (branch_route)
  • 17.
    17 WHITINDLG request_route Comprobaciones iniciales (REQINIT) Descartarlos 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
  • 18.
    18 Y entonces ….. Comose integra Kamailio y Asterisk en Elastix MT ?
  • 19.
  • 20.
    20 vim /etc/kamailio/kamailio.conf #!define DBASTURL"unixodbc:///elxpbx-connector" vim /etc/asterisk/res_odbc.conf ;;; odbc setup file [elxpbx] enabled => yes dsn => elxpbx-connector pre-connect => yes sanitysql => select 1
  • 21.
    21 Y donde seencuentran los usuarios, registros..etc..etc??
  • 22.
    Tabla : sipBasedatos : elxpbx
  • 23.
    View : subscriberBasedatos : elxpbx
  • 24.
    View : subscriberBasedatos : elxpbx
  • 25.
    25 Tabla : sipView: subscriber BD : elxpbx
  • 26.
  • 27.
    27 Dos formas : ModuloPIKE User Agent
  • 28.
    28 Módulo PIKE •Realiza unseguimiento de todas o IP de origen solicitud entrante seleccionado. •Bloquea los que superen un determinado umbral •Soporta IPv6 •No hay acciones internas para bloquear
  • 29.
  • 30.
    30 Módulo PIKE loadmodule "pike.so" Cargarel módulo ( Not by Default) 1.- Cargar módulo
  • 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 •Realizaun 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 U192.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
  • 36.
  • 37.
    37 Ummm y ahora endonde van los códigos en Elastix MT?? Modulo PIKE User Agent
  • 38.
    WHITINDLG request_route RelaySIPOUT REGISTRAR LOCATION REQINIT AQUÍ!! Ummm y en donde van los códigos en Elastix MT??
  • 39.
    39 Configurando PIKE en ELASTIXMT 1.- Activar la variable en las definiciones globales #!define WITH_ANTIFLOOD
  • 40.
    40 Configurando PIKE en ELASTIXMT 2.- Verificar la carga del módulo #!ifdef WITH_ANTIFLOOD loadmodule "pike.so" #!endif
  • 41.
    41 Configurando PIKE en ELASTIXMT 3.- Configurar el módulo PIKE a gusto :D #!ifdef WITH_ANTIFLOOD 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")
  • 42.
    42 Configurando PIKE en ELASTIXMT 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; } }
  • 43.
  • 44.
    44 Configurando bloqueo por $UAen ELASTIX MT 1.- Evaluar en la lógica de enrutamiento route[REQINIT] { if($ua =~ "friendly-scanner" || $ua =~ "sipvicious" || $ua =~ "^sipcli.+") { xlog("L_WARN","ALERT: HIJOIPUCHA ENVIANDO $rm CON LA TOOL $ua DESDE $fu (IP:$si:$sp)n"); exit; } }
  • 45.
    45 Seguridad en ElastixMT (POC - DEMO)
  • 46.
    46 Aún así noentendiste Descarga el kamailio.cfg https://jroliva.wordpress.com/2015/10/07/configurando-seguridad-en-elastix-mt
  • 47.
    47 Enlaces de referencia Variablesen 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/
  • 48.
    www.silcom.com.co www.silcom.com.pe Preguntas? Juan Oliva Consultor enseguridad informatica y VoIP email : joliva@silcom.com.pe hangout : jroliva@gmailcom Twiter : @jroliva Blog : http://jroliva.wordpress.com/ Gracias ElastixWorld !!