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) to protokół sygnalizacji i kontroli połączeń, szeroko stosowany do nawiązywania, modyfikowania i kończenia sesji multimedialnych, w tym głosu, wideo i wiadomości błyskawicznych, w sieciach IP. Opracowany przez Internet Engineering Task Force (IETF), SIP jest zdefiniowany w RFC 3261 i stał się de facto standardem dla VoIP i zintegrowanej komunikacji.
Niektóre kluczowe cechy SIP to:
Protokół oparty na tekście: SIP jest protokołem opartym na tekście, co czyni go czytelnym dla ludzi i łatwiejszym do debugowania. Opiera się na modelu żądanie-odpowiedź, podobnym do HTTP, i używa metod takich jak INVITE, ACK, BYE i CANCEL do kontrolowania sesji połączeń.
Skalowalność i elastyczność: SIP jest wysoce skalowalny i może być używany zarówno w małych wdrożeniach, jak i w dużych środowiskach przedsiębiorstw i operatorów. Może być łatwo rozszerzany o nowe funkcje, co czyni go dostosowującym się do różnych przypadków użycia i wymagań.
Interoperacyjność: Szerokie przyjęcie i standaryzacja SIP zapewniają lepszą interoperacyjność między różnymi urządzeniami, aplikacjami i dostawcami usług, promując płynną komunikację na różnych platformach.
Modularny design: SIP współpracuje z innymi protokołami, takimi jak RTP (Real-time Transport Protocol) do transmisji mediów i SDP (Session Description Protocol) do opisywania sesji multimedialnych. Ten modularny design pozwala na większą elastyczność i kompatybilność z różnymi typami mediów i kodekami.
Serwery proxy i przekierowujące: SIP może używać serwerów proxy i przekierowujących do ułatwienia routingu połączeń i zapewnienia zaawansowanych funkcji, takich jak przekazywanie połączeń, transfer połączeń i usługi poczty głosowej.
Obecność i wiadomości błyskawiczne: SIP nie ogranicza się tylko do komunikacji głosowej i wideo. Obsługuje również obecność i wiadomości błyskawiczne, umożliwiając szeroki zakres aplikacji zintegrowanej komunikacji.
Pomimo wielu zalet, SIP może być skomplikowany do skonfigurowania i zarządzania, szczególnie w przypadku problemów z przechodzeniem przez NAT i zapory. Jednak jego wszechstronność, skalowalność i szerokie wsparcie w branży czynią go popularnym wyborem dla komunikacji VoIP i multimedialnej.
Podstawowe metody SIP zdefiniowane w RFC 3261 obejmują:
INVITE: Używana do nawiązania nowej sesji (połączenia) lub modyfikacji istniejącej. Metoda INVITE przenosi opis sesji (zwykle przy użyciu SDP), aby poinformować odbiorcę o szczegółach proponowanej sesji, takich jak typy mediów, kodeki i protokoły transportowe.
ACK: Wysyłana w celu potwierdzenia odbioru ostatecznej odpowiedzi na żądanie INVITE. Metoda ACK zapewnia niezawodność transakcji INVITE, zapewniając potwierdzenie end-to-end.
BYE: Używana do kończenia nawiązanej sesji (połączenia). Metoda BYE jest wysyłana przez którąkolwiek ze stron w sesji, aby wskazać, że chce zakończyć komunikację.
CANCEL: Wysyłana w celu anulowania oczekującego żądania INVITE przed nawiązaniem sesji. Metoda CANCEL pozwala nadawcy przerwać transakcję INVITE, jeśli zmieni zdanie lub jeśli nie ma odpowiedzi od odbiorcy.
OPTIONS: Używana do zapytania o możliwości serwera SIP lub agenta użytkownika. Metoda OPTIONS może być wysyłana w celu uzyskania informacji o obsługiwanych metodach, typach mediów lub innych rozszerzeniach bez faktycznego nawiązywania sesji.
REGISTER: Używana przez agenta użytkownika do zarejestrowania swojej bieżącej lokalizacji w serwerze rejestracyjnym SIP. Metoda REGISTER pomaga w utrzymaniu aktualnej mapy między URI SIP użytkownika a jego bieżącym adresem IP, umożliwiając routowanie i dostarczanie połączeń.
Należy pamiętać, że aby zadzwonić do kogoś, nie jest konieczne używanie REGISTER do czegokolwiek.
Jednak możliwe jest, że aby wykonać INVITE, dzwoniący musi najpierw uwierzytelnić się, inaczej otrzyma odpowiedź 401 Unauthorized
.
Oprócz tych podstawowych metod istnieje kilka rozszerzeń metod SIP zdefiniowanych w innych RFC, takich jak:
SUBSCRIBE: Zdefiniowana w RFC 6665, metoda SUBSCRIBE jest używana do żądania powiadomień o stanie konkretnego zasobu, takiego jak obecność użytkownika lub status połączenia.
NOTIFY: Również zdefiniowana w RFC 6665, metoda NOTIFY jest wysyłana przez serwer, aby poinformować subskrybowanego agenta użytkownika o zmianach w stanie monitorowanego zasobu.
REFER: Zdefiniowana w RFC 3515, metoda REFER jest używana do żądania, aby odbiorca wykonał transfer lub odniósł się do strony trzeciej. Jest to zazwyczaj używane w scenariuszach transferu połączeń.
MESSAGE: Zdefiniowana w RFC 3428, metoda MESSAGE jest używana do wysyłania wiadomości błyskawicznych między agentami użytkownika SIP, umożliwiając komunikację opartą na tekście w ramach SIP.
UPDATE: Zdefiniowana w RFC 3311, metoda UPDATE pozwala na modyfikację sesji bez wpływu na stan istniejącego dialogu. Jest to przydatne do aktualizacji parametrów sesji, takich jak kodeki lub typy mediów, podczas trwającego połączenia.
PUBLISH: Zdefiniowana w RFC 3903, metoda PUBLISH jest używana przez agenta użytkownika do publikowania informacji o stanie zdarzeń na serwerze, udostępniając je innym zainteresowanym stronom.
1xx (Odpowiedzi tymczasowe): Te odpowiedzi wskazują, że żądanie zostało odebrane, a serwer kontynuuje jego przetwarzanie.
100 Trying: Żądanie zostało odebrane, a serwer nad tym pracuje.
180 Ringing: Odbiorca jest informowany i podejmie połączenie.
183 Session Progress: Dostarcza informacje o postępie połączenia.
2xx (Odpowiedzi pomyślne): Te odpowiedzi wskazują, że żądanie zostało pomyślnie odebrane, zrozumiane i zaakceptowane.
200 OK: Żądanie zakończyło się sukcesem, a serwer je zrealizował.
202 Accepted: Żądanie zostało zaakceptowane do przetwarzania, ale jeszcze nie zostało zakończone.
3xx (Odpowiedzi przekierowujące): Te odpowiedzi wskazują, że dalsze działania są wymagane do zrealizowania żądania, zazwyczaj poprzez skontaktowanie się z alternatywnym zasobem.
300 Multiple Choices: Istnieje wiele dostępnych opcji, a użytkownik lub klient musi wybrać jedną.
301 Moved Permanently: Żądany zasób został przypisany nowemu stałemu URI.
302 Moved Temporarily: Żądany zasób jest tymczasowo dostępny pod innym URI.
305 Use Proxy: Żądanie musi być wysłane do określonego proxy.
4xx (Odpowiedzi błędów klienta): Te odpowiedzi wskazują, że żądanie zawiera błędną składnię lub nie może być zrealizowane przez serwer.
400 Bad Request: Żądanie było źle sformułowane lub nieprawidłowe.
401 Unauthorized: Żądanie wymaga uwierzytelnienia użytkownika.
403 Forbidden: Serwer zrozumiał żądanie, ale odmawia jego zrealizowania.
404 Not Found: Żądany zasób nie został znaleziony na serwerze.
408 Request Timeout: Serwer nie otrzymał pełnego żądania w czasie, w którym był gotowy czekać.
486 Busy Here: Odbiorca jest obecnie zajęty i nie może odebrać połączenia.
5xx (Odpowiedzi błędów serwera): Te odpowiedzi wskazują, że serwer nie zdołał zrealizować ważnego żądania.
500 Internal Server Error: Serwer napotkał błąd podczas przetwarzania żądania.
501 Not Implemented: Serwer nie obsługuje funkcjonalności wymaganej do zrealizowania żądania.
503 Service Unavailable: Serwer jest obecnie niezdolny do obsługi żądania z powodu konserwacji lub przeciążenia.
6xx (Odpowiedzi globalnych błędów): Te odpowiedzi wskazują, że żądanie nie może być zrealizowane przez żaden serwer.
600 Busy Everywhere: Wszystkie możliwe miejsca docelowe dla połączenia są zajęte.
603 Decline: Odbiorca nie chce uczestniczyć w połączeniu.
604 Does Not Exist Anywhere: Żądany zasób nie jest dostępny nigdzie w sieci.
Metoda REGISTER jest używana w protokole inicjowania sesji (SIP), aby umożliwić agentowi użytkownika (UA), takiemu jak telefon VoIP lub softphone, zarejestrowanie swojej lokalizacji w serwerze rejestracyjnym SIP. Proces ten informuje serwer gdzie kierować przychodzące żądania SIP przeznaczone dla zarejestrowanego użytkownika. Serwer rejestracyjny jest zazwyczaj częścią serwera proxy SIP lub dedykowanego serwera rejestracyjnego.
Oto szczegółowy przykład wiadomości SIP zaangażowanych w proces uwierzytelniania REGISTER:
Początkowe REGISTER żądanie od UA do serwera rejestracyjnego:
Ten początkowy komunikat REGISTER jest wysyłany przez UA (Alice) do serwera rejestracji. Zawiera ważne informacje, takie jak pożądany czas rejestracji (Expires), URI SIP użytkownika (sip:alice@example.com) oraz adres kontaktowy użytkownika (sip:alice@192.168.1.100:5060).
401 Unauthorized odpowiedź od serwera rejestracji:
Serwer rejestracyjny odpowiada komunikatem "401 Unauthorized", który zawiera nagłówek "WWW-Authenticate". Ten nagłówek zawiera informacje wymagane do uwierzytelnienia UA, takie jak realm uwierzytelnienia, nonce i algorytm.
Żądanie REGISTER z danymi uwierzytelniającymi:
UA wysyła kolejne żądanie REGISTER, tym razem zawierające nagłówek "Authorization" z niezbędnymi poświadczeniami, takimi jak nazwa użytkownika, realm, nonce i wartość odpowiedzi obliczoną na podstawie podanych informacji oraz hasła użytkownika.
W ten sposób obliczana jest odpowiedź Authorization:
Udana rejestracja odpowiedź z serwera rejestratora:
Po zweryfikowaniu podanych danych uwierzytelniających, serwer rejestracyjny wysyła odpowiedź "200 OK", aby wskazać, że rejestracja była udana. Odpowiedź zawiera zarejestrowane informacje kontaktowe oraz czas wygaśnięcia rejestracji. W tym momencie agent użytkownika (Alice) jest pomyślnie zarejestrowany w serwerze rejestracyjnym SIP, a przychodzące żądania SIP dla Alice mogą być kierowane do odpowiedniego adresu kontaktowego.
Nie jest to wspomniane, ale Użytkownik B musi wysłać wiadomość REGISTER do Proxy 2, zanim będzie mógł odbierać połączenia.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)