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