# Open Source IMS Core

Open Source IMS Core es un proyecto de código abierto para realizar bancos de pruebas en el núcleo de la red IMS, iniciado por el instituto Fraunhofer FOKUS, y licenciado bajo GPL2. Tiene como objetivo crear una comunidad de desarrolladores para los elementos centrales de redes de próxima generación (NGN) y las partes interesadas de IMS. La idea para los usuarios de este software es permitir el desarrollo de servicios IMS y probar conceptos alrededor del núcleo IMS que se basan en un software altamente configurable y extensible. Este software no está diseñado para competir con productos comerciales y no tiene ninguna garantía debido a la carencia de: plataforma de monitoreo, plataforma de operación y mantenimiento (OAM), servidores redundantes, sistema de aprovisionamiento, seguridad etc.

## Historia

El proyecto Open IMS Core ha sido junto con el instituto Fraunhofer FOKUS, la base central de uno de los más importantes laboratorios, el Open IMS Playground.
Lanzado en 2004, ha fomentado la utilización del Open Source CN (Core Network), así como el diseño, implementación y ensayo de numerosos componentes, elementos, procedimientos y conceptos funcionales de IMS. El concepto de investigación de Open IMS Playground comenzó debido a la propuesta de bajo coste y distribución mundial que ofrecía Open IMS Core. A continuación, FOKUS fue capaz de mejorar la experiencia y comercializarla. Abrió una academia para bancos de pruebas, donde junto con Open IMS Core realizó desarrollos para clientes, servidores de aplicaciones, plataformas de prestación de servicios y otras herramientas combinadas con los componentes que ofrece IMS.
En 2006 fue publicado como código abierto para promover la adopción de tecnología en redes de telecomunicaciones de próxima generación y la autonomía de una comunidad de desarrolladores para crear nuevos servicios basados en IMS. A pesar de que IMS se acercaba al mercado, el proyecto siguió siendo utilizado en bancos de pruebas y laboratorios.
Entre 2008 y 2013 se integró con éxito en plataformas de servicios, mostrando su flexibilidad en el servicio a los nuevos conceptos y prototipos. Así se utilizó para la investigación y desarrollo de funciones dentro de los proveedores de equipos de telecomunicaciones (I+D), operadores de red y proyectos de investigación universitarios. Desde 2015, Core Network Dynamics se hizo cargo del proyecto Open IMS Core para realizar soluciones comerciales listas para VoLTE.

## Arquitectura

Open IMS ha sido creado para interactuar con cualquier medio de acceso, por lo que se compone principalmente de CSCFs(Funciones de llamadas de control de sesión) y un HSS(Home Suscriber Server).

### S-CSCF

Son los elementos centrales necesarios para cualquier señalización IMS, cada uno de ellos realiza funciones únicas dentro del núcleo, fueron desarrollados en FOKUS como extensiones de SER (SIP Express Router) y se dividen fundamentalmente en:

#### P-CSCF (Proxy)

Es el primer elemento de procesamiento de los mensajes SIP enviados por los suscriptores. Es responsable de la filtración, el enrutamiento de los mensajes y la realización de tareas de seguridad.

#### I-CSCF (Interrogating)

Actúa como servidor Proxy SIP entrante en el IMS. Durante registros IMS, consulta el HSS para seleccionar un S-CSCF apropiado. Durante las sesiones IMS, actúa como punto de entrada de las solicitudes de sesión.

#### S-CSCF (Serving)

Actúa como un servidor de registro, y en ocasiones como servidor de redirección. Es el punto central de control de servicios IMS, se encarga de la interconexión de servidores de aplicaciones (AS) en el plano de aplicación. Al recibir un mensaje SIP de petición de registro de un I-CSCF, S-CSCF consulta el HSS para registrar el terminal, por tanto es el responsable de la sesión de control del terminal.

### Gateway SIP2IM

Permite a los clientes SIP acceder a redes IMS y proporcionar soporte para sus funciones. Transforma los mensajes SIP a mensajes IMS.

### IMS UE

Cliente IMS que debe ser capaz de realizar el registro IMS.

### Cliente SIP

Cliente que utiliza protocolos SIP y se adhiere a IMSa través de la pasarela SIP2IMS.

### Servidores de aplicaciones (AS)

Plataformas de servicios probadas para el Open IMS Playground como pueden ser: SIP AS, Parlay Gateway o Parlay X Gateway. Se trata de una entidad SIP que aloja y ejecuta servicios, se comunica con HSS mediante Diameter y con S-CSCF mediante SIP.

### HSS

Consiste en una base de datos MySQL que contiene toda la información relacionada con la suscripción de usuarios requerida para manejar sesiones multimedia. Los datos incluyen seguridad, localización y el perfil del usuario, con lo que se permite la comunicación entre usuarios.
Se han definido las siguientes interfaces para el HSS, relevantes para el aprovisionamiento de servicios:
Cx (HSS - CSCF): Usado para enviar datos del suscriptor al S-CSCF. Sh (HSS – AS): Puede ser usada para transferir información del perfil de usuario.

#### FHoSS

Puesto que IMS requiere información de look-up de señalización en un HSS, FOKUS desarrolló un prototipo propio de HSS, el FHoSS( FOKUS HSS), escrito en Java y basado en software de código abierto. Se trata de un configurador para el sistema de gestión de base de datos, las interfaces con CSCFs y la capa de aplicación IMS. Proporciona funciones para gestionar los perfiles de usuarios, permite la generación de datos de autenticación o autorización y un soporte de localización de abonados.

## Características

Open Source IMS Core posee las siguientes características para facilitar la experimentación en un banco de pruebas de IMS:
* Simple o ninguna gestión. Basta con crear cuentas y verificar sus clientes IMS contra diferentes características IMS y mensajes.
* Flexibilidad y rendimiento robusto.
* Accesible a través de direcciones IP públicas y los nombres DNS. No hay necesidad de una configuración especial de la red.
* Permite explorar aplicaciones de medios mediante un servidor streaming.
* Soporte de presencia y escenarios XDMS.
* Acceso total al banco de pruebas a nivel de super usuario que permite la creación de escenarios complejos así como añadir, modificar o eliminar configuraciones.
* Fácil registro de componentes de la base.
* Interfaz ISC (IMS Service Control) para la conexión del servidor de aplicaciones.
* Escenarios disponibles como: llamadas entre terminales PSTN, teléfonos IP (nacional o internacional).
* Módulo con capacidad de puertos SMS.
* Integración con OpenFlow para las pruebas de control de calidad de las funciones políticas del SIV.
* Integración con más recursos de los otros bancos de pruebas como CloudVille o interconexión con PlanetLab.

## Utilidades

Open IMS se utiliza principalmente para realizar bancos de pruebas IMS, se están desarrollando pruebas sistemáticas para comprobar la funcionalidad, interoperablilidad y conformidad de los componentes IMS. El trabajo real se concentra en las rutas de señalización IMS: mensajes SIP, simulación de usuarios finales, las mediciones de tiempo de respuesta, velocidad (de rendimiento) en TPS (transacciones por segundo) y la utilización de recursos. Se pueden realizar los diferentes tipos de pruebas:
* Evaluación comparativa - para verificar la calidad de las redes.
* Carga/estrés - para ver cómo funcionan los sistemas sometidos a una determinada carga.
* Pruebas de capacidad - la carga máxima que el sistema puede manejar antes de fallar.
* Pruebas de escalabilidad - para planificar mejoras de capacidad.
* pruebas de interoperabilidad - para verificar la compatibilidad y conformidad.

## Configuración

Open IMS Core ofrece una interfaz ISC (IMS Service Control) para permitir el desarrollo de aplicaciones IMS o modificaciones de reglas y eventos de enrutamiento. En la web oficial se proporciona la documentación necesaria para la instalación del banco de pruebas con todas las funcionalidades básicas de IMS. La instalación requiere compilación de paquetes de instalación pero los códigos fuente contienen archivos de configuración ya implementados de las entidades CSCF. La configuración principal requiere algunos cambios en los nombres de dominio (DNS), DHCP y números de puerto en el que escuchan las CSCFs.

## Seguridad

La seguridad es una parte esencial de cualquier implementación, por lo que debemos estar al tanto de las posibles vulnerabilidades.

### Seguridad en IMS

La figura muestra las principales asociaciones de seguridad en una red IMS:
* Proporciona autenticación mutua entre el UE y el IMS. El proceso se delega en el S-CSCF, pero el HSS genera las claves y desafíos.
* Vínculo seguro y asociación de seguridad entre la UA y la red, facilita la autenticación de origen de datos.
* Proporciona la seguridad dentro de la red central para la interfaz entre el HSS y S-CSCF / I-CSCF.
* Garantiza seguridad entre P-CSCF y nodos SIP en otras redes cuando el P-CSCF se encuentra en otra red (UE está en itinerancia).
* Proporciona seguridad entre P-CSCF y otros nodos SIP cuando el P-CSCF pertenece a la misma red (UE no está en itinerancia).

### Vulnerabilidades

Tras el análisis de la arquitectura de seguridad IMS y el Open Source IMS Core con una determinada configuración, han sido identificados los siguientes vectores de ataque:
* Vectores de ataque externos:
La asociación 2 de la figura anterior se corresponde con el diálogo SIP entre UA y P-CSCF. Dentro de Open Source IMS Core, este diálogo hace el uso del protocolo UDP y el P-CSCF se comunica a través del puerto 4060 (cuando se utiliza la configuración predeterminada). El puerto 4060 de la dirección IP de P-CSCF, presenta un vector de ataque externo.
* Vectores de ataque internos dentro de la capa de control:
Las interfaces internas pueden estar disponibles en otras compañías para fines de itinerancia, lo que significa que las redes de interconexión tienen acceso a estas interfaces. Como se muestra en la figura, existen interfaces entre I-CFCS, S-CSCF y P-CFCS, que nuevamente corresponden a diálogos SIP, establecidos mediante UDP. Por tanto, todas las interfaces entre CSCFs están disponibles como vectores de ataque dentro de la capa de control.
* Vectores de ataque a la capa de servicio:
Los servidores de aplicaciones (AS) se comunican con CSCF, de manera que se realizan solicitudes a través de S-CSCF. Esto presenta un posible ataque en la interfaz entre S-CSCF y la capa de aplicación.
En la siguiente table se muestran los ataques mencionados anteriormente:
| Componente | Modo de ataque | Protocolo | Puerto |
| P-CSCF | Externo | SIP/UDP | 4060 |
| I-CSCF | Capa de control | SIP/UDP | 5060 |
| S-CSCF | Capas de control y aplicación | SIP/UDP | 6060 |

### Detección de vulnerabilidades

Fuzzing se eligió como la técnica utilizada para la detección de las vulnerabilidades. Consiste en pruebas semiautomáticas o automáticas donde se proveen datos al azar, inválidos y no esperados en la entrada de datos del software. De esta forma es posible comprobar la seguridad de la entrada en lo que respecta a la validación de datos.
Tras realizar varias pruebas con Fuzzing dentro de Open Source IMS Core, se registraron numerosos fallos en el sistema como resultado de datos no válidos, que se pueden agrupar en fallos de segmentación, salidas con código 0 y desbordamientos de buffer. Para conocer la causa de cada fallo, los componentes CSCF fueron compilados con el check de comprobación del buffer apagado y los símbolos de depuración habilitados.
* Causas de los fallos de segmentación:
Se encontró un error en el módulo de ‘cscf.so’ utilizado por S-CSCF, causado por intentar hacer referencia a una estructura a través de un puntero NULL dentro del módulo ‘scscf.so’. En el I-CSCF se observó el mismo comportamiento. Por otro lado, se pudo observar que todos los procesos hijos murieron como resultado de que los procesos padres entraron en un bucle infinito, aumentando el uso de CPU al 100%.
* Causas de desbordamiento del búffer:
Los errores fueron descubiertos en el módulo 'tm.so', utilizado por todos los componentes. El origen del fallo se encontró como resultado de una longitud variable del buffer. Se trataba de un resultado de argumentos no válidos pasados a una función que se utiliza para copiar bloques de memoria de un lugar a otro.
* Causas del exit con código 0:
Cuando se ejecuta en un UNIX como sistema operativo, un proceso terminará con código 0 para indicar que ha finalizado la ejecución con éxito. Algunos casos de errores fatales en las pruebas realizadas fueron manejados exitosamente por el proceso para permitir la salida de depuración antes de salir. Se encontró en el módulo ‘scscf.so’ el error de intentar liberar un bloque de memoria más de una vez. En P-CSCF se encontró un comportamiento idéntico. Este error fue manejado, permitiendo que el proceso utilice el código 0 para exit y return.

### Seguridad en el futuro

El 3GPP ha hecho todo lo posible para especificar completamente todos los protocolos utilizados en IMS, así como implementar medidas de seguridad estrictas en caso necesario. Todos ellos trabajan hacia una solución segura, pero su aplicación todavía se deja a los desarrolladores de una distribución particular IMS. De cara al futuro se debe modificar el software de Fuzzing existente para permitir la autenticación y acuerdo de claves (AKA). Actualmente, solo unas pocas pruebas que se realizan con Open IMS realizan el seguimiento de estado (de una manera básica). Muchas pruebas también se realizan sin autenticación, lo que significa que los errores no pueden ser descubiertos debido a las peticiones rechazadas. Un marco para realizar pruebas para otros protocolos también sería beneficioso para localizar fallos en otros componentes, en particular deben ser considerados protocolos de Diámetro y RTP.

## Reflexiones y futuro

El objetivo del proyecto era crear una comunidad de desarrolladores de los elementos centrales de redes de próxima generación (NGN). Actualmente, el objetivo se está cumpliendo debido al aumento de subscriptores a listas de correo del proyecto. La comunidad Open Source IMS Core puede desarrollar rápidamente servicios y pruebas IMS utilizando un software de código abierto altamente configurable y extensible.
El proyecto Open Source IMS Core y el instituto Fraunhofer FOKUS están trabajando en una serie de proyectos comerciales para realizar las siguientes mejoras:
* Integración de IP versión 6 (IPv6) entre Open IMS Core y el proyecto servidor de aplicaciones SailFin SIP.
* Integración de IMS en interoperabilidad y pruebas de rendimiento de los operadores y proveedores de telecomunicaciones.
* Prototipos de servicios de próxima generación.
* Pruebas de cumplimiento de normas.

## Especificaciones

* IETF RFCs
SIP: Session Initiation Protocol – RFC 3261 Hypertext Transfer Protocol (HTTP) Digest Authentication Using Authentication and Key Agreement (AKA) - RFC 3310 SIP Private Header Extensions - RFC3455 Diameter Base Protocol – RFC 3588 SIP Event Package for Registration - RFC3680
* 3GPP IMS Release 6 Specifications
TS 23.228 – IMS Stage 2 (Rel.6) TS 24.229 - IP Multimedia Call Control Protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage3 (Rel.6) TS 29.228 – Cx and Dx Interfaces, Signalling flows and message contents (Rel.6) TS 33.102 - 3G Security; Security architecture (Rel. 6) TS 33.203 - Access security for IP-based services (Rel.6) Session 6a, 10th May 2007