Translated ['src/network-services-pentesting/pentesting-voip/basic-voip-

This commit is contained in:
Translator 2025-09-30 03:38:38 +00:00
parent 963ab2f4d3
commit a23e179e09

View File

@ -2,78 +2,78 @@
{{#include ../../../banners/hacktricks-training.md}}
## Osnovne Informacije
## Osnovne informacije
SIP (Session Initiation Protocol) je **protokol za signalizaciju i kontrolu poziva** koji se široko koristi za uspostavljanje, modifikovanje i prekidanje multimedijalnih sesija, uključujući glas, video i instant 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 objedinjene komunikacije.
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:
1. **Protokol zasnovan na tekstu**: SIP je protokol zasnovan na tekstu, što ga čini čitljivim za ljude i lakšim za debagovanje. Zasnovan je na modelu zahtev-odgovor, sličnom HTTP-u, i koristi metode kao što su INVITE, ACK, BYE i CANCEL za kontrolu sesija poziva.
2. **Skalabilnost i fleksibilnost**: SIP je veoma skalabilan i može se koristiti u malim implementacijama, kao i u velikim preduzećima i carrier-grade okruženjima. Može se lako proširiti novim funkcijama, što ga čini prilagodljivim različitim slučajevima korišćenja 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 neometanu komunikaciju na različitim platformama.
4. **Modularni dizajn**: SIP radi sa drugim protokolima kao što su **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 tipovima medija i kodeka.
5. **Proxy i redirekcioni serveri**: SIP može koristiti proxy i redirekcione servere za olakšavanje usmeravanja poziva i pružanje naprednih funkcija kao što su preusmeravanje poziva, prenos poziva i usluge govorne pošte.
6. **Prisutnost i instant poruke**: SIP nije ograničen samo na glasovne i video komunikacije. Takođe podržava prisutnost i instant poruke, omogućavajući širok spektar aplikacija za objedinjene komunikacije.
1. **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.
2. **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.
3. **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.
4. **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.
5. **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.
6. **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 složen za konfiguraciju i upravljanje, posebno kada se radi o NAT prolazu i problemima sa firewall-om. Međutim, njegova svestranost, skalabilnost i opsežna podrška u industriji čine ga popularnim izborom za VoIP i multimedijalnu komunikaciju.
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
### SIP metode
Osnovne SIP metode definisane u **RFC 3261** uključuju:
1. **INVITE**: Koristi se za **iniciranje nove sesije (poziva)** ili modifikovanje postojeće. Metoda INVITE nosi opis sesije (obično koristeći SDP) kako bi obavestila primaoca o detaljima predložene sesije, kao što su tipovi medija, kodeci i transportni protokoli.
2. **ACK**: Poslato za **potvrdu prijema** konačnog odgovora na zahtev INVITE. Metoda ACK osigurava pouzdanost INVITE transakcija pružanjem potvrde 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 naznačila da želi da završi komunikaciju.
4. **CANCEL**: Poslato za **otkazivanje čekajućeg INVITE** zahteva pre nego što sesija bude uspostavljena. Metoda CANCEL omogućava pošiljaocu da prekine INVITE transakciju ako promeni mišljenje ili ako ne dobije odgovor od primaoca.
5. **OPTIONS**: Koristi se za **upit o mogućnostima SIP servera ili korisničkog agenta**. Metoda OPTIONS može se poslati da zatraži informacije o podržanim metodama, tipovima medija ili drugim ekstenzijama bez zapravo uspostavljanja sesije.
6. **REGISTER**: Koristi ga korisnički agent za **registraciju svoje trenutne lokacije kod SIP registrara servera**. Metoda REGISTER pomaže u održavanju ažurirane mape između SIP URI korisnika i njihove trenutne IP adrese, omogućavajući usmeravanje i isporuku poziva.
1. **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.
2. **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.
3. **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.
4. **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.
5. **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.
6. **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]
> Imajte na umu da za pozivanje nekoga **nije neophodno koristiti REGISTER** za bilo šta.\
> Međutim, moguće je da da bi se izvršio **INVITE**, pozivalac mora prvo da se **autentifikuje** ili će dobiti **`401 Unauthorized`** odgovor.
> 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 **neke SIP ekstenzijske metode** definisane u drugim RFC-ima, kao što su:
Pored ovih osnovnih metoda, postoje **različite SIP ekstenzije** definisane u drugim RFC-ovima, kao što su:
1. **SUBSCRIBE**: Definisan u RFC 6665, metoda SUBSCRIBE se koristi za **zahtev za obaveštenjima** o stanju određenog resursa, kao što su prisutnost korisnika ili status poziva.
2. **NOTIFY**: Takođe definisana u RFC 6665, metoda NOTIFY se šalje od strane servera da **obavesti pretplaćenog korisničkog agenta** o promenama u stanju nadgledanog resursa.
3. **REFER**: Definisan u RFC 3515, metoda REFER se koristi za **zahtev da primalac izvrši prenos ili se obrati trećoj strani**. Ovo se obično koristi za **scenarije prenosa poziva**.
4. **MESSAGE**: Definisan u RFC 3428, metoda MESSAGE se koristi za **slanje instant poruka između SIP korisničkih agenata**, omogućavajući komunikaciju zasnovanu na tekstu unutar SIP okvira.
5. **UPDATE**: Definisan u RFC 3311, metoda UPDATE omogućava **modifikovanje sesije bez uticaja na stanje postojećeg dijaloga**. Ovo je korisno za ažuriranje parametara sesije, kao što su kodeci ili tipovi medija, tokom aktivnog poziva.
6. **PUBLISH**: Definisan u RFC 3903, metoda PUBLISH koristi korisnički agent za **objavljivanje informacija o stanju događaja na server**, čineći ih dostupnim drugim zainteresovanim stranama.
1. **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.
2. **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.
3. **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.
4. **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.
5. **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.
6. **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
### SIP kodovi odgovora
- **1xx (Provisional Responses)**: Ovi odgovori ukazuju da je zahtev primljen i da server nastavlja da ga obrađuje.
- 100 Trying: Zahtev je primljen i server na njemu radi.
- 180 Ringing: Pozvani se obaveštava i preuzeće poziv.
- **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 (Successful Responses)**: Ovi odgovori ukazuju da je zahtev uspešno primljen, razumeo i prihvaćen.
- 200 OK: Zahtev je bio uspešan i server ga je ispunio.
- 202 Accepted: Zahtev je prihvaćen za obradu, ali još nije završen.
- **3xx (Redirection Responses)**: Ovi odgovori ukazuju da je potrebna dalja akcija da bi se ispunio zahtev, obično kontaktiranjem alternativnog resursa.
- 300 Multiple Choices: Postoji više dostupnih opcija, a korisnik ili klijent mora da izabere jednu.
- 301 Moved Permanently: Zatraženi resurs je dodeljen novoj trajnoj URI.
- 302 Moved Temporarily: Zatraženi resurs je privremeno dostupan na drugoj URI.
- 305 Use Proxy: Zahtev mora biti poslat na određeni proxy.
- **4xx (Client Error Responses)**: Ovi odgovori ukazuju da zahtev sadrži lošu sintaksu ili ga server ne može ispuniti.
- 400 Bad Request: Zahtev je bio loše oblikovan ili nevažeći.
- **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 ispuni.
- 404 Not Found: Zatraženi resurs nije pronađen na serveru.
- 408 Request Timeout: Server nije primio kompletan zahtev u okviru vremena koje je bio spreman da čeka.
- 486 Busy Here: Pozvani je trenutno zauzet i ne može da preuzme poziv.
- **5xx (Server Error Responses)**: Ovi odgovori ukazuju da server nije uspeo da ispuni važeći zahtev.
- 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 ispunjenje zahteva.
- 503 Service Unavailable: Server trenutno nije u mogućnosti da obradi zahtev zbog održavanja ili preopterećenja.
- **6xx (Global Failure Responses)**: Ovi odgovori ukazuju da zahtev ne može biti ispunjen od strane bilo kog servera.
- 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: Zatraženi resurs nije dostupan nigde u mreži.
- 604 Does Not Exist Anywhere: Traženi resurs nije dostupan nigde u mreži.
## Primeri
### SIP INVITE Primer
### Primer SIP INVITE-a
```
INVITE sip:jdoe@example.com SIP/2.0
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds
@ -94,43 +94,43 @@ s=-
c=IN IP4 pc33.example.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000te
a=rtpmap:0 PCMU/8000
```
<details>
<summary>Svaki Parametar Objašnjen</summary>
<summary>Each Param Explained</summary>
1. **Request-Line**: `INVITE sip:jdoe@example.com SIP/2.0` - Ova linija označava metodu (INVITE), URI zahteva (sip:[jdoe@example.com](mailto:jdoe@example.com)), i SIP verziju (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 usklađivanje transakcija.
3. **Max-Forwards**: `Max-Forwards: 70` - Ovo zaglavlje ograničava broj puta na koji se zahtev može proslediti od strane proxy servera 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](mailto: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](mailto: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 metodu korišćenu u zahtevu. Koristi se za usklađivanje odgovora sa zahtevima i detekciju poruka koje su van reda.
8. **Contact**: `Contact: <sip:jsmith@pc33.example.com>` - Contact zaglavlje pruža direktan put do pošiljaoca, koji se može koristiti za naredne 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 se mogu koristiti tokom komunikacije.
11. **Content-Type**: `Content-Type: application/sdp` - Content-Type zaglavlje specificira medijski tip tela 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. **Message Body**: Telo poruke sadrži SDP opis sesije, koji uključuje informacije o medijskim tipovima, kodecima i transportnim protokolima za predloženu sesiju.
1. **Request-Line**: `INVITE sip:jdoe@example.com SIP/2.0` - Ovaj red označava metodu (INVITE), request URI (sip:[jdoe@example.com](mailto:jdoe@example.com)) i SIP verziju (SIP/2.0).
2. **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.
3. **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.
4. **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](mailto:jdoe@example.com)).
5. **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](mailto:jsmith@example.org)). "tag" parametar se koristi da jedinstveno identifikuje ulogu pošiljaoca u dialogu.
6. **Call-ID**: `Call-ID: a84b4c76e66710` - Call-ID header jedinstveno identifikuje sesiju poziva između dva user agenta.
7. **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.
8. **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.
9. **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.
10. **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.
11. **Content-Type**: `Content-Type: application/sdp` - Content-Type header specificira medija tip tijela poruke, u ovom slučaju SDP (Session Description Protocol).
12. **Content-Length**: `Content-Length: 142` - Content-Length header pokazuje veličinu tijela poruke u bajtovima.
13. **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` - Inicijator i identifikator sesije
- `s=-` - Ime sesije (jedan crtica označava da nema imena sesije)
- `c=IN IP4 pc33.example.com` - Informacije o vezi (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 audio stream 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 (8000 Hz).
- `o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com` - Originator i identifikator sesije
- `s=-` - 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).
</details>
### SIP REGISTER Primer
Metoda REGISTER se koristi u Session Initiation Protocol (SIP) da omogući korisničkom agentu (UA), kao što je VoIP telefon ili softver za telefoniju, da **registruje svoju lokaciju sa SIP registrar serverom**. Ovaj proces omogućava serveru da zna **kuda da usmeri dolazne SIP zahteve namenjene registrovanom korisniku**. Registrar server je obično deo SIP proxy servera ili posvećenog servera za registraciju.
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.
Evo detaljnog primera SIP poruka uključenih u proces autentifikacije REGISTER:
Here's a detailed example of the SIP messages involved in a REGISTER authentication process:
1. Početni **REGISTER** zahtev od UA do registrar servera:
1. Initial **REGISTER** request from UA to the registrar server:
```yaml
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
@ -143,11 +143,11 @@ Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0
```
Ova inicijalna REGISTER poruka se šalje od strane UA (Alice) ka registrar serveru. Uključuje važne informacije kao što su željeno trajanje registracije (Expires), korisnikov SIP URI (sip:[alice@example.com](mailto:alice@example.com)), i korisničku kontakt adresu (sip:alice@192.168.1.100:5060).
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](mailto:alice@example.com)), i korisnikova kontakt adresa (sip:alice@192.168.1.100:5060).
2. **401 Unauthorized** odgovor od registrar servera:
```css
cssCopy codeSIP/2.0 401 Unauthorized
```
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
@ -156,9 +156,9 @@ 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 za UA da se autentifikuje, kao što su **authentication realm, nonce, i algorithm**.
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**.
3. REGISTER zahtev **sa autentifikacionim kredencijalima**:
3. REGISTER request **sa podacima za autentifikaciju**:
```vbnet
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
@ -172,9 +172,9 @@ 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" zaglavlje sa potrebnim akreditivima, kao što su korisničko ime, realm, nonce i vrednost odgovora** izračunatu koristeći date informacije i korisničku lozinku.
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.
Ovako se izračunava **Authorization odgovor**:
Ovo je kako se izračunava **Authorization response**:
```python
import hashlib
@ -207,7 +207,7 @@ qop = "auth"
response = calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop)
print(f"MD5 response value: {response}")
```
4. **Uspešna registracija** odgovor sa registrar servera:
4. **Uspešna registracija** odgovor od registrar servera:
```yaml
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
@ -219,13 +219,98 @@ 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 kako bi označio da je registracija bila 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, a dolazni SIP zahtevi za Alice mogu biti usmereni na odgovarajuću kontakt adresu.
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.
### Primer poziva
### Call Example
<figure><img src="../../../images/image (1101).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> Nije pomenuto, ali Korisnik B treba da je poslao **REGISTER poruku Proxy 2** pre nego što može da prima pozive.
> [!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:
{{#ref}}
../README.md
{{#endref}}
### Fingerprinting and Discovery
- Pošaljite OPTIONS zahtev i pregledajte `Allow`, `Supported`, `Server` i `User-Agent` zaglavlja da biste fingerprintovali uređaje i implementacije:
```bash
# 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/407` i `404/403` na `REGISTER`/`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 definisan `anonymous` endpoint 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):
```bash
# 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://` ili `wss://`). 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):
```bash
# 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_ip` je 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-endpoint `permit`/`deny` CIDR ACLs.
- PJSIP: ne kreirajte `anonymous` endpoint osim ako je neophodan; primenite endpoint `acl`/`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 `OPTIONS` i 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
{{#include ../../../banners/hacktricks-training.md}}