SIP (Session Initiation Protocol)
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Informaci贸n B谩sica
SIP (Session Initiation Protocol) es un protocolo de se帽alizaci贸n y control de llamadas ampliamente utilizado para establecer, modificar y terminar sesiones multimedia, incluyendo voz, video y mensajer铆a instant谩nea, sobre redes IP. Desarrollado por el Internet Engineering Task Force (IETF), SIP est谩 definido en RFC 3261 y se ha convertido en el est谩ndar de facto para VoIP y comunicaciones unificadas.
Algunas caracter铆sticas clave de SIP incluyen:
- Protocolo basado en texto: SIP es un protocolo basado en texto, lo que lo hace legible para humanos y m谩s f谩cil de depurar. Se basa en un modelo de solicitud-respuesta, similar a HTTP, y utiliza m茅todos como INVITE, ACK, BYE y CANCEL para controlar las sesiones de llamada.
- Escalabilidad y Flexibilidad: SIP es altamente escalable y puede ser utilizado en implementaciones a peque帽a escala, as铆 como en entornos empresariales y de grado de operador. Se puede extender f谩cilmente con nuevas caracter铆sticas, lo que lo hace adaptable a varios casos de uso y requisitos.
- Interoperabilidad: La amplia adopci贸n y estandarizaci贸n de SIP aseguran una mejor interoperabilidad entre diferentes dispositivos, aplicaciones y proveedores de servicios, promoviendo una comunicaci贸n fluida a trav茅s de varias plataformas.
- Dise帽o Modular: SIP trabaja con otros protocolos como RTP (Real-time Transport Protocol) para la transmisi贸n de medios y SDP (Session Description Protocol) para describir sesiones multimedia. Este dise帽o modular permite una mayor flexibilidad y compatibilidad con diferentes tipos de medios y c贸decs.
- Servidores Proxy y de Redirecci贸n: SIP puede utilizar servidores proxy y de redirecci贸n para facilitar el enrutamiento de llamadas y proporcionar caracter铆sticas avanzadas como desv铆o de llamadas, transferencia de llamadas y servicios de correo de voz.
- Presencia y Mensajer铆a Instant谩nea: SIP no se limita a la comunicaci贸n de voz y video. Tambi茅n soporta presencia y mensajer铆a instant谩nea, habilitando una amplia gama de aplicaciones de comunicaci贸n unificada.
A pesar de sus muchas ventajas, SIP puede ser complejo de configurar y gestionar, particularmente al tratar con problemas de NAT y firewall. Sin embargo, su versatilidad, escalabilidad y amplio soporte en la industria lo convierten en una opci贸n popular para VoIP y comunicaci贸n multimedia.
M茅todos SIP
Los m茅todos SIP fundamentales definidos en RFC 3261 incluyen:
- INVITE: Utilizado para iniciar una nueva sesi贸n (llamada) o modificar una existente. El m茅todo INVITE lleva la descripci贸n de la sesi贸n (t铆picamente usando SDP) para informar al destinatario sobre los detalles de la sesi贸n propuesta, como tipos de medios, c贸decs y protocolos de transporte.
- ACK: Enviado para confirmar la recepci贸n de una respuesta final a una solicitud INVITE. El m茅todo ACK asegura la fiabilidad de las transacciones INVITE proporcionando un reconocimiento de extremo a extremo.
- BYE: Utilizado para terminar una sesi贸n establecida (llamada). El m茅todo BYE es enviado por cualquiera de las partes en la sesi贸n para indicar que desea finalizar la comunicaci贸n.
- CANCEL: Enviado para cancelar una solicitud INVITE pendiente antes de que se establezca la sesi贸n. El m茅todo CANCEL permite al remitente abortar una transacci贸n INVITE si cambia de opini贸n o si no hay respuesta del destinatario.
- OPTIONS: Utilizado para consultar las capacidades de un servidor SIP o agente de usuario. El m茅todo OPTIONS puede ser enviado para solicitar informaci贸n sobre m茅todos soportados, tipos de medios u otras extensiones sin establecer realmente una sesi贸n.
- REGISTER: Utilizado por un agente de usuario para registrar su ubicaci贸n actual con un servidor registrador SIP. El m茅todo REGISTER ayuda a mantener un mapeo actualizado entre el URI SIP de un usuario y su direcci贸n IP actual, habilitando el enrutamiento y la entrega de llamadas.
warning
Tenga en cuenta que para llamar a alguien no es necesario usar el REGISTER para nada.
Sin embargo, es posible que para realizar un INVITE el llamante necesite autenticarse primero o recibir谩 una respuesta 401 Unauthorized
.
Adem谩s de estos m茅todos fundamentales, hay varios m茅todos de extensi贸n SIP definidos en otros RFC, tales como:
- SUBSCRIBE: Definido en RFC 6665, el m茅todo SUBSCRIBE se utiliza para solicitar notificaciones sobre el estado de un recurso espec铆fico, como la presencia de un usuario o el estado de la llamada.
- NOTIFY: Tambi茅n definido en RFC 6665, el m茅todo NOTIFY es enviado por un servidor para informar a un agente de usuario suscrito sobre cambios en el estado de un recurso monitoreado.
- REFER: Definido en RFC 3515, el m茅todo REFER se utiliza para solicitar que el destinatario realice una transferencia o refiera a un tercero. Esto se utiliza t铆picamente para escenarios de transferencia de llamadas.
- MESSAGE: Definido en RFC 3428, el m茅todo MESSAGE se utiliza para enviar mensajes instant谩neos entre agentes de usuario SIP, habilitando la comunicaci贸n basada en texto dentro del marco SIP.
- UPDATE: Definido en RFC 3311, el m茅todo UPDATE permite modificar una sesi贸n sin afectar el estado del di谩logo existente. Esto es 煤til para actualizar par谩metros de sesi贸n, como c贸decs o tipos de medios, durante una llamada en curso.
- PUBLISH: Definido en RFC 3903, el m茅todo PUBLISH es utilizado por un agente de usuario para publicar informaci贸n sobre el estado de eventos a un servidor, haci茅ndola disponible para otras partes interesadas.
C贸digos de Respuesta SIP
- 1xx (Respuestas Provisionales): Estas respuestas indican que la solicitud fue recibida y el servidor est谩 continuando su procesamiento.
- 100 Trying: La solicitud fue recibida y el servidor est谩 trabajando en ella.
- 180 Ringing: El destinatario est谩 siendo alertado y tomar谩 la llamada.
- 183 Session Progress: Proporciona informaci贸n sobre el progreso de la llamada.
- 2xx (Respuestas Exitosas): Estas respuestas indican que la solicitud fue recibida, entendida y aceptada con 茅xito.
- 200 OK: La solicitud fue exitosa y el servidor la ha cumplido.
- 202 Accepted: La solicitud fue aceptada para su procesamiento, pero a煤n no se ha completado.
- 3xx (Respuestas de Redirecci贸n): Estas respuestas indican que se requiere una acci贸n adicional para cumplir con la solicitud, t铆picamente contactando un recurso alternativo.
- 300 Multiple Choices: Hay m煤ltiples opciones disponibles y el usuario o cliente debe elegir una.
- 301 Moved Permanently: El recurso solicitado ha sido asignado a un nuevo URI permanente.
- 302 Moved Temporarily: El recurso solicitado est谩 temporalmente disponible en un URI diferente.
- 305 Use Proxy: La solicitud debe ser enviada a un proxy especificado.
- 4xx (Respuestas de Error del Cliente): Estas respuestas indican que la solicitud contiene una sintaxis incorrecta o no puede ser cumplida por el servidor.
- 400 Bad Request: La solicitud estaba mal formada o era inv谩lida.
- 401 Unauthorized: La solicitud requiere autenticaci贸n del usuario.
- 403 Forbidden: El servidor entendi贸 la solicitud pero se niega a cumplirla.
- 404 Not Found: El recurso solicitado no fue encontrado en el servidor.
- 408 Request Timeout: El servidor no recibi贸 una solicitud completa dentro del tiempo que estaba preparado para esperar.
- 486 Busy Here: El destinatario est谩 actualmente ocupado y no puede tomar la llamada.
- 5xx (Respuestas de Error del Servidor): Estas respuestas indican que el servidor no pudo cumplir con una solicitud v谩lida.
- 500 Internal Server Error: El servidor encontr贸 un error al procesar la solicitud.
- 501 Not Implemented: El servidor no soporta la funcionalidad requerida para cumplir con la solicitud.
- 503 Service Unavailable: El servidor no puede manejar la solicitud actualmente debido a mantenimiento o sobrecarga.
- 6xx (Respuestas de Fallo Global): Estas respuestas indican que la solicitud no puede ser cumplida por ning煤n servidor.
- 600 Busy Everywhere: Todos los destinos posibles para la llamada est谩n ocupados.
- 603 Decline: El destinatario no desea participar en la llamada.
- 604 Does Not Exist Anywhere: El recurso solicitado no est谩 disponible en ninguna parte de la red.
Ejemplos
Ejemplo de SIP INVITE
INVITE sip:jdoe@example.com SIP/2.0
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: John Doe <sip:jdoe@example.com>
From: Jane Smith <sip:jsmith@example.org>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
Contact: <sip:jsmith@pc33.example.com>
User-Agent: ExampleSIPClient/1.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: application/sdp
Content-Length: 142
v=0
o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com
s=-
c=IN IP4 pc33.example.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000te
Cada Par谩metro Explicado
- Request-Line:
INVITE sip:jdoe@example.com SIP/2.0
- Esta l铆nea indica el m茅todo (INVITE), la URI de solicitud (sip:jdoe@example.com), y la versi贸n SIP (SIP/2.0). - Via:
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds
- El encabezado Via especifica el protocolo de transporte (UDP) y la direcci贸n del cliente (pc33.example.com). El par谩metro "branch" se utiliza para la detecci贸n de bucles y la coincidencia de transacciones. - Max-Forwards:
Max-Forwards: 70
- Este campo de encabezado limita el n煤mero de veces que la solicitud puede ser reenviada por proxies para evitar bucles infinitos. - To:
To: John Doe <sip:jdoe@example.com>
- El encabezado To especifica el destinatario de la llamada, incluyendo su nombre para mostrar (John Doe) y URI SIP (sip:jdoe@example.com). - From:
From: Jane Smith <sip:jsmith@example.org>;tag=1928301774
- El encabezado From especifica el remitente de la llamada, incluyendo su nombre para mostrar (Jane Smith) y URI SIP (sip:jsmith@example.org). El par谩metro "tag" se utiliza para identificar de manera 煤nica el rol del remitente en el di谩logo. - Call-ID:
Call-ID: a84b4c76e66710
- El encabezado Call-ID identifica de manera 煤nica una sesi贸n de llamada entre dos agentes de usuario. - CSeq:
CSeq: 314159 INVITE
- El encabezado CSeq contiene un n煤mero de secuencia y el m茅todo utilizado en la solicitud. Se utiliza para hacer coincidir respuestas con solicitudes y detectar mensajes fuera de orden. - Contact:
Contact: <sip:jsmith@pc33.example.com>
- El encabezado Contact proporciona una ruta directa al remitente, que puede ser utilizada para solicitudes y respuestas subsiguientes. - User-Agent:
User-Agent: ExampleSIPClient/1.0
- El encabezado User-Agent proporciona informaci贸n sobre el software o hardware del remitente, incluyendo su nombre y versi贸n. - Allow:
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
- El encabezado Allow enumera los m茅todos SIP soportados por el remitente. Esto ayuda al destinatario a entender qu茅 m茅todos pueden ser utilizados durante la comunicaci贸n. - Content-Type:
Content-Type: application/sdp
- El encabezado Content-Type especifica el tipo de medio del cuerpo del mensaje, en este caso, SDP (Protocolo de Descripci贸n de Sesi贸n). - Content-Length:
Content-Length: 142
- El encabezado Content-Length indica el tama帽o del cuerpo del mensaje en bytes. - Message Body: El cuerpo del mensaje contiene la descripci贸n de sesi贸n SDP, que incluye informaci贸n sobre los tipos de medios, c贸decs y protocolos de transporte para la sesi贸n propuesta.
v=0
- Versi贸n del protocolo (0 para SDP)o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com
- Originador e identificador de sesi贸ns=-
- Nombre de la sesi贸n (un solo guion indica que no hay nombre de sesi贸n)c=IN IP4 pc33.example.com
- Informaci贸n de conexi贸n (tipo de red, tipo de direcci贸n y direcci贸n)t=0 0
- Informaci贸n de tiempo (tiempos de inicio y parada, 0 0 significa que la sesi贸n no est谩 limitada)m=audio 49170 RTP/AVP 0
- Descripci贸n del medio (tipo de medio, n煤mero de puerto, protocolo de transporte y lista de formatos). En este caso, especifica un flujo de audio utilizando RTP/AVP (Protocolo de Transporte en Tiempo Real / Perfil de Audio y Video) y formato 0 (PCMU/8000).a=rtpmap:0 PCMU/8000
- Atributo que mapea el formato (0) al c贸dec (PCMU) y su tasa de reloj (8000 Hz).
Ejemplo de SIP REGISTER
El m茅todo REGISTER se utiliza en el Protocolo de Inicio de Sesi贸n (SIP) para permitir que un agente de usuario (UA), como un tel茅fono VoIP o un softphone, registre su ubicaci贸n con un servidor registrador SIP. Este proceso permite que el servidor sepa d贸nde enrutar las solicitudes SIP entrantes destinadas al usuario registrado. El servidor registrador generalmente es parte de un servidor proxy SIP o un servidor de registro dedicado.
Aqu铆 hay un ejemplo detallado de los mensajes SIP involucrados en un proceso de autenticaci贸n REGISTER:
- Solicitud inicial REGISTER del UA al servidor registrador:
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 1 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0
Este mensaje inicial de REGISTER es enviado por el UA (Alice) al servidor registrador. Incluye informaci贸n importante como la duraci贸n de registro deseada (Expires), el URI SIP del usuario (sip:alice@example.com), y la direcci贸n de contacto del usuario (sip:alice@192.168.1.100:5060).
- 401 Unauthorized respuesta del servidor registrador:
cssCopy codeSIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;tag=7878744
Call-ID: 1234567890@192.168.1.100
CSeq: 1 REGISTER
WWW-Authenticate: Digest realm="example.com", nonce="abcdefghijk", algorithm=MD5, qop="auth"
Content-Length: 0
El servidor registrador responde con un mensaje "401 Unauthorized", que incluye un encabezado "WWW-Authenticate". Este encabezado contiene informaci贸n necesaria para que el UA se autentique, como el realm de autenticaci贸n, nonce y algoritmo.
- Solicitud REGISTER con credenciales de autenticaci贸n:
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Authorization: Digest username="alice", realm="example.com", nonce="abcdefghijk", uri="sip:example.com", response="65a8e2285879283831b664bd8b7f14d4", algorithm=MD5, cnonce="lmnopqrst", qop=auth, nc=00000001
Content-Length: 0
El UA env铆a otra solicitud REGISTER, esta vez incluyendo el "Authorization" header con las credenciales necesarias, como el nombre de usuario, realm, nonce y un valor de respuesta calculado utilizando la informaci贸n proporcionada y la contrase帽a del usuario.
As铆 es como se calcula la respuesta de autorizaci贸n:
import hashlib
def calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop):
# 1. Calculate HA1 (concatenation of username, realm, and password)
ha1_input = f"{username}:{realm}:{password}"
ha1 = hashlib.md5(ha1_input.encode()).hexdigest()
# 2. Calculate HA2 (concatenation of method and uri)
ha2_input = f"{method}:{uri}"
ha2 = hashlib.md5(ha2_input.encode()).hexdigest()
# 3. Calculate the final response value (concatenation of h1, stuff and h2)
response_input = f"{ha1}:{nonce}:{nc}:{cnonce}:{qop}:{ha2}"
response = hashlib.md5(response_input.encode()).hexdigest()
return response
# Example usage
username = "alice"
password = "mysecretpassword"
realm = "example.com"
method = "REGISTER"
uri = "sip:example.com"
nonce = "abcdefghijk"
nc = "00000001"
cnonce = "lmnopqrst"
qop = "auth"
response = calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop)
print(f"MD5 response value: {response}")
- Respuesta de registro exitosa del servidor registrador:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;tag=7878744
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0
Despu茅s de que el servidor registrador verifica las credenciales proporcionadas, env铆a una respuesta "200 OK" para indicar que el registro fue exitoso. La respuesta incluye la informaci贸n de contacto registrada y el tiempo de expiraci贸n para el registro. En este punto, el agente de usuario (Alice) est谩 registrado con 茅xito en el servidor registrador SIP, y las solicitudes SIP entrantes para Alice pueden ser dirigidas a la direcci贸n de contacto apropiada.
Ejemplo de Llamada
note
No se menciona, pero el Usuario B necesita haber enviado un mensaje REGISTER a Proxy 2 antes de poder recibir llamadas.
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.