SIP (Session Initiation Protocol)
Reading time: 16 minutes
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
SIP (Session Initiation Protocol) je protokol za signalizaciju i kontrolu poziva široko korišćen za uspostavljanje, izmenu i prekid multimedijalnih sesija, uključujući glas, video i instant messaging, preko IP mreža. Razvio ga je Internet Engineering Task Force (IETF), SIP je definisan u RFC 3261 i postao je de facto standard za VoIP i unified communications.
Neke ključne karakteristike SIP-a uključuju:
- Tekstualni protokol: SIP je tekstualni protokol, što ga čini čitljivim i lakšim za otklanjanje grešaka. Bazira se na modelu zahtev-odgovor, sličnom HTTP-u, i koristi metode poput INVITE, ACK, BYE i CANCEL za kontrolu sesija poziva.
- Skalabilnost i fleksibilnost: SIP je visoko skalabilan i može se koristiti u malim okruženjima kao i u velikim enterprise i carrier-grade okruženjima. Lako se proširuje novim funkcijama, što ga čini prilagodljivim različitim slučajevima upotrebe i zahtevima.
- Interoperabilnost: Široka usvajanja i standardizacija SIP-a obezbeđuju bolju interoperabilnost između različitih uređaja, aplikacija i provajdera usluga, omogućavajući besprekornu komunikaciju preko različitih platformi.
- Modularni dizajn: SIP radi sa drugim protokolima kao što su RTP (Real-time Transport Protocol) za prenos medija i SDP (Session Description Protocol) za opis multimedijalnih sesija. Ovaj modularni dizajn omogućava veću fleksibilnost i kompatibilnost sa različitim tipovima medija i kodecima.
- Proxy i redirect serveri: SIP može koristiti proxy i redirect servere za olakšavanje rutiranja poziva i pružanje naprednih funkcija poput prosleđivanja poziva, transfera poziva i voicemail servisa.
- Prisutnost i instant poruke: SIP nije ograničen samo na glas i video komunikaciju. Takođe podržava presence i instant messaging, omogućavajući širok spektar unified communication aplikacija.
Uprkos mnogim prednostima, SIP može biti kompleksan za konfiguraciju i upravljanje, posebno kod problema sa NAT traversalom i firewall-ima. Ipak, njegova svestranost, 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:
- INVITE: Koristi se za iniciranje nove sesije (poziva) ili izmenu postojeće. INVITE metoda nosi opis sesije (obično koristeći SDP) da informiše primaoca o detaljima predložene sesije, kao što su tipovi medija, kodeci i transport protokoli.
- ACK: Šalje se da bi se potvrdilo prijem finalnog odgovora na INVITE zahtev. ACK metoda osigurava pouzdanost INVITE transakcija pružajući end-to-end potvrdu.
- BYE: Koristi se za prekid uspostavljene sesije (poziva). BYE metoda se šalje od strane bilo koje strane u sesiji da naznači da želi da završi komunikaciju.
- CANCEL: Šalje se da bi se otkazao čekajući INVITE zahtev pre nego što se sesija uspostavi. CANCEL metoda omogućava pošiljaocu da abortira INVITE transakciju ako promeni mišljenje ili ako nema odgovora od primaoca.
- OPTIONS: Koristi se za ispitivanje mogućnosti SIP servera ili user agenta. OPTIONS metoda može biti poslata da zahteva informacije o podržanim metodama, tipovima medija ili drugim ekstenzijama bez stvarnog uspostavljanja sesije.
- REGISTER: Koristi ga user agent da registruje svoju trenutnu lokaciju kod SIP registrar servera. REGISTER metoda pomaže u održavanju ažurne mape između SIP URI korisnika i njihove trenutne IP adrese, omogućavajući rutiranje i dostavu poziva.
warning
Note that to call someone it's not neccesary to use the REGISTER for anything.
However, it's possible that in order to perform an INVITE the caller needs to authenticate first or he will receive a 401 Unauthorized response.
Pored ovih osnovnih metoda, postoje različite SIP ekstenzije definisane u drugim RFC-ovima, kao što su:
- SUBSCRIBE: Definisana u RFC 6665, SUBSCRIBE metoda se koristi da zahteva obaveštenja o stanju određenog resursa, kao što su prisutnost korisnika ili status poziva.
- NOTIFY: Takođe definisana u RFC 6665, NOTIFY metoda se šalje od strane servera da informiše pretplaćeni user agent o promenama u stanju nadgledanog resursa.
- REFER: Definisana u RFC 3515, REFER metoda se koristi da zahteva da primalac izvrši transfer ili uputi na treću stranu. Ovo se tipično koristi za scenarije transfera poziva.
- MESSAGE: Definisana u RFC 3428, MESSAGE metoda se koristi za slanje instant poruka između SIP user agenta, omogućavajući tekstualnu komunikaciju unutar SIP okvira.
- UPDATE: Definisana u RFC 3311, UPDATE metoda omogućava izmenu sesije bez uticaja na stanje postojećeg dialoga. Ovo je korisno za ažuriranje parametara sesije, kao što su kodeci ili tipovi medija tokom trajnog poziva.
- PUBLISH: Definisana u RFC 3903, PUBLISH metoda se koristi od strane user agenta da objavi informacije o stanju događaja serveru, čineći ih dostupnim drugim zainteresovanim stranama.
SIP kodovi odgovora
- 1xx (Privremeni odgovori): Ovi odgovori označavaju da je zahtev primljen i da server nastavlja sa obradom.
- 100 Trying: Zahtev je primljen i server radi na njemu.
- 180 Ringing: Pozvani korisnik je obavešten i odgovoriće na poziv.
- 183 Session Progress: Pruža informacije o napretku poziva.
- 2xx (Uspešni odgovori): Ovi odgovori označavaju da je zahtev uspešno primljen, shvaćen i prihvaćen.
- 200 OK: Zahtev je uspešan i server ga je ispunio.
- 202 Accepted: Zahtev je prihvaćen na obradu, ali još nije završen.
- 3xx (Odgovori za preusmeravanje): Ovi odgovori označavaju da je potrebna dodatna akcija da bi se ispunio zahtev, obično kontaktiranjem alternativnog resursa.
- 300 Multiple Choices: Postoji više opcija i korisnik ili klijent mora izabrati jednu.
- 301 Moved Permanently: Traženi resurs je dodeljen novom trajnom URI-ju.
- 302 Moved Temporarily: Traženi resurs je privremeno dostupan na drugom URI-ju.
- 305 Use Proxy: Zahtev mora biti poslat na specificirani proxy.
- 4xx (Greške klijenta): Ovi odgovori označavaju da zahtev sadrži lošu sintaksu ili ga server ne može ispuniti.
- 400 Bad Request: Zahtev je neispravan ili pogrešno formatiran.
- 401 Unauthorized: Zahtev zahteva autentifikaciju korisnika.
- 403 Forbidden: Server je razumeo zahtev ali odbija da ga izvrši.
- 404 Not Found: Traženi resurs nije pronađen na serveru.
- 408 Request Timeout: Server nije primio kompletan zahtev u vremenu koje je bio spreman da sačeka.
- 486 Busy Here: Pozvani je trenutno zauzet i ne može da primi poziv.
- 5xx (Greške servera): Ovi odgovori označavaju da server nije uspeo da ispuni važeći zahtev.
- 500 Internal Server Error: Server je naišao na grešku prilikom obrade zahteva.
- 501 Not Implemented: Server ne podržava funkcionalnost potrebnu za ispunjavanje zahteva.
- 503 Service Unavailable: Server trenutno ne može da obradi zahtev zbog održavanja ili preopterećenja.
- 6xx (Globalne greške): Ovi odgovori označavaju da zahtev ne može biti ispunjen ni od strane jednog servera.
- 600 Busy Everywhere: Sva moguća odredišta za poziv su zauzeta.
- 603 Decline: Pozvani ne želi da učestvuje u pozivu.
- 604 Does Not Exist Anywhere: Traženi resurs nije dostupan nigde u mreži.
Primeri
Primer SIP INVITE-a
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/8000
Each Param Explained
- Request-Line:
INVITE sip:jdoe@example.com SIP/2.0- Ovaj red označava metodu (INVITE), request URI (sip:jdoe@example.com) i SIP verziju (SIP/2.0). - Via:
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds- Via header specificira transportni protokol (UDP) i adresu klijenta (pc33.example.com). "branch" parametar se koristi za detekciju petlji i usklađivanje tranzakcija. - Max-Forwards:
Max-Forwards: 70- Ovo polje ograničava broj puta koliko zahtjev može biti proslijeđen preko proxy-a da bi se izbjegle beskonačne petlje. - To:
To: John Doe <sip:jdoe@example.com>- To header specificira primaoca poziva, uključujući njegov prikazni naziv (John Doe) i SIP URI (sip:jdoe@example.com). - From:
From: Jane Smith <sip:jsmith@example.org>;tag=1928301774- From header specificira pošiljaoca poziva, uključujući njegov prikazni naziv (Jane Smith) i SIP URI (sip:jsmith@example.org). "tag" parametar se koristi da jedinstveno identifikuje ulogu pošiljaoca u dialogu. - Call-ID:
Call-ID: a84b4c76e66710- Call-ID header jedinstveno identifikuje sesiju poziva između dva user agenta. - CSeq:
CSeq: 314159 INVITE- CSeq header sadrži sekvencijski broj i metodu korišćenu u zahtjevu. Koristi se za usklađivanje odgovora sa zahtjevima i detekciju poruka koje su van reda. - Contact:
Contact: <sip:jsmith@pc33.example.com>- Contact header pruža direktnu rutu do pošiljaoca, koja se može koristiti za naredne zahtjeve i odgovore. - User-Agent:
User-Agent: ExampleSIPClient/1.0- User-Agent header daje informacije o softveru ili hardveru pošiljaoca, uključujući njegov naziv i verziju. - Allow:
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO- Allow header nabraja SIP metode koje pošiljalac podržava. Ovo pomaže primaocu da shvati koje metode mogu biti korišćene tokom komunikacije. - Content-Type:
Content-Type: application/sdp- Content-Type header specificira medija tip tijela poruke, u ovom slučaju SDP (Session Description Protocol). - Content-Length:
Content-Length: 142- Content-Length header pokazuje veličinu tijela poruke u bajtovima. - Message Body: The message body contains the SDP session description, which includes information about the media types, codecs, and transport protocols for the proposed session.
v=0- Verzija protokola (0 za SDP)o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com- Originator i identifikator sesijes=-- Naziv sesije (jedan crtica označava da nema naziva sesije)c=IN IP4 pc33.example.com- Informacija o konekciji (tip mreže, tip adrese i adresa)t=0 0- Informacije o vremenu (start i stop vremena, 0 0 znači da sesija nije vremenski ograničena)m=audio 49170 RTP/AVP 0- Opis medija (tip medija, broj porta, transportni protokol i lista formata). U ovom slučaju, specificira audio tok koristeći RTP/AVP i format 0 (PCMU/8000).a=rtpmap:0 PCMU/8000- Atribut koji mapira format (0) na kodek (PCMU) i njegovu frekvenciju uzorkovanja (8000 Hz).
SIP REGISTER Primer
The REGISTER method is used in Session Initiation Protocol (SIP) to allow a user agent (UA), such as a VoIP phone or a softphone, to da registruje svoju lokaciju kod SIP registrar servera. Ovaj proces omogućava serveru da zna gde da usmjeri dolazne SIP zahtjeve namijenjene registrovanom korisniku. Registrar server obično je dio SIP proxy servera ili posvećenog registration servera.
Here's a detailed example of the SIP messages involved in a REGISTER authentication process:
- Initial REGISTER request from UA to the registrar server:
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. Sadrži važne informacije kao što su željeno trajanje registracije (Expires), korisnikov SIP URI (sip:alice@example.com), i korisnikova kontakt adresa (sip:alice@192.168.1.100:5060).
- 401 Unauthorized odgovor od registrar servera:
SIP/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
Registrar server odgovara sa "401 Unauthorized" porukom, koja uključuje "WWW-Authenticate" header. Ovaj header sadrži informacije potrebne da se UA autentifikuje, kao što su autentifikacioni realm, nonce i algoritam.
- REGISTER request sa podacima za autentifikaciju:
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, ovaj put uključujući "Authorization" header sa neophodnim akreditivima, kao što su username, realm, nonce i response vrednost izračunatu koristeći date informacije i korisničku lozinku.
Ovo je kako se izračunava Authorization response:
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}")
- Uspešna registracija odgovor od registrar servera:
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 date akreditive, on šalje "200 OK" odgovor da označi da je registracija bila uspešna. Odgovor uključuje registrovane kontakt informacije i vreme isteka registracije. U tom trenutku, user agent (Alice) je uspešno registrovan kod SIP registrar servera, i dolazni SIP zahtevi za Alice mogu biti rutirani na odgovarajuću kontakt adresu.
Call Example
.png)
tip
Nije pomenuto, ali User B mora da je poslao REGISTER message to Proxy 2 pre nego što može da prima pozive.
SIP bezbednost i Pentesting beleške
Ovaj odeljak dodaje praktične, specifične savete za protokol bez dupliciranja šire VoIP smernice. Za end-to-end VoIP metodologiju napada, alate i scenarije, vidi:
Fingerprinting and Discovery
- Pošaljite OPTIONS zahtev i pregledajte
Allow,Supported,ServeriUser-Agentzaglavlja da biste fingerprintovali uređaje i implementacije:
# nmap NSE (UDP 5060 by default)
sudo nmap -sU -p 5060 --script sip-methods <target>
# Minimal raw OPTIONS over UDP
printf "OPTIONS sip:<target> SIP/2.0\r\nVia: SIP/2.0/UDP attacker;branch=z9\r\nFrom: <sip:probe@attacker>;tag=1\r\nTo: <sip:probe@<target>>\r\nCall-ID: 1@attacker\r\nCSeq: 1 OPTIONS\r\nMax-Forwards: 70\r\nContact: <sip:probe@attacker>\r\nContent-Length: 0\r\n\r\n" | nc -u -w 2 <target> 5060
Username/Extension Enumeration Behavior
- Enumeracija obično zloupotrebljava razlike između
401/407i404/403naREGISTER/INVITE. Konfigurišite servere da odgovaraju uniformno. - Asterisk chan_sip: set
alwaysauthreject=yes(general) da biste izbegli otkrivanje validnih korisnika. U novijem Asterisk-u (PJSIP), guest pozivanje je onemogućeno osim ako nije definisananonymousendpoint i slična "always auth reject" ponašanja su podrazumevana; ipak primenite mrežne ACL-e i fail2ban na perimetru.
SIP Digest Authentication: algorithms and cracking
- SIP uglavnom koristi HTTP-Digest stil auth. Istorijski su prevladavali MD5 (i MD5-sess); noviji stackovi podržavaju SHA-256 i SHA-512/256 prema RFC 8760. Preferirajte ove jače algoritme u modernim implementacijama i onemogućite MD5 kad je moguće.
- Offline razbijanje iz pcap-a je trivialno za MD5 digest-e. Nakon ekstrakcije challenge/response, možete koristiti hashcat mode 11400 (SIP digest, MD5):
# Example hash format (single line)
# username:realm:method:uri:nonce:cnonce:nc:qop:response
echo 'alice:example.com:REGISTER:sip:example.com:abcdef:11223344:00000001:auth:65a8e2285879283831b664bd8b7f14d4' > sip.hash
# Crack with a wordlist
hashcat -a 0 -m 11400 sip.hash /path/to/wordlist.txt
note
RFC 8760 definiše SHA-256 i SHA-512/256 za HTTP Digest (koristi se i u SIP). Usvajanje je neujednačeno; osigurajte da vaši alati podržavaju ove algoritme kada ciljate moderne PBX-ove.
SIP over TLS (SIPS) and over WebSockets
- Šifrovanje signalizacije:
sips:URI i TCP/TLS obično na 5061. Verifikujte validaciju sertifikata na krajnjim tačkama; mnoge prihvataju self-signed ili wildcard sertifikate, što omogućava MitM u slabijim implementacijama.- WebRTC softphone-ovi često koriste SIP preko WebSocket-a prema RFC 7118 (
ws://iliwss://). Ako PBX izlaže WSS, testirajte autentikaciju i CORS, i osigurajte da su rate limit-i sprovedeni i na HTTP frontend-u.
DoS quick checks (protocol level)
- Flooding INVITE, REGISTER ili malformed poruke može iscrpeti obradu transakcija.
- Jednostavan primer rate-limiting-a za UDP/5060 (Linux iptables hashlimit):
# Limit new SIP packets from a single IP to 20/s with burst 40
iptables -A INPUT -p udp --dport 5060 -m hashlimit \
--hashlimit-name SIP --hashlimit 20/second --hashlimit-burst 40 \
--hashlimit-mode srcip -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j DROP
Recent, relevant SIP-stack CVE to watch (Asterisk PJSIP)
- CVE-2024-35190 (published May 17, 2024): U određenim izdanjima Asterisk-a,
res_pjsip_endpoint_identifier_ipje mogao pogrešno identifikovati neautorizovane SIP zahteve kao lokalni endpoint, potencijalno omogućavajući neautorizovane akcije ili izlaganje informacija. Ispravljeno u 18.23.1, 20.8.1 i 21.3.1. Validirajte verziju vašeg PBX-a pri testiranju i prijavite odgovorno.
Hardening checklist (SIP-specific)
- Preferirajte TLS za signalizaciju i SRTP/DTLS-SRTP za media; onemogućite cleartext gde je moguće.
- Primenujte jake lozinke i digest algoritme (SHA-256/512-256 gde je podržano; izbegavajte MD5).
- Za Asterisk:
- chan_sip:
alwaysauthreject=yes,allowguest=no, per-endpointpermit/denyCIDR ACLs. - PJSIP: ne kreirajte
anonymousendpoint osim ako je neophodan; primenite endpointacl/media_acl; omogućite fail2ban ili ekvivalent. - Sakrivanje topologije na SIP proxy-ima (npr. outbound proxy/edge SBC) da smanjite information leak.
- Strogo rukovanje sa
OPTIONSi rate limitima; onemogućite neupotrebljavane metode (npr.MESSAGE,PUBLISH) ako nisu potrebne.
References
- RFC 8760 – Using SHA-256 and SHA-512/256 for HTTP Digest (applies to SIP Digest too): https://www.rfc-editor.org/rfc/rfc8760
- Asterisk GHSA advisory for CVE-2024-35190: https://github.com/asterisk/asterisk/security/advisories/GHSA-qqxj-v78h-hrf9
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks