SIP (Session Initiation Protocol)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
SIP (Session Initiation Protocol) è un protocollo di segnalazione e controllo delle chiamate ampiamente utilizzato per stabilire, modificare e terminare sessioni multimediali, inclusi voce, video e messaggistica istantanea, su reti IP. Sviluppato dall'Internet Engineering Task Force (IETF), SIP è definito nella RFC 3261 ed è diventato lo standard de facto per VoIP e comunicazioni unificate.
Al alcune caratteristiche chiave di SIP includono:
Protocollo basato su testo: SIP è un protocollo basato su testo, il che lo rende leggibile dall'uomo e più facile da debug. Si basa su un modello di richiesta-risposta, simile a HTTP, e utilizza metodi come INVITE, ACK, BYE e CANCEL per controllare le sessioni di chiamata.
Scalabilità e flessibilità: SIP è altamente scalabile e può essere utilizzato in implementazioni di piccole dimensioni così come in ambienti aziendali e di carrier di grandi dimensioni. Può essere facilmente esteso con nuove funzionalità, rendendolo adattabile a vari casi d'uso e requisiti.
Interoperabilità: L'ampia adozione e standardizzazione di SIP garantiscono una migliore interoperabilità tra diversi dispositivi, applicazioni e fornitori di servizi, promuovendo comunicazioni senza soluzione di continuità su varie piattaforme.
Design modulare: SIP funziona con altri protocolli come RTP (Real-time Transport Protocol) per la trasmissione dei media e SDP (Session Description Protocol) per descrivere le sessioni multimediali. Questo design modulare consente una maggiore flessibilità e compatibilità con diversi tipi di media e codec.
Server proxy e di reindirizzamento: SIP può utilizzare server proxy e di reindirizzamento per facilitare l'instradamento delle chiamate e fornire funzionalità avanzate come inoltro di chiamata, trasferimento di chiamata e servizi di segreteria telefonica.
Presenza e messaggistica istantanea: SIP non è limitato alla comunicazione vocale e video. Supporta anche la presenza e la messaggistica istantanea, consentendo una vasta gamma di applicazioni di comunicazione unificata.
Nonostante i suoi molti vantaggi, SIP può essere complesso da configurare e gestire, in particolare quando si tratta di problemi di attraversamento NAT e firewall. Tuttavia, la sua versatilità, scalabilità e ampio supporto nel settore lo rendono una scelta popolare per VoIP e comunicazione multimediale.
I metodi SIP fondamentali definiti nella RFC 3261 includono:
INVITE: Utilizzato per iniziare una nuova sessione (chiamata) o modificare una esistente. Il metodo INVITE trasporta la descrizione della sessione (tipicamente usando SDP) per informare il destinatario sui dettagli della sessione proposta, come tipi di media, codec e protocolli di trasporto.
ACK: Inviato per confermare la ricezione di una risposta finale a una richiesta INVITE. Il metodo ACK garantisce l'affidabilità delle transazioni INVITE fornendo un riconoscimento end-to-end.
BYE: Utilizzato per terminare una sessione stabilita (chiamata). Il metodo BYE è inviato da una delle parti nella sessione per indicare che desidera terminare la comunicazione.
CANCEL: Inviato per annullare una richiesta INVITE in sospeso prima che la sessione venga stabilita. Il metodo CANCEL consente al mittente di abortire una transazione INVITE se cambia idea o se non c'è risposta dal destinatario.
OPTIONS: Utilizzato per interrogare le capacità di un server SIP o di un agente utente. Il metodo OPTIONS può essere inviato per richiedere informazioni sui metodi supportati, tipi di media o altre estensioni senza effettivamente stabilire una sessione.
REGISTER: Utilizzato da un agente utente per registrare la propria posizione attuale con un server registratore SIP. Il metodo REGISTER aiuta a mantenere una mappatura aggiornata tra l'URI SIP di un utente e il suo attuale indirizzo IP, abilitando l'instradamento e la consegna delle chiamate.
Nota che per chiamare qualcuno non è necessario utilizzare il REGISTER per nulla.
Tuttavia, è possibile che per effettuare un INVITE il chiamante debba prima autenticarsi o riceverà una risposta 401 Unauthorized
.
Oltre a questi metodi fondamentali, ci sono diversi metodi di estensione SIP definiti in altre RFC, come:
SUBSCRIBE: Definito nella RFC 6665, il metodo SUBSCRIBE è utilizzato per richiedere notifiche sullo stato di una risorsa specifica, come la presenza di un utente o lo stato della chiamata.
NOTIFY: Anch'esso definito nella RFC 6665, il metodo NOTIFY è inviato da un server per informare un agente utente iscritto sui cambiamenti nello stato di una risorsa monitorata.
REFER: Definito nella RFC 3515, il metodo REFER è utilizzato per richiedere che il destinatario esegua un trasferimento o si riferisca a una terza parte. Questo è tipicamente utilizzato per scenari di trasferimento di chiamata.
MESSAGE: Definito nella RFC 3428, il metodo MESSAGE è utilizzato per inviare messaggi istantanei tra agenti utente SIP, abilitando la comunicazione basata su testo all'interno del framework SIP.
UPDATE: Definito nella RFC 3311, il metodo UPDATE consente di modificare una sessione senza influenzare lo stato del dialogo esistente. Questo è utile per aggiornare i parametri della sessione, come codec o tipi di media, durante una chiamata in corso.
PUBLISH: Definito nella RFC 3903, il metodo PUBLISH è utilizzato da un agente utente per pubblicare informazioni sullo stato degli eventi a un server, rendendole disponibili ad altre parti interessate.
1xx (Risposte provvisorie): Queste risposte indicano che la richiesta è stata ricevuta e il server sta continuando a elaborarla.
100 Trying: La richiesta è stata ricevuta e il server sta lavorando su di essa.
180 Ringing: Il chiamato è in fase di avviso e risponderà alla chiamata.
183 Session Progress: Fornisce informazioni sul progresso della chiamata.
2xx (Risposte di successo): Queste risposte indicano che la richiesta è stata ricevuta, compresa e accettata con successo.
200 OK: La richiesta è stata soddisfatta e il server l'ha completata.
202 Accepted: La richiesta è stata accettata per l'elaborazione, ma non è ancora stata completata.
3xx (Risposte di reindirizzamento): Queste risposte indicano che è necessaria un'ulteriore azione per soddisfare la richiesta, tipicamente contattando una risorsa alternativa.
300 Multiple Choices: Sono disponibili più opzioni e l'utente o il client deve sceglierne una.
301 Moved Permanently: La risorsa richiesta è stata assegnata a un nuovo URI permanente.
302 Moved Temporarily: La risorsa richiesta è temporaneamente disponibile a un URI diverso.
305 Use Proxy: La richiesta deve essere inviata a un proxy specificato.
4xx (Risposte di errore del client): Queste risposte indicano che la richiesta contiene una sintassi errata o non può essere soddisfatta dal server.
400 Bad Request: La richiesta era malformata o non valida.
401 Unauthorized: La richiesta richiede l'autenticazione dell'utente.
403 Forbidden: Il server ha compreso la richiesta ma rifiuta di soddisfarla.
404 Not Found: La risorsa richiesta non è stata trovata sul server.
408 Request Timeout: Il server non ha ricevuto una richiesta completa entro il tempo che era disposto ad attendere.
486 Busy Here: Il chiamato è attualmente occupato e non può rispondere alla chiamata.
5xx (Risposte di errore del server): Queste risposte indicano che il server non è riuscito a soddisfare una richiesta valida.
500 Internal Server Error: Il server ha riscontrato un errore durante l'elaborazione della richiesta.
501 Not Implemented: Il server non supporta la funzionalità richiesta per soddisfare la richiesta.
503 Service Unavailable: Il server non è attualmente in grado di gestire la richiesta a causa di manutenzione o sovraccarico.
6xx (Risposte di errore globale): Queste risposte indicano che la richiesta non può essere soddisfatta da alcun server.
600 Busy Everywhere: Tutte le possibili destinazioni per la chiamata sono occupate.
603 Decline: Il chiamato non desidera partecipare alla chiamata.
604 Does Not Exist Anywhere: La risorsa richiesta non è disponibile in nessun luogo nella rete.
Il metodo REGISTER è utilizzato nel Session Initiation Protocol (SIP) per consentire a un agente utente (UA), come un telefono VoIP o un softphone, di registrare la propria posizione con un server registrar SIP. Questo processo informa il server dove instradare le richieste SIP in arrivo destinate all'utente registrato. Il server registrar è solitamente parte di un server proxy SIP o di un server di registrazione dedicato.
Ecco un esempio dettagliato dei messaggi SIP coinvolti in un processo di autenticazione REGISTER:
Richiesta iniziale REGISTER dall'UA al server registrar:
Questo messaggio iniziale REGISTER viene inviato dall'UA (Alice) al server registrar. Include informazioni importanti come la durata di registrazione desiderata (Expires), l'URI SIP dell'utente (sip:alice@example.com) e l'indirizzo di contatto dell'utente (sip:alice@192.168.1.100:5060).
401 Non autorizzato risposta dal server registrar:
Il server registrar risponde con un messaggio "401 Unauthorized", che include un'intestazione "WWW-Authenticate". Questa intestazione contiene informazioni necessarie affinché l'UA si autentichi, come il realm di autenticazione, nonce e algoritmo.
Richiesta REGISTER con credenziali di autenticazione:
L'UA invia un'altra richiesta REGISTER, questa volta includendo l'intestazione "Authorization" con le credenziali necessarie, come il nome utente, il dominio, il nonce e un valore di risposta calcolato utilizzando le informazioni fornite e la password dell'utente.
Ecco come viene calcolata la risposta Authorization:
Risposta di registrazione riuscita dal server registrar:
Dopo che il server registrar verifica le credenziali fornite, invia una risposta "200 OK" per indicare che la registrazione è stata completata con successo. La risposta include le informazioni di contatto registrate e il tempo di scadenza per la registrazione. A questo punto, l'agente utente (Alice) è registrato con successo presso il server registrar SIP, e le richieste SIP in arrivo per Alice possono essere instradate all'indirizzo di contatto appropriato.
Non è menzionato, ma l'Utente B deve aver inviato un messaggio REGISTER a Proxy 2 prima di poter ricevere chiamate.
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)