Seguridad Asterisk (3)

Bueno en esta tercera parte de la serie de artículos sobre seguridad en asterisk miraremos ciertas funciones de asterisk que nos permitirá dar mas seguridad a nuestro dialpla, usaremos ciertas funciones como las siguiente:

1-La funcion FILTER, que nos permite evitar ataques del tipo DialString injection, esta funcion pemirte filtrar una cadena y dejar pasar solo caracteres permitidos,  y tiene la siguiente sintaxis FILTER(Caracters_Permitidos,${cadena}) en el siguiente ejemplo quedara mas claro su uso,  muchas veces para ahorrar tiempo ponemos una dialplan generico del tipo para llamar a las extensiones SIP de nuestro asterisk

[solosip]
exten => _X.,1,Verbose(llmando a la extension ${EXTEN})
exten => _X.,n,Dial(SIP/${EXTEN},90)
exten => _X.,n,Hangup()

Esta dialplan nos permitir marcar todo lo que es SIP/${EXTEN}, es decir llamamos a la extensión 100, marcara SIP/100, pero si desde un teléfono marcamos la extensión 902505009@mitelefonovirtual  marcando así el numer0 902505009 a traves el  de nuestro proveedor de telefonía IP mi teléfono virtual o pueden marcar la extension siguiente o 100&Dahdi/g1/902505009, lo que significa marcar la extension SIP/100 y el numero 902505009  atraves de l canal dahdi si existiera,  esto es el diastring injection, para evitarlo, podemos usar la funcion filter y nuestro context queda como sigue:

[solosip]
exten => _X.,1,Verbose(llmando a la extension ${EXTEN})
exten => _X.,n,Dial(SIP/${FILTER(0-9,${EXTEN})},90)
exten => _X.,n,Hangup()

Esto pemrite que en el cado de marcar extension 902505009@mitelefonovirtual se filtraran las letras y solo se marcar 902505009, que al no exisitir como usuario sip no hara nada y se colgara el canal.

Tambien podemos evitar este ataque acotando un poco mas nuestro dialplan, es decir que si tenemos extensiones de 3  digitos, pues poner como minimo que solo se acepten extensiones de 3 digitos, y si ademas sabemos que siempre empiezan con un 1 o 2, nuestro dialplan sera mas seguro y quedara de esta forma:

[solosip]
exten => _[12]XX,1,Verbose(llmando a la extension ${EXTEN})
exten => _[12]XX,n,Dial(SIP/${FILTER(0-9,${EXTEN})},90)
exten => _[12]XX,n,Hangup()

Es decir que solo podemos llamar a las extension del tipo 100 y/o 200.

2- La segunda opción es usar la función REGEX que usa expersiones regulares para filtrar en conjunccion con otras funciones como ExcecIF por si hay un error el filtro se realiza llamada.

[internacionales]

exten=>_00XXXX.,1,ExecIF(${REGEX(“&,/|@” ${EXTEN})}?Congestion())
exten=>_00XXXX.,n,Dial(SIP/${EXTEN}@proveedorIP)

3- Finalmente para complicarle a quien sea que haya conseguido tener una extensión con todos los privilegios de llamada, podemos usar la Authenticate para que por ejemplo a las llamadas con costes altos como las internacionales necesitaran un clave que conocen los usuarios de la centralita:

exten=>_00XXXX.,1,Authenticate(1234) ;; Numero pin conocido por todos los usuarios.
exten=>_00XXXX.,n,Dial(SIP/${FILTER(0-1,${EXTEN})}@proveedorIP)

Espero que estos trucos os sirvan.

Did you enjoy this post? Why not leave a comment below and continue the conversation, or subscribe to my feed and get articles like this delivered automatically to your feed reader.

Comments

Aún no hay comentarios.

Deja un comentario

(requerido)

(requerido)