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

16 KiB

SIP (Sessie Inisiasie Protokol)

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Basiese Inligting

SIP (Sessie Inisiasie Protokol) is 'n seintegnologie- en oproepbeheerprotokol wat wyd gebruik word vir die vestiging, wysiging en beëindiging van multimedia-sessies, insluitend spraak, video en onmiddellike boodskappe, oor IP-netwerke. Ontwikkel deur die Internet Engineering Task Force (IETF), word SIP gedefinieer in RFC 3261 en het die de facto standaard geword vir VoIP en verenigde kommunikasie.

Sommige belangrike kenmerke van SIP sluit in:

  1. Tekstgebaseerde Protokol: SIP is 'n tekstgebaseerde protokol, wat dit mensleesbaar maak en makliker maak om foute op te spoor. Dit is gebaseer op 'n versoek-antwoordmodel, soortgelyk aan HTTP, en gebruik metodes soos INVITE, ACK, BYE en CANCEL om oproepsessies te beheer.
  2. Skalering en Veelsydigheid: SIP is hoogs skaalbaar en kan gebruik word in klein- en grootmaat-ondernemings- en vervoerdersomgewings. Dit kan maklik uitgebrei word met nuwe funksies, wat dit aanpasbaar maak vir verskillende gevalle en vereistes.
  3. Interoperabiliteit: SIP se wye aanvaarding en standaardisering verseker beter interoperabiliteit tussen verskillende toestelle, toepassings en diensverskaffers, wat naadlose kommunikasie oor verskillende platforms bevorder.
  4. Modulêre Ontwerp: SIP werk saam met ander protokolle soos RTP (Real-time Transport Protocol) vir media-oordrag en SDP (Session Description Protocol) vir die beskrywing van multimedia-sessies. Hierdie modulêre ontwerp maak groter veelsydigheid en verenigbaarheid met verskillende mediatipes en kodeks moontlik.
  5. Proxy- en Omskakelbedieners: SIP kan gebruik maak van proxy- en omskakelbedieners om oproeprouting te fasiliteer en gevorderde funksies soos oproepstuur, oproepoordrag en voicemail-dienste te bied.
  6. Teenwoordigheid en Onmiddellike Boodskappe: SIP is nie beperk tot spraak- en video-kommunikasie nie. Dit ondersteun ook teenwoordigheid en onmiddellike boodskappe, wat 'n wye reeks verenigde kommunikasie-toepassings moontlik maak.

Ten spyte van sy vele voordele kan SIP moeilik wees om te konfigureer en bestuur, veral wanneer dit kom by NAT-deurslag en vuurmuurprobleme. Tog maak sy veelsydigheid, skalering en uitgebreide ondersteuning in die bedryf dit 'n gewilde keuse vir VoIP- en multimedia-kommunikasie.

SIP Metodes

Die kern-SIP-metodes wat gedefinieer is in RFC 3261 sluit in:

  1. INVITE: Gebruik om 'n nuwe sessie (oproep) te inisieer of 'n bestaande een te wysig. Die INVITE-metode dra die sessiebeskrywing (gewoonlik met behulp van SDP) om die ontvanger in te lig oor die besonderhede van die voorgestelde sessie, soos mediatipes, kodeks en vervoerprotokolle.
  2. ACK: Gestuur om die ontvangs van 'n finale antwoord op 'n INVITE-versoek te bevestig. Die ACK-metode verseker die betroubaarheid van INVITE-transaksies deur end-to-end-erkennings te voorsien.
  3. BYE: Gebruik om 'n gevestigde sessie (oproep) te beëindig. Die BYE-metode word deur een van die partye in die sessie gestuur om aan te dui dat hulle die kommunikasie wil beëindig.
  4. CANCEL: Gestuur om 'n hangende INVITE-versoek te kanselleer voordat die sessie gevestig is. Die CANCEL-metode stel die sender in staat om 'n INVITE-transaksie af te breek as hulle van gedagte verander of as daar geen antwoord van die ontvanger is nie.
  5. OPTIONS: Gebruik om die vermoëns van 'n SIP-bediener of gebruikersagent te ondersoek. Die OPTIONS-metode kan gestuur word om inligting oor ondersteunde metodes, mediatipes of ander uitbreidings te versoek sonder om werklik 'n sessie te vestig.
  6. REGISTER: Gebruik deur 'n gebruikersagent om sy huidige ligging by 'n SIP-registreerderbediener te registreer. Die REGISTER-metode help om 'n opgedateerde koppeling tussen 'n gebruiker se SIP-URI en hul huidige IP-adres te handhaaf, wat oproeprouting en aflewering moontlik maak.

{% hint style="warning" %} Let daarop dat dit nie nodig is om die REGISTER vir enige iets te gebruik om iemand te bel nie.
Dit is egter moontlik dat die oproeper in orde om 'n INVITE uit te voer, eers moet geïdentifiseer word, anders sal hy 'n 401 Unauthorized-antwoord ontvang. {% endhint %}

Naas hierdie kernmetodes is daar verskeie SIP-uitbreidingsmetodes wat in ander RFC's gedefinieer is, soos:

  1. SUBSCRIBE: Gedefinieer in RFC 6665, word die SUBSCRIBE-metode gebruik om kennisgewings te versoek oor die toestand van 'n spesifieke hulpbron, soos 'n gebruiker se teenwoordigheid of oproepstatus.
  2. NOTIFY: Ook gedefinieer in RFC 6665, word die NOTIFY-metode deur 'n bediener gestuur om 'n geabonneerde gebruikersagent in te lig oor veranderinge in die toestand van 'n gemonitorde hulpbron.
  3. REFER: Gedefinieer in RFC 3515, word die REFER-metode gebruik om te versoek dat die ontvanger 'n oorplasing uitvoer of na 'n derde party verwys. Dit word tipies gebruik vir oproepoordrag-scenarios.
  4. MESSAGE: Gedefinieer in RFC

Voorbeelde

SIP INVITE Voorbeeld

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
Elke Parameter Verduidelik
  1. Request-Line: INVITE sip:jdoe@example.com SIP/2.0 - Hierdie lyn dui die metode (INVITE), die versoek URI (sip:jdoe@example.com), en die SIP-weergawe (SIP/2.0) aan.
  2. Via: Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds - Die Via-kop spesifiseer die vervoerprotokol (UDP) en die klient se adres (pc33.example.com). Die "branch" parameter word gebruik vir lusopsporing en transaksie-passing.
  3. Max-Forwards: Max-Forwards: 70 - Hierdie kopvel beperk die aantal kere wat die versoek deur proksi's gestuur kan word om oneindige lusse te voorkom.
  4. To: To: John Doe <sip:jdoe@example.com> - Die To-kop spesifiseer die ontvanger van die oproep, insluitend hul vertoonnaam (John Doe) en SIP URI (sip:jdoe@example.com).
  5. From: From: Jane Smith <sip:jsmith@example.org>;tag=1928301774 - Die From-kop spesifiseer die afsender van die oproep, insluitend hul vertoonnaam (Jane Smith) en SIP URI (sip:jsmith@example.org). Die "tag" parameter word gebruik om die afsender se rol in die dialoog uniek te identifiseer.
  6. Call-ID: Call-ID: a84b4c76e66710 - Die Call-ID-kop identifiseer uniek 'n oproepsessie tussen twee gebruikersagtente.
  7. CSeq: CSeq: 314159 INVITE - Die CSeq-kop bevat 'n volgnummer en die metode wat in die versoek gebruik word. Dit word gebruik om reaksies aan versoek te koppel en uit-volgorde boodskappe op te spoor.
  8. Contact: Contact: <sip:jsmith@pc33.example.com> - Die Contact-kop bied 'n direkte roete na die afsender, wat gebruik kan word vir volgende versoek en reaksies.
  9. User-Agent: User-Agent: ExampleSIPClient/1.0 - Die User-Agent-kop verskaf inligting oor die sagteware of hardeware van die afsender, insluitend die naam en weergawe.
  10. Allow: Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO - Die Allow-kop lys die SIP-metodes wat deur die afsender ondersteun word. Dit help die ontvanger om te verstaan watter metodes tydens die kommunikasie gebruik kan word.
  11. Content-Type: Content-Type: application/sdp - Die Content-Type-kop spesifiseer die media-tipe van die boodskaplêer, in hierdie geval SDP (Session Description Protocol).
  12. Content-Length: Content-Length: 142 - Die Content-Length-kop dui die grootte van die boodskaplêer in bytes aan.
  13. Boodskaplêer: Die boodskaplêer bevat die SDP-sessiebeskrywing, wat inligting bevat oor die media-tipes, kodeks, en vervoerprotokolle vir die voorgestelde sessie.
  • v=0 - Protokolweergawe (0 vir SDP)
  • o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com - Oorsprong en sessie-identifiseerder
  • s=- - Sessienaam (een enkele koppelteken dui aan dat daar geen sessienaam is nie)
  • c=IN IP4 pc33.example.com - Verbindingsinligting (netwerk tipe, adres tipe, en adres)
  • t=0 0 - Tydsinligting (begin- en eindtye, 0 0 beteken dat die sessie nie begrens is nie)
  • m=audio 49170 RTP/AVP 0 - Media-beskrywing (media tipe, poortnommer, vervoerprotokol, en formaatlys). In hierdie geval spesifiseer dit 'n klankstroom wat gebruik maak van RTP/AVP (Real-time Transport Protocol / Audio Video Profile) en formaat 0 (PCMU/8000).
  • a=rtpmap:0 PCMU/8000 - Eienskap wat die formaat (0) aan die kodek (PCMU) en sy klokspoed (8000 Hz) koppel.

SIP REGISTER Voorbeeld

Die REGISTER-metode word in die Session Initiation Protocol (SIP) gebruik om 'n gebruikersagtent (UA), soos 'n VoIP-foon of 'n sagtfoon, in staat te stel om sy ligging by 'n SIP-registrasiebediener te registreer. Hierdie proses laat die bediener weet waarheen inkomende SIP-versoeke vir die geregistreerde gebruiker gestuur moet word. Die registrasiebediener is gewoonlik deel van 'n SIP-proksibediener of 'n toegewyde registrasiebediener.

Hier is 'n gedetailleerde voorbeeld van die SIP-boodskappe wat betrokke is by 'n REGISTER-verifikasieproses:

  1. Aanvanklike REGISTER versoek van UA na die registrasiebediener:
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

Hierdie aanvanklike REGISTER-boodskap word deur die UA (Alice) na die registrasiebediener gestuur. Dit sluit belangrike inligting in soos die gewenste registrasie-tydsduur (Expires), die gebruiker se SIP URI (sip:alice@example.com), en die gebruiker se kontakadres (sip:alice@192.168.1.100:5060).

  1. 401 Onbevoegd antwoord van die registrasiebediener:
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

Die registrasiebediener reageer met 'n "401 Onbevoegde" boodskap, wat 'n "WWW-Authenticate" kop bevat. Hierdie kop bevat inligting wat vereis word vir die UA om homself te verifieer, soos die verifikasiegebied, nonce, en algoritme.

  1. REGISTREER versoek met verifikasielegitimasie:
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

Die UA stuur 'n ander REGISTER versoek, hierdie keer met die "Authorization" kop met die nodige geloofsbriewe, soos die gebruikersnaam, realm, nonce, en 'n responswaarde wat bereken word met behulp van die verskafte inligting en die gebruiker se wagwoord.

So word die Authorizarion respons bereken:

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. Suksesvolle registrasie respons van die registrasiebediener:
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

Nadat die registrasieserver die voorsiene geloofsbriewe geverifieer het, stuur dit 'n "200 OK" antwoord om aan te dui dat die registrasie suksesvol was. Die antwoord bevat die geregistreerde kontakinligting en die vervaltyd vir die registrasie. Op hierdie punt is die gebruikersagent (Alice) suksesvol geregistreer by die SIP-registrasieserver, en inkomende SIP-versoeke vir Alice kan na die toepaslike kontakadres gerouteer word.

Oproepvoorbeeld

{% hint style="info" %} Dit word nie genoem nie, maar Gebruiker B moet 'n REGISTER-boodskap na Proxy 2 gestuur het voordat hy oproepe kan ontvang. {% endhint %}

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: