Seguridad en SIP – Session Initiation Protocol
SIP, Session Initiation Protocol, es un protocolo creado por el Internet Engineering Task Force (IETF), para controlar el establecimiento de sesiones multimedia, de voz VoIP, mensajería instantánea, juegos online, realidad virtual…
En este artículo vamos a dar un repaso a sus principales características, explicando cómo funciona el establecimiento de las llamadas, qué piezas forman parte del protocolo, qué problemas de seguridad podemos encontrar y de qué mecanismos disponemos para minimizarlos. Por último mostraremos una serie de mediciones de rendimiento acerca de la incorporación de estos mecanismos.
Introducción
Tomando como base las características de los sistemas telefónicos actuales, se diseño un protocolo que permitiera al usuario disponer de similares características, como realizar llamadas a usuarios, hacer que un terminal suene al ser llamado, dar señal de ocupado o llamando, etc… Actualmente SIP es considerado como el estándar de facto en las comunicaciones multimedia, siendo la opción elegida por los principales fabricantes como Microsoft con su Messenger o Live Communication Server, AOL, o Google con Google Talk.
Hay otros protocolos para VoIP algunos propietarios, pertenecientes a empresas específicas, como Skype, y otros públicos como H.323, sin embargo SIP se caracteriza por ser un protocolo abierto y creado directamente por gente relacionada con el mundo IP, al contrario que H.323, creado por empresas más cercanas al mundo de la telefonía. Por otra parte SIP es un protocolo basado en mensajes de texto, inspirado en HTTP, legible por humanos y basado en peticiones-respuesta, lo que en cierta medida facilita su uso.
Las sesiones multimedia se basan de forma resumida en un establecimiento de sesión, una definición de la sesión y un intercambio de datos. SIP es el protocolo encargado del establecimiento de la sesión y viene acompañado de otra serie de protocolos como RTP, utilizado para la transmisión de los datos, y SDP, encargado de describir el contenido multimedia de la sesión, negociar las capacidades, puerto IP, codecs…
Componentes SIP
Los componentes principales de SIP son los User Agent (UA) y los servidores, que pueden ser Proxy Servers (PS), Registrar Servers y Redirect Servers. Los UA se corresponden con los terminales de usuario, que pueden ser un teléfono específicamente diseñado como terminal SIP, o un PC que ejecute una aplicación SIP. Al ser las comunicaciones P2P, actúan tanto como clientes y servidores. Hay que tener en cuenta que es también posible establecer sesiones telefónicas con teléfonos normales RTB, para lo cual la conexión no se realiza con estos lógicamente, sino con una puerta de enlace SIP que comunique con el terminal RTB.
Los tres tipos de servidores indicados corresponden proxy servers son los encargados de recibir las solicitudes de sesión de los usuarios, y redirigirlas hacia el usuario destino o hacia otros proxys. Los registrar reciben notificaciones de registro de usuarios y llevan un control de su ubicación. Por último son los redirect se limitan a reenviar las peticiones que reciben a otro servidor. Hay que mencionar que la división entre estos tres servidores es únicamente conceptual, y que podrían estar en una misma máquina o en diferentes, según se requiera por criterios de seguridad, escalabilidad…
Funcionamiento SIP
Para ver un poco mejor como encajan estas piezas, veamos un caso práctico de establecimiento de llamada. Supongamos dos usuarios que se conectan a Internet y cada uno de los cuales tiene un cliente SIP. Cuando cada usuario se conecte lo hará solicitándolselo a un Registrar, el cual comprobará la validez de sus datos, comprobando por ejemplo su existencia en un directorio LDAP.
Una vez conectado el usuario ya puede intentar establecer una sesión, solicitándosela a su servidor proxy, el cual tendría que localizar la ubicación del destinatario y registrar por ejemplo la llamada para su tarificación. El proxy podría enviar directamente la solicitud al terminal del destinatario o utilizar otro servidor proxy intermedio.
Cuando el destinatario reciba la solicitud de llamada podrá responder a ella, haciendo que se genere un mensaje de respuesta hacia el origen, pasando por los proxys intermedios. Cuando el origen de la llamada recibe la respuesta del destinatario, le envía un mensaje de ACK, comenzando un flujo de comunicación peer to peer, en el que tanto destinatario como origen se comunican directamente. Esta comunicación corresponderá en su mayoría a datos multimedia transmitidos mediante RTP aunque puede haber otra serie de mensaje SIP que encapsulen información SDP, por ejemplo con el fin de renegociar la conexión. Cuando la llamada llegue a su fin el terminal que desee cerrarla mandará un mensaje BYE y el otro responderá con OK, ambos a través del proxy.
En la siguiente imagen se muestra el intercambio de mensajes descritos, aunque en la realidad se generan algunos mensajes más que he obviado por simplicidad.
Hemos visto de forma resumida cómo funciona una sesión SIP, veamos ahora en el siguiente dibujo, qué otros protocolos toman parte de la comunicación.
- SIP: encargado del establecimiento de la conexión puede trabajar sobre TCP o UDP
- SDP: es un protocolo de descripción de las sesiones, cuyos mensajes se transportan mediante SIP. Engloba características como versión del protocolo, identificador, nombre de sesión, información de la sesión, URI, direcciones, clave de encriptación, puerto a utilizar en la comunicación…
- RTP: se encarga del transporte de la información de video o voz en tiempo real y funciona sobre UDP
- RTCP: protocolo de control para RTP
Deseo que me ayuden en un proyecto para desarrolla un servidor de proxy para correr en ambiente windows y en Linux.
Si tienen algún comentario o sugenerncia o información valiosa por favor me gustaría conocerla..
Estaré grandemente agradecido.
Soy estudiante de Postgrado en la Facultad de Ing. de la UCV. y deseo desarrollar esto en mi tema de tesis. Gracias.
Hi.
Dear freands.
I am Rómulo Álvarez. I am an Electical Engeneer in Telecommunication.
I want to develope an sofware avalible to be SIP Proxy Server. If you have some information, please send me that for email.
I am a student of master in Universidad Central de Venezuela. All comentaries or sugerences I will be receve so good.
Thanlks for your help.
Han hecho un muy buen trabajo acerca del protocolo SIP