From a23e179e098c2d9a685515cea0e0d1a937a01725 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 30 Sep 2025 03:38:38 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-voip/basic-voip- --- .../sip-session-initiation-protocol.md | 255 ++++++++++++------ 1 file changed, 170 insertions(+), 85 deletions(-) diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md index ef7683091..d74a0f05c 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md @@ -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 ```
-Svaki Parametar Objašnjen +Each Param Explained -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 ` - 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 ;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: ` - 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 ` - 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 ;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: ` - 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).
### 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: ;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 ;tag=565656 To: Alice ;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: ;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
-> [!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 + +# Minimal raw OPTIONS over UDP +printf "OPTIONS sip: SIP/2.0\r\nVia: SIP/2.0/UDP attacker;branch=z9\r\nFrom: ;tag=1\r\nTo: >\r\nCall-ID: 1@attacker\r\nCSeq: 1 OPTIONS\r\nMax-Forwards: 70\r\nContact: \r\nContent-Length: 0\r\n\r\n" | nc -u -w 2 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}}