hacktricks/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md
2024-02-10 13:11:20 +00:00

16 KiB

SIP (Session Initiation Protocol)

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

SIP (Session Initiation Protocol) je signalizacijski i kontrolni protokol poziva koji se široko koristi za uspostavljanje, modifikaciju i prekidanje multimedijalnih sesija, uključujući glas, video i trenutne poruke, preko IP mreža. Razvijen od strane Internet Engineering Task Force (IETF), SIP je definisan u RFC 3261 i postao je de facto standard za VoIP i ujedinjene komunikacije.

Neki ključni elementi SIP-a uključuju:

  1. Tekstualni protokol: SIP je tekstualni protokol, što ga čini čitljivim za ljude i lakšim za otklanjanje grešaka. Baziran je na modelu zahteva-odgovora, sličnom HTTP-u, i koristi metode poput INVITE, ACK, BYE i CANCEL za kontrolu poziva.
  2. Skalabilnost i fleksibilnost: SIP je visoko skalabilan i može se koristiti u malim implementacijama, kao i u velikim preduzećima i provajderskim okruženjima. Može se lako proširiti novim funkcionalnostima, što ga čini prilagodljivim različitim slučajevima upotrebe i zahtevima.
  3. Interoperabilnost: Široka upotreba i standardizacija SIP-a osiguravaju bolju interoperabilnost između različitih uređaja, aplikacija i provajdera usluga, promovišući besprekornu komunikaciju na različitim platformama.
  4. Modularni dizajn: SIP radi sa drugim protokolima poput RTP (Real-time Transport Protocol) za prenos medija i SDP (Session Description Protocol) za opisivanje multimedijalnih sesija. Ovaj modularni dizajn omogućava veću fleksibilnost i kompatibilnost sa različitim vrstama medija i kodeka.
  5. Proxy i preusmeravajući serveri: SIP može koristiti proxy i preusmeravajuće servere za olakšavanje rutiranja poziva i pružanje naprednih funkcionalnosti poput preusmeravanja poziva, transfera poziva i glasovne pošte.
  6. Prisustvo i trenutne poruke: SIP nije ograničen samo na glasovnu i video komunikaciju. Takođe podržava prisustvo i trenutne poruke, omogućavajući širok spektar aplikacija za ujedinjenu komunikaciju.

Uprkos mnogim prednostima, SIP može biti kompleksan za konfigurisanje i upravljanje, posebno kada se suočava sa NAT prelazom i problemima sa firewall-om. Međutim, njegova fleksibilnost, skalabilnost i široka podrška u industriji čine ga popularnim izborom za VoIP i multimedijalnu komunikaciju.

SIP metode

Osnovne SIP metode definisane u RFC 3261 uključuju:

  1. INVITE: Koristi se za inicijaciju nove sesije (poziva) ili modifikaciju postojeće. Metoda INVITE prenosi opis sesije (obično koristeći SDP) kako bi obavestila primaoca o detaljima predložene sesije, poput vrsta medija, kodeka i transportnih protokola.
  2. ACK: Služi za potvrdu prijema konačnog odgovora na INVITE zahtev. Metoda ACK obezbeđuje pouzdanost INVITE transakcija pružanjem potvrde o prijemu od kraja do kraja.
  3. BYE: Koristi se za prekidanje uspostavljene sesije (poziva). Metoda BYE se šalje od strane bilo koje strane u sesiji kako bi se naznačilo da žele prekinuti komunikaciju.
  4. CANCEL: Služi za otkazivanje čekajućeg INVITE zahteva pre uspostavljanja sesije. Metoda CANCEL omogućava pošiljaocu da prekine INVITE transakciju ako promeni mišljenje ili ako nema odgovora od primaoca.
  5. OPTIONS: Koristi se za upitivanje mogućnosti SIP servera ili korisničkog agenta. Metoda OPTIONS se može poslati kako bi se zatražile informacije o podržanim metodama, vrstama medija ili drugim ekstenzijama, a da se pritom ne uspostavi sesija.
  6. REGISTER: Koristi ga korisnički agent da registruje svoju trenutnu lokaciju kod SIP registarskog servera. Metoda REGISTER pomaže u održavanju ažurnog mapiranja između korisnikovog SIP URI-ja i njegove trenutne IP adrese, omogućavajući rutiranje i dostavu poziva.

{% hint style="warning" %} Napomena da bi se nekoga pozvalo nije neophodno koristiti REGISTER za bilo šta.
Međutim, moguće je da bi pozivaoc trebao da se autentifikuje pre nego što izvrši INVITE, ili će dobiti odgovor 401 Unauthorized. {% endhint %}

Pored ovih osnovnih metoda, postoje brojne SIP ekstenzije definisane u drugim RFC-ovima, kao što su:

  1. SUBSCRIBE: Definisana u RFC 6665, metoda SUBSCRIBE se koristi za zahtevanje obaveštenja o stanju određenog resursa, poput prisustva korisnika ili statusa poziva.
  2. NOTIFY: Takođe definisana u RFC 6665, metoda NOTIFY se šalje od strane servera kako bi obavestila pretplaćeni korisnički agent o promenama u stanju praćenog resursa.
  3. REFER: Definisana u RFC 3515, metoda REFER se koristi za zahtevanje da primalac izvrši transfer ili uputi na treću stranu. Ovo se obično koristi za scenari

Primeri

Primer SIP POZIVANJA

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
Objašnjenje svakog parametra
  1. Request-Line: INVITE sip:jdoe@example.com SIP/2.0 - Ova linija označava metod (INVITE), URI zahteva (sip:jdoe@example.com) i verziju SIP-a (SIP/2.0).
  2. Via: Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds - Via zaglavlje specificira transportni protokol (UDP) i adresu klijenta (pc33.example.com). Parametar "branch" se koristi za detekciju petlji i uparivanje transakcija.
  3. Max-Forwards: Max-Forwards: 70 - Ovo zaglavlje ograničava broj puta koliko zahtev može biti prosleđen preko proksija kako bi se izbegle beskonačne petlje.
  4. To: To: John Doe <sip:jdoe@example.com> - To zaglavlje specificira primaoca poziva, uključujući njegovo ime (John Doe) i SIP URI (sip:jdoe@example.com).
  5. From: From: Jane Smith <sip:jsmith@example.org>;tag=1928301774 - From zaglavlje specificira pošiljaoca poziva, uključujući njegovo ime (Jane Smith) i SIP URI (sip:jsmith@example.org). Parametar "tag" se koristi za jedinstveno identifikovanje uloge pošiljaoca u dijalogu.
  6. Call-ID: Call-ID: a84b4c76e66710 - Call-ID zaglavlje jedinstveno identifikuje sesiju poziva između dva korisnička agenta.
  7. CSeq: CSeq: 314159 INVITE - CSeq zaglavlje sadrži broj sekvence i metod koji se koristi u zahtevu. Koristi se za uparivanje odgovora na zahteve i otkrivanje poruka van redosleda.
  8. Contact: Contact: <sip:jsmith@pc33.example.com> - Contact zaglavlje pruža direktnu rutu do pošiljaoca, koja se može koristiti za sledeće zahteve i odgovore.
  9. User-Agent: User-Agent: ExampleSIPClient/1.0 - User-Agent zaglavlje pruža informacije o softveru ili hardveru pošiljaoca, uključujući njegovo ime i verziju.
  10. Allow: Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO - Allow zaglavlje navodi SIP metode koje podržava pošiljalac. Ovo pomaže primaocu da razume koje metode mogu biti korišćene tokom komunikacije.
  11. Content-Type: Content-Type: application/sdp - Content-Type zaglavlje specificira medija tip poruke, u ovom slučaju SDP (Session Description Protocol).
  12. Content-Length: Content-Length: 142 - Content-Length zaglavlje označava veličinu tela poruke u bajtovima.
  13. Telo poruke: Telo poruke sadrži SDP opis sesije, koji uključuje informacije o tipovima medija, kodecima i transportnim protokolima za predloženu sesiju.
  • v=0 - Verzija protokola (0 za SDP)
  • o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com - Originator i identifikator sesije
  • s=- - Naziv sesije (jedan crtića ukazuje na odsustvo naziva sesije)
  • c=IN IP4 pc33.example.com - Informacije o konekciji (tip mreže, tip adrese i adresa)
  • t=0 0 - Informacije o vremenu (vreme početka i završetka, 0 0 znači da sesija nije ograničena)
  • m=audio 49170 RTP/AVP 0 - Opis medija (tip medija, broj porta, transportni protokol i lista formata). U ovom slučaju, specificira se audio tok koristeći RTP/AVP (Real-time Transport Protocol / Audio Video Profile) i format 0 (PCMU/8000).
  • a=rtpmap:0 PCMU/8000 - Atribut koji mapira format (0) na kodek (PCMU) i njegovu frekvenciju taktovanja (8000 Hz).

Primer SIP REGISTER-a

Metod REGISTER se koristi u protokolu za inicijaciju sesije (SIP) kako bi omogućio korisničkom agentu (UA), poput VoIP telefona ili softfona, da registruje svoju lokaciju kod SIP registracionog servera. Ovaj proces omogućava serveru da zna gde da usmeri dolazne SIP zahteve namenjene registrovanom korisniku. Registracioni server obično čini deo SIP proxy servera ili posebnog registracionog servera.

Evo detaljnog primera SIP poruka uključenih u proces autentifikacije REGISTER:

  1. Početni REGISTER zahtev od UA do registracionog servera:
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

Ova početna REGISTER poruka se šalje od strane UA (Alice) registrar serveru. Ona uključuje važne informacije kao što su željeno trajanje registracije (Expires), SIP URI korisnika (sip:alice@example.com), i kontakt adresa korisnika (sip:alice@192.168.1.100:5060).

  1. 401 Unauthorized odgovor od registrar servera:
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

Registar server odgovara sa "401 Unauthorized" porukom, koja uključuje "WWW-Authenticate" zaglavlje. Ovo zaglavlje sadrži informacije potrebne UA-u da se autentifikuje, kao što su autentifikaciono područje, nonce i algoritam.

  1. REGISTER zahtev sa autentifikacionim podacima:
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

UA šalje još jedan REGISTER zahtev, ovog puta uključujući "Authorization" zaglavlje sa potrebnim podacima za autentifikaciju, kao što su korisničko ime, realm, nonce i vrednost odgovora izračunata koristeći pružene informacije i korisnikovu lozinku.

Ovako se izračunava Authorization odgovor:

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}")
  1. Uspešan odgovor na registraciju od strane servera registra:
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

Nakon što registrar server verifikuje pružene akreditive, šalje "200 OK" odgovor da bi pokazao da je registracija uspešna. Odgovor uključuje registrovane kontakt informacije i vreme isteka registracije. U ovom trenutku, korisnički agent (Alice) je uspešno registrovan sa SIP registrar serverom i dolazni SIP zahtevi za Alice mogu biti usmereni ka odgovarajućoj kontakt adresi.

Primer poziva

{% hint style="info" %} Nije pomenuto, ali korisnik B mora da pošalje REGISTER poruku ka Proxy 2 pre nego što bude u mogućnosti da prima pozive. {% endhint %}

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks: