Pentesting VoIP
Osnovne informacije o VoIP-u
Da biste počeli da učite o tome kako VoIP funkcioniše, proverite:
pageBasic VoIP ProtocolsEnumeracija VoIP-a
Telefonski brojevi
Jedan od prvih koraka koje Red Team može da preduzme je da pretraži dostupne telefonske brojeve za kontaktiranje kompanije koristeći OSINT alate, Google pretrage ili skeniranje web stranica.
Kada imate telefonske brojeve, možete koristiti online usluge za identifikaciju operatera:
Znajući da li operater pruža VoIP usluge, možete identifikovati da li kompanija koristi VoIP... Osim toga, moguće je da kompanija nije angažovala VoIP usluge, već koristi PSTN kartice za povezivanje sopstvene VoIP PBX sa tradicionalnom telefonskom mrežom.
Stvari poput automatskih odgovora ili muzike obično ukazuju na to da se koristi VoIP.
OSINT informacije
Sve druge OSINT metode koje pomažu u identifikaciji korišćenog VoIP softvera će biti od pomoći za Crveni Tim.
Enumeracija mreže
nmap
je sposoban za skeniranje UDP servisa, ali zbog velikog broja skeniranih UDP servisa, veoma je spor i možda nije vrlo precizan sa ovakvim vrstama servisa.svmap
iz SIPVicious (sudo apt install sipvicious
): Lociraće SIP servise u navedenoj mreži.svmap
je lako blokirati jer koristi User-Agentfriendly-scanner
, ali možete izmeniti kod iz/usr/share/sipvicious/sipvicious
i promeniti ga.
sipscan.py
iz sippts: Sipscan je veoma brzi skener za SIP usluge preko UDP, TCP ili TLS protokola. Koristi višenitnost i može skenirati velike opsege mreža. Omogućava lako navođenje opsega porta, skeniranje i TCP i UDP protokola, korišćenje drugih metoda (po defaultu će koristiti OPTIONS) i navođenje drugačijeg User-Agent-a (i još mnogo toga).
metasploit:
Metasploit je moćan alat za testiranje penetracije koji se često koristi u svetu hakovanja. Ovaj alat omogućava hakere da identifikuju ranjivosti u sistemima i izvrše napade na njih. Metasploit pruža širok spektar modula i eksploita koji se mogu koristiti za iskorišćavanje ranjivosti u različitim mrežnim servisima. Ovaj alat je veoma popularan među hakere zbog svoje fleksibilnosti i efikasnosti. Metasploit takođe pruža mogućnost automatizacije napada, što olakšava hakere u izvršavanju napada na ciljane sisteme.
Dodatno prebrojavanje mreže
PBX takođe može otkrivati druge mrežne usluge kao što su:
69/UDP (TFTP): Ažuriranje firmware-a
80 (HTTP) / 443 (HTTPS): Upravljanje uređajem putem weba
389 (LDAP): Alternativa za skladištenje informacija o korisnicima
3306 (MySQL): MySQL baza podataka
5038 (Manager): Omogućava korišćenje Asteriska sa drugih platformi
5222 (XMPP): Poruke putem Jabbera
5432 (PostgreSQL): PostgreSQL baza podataka
I druge...
Prebrojavanje metoda
Moguće je pronaći koje su metode dostupne za upotrebu u PBX-u koristeći sipenumerate.py
iz sippts
Enumeracija proširenja
Proširenja u PBX (Private Branch Exchange) sistemu se odnose na jedinstvene interne identifikatore dodijeljene pojedinačnim telefonskim linijama, uređajima ili korisnicima unutar organizacije ili preduzeća. Proširenja omogućavaju efikasno usmjeravanje poziva unutar organizacije, bez potrebe za pojedinačnim vanjskim telefonskim brojevima za svakog korisnika ili uređaj.
svwar
iz SIPVicious (sudo apt install sipvicious
):svwar
je besplatni skener linija proširenja SIP PBX-a. Konceptualno radi slično tradicionalnim wardialerima tako što pogađa raspon proširenja ili datu listu proširenja.
sipextend.py
iz sippts: Sipexten identifikuje ekstenzije na SIP serveru. Sipexten može proveriti velike mreže i opsege portova.
metasploit: Takođe možete nabrojati ekstenzije/korisnička imena pomoću metasploita:
enumiax
(apt install enumiax
): enumIAX je alat za bruteforce pretragu korisničkih imena za Inter Asterisk Exchange (IAX) protokol. enumIAX može raditi u dva različita moda; Sekvencijalno nagađanje korisničkih imena ili Napad rječnikom.
Napadi na VoIP
Brute-Force napad na lozinke
Nakon što je otkriven PBX i neki ekstenzije/korisnička imena, Crveni tim može pokušati autentifikaciju putem metode REGISTER
na ekstenziju koristeći rečnik uobičajenih lozinki za brute-force napad.
Imajte na umu da korisničko ime može biti isto kao i ekstenzija, ali ova praksa može varirati u zavisnosti od PBX sistema, njegove konfiguracije i preferencija organizacije...
Ako korisničko ime nije isto kao i ekstenzija, moraćete odrediti korisničko ime kako biste ga napali brute-force metodom.
svcrack
iz SIPVicious (sudo apt install sipvicious
): SVCrack vam omogućava da napadnete lozinku za određeno korisničko ime/ekstenziju na PBX-u.
sipcrack.py
iz sippts: SIP Digest Crack je alat za probijanje autentifikacije digesta unutar SIP protokola.
Metasploit:
Snifovanje VoIP-a
Ako pronađete VoIP opremu unutar otvorenog WiFi mreže, možete snifovati sve informacije. Osim toga, ako se nalazite unutar zatvorenije mreže (povezani preko Ethernet-a ili zaštićenog WiFi-ja), možete izvesti MitM napade kao što je ARPspoofing između PBX-a i gateway-a kako biste snifovali informacije.
Među informacijama o mreži, možete pronaći web pristupne podatke za upravljanje opremom, korisničke ekstenzije, korisnička imena, IP adrese, čak i hashirane lozinke i RTP pakete koje možete reprodukovati kako biste čuli razgovor, i još mnogo toga.
Da biste dobili ove informacije, možete koristiti alate poput Wireshark-a, tcpdump-a... ali posebno kreiran alat za snifovanje VoIP razgovora je ucsniff.
Imajte na umu da ako se TLS koristi u SIP komunikaciji, nećete moći videti SIP komunikaciju u čistom obliku. Isto će se dogoditi ako se koristi SRTP i ZRTP, RTP paketi neće biti u čitljivom tekstu.
SIP pristupni podaci
Pogledajte ovaj primer da biste bolje razumeli SIP REGISTER komunikaciju kako biste saznali kako se pristupni podaci šalju.
sipdump
&sipcrack
, deo sipcrack (apt-get install sipcrack
): Ovi alati mogu izvući iz pcap datoteke digest autentifikacije unutar SIP protokola i bruteforce ih.
siptshar.py
,sipdump.py
,sipcrack.py
sa sippts:SipTshark izvlači podatke protokola SIP iz PCAP datoteke.
SipDump izvlači SIP Digest autentifikacije iz PCAP datoteke.
SIP Digest Crack je alat za pucanje Digest autentifikacija unutar SIP protokola.
DTMF kodovi
Ne samo SIP akreditacije mogu se pronaći u mrežnom saobraćaju, već je takođe moguće pronaći DTMF kodove koji se koriste, na primer, za pristup glasovnoj pošti. Moguće je poslati ove kodove u INFO SIP porukama, u audio formatu ili unutar RTP paketa. Ako su kodovi unutar RTP paketa, možete iseći taj deo razgovora i koristiti alatku multimo za njihovo izdvajanje:
Besplatni pozivi / Nesigurna konfiguracija veza Asterisk-a
U Asterisk-u je moguće dozvoliti vezu sa određene IP adrese ili sa bilo koje IP adrese:
Ako je navedena IP adresa, host neće morati slati REGISTER zahtjeve svakih nekoliko minuta (u REGISTER paketu se šalje vreme života, obično 30 minuta, što znači da bi u drugom scenariju telefon morao da se registruje svakih 30 minuta). Međutim, moraće imati otvorene portove koji omogućavaju konekcije sa VoIP serverom za primanje poziva.
Da bismo definisali korisnike, mogu se definisati na sledeći način:
type=user
: Korisnik može samo primati pozive 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-trunkovi)
Takođe je moguće uspostaviti poverenje sa nesigurnom promenljivom:
insecure=port
: Omogućava peer konekcije koje su validirane preko IP adrese.insecure=invite
: Ne zahteva autentifikaciju za INVITE poruke.insecure=port,invite
: Oboje
Kada se koristi type=friend
, vrednost promenljive host neće biti korišćena, pa ako administrator pogrešno konfiguriše SIP-trunk koristeći tu vrednost, svako će moći da se poveže sa njim.
Na primer, ova konfiguracija bi bila ranjiva:
host=10.10.10.10
insecure=port,invite
type=friend
Besplatni pozivi / Nesigurna konfiguracija konteksta u Asterisku
U Asterisku, kontekst je nazvani kontejner ili sekcija u planu biranja koji grupiše povezane ekstenzije, akcije i pravila. Plan biranja je osnovna komponenta sistema Asterisk, jer definiše kako se obrađuju i rutiraju dolazni i odlazni pozivi. Konteksti se koriste za organizovanje plana biranja, upravljanje kontrolom pristupa i pružanje razdvajanja između različitih delova sistema.
Svaki kontekst je definisan u konfiguracionom fajlu, obično u fajlu extensions.conf
. Konteksti se označavaju uglastim zagradama, sa imenom konteksta unutar njih. Na primer:
Unutar konteksta, definišete ekstenzije (obrasce biranih brojeva) i povezujete ih sa nizom akcija ili aplikacija. Ove akcije određuju kako će poziv biti obrađen. Na primer:
Ovaj primer prikazuje jednostavan kontekst nazvan "my_context" sa ekstenzijom "100". Kada neko birne 100, poziv će biti prihvaćen, reprodukovaće se poruka dobrodošlice, a zatim će poziv biti prekinut.
Ovo je još jedan kontekst koji omogućava pozivanje bilo kog drugog broja:
Ako administrator definiše podrazumevani kontekst kao:
Bilo ko će moći da koristi server da pozove bilo koji drugi broj (a administrator servera će platiti poziv).
Osim toga, podrazumevano sip.conf
datoteka sadrži allowguest=true
, što znači da će svaki napadač bez autentifikacije moći da pozove bilo koji drugi broj.
sipinvite.py
iz sippts: Sipinvite proverava da li nam PBX server omogućava da vršimo pozive bez autentifikacije. Ako SIP server ima neispravnu konfiguraciju, dozvoliće nam da vršimo pozive ka spoljnim brojevima. Takođe nam može omogućiti da preusmerimo poziv na drugi spoljni broj.
Na primer, ako vaš Asterisk server ima lošu konfiguraciju konteksta, možete prihvatiti INVITE zahtev bez autorizacije. U tom slučaju, napadač može vršiti pozive ne znajući korisničko ime/lozinku.
Besplatni pozivi / Nesigurna konfiguracija IVRS-a
IVRS označava Interaktivni sistem za odgovaranje glasom, telefonsku tehnologiju koja omogućava korisnicima da komuniciraju sa računarskim sistemom putem glasa ili tona pritiskom na tastere. IVRS se koristi za izgradnju automatizovanih sistema za upravljanje pozivima koji pružaju različite funkcionalnosti, kao što su pružanje informacija, usmeravanje poziva i prikupljanje korisničkih unosa.
IVRS u VoIP sistemima obično se sastoji od:
Glasovnih poruka: Prethodno snimljenih audio poruka koje vode korisnike kroz opcije i uputstva IVR menija.
DTMF (Dual-Tone Multi-Frequency) signalizacija: Unosi tona pritiskom na tastere na telefonu, koja se koriste za navigaciju kroz IVR menije i pružanje unosa.
Usmeravanje poziva: Usmeravanje poziva ka odgovarajućoj destinaciji, kao što su određeni departmani, agenti ili ekstenzije na osnovu korisničkog unosa.
Prikupljanje korisničkih unosa: Prikupljanje informacija od pozivaoca, kao što su brojevi računa, identifikatori slučaja ili bilo koji drugi relevantni podaci.
Integracija sa spoljnim sistemima: Povezivanje IVR sistema sa bazama podataka ili drugim softverskim sistemima radi pristupa ili ažuriranja informacija, izvršavanja radnji ili pokretanja događaja.
U Asterisk VoIP sistemu možete kreirati IVR koristeći plan biranja (extensions.conf
fajl) i različite aplikacije kao što su Background()
, Playback()
, Read()
i druge. Ove aplikacije vam pomažu da reprodukujete glasovne poruke, prikupljate korisničke unose i kontrolišete tok poziva.
Primer nesigurne konfiguracije
Prethodni primer pokazuje situaciju gde se korisniku traži da pritisne 1 za poziv na određeno odeljenje, 2 za poziv na drugo odeljenje, ili unese potpuni broj ekstenzije ako ga zna. Ranjivost je u tome što se dužina unete ekstenzije ne proverava, tako da korisnik može uneti potpuni broj i poziv će biti uspostavljen.
Ubacivanje ekstenzije
Korišćenje ekstenzije kao što je:
Gde se ${EXTEN}
nalazi ekstenzija koja će biti pozvana, kada se unese ext 101, ovo bi se desilo:
Međutim, ako ${EXTEN}
dozvoljava unošenje više od brojeva (kao u starijim verzijama Asteriska), napadač bi mogao uneti 101&SIP123123123
kako bi pozvao broj telefona 123123123. I ovo bi bio rezultat:
Stoga, poziv na ekstenziju 101
i 123123123
će biti poslat i samo prvi koji dobije poziv će biti uspostavljen... ali ako napadač koristi ekstenziju koja zaobilazi svako podudaranje koje se vrši, ali ne postoji, on može ubaciti poziv samo na željeni broj.
SIPDigestLeak
SIP Digest Leak je ranjivost koja utiče na veliki broj SIP telefona, uključujući i hardverske i softverske IP telefone, kao i adaptere za telefone (VoIP na analogni). Ranjivost omogućava procurivanje odgovora za Digest autentifikaciju, koji se izračunava na osnovu lozinke. Tada je moguć napad na lozinku izvan mreže i moguće je povratiti većinu lozinki na osnovu odgovora na izazov.
**Scenario ranjivosti odavde**:
IP telefon (žrtva) sluša na portu 5060 i prihvata telefonske pozive
Napadač šalje INVITE IP telefonu
Telefon žrtve počinje zvoniti i neko se javlja i spušta slušalicu (jer niko ne odgovara na drugom kraju telefona)
Kada se telefon spusti, telefon žrtve šalje BYE napadaču
Napadač izdaje odgovor 407 koji traži autentifikaciju i izdaje izazov za autentifikaciju
Telefon žrtve pruža odgovor na izazov autentifikacije u drugom BYE-u
Napadač tada može izvršiti napad iscrpljivanjem resursa na odgovor izazova na svojoj lokalnoj mašini (ili distribuiranoj mreži itd.) i pogoditi lozinku
sipdigestleak.py iz sippts: SipDigestLeak iskorišćava ovu ranjivost.
Click2Call
Click2Call omogućava korisniku veba (koji na primer može biti zainteresovan za proizvod) da unese svoj broj telefona kako bi bio pozvan. Zatim će biti pozvan komercijalni broj, i kada korisnik podigne slušalicu, biće pozvan i povezan sa agentom.
Uobičajeni Asterisk profil za ovo je:
Prethodni profil omogućava BILO KOJOJ IP adresi da se poveže (ako je poznata lozinka).
Da biste organizovali poziv, kao što je prethodno navedeno, nije potrebna dozvola za čitanje i potrebno je samo originate u write.
Sa ovim dozvolama, bilo koja IP adresa koja zna lozinku može se povezati i izvući previše informacija, kao što su:
Više informacija ili radnji može biti zatraženo.
Prisluškivanje
U Asterisku je moguće koristiti komandu ChanSpy
koja označava ekstenziju(e) za praćenje (ili sve njih) kako bi se čule razgovori koji se odvijaju. Ova komanda mora biti dodeljena jednoj ekstenziji.
Na primer, exten => 333,1,ChanSpy('all',qb)
označava da ako pozovete ekstenziju 333, ona će pratiti sve
ekstenzije, početi da sluša svaki put kada započne novi razgovor (b
) u tihom režimu (q
) jer ne želimo da se mešamo u njega. Možete preći sa jednog razgovora na drugi pritiskom na *
, ili označavanjem broja ekstenzije.
Takođe je moguće koristiti ExtenSpy
za praćenje samo jedne ekstenzije.
Umesto slušanja razgovora, moguće je snimati ih u fajlove koristeći ekstenziju kao što je:
Pozivi će biti sačuvani u /tmp
.
Takođe, možete čak i da naterate Asterisk da izvrši skriptu koja će otkriti poziv kada se zatvori.
RTCPBleed
RTCPBleed je veliki sigurnosni problem koji utiče na Asterisk bazirane VoIP servere (objavljen 2017. godine). Ova ranjivost omogućava da se RTP (Real Time Protocol) saobraćaj, koji prenosi VoIP razgovore, interceptira i preusmeri od strane bilo koga na internetu. Ovo se dešava zato što RTP saobraćaj zaobilazi autentifikaciju prilikom prolaska kroz NAT (Network Address Translation) firewall-e.
RTP proxy-ji pokušavaju da reše NAT ograničenja koja utiču na RTC sisteme tako što posreduju RTP tokove između dve ili više strana. Kada je NAT prisutan, softver RTP proxy-ja često ne može da se osloni na RTP IP i port informacije dobijene putem signalizacije (npr. SIP). Zbog toga, nekoliko RTP proxy-ja je implementiralo mehanizam gde se takav IP i port par automatski uči. Ovo se često radi inspekcijom dolaznog RTP saobraćaja i označavanjem izvornog IP i porta za bilo koji dolazni RTP saobraćaj kao onog na koji treba odgovoriti. Ovaj mehanizam, koji se može nazvati "režim učenja", ne koristi nikakvu vrstu autentifikacije. Stoga napadači mogu slati RTP saobraćaj RTP proxy-ju i primati prosleđeni RTP saobraćaj namenjen pozivaocu ili primaocu postojećeg RTP toka. Ovu ranjivost nazivamo RTP Bleed jer omogućava napadačima da primaju RTP medijske tokove namenjene legitimnim korisnicima.
Još jedno interesantno ponašanje RTP proxy-ja i RTP stack-ova je da ponekad, čak i ako nisu ranjivi na RTP Bleed, oni će prihvatiti, proslediti i/ili obraditi RTP pakete sa bilo kog izvora. Stoga napadači mogu slati RTP pakete koji im omogućavaju da ubace svoje medije umesto legitimnih. Ovaj napad nazivamo RTP injection jer omogućava ubacivanje nelegitimnih RTP paketa u postojeće RTP tokove. Ova ranjivost može se naći i kod RTP proxy-ja i kod krajnjih tačaka.
Asterisk i FreePBX tradicionalno koriste NAT=yes
podešavanje, koje omogućava da RTP saobraćaj zaobiđe autentifikaciju, što može dovesti do nedostatka zvuka ili jednosmernog zvuka tokom poziva.
Za više informacija posetite https://www.rtpbleed.com/
rtpbleed.py
iz sippts: Detektuje ranjivost RTP Bleed slanjem RTP tokova.
rtcpbleed.py
iz sippts: Otkriva ranjivost RTP Bleed slanjem RTP tokova.
rtpbleedflood.py
iz sippts: Iskoristite ranjivost RTP Bleed slanjem RTP tokova
rtpbleedinject.py
iz sippts: Iskoristite ranjivost RTP Bleed slanjem RTP tokova (iz audio fajla)
RCE
U Asterisku nekako uspevate da dodate pravila proširenja i ponovo ih učitate (na primer, kompromitovanjem ranjivog web menadžerskog servera), moguće je dobiti RCE korišćenjem System
komande.
Postoji komanda nazvana Shell
koja se može koristiti umesto System
za izvršavanje sistemskih komandi ako je potrebno.
Ako server onemogućava korišćenje određenih karaktera u System
komandi (kao što je slučaj sa Elastix-om), proverite da li veb server omogućava kreiranje fajlova unutar sistema (kao što je slučaj sa Elastix-om ili trixbox-om) i koristite to da biste kreirali skriptu za zadnja vrata i zatim koristite System
da biste izvršili tu skriptu.
Interesantni lokalni fajlovi i dozvole
sip.conf
-> Sadrži lozinke SIP korisnika.Ako Asterisk server radi kao root, možete kompromitovati root.
mysql root korisnik možda nema lozinku.
Ovo se može iskoristiti za kreiranje novog mysql korisnika kao zadnja vrata.
FreePBX
amportal.conf
-> Sadrži lozinku administratora veb 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 zadnja vrata.
Elastix
Elastix.conf
-> Sadrži nekoliko lozinki u čistom tekstu, kao što su mysql root lozinka, IMAPd lozinka, web admin lozinka.Nekoliko foldera će pripadati kompromitovanom asterisk korisniku (ako ne radi kao root). Ovaj korisnik može čitati prethodne fajlove i takođe kontroliše konfiguraciju, pa može naterati Asterisk da učita druge zadnje vrata binarne datoteke prilikom izvršavanja.
RTP Injekcija
Moguće je ubaciti .wav
fajl u konverzacije 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/ da skenirate konverzacije (rtpscan.pl
), pošaljete .wav
fajl u konverzaciju (rtpsend.pl
) i ubacite buku u konverzaciju (rtpflood.pl
).
DoS
Postoji nekoliko načina za pokušaj DoS-a na VoIP serverima.
sipflood.py
iz sippts: _SipFlood_ šalje neograničene poruke ciljupython3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
IAXFlooder: DoS IAX protokola koji koristi Asterisk
inviteflood: Alat za izvođenje SIP/SDP INVITE poruka preplavljivanjem preko UDP/IP.
rtpflood: Slanje nekoliko ispravnih RTP paketa. Potrebno je znati koje RTP portove koristi (prvo snifirajte).
SIPp: Omogućava analizu i generisanje SIP saobraćaja, pa se može koristiti i za DoS.
SIPsak: SIP švajcarski nožić. Može se koristiti i za izvođenje SIP napada.
Fuzzeri: protos-sip, voiper.
sipsend.py
iz sippts: SIPSend nam omogućava slanje prilagođene SIP poruke i analizu odgovora.wssend.py
iz sippts: WsSend nam omogućava slanje prilagođene SIP poruke preko WebSockets-a i analizu odgovora.
OS Ranjivosti
Najlakši način za instaliranje softvera kao što je Asterisk je preuzimanje OS distribucije u kojoj je već instaliran, kao što su: FreePBX, Elastix, Trixbox... Problem sa njima je što kada jednom počnu da rade, sistem administratori ih možda neće ažurirati ponovo i sa vremenom će biti otkrivene ranjivosti.
Reference
Last updated