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 (Протокол ініціації сеансу) є протоколом сигналізації та управління дзвінками, який широко використовується для встановлення, модифікації та завершення мультимедійних сеансів, включаючи голос, відео та миттєві повідомлення, через IP-мережі. Розроблений Інтернет-інженерним робочим комітетом (IETF), SIP визначається в RFC 3261 і став де-факто стандартом для VoIP та об'єднаних комунікацій.
Деякі ключові особливості SIP включають:
Текстовий протокол: SIP є текстовим протоколом, що робить його зрозумілим для людини та легшим для налагодження. Він базується на моделі запит-відповідь, подібній до HTTP, і використовує методи, такі як INVITE, ACK, BYE та CANCEL для управління сеансами дзвінків.
Масштабованість та гнучкість: SIP є високоефективним і може використовуватися як у малих, так і у великих підприємствах та середовищах класу операторів. Його легко розширити новими функціями, що робить його адаптивним до різних випадків використання та вимог.
Сумісність: Широке впровадження та стандартизація SIP забезпечують кращу сумісність між різними пристроями, додатками та постачальниками послуг, сприяючи безперешкодній комунікації на різних платформах.
Модульний дизайн: SIP працює з іншими протоколами, такими як RTP (Протокол реального часу) для передачі медіа та SDP (Протокол опису сеансу) для опису мультимедійних сеансів. Цей модульний дизайн дозволяє забезпечити більшу гнучкість та сумісність з різними типами медіа та кодеками.
Проксі та редирект-сервери: SIP може використовувати проксі та редирект-сервери для полегшення маршрутизації дзвінків та надання розширених функцій, таких як переадресація дзвінків, передача дзвінків та послуги голосової пошти.
Присутність та миттєві повідомлення: SIP не обмежується лише голосовою та відео-комунікацією. Він також підтримує присутність та миттєві повідомлення, що дозволяє реалізувати широкий спектр об'єднаних комунікаційних додатків.
Незважаючи на численні переваги, SIP може бути складним для налаштування та управління, особливо при вирішенні проблем з NAT та брандмауерами. Однак його універсальність, масштабованість та широке підтримка в галузі роблять його популярним вибором для VoIP та мультимедійної комунікації.
Основні методи SIP, визначені в RFC 3261, включають:
INVITE: Використовується для ініціації нового сеансу (дзвінка) або модифікації існуючого. Метод INVITE несе опис сеансу (зазвичай за допомогою SDP), щоб проінформувати отримувача про деталі запропонованого сеансу, такі як типи медіа, кодеки та транспортні протоколи.
ACK: Надсилається для підтвердження отримання остаточної відповіді на запит INVITE. Метод ACK забезпечує надійність транзакцій INVITE, надаючи підтвердження з кінця в кінець.
BYE: Використовується для завершення встановленого сеансу (дзвінка). Метод BYE надсилається будь-якою стороною в сеансі, щоб вказати, що вони бажають завершити комунікацію.
CANCEL: Надсилається для скасування очікуючого запиту INVITE перед встановленням сеансу. Метод CANCEL дозволяє відправнику скасувати транзакцію INVITE, якщо вони змінюють свою думку або якщо немає відповіді від отримувача.
OPTIONS: Використовується для запиту можливостей SIP-сервера або агента користувача. Метод OPTIONS може бути надісланий для запиту інформації про підтримувані методи, типи медіа або інші розширення без фактичного встановлення сеансу.
REGISTER: Використовується агентом користувача для реєстрації свого поточного місцезнаходження з SIP-регістратором. Метод REGISTER допомагає підтримувати актуальну відповідність між SIP URI користувача та їхньою поточною IP-адресою, що дозволяє маршрутизацію та доставку дзвінків.
Зверніть увагу, що для дзвінка комусь необов'язково використовувати REGISTER для чогось.
Однак можливо, що для виконання INVITE абоненту потрібно спочатку автентифікуватися, інакше він отримає відповідь 401 Unauthorized
.
На додаток до цих основних методів, існує кілька розширених методів SIP, визначених в інших RFC, таких як:
SUBSCRIBE: Визначений у RFC 6665, метод SUBSCRIBE використовується для запиту сповіщень про стан конкретного ресурсу, такого як присутність користувача або статус дзвінка.
NOTIFY: Також визначений у RFC 6665, метод NOTIFY надсилається сервером для інформування підписаного агента користувача про зміни в стані моніторованого ресурсу.
REFER: Визначений у RFC 3515, метод REFER використовується для запиту, щоб отримувач виконав передачу або звернувся до третьої сторони. Це зазвичай використовується для сценаріїв передачі дзвінків.
MESSAGE: Визначений у RFC 3428, метод MESSAGE використовується для надсилання миттєвих повідомлень між SIP-агентами користувача, що дозволяє текстову комунікацію в рамках SIP.
UPDATE: Визначений у RFC 3311, метод UPDATE дозволяє модифікувати сеанс без впливу на стан існуючого діалогу. Це корисно для оновлення параметрів сеансу, таких як кодеки або типи медіа, під час поточного дзвінка.
PUBLISH: Визначений у RFC 3903, метод PUBLISH використовується агентом користувача для публікації інформації про стан подій на сервер, роблячи її доступною для інших зацікавлених сторін.
1xx (Проміжні відповіді): Ці відповіді вказують на те, що запит був отриманий, і сервер продовжує його обробку.
100 Trying: Запит був отриманий, і сервер працює над ним.
180 Ringing: Абонент отримує сигнал, і він візьме дзвінок.
183 Session Progress: Надає інформацію про прогрес дзвінка.
2xx (Успішні відповіді): Ці відповіді вказують на те, що запит був успішно отриманий, зрозумілий і прийнятий.
200 OK: Запит був успішним, і сервер його виконав.
202 Accepted: Запит був прийнятий для обробки, але ще не завершений.
3xx (Відповіді перенаправлення): Ці відповіді вказують на те, що для виконання запиту потрібні подальші дії, зазвичай шляхом звернення до альтернативного ресурсу.
300 Multiple Choices: Є кілька доступних варіантів, і користувач або клієнт повинен вибрати один.
301 Moved Permanently: Запитуваний ресурс отримав новий постійний URI.
302 Moved Temporarily: Запитуваний ресурс тимчасово доступний за іншим URI.
305 Use Proxy: Запит повинен бути надісланий на вказаний проксі.
4xx (Відповіді про помилки клієнта): Ці відповіді вказують на те, що запит містить неправильний синтаксис або не може бути виконаний сервером.
400 Bad Request: Запит був неправильно сформульований або недійсний.
401 Unauthorized: Запит вимагає автентифікації користувача.
403 Forbidden: Сервер зрозумів запит, але відмовляється його виконати.
404 Not Found: Запитуваний ресурс не знайдено на сервері.
408 Request Timeout: Сервер не отримав повний запит протягом часу, який він був готовий чекати.
486 Busy Here: Абонент наразі зайнятий і не може взяти дзвінок.
5xx (Відповіді про помилки сервера): Ці відповіді вказують на те, що сервер не зміг виконати дійсний запит.
500 Internal Server Error: Сервер зіткнувся з помилкою під час обробки запиту.
501 Not Implemented: Сервер не підтримує функціональність, необхідну для виконання запиту.
503 Service Unavailable: Сервер наразі не може обробити запит через обслуговування або перевантаження.
6xx (Глобальні відповіді про помилки): Ці відповіді вказують на те, що запит не може бути виконаний жодним сервером.
600 Busy Everywhere: Усі можливі напрямки для дзвінка зайняті.
603 Decline: Абонент не бажає брати участь у дзвінку.
604 Does Not Exist Anywhere: Запитуваний ресурс недоступний в мережі.
Метод REGISTER використовується в Протоколі ініціації сесії (SIP), щоб дозволити агенту користувача (UA), наприклад, VoIP телефону або софтфоні, зареєструвати своє місцезнаходження на сервері реєстрації SIP. Цей процес дозволяє серверу знати, куди маршрутизувати вхідні SIP запити, призначені для зареєстрованого користувача. Сервер реєстрації зазвичай є частиною проксі-сервера SIP або спеціалізованого сервера реєстрації.
Ось детальний приклад SIP повідомлень, що беруть участь у процесі аутентифікації REGISTER:
Початковий REGISTER запит від UA до сервера реєстрації:
Це початкове повідомлення REGISTER надсилається UA (Аліса) на сервер реєстрації. Воно містить важливу інформацію, таку як бажана тривалість реєстрації (Expires), SIP URI користувача (sip:alice@example.com) та контактну адресу користувача (sip:alice@192.168.1.100:5060).
401 Unauthorized відповідь від сервера реєстрації:
Сервер реєстрації відповідає повідомленням "401 Unauthorized", яке містить заголовок "WWW-Authenticate". Цей заголовок містить інформацію, необхідну для автентифікації UA, таку як область автентифікації, nonce та алгоритм.
Заявка REGISTER з обліковими даними для автентифікації:
UA надсилає ще один запит REGISTER, цього разу включаючи заголовок "Authorization" з необхідними обліковими даними, такими як ім'я користувача, область, nonce та значення відповіді, обчислене за допомогою наданої інформації та пароля користувача.
Ось як обчислюється відповідь Authorizarion:
Успішна реєстрація відповідь від сервера реєстрації:
Після того, як сервер реєстрації перевіряє надані облікові дані, він надсилає відповідь "200 OK", щоб вказати, що реєстрація була успішною. Відповідь містить зареєстровану контактну інформацію та час закінчення реєстрації. На цьому етапі агент користувача (Аліса) успішно зареєстрований на сервері SIP реєстрації, і вхідні SIP запити для Аліси можуть бути перенаправлені на відповідну контактну адресу.
Не згадується, але Користувач B повинен надіслати повідомлення REGISTER до Proxy 2, перш ніж він зможе отримувати дзвінки.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)