Το παρασύνθημα: Ασφαλίστε τον Asterisk από εισβολείς!

Όσο αυξάνονται οι δυνατότητες που προσφέρουν τα τηλεφωνικά κέντρα VoIP και ιδίως αυτές που προσφέρει το Asterisk, τόσο αυξάνουν και οι εγκαταστάσεις Asterisk σε μεγάλες, μεσαίες και μικρές επιχειρήσεις, αλλά ακόμα και σε σπίτια. Όπως με την αύξηση της χρήσης των υπολογιστών από όλο και περισσότερους ανθρώπους εμφανίστηκαν και διαρκώς αυξάνονται οι ιοί και οι επθέσεις στους υπολογιστές, έτσι εμφανίστηκαν και αυξάνονται οι επιθέσεις στα τηλεφωνικά κέντρα VoIP. Οι επιθέσεις αυτές γίνονται όλο και πιο συχνές, σε σημείο που να μαθαίνουμε γι’ αυτές σχεδόν καθημερινά. Το πρόβλημα έχει αρχίσει να γίνεται τόσο σοβαρό, ώστε τόσο η Εθνική Επιτροπή Τηλεπικοινωνιών και Ταχυδρομείων (ΕΕΤΤ), όσο και κάποιοι πάροχοι τηλεφωνίας, εξέδωσαν δελτία τύπου εφιστώντας την προσοχή όσων βασίζουν την επικοινωνία τους ή χρησιμοποιούν συστήματα VoIP. Διαβάστε τη σχετική σύσταση της ΕΕΤΤ. Από όλων των ειδών τις επιθέσεις, αυτές που πραγματικά δημιουργούν ζημιά είναι αυτές που κοστίζουν. Είναι αυτές όπου κάποιος συνδέεται στο τηλεφωνικό κέντρο και πραγματοποιεί κλήσεις χωρίς να το καταλαβαίνουμε. Θα βρείτε πολλές αναφορές αν κάνετε μια αναζήτηση για toll fraud ή phreaking.

Πώς γίνονται οι επιθέσεις στο Asterisk

Στις περισσότερες περιπτώσεις, οι επιθέσεις στο Asterisk γίνονται όταν προωθούνται οι θύρες SIP και RTP (ή και IAX) από τον router στο τηλεφωνικό κέντρο. Με αυτόν τον τρόπο όλη η κίνηση από το Internet προς το γραφείο ή το σπίτι μας που αφορά τηλεφωνία VoIP καταλήγει στον Asterisk κι έτσι μπορούμε να συνδεθούμε σε αυτό από οποιοδήποτε σημείο του κόσμου. Μαζί με εμάς βέβαια μπορούν να συνδεθούν στο τηλεφωνικό μας κέντρο και όλοι οι χρήστες του Internet, αρκεί να ξέρουν ή να ανακαλύψουν τον κωδικό που έχει ένα εσωτερικό μας.

Οι τρόποι που χρησιμοποιούν οι hackers για να πετύχουν τον σκοπό τους είναι πολλοί, αλλά η απαρίθμησή τους ξεφεύγει από τον σκοπό αυτού του άρθρου. Ο πιο συνηθισμένος τρόπος είναι ο ακόλουθος:

  • Ο hacker δοκιμάζει να συνδεθεί στη θύρα UDP/5060. Αν η σύνδεση είναι επιτυχής, σημαίνει ότι βρήκε έναν SIP server
  • Χρησιμοποιώντας ένα χαρακτηριστικό του SIP (και του Asterisk) ζητά πληροφορίες (INFO) για τυχαία εσωτερικά ή π.χ. για όλα τα εσωτερικά από το 1 μεχρι το 1.000.000. Για όλα εσωτερικά που πραγματικά υπάρχουν, ο Asterisk απαντά και έτσι ο hacker μαθαίνει όλα τα εσωτερικά του τηλεφωνικού μας κέντρου
  • Κατόπιν έρχεται το brute force attack. Με τη χρηση ενός προγράμματος ή ενός απλού script δοκιμάζονται passwords για ένα από τα εσωτερικά που βρέθηκαν, μέχρι να γίνει επιτυχές registration
  • Τέλος, το μόνο που μένει είναι να αρχίσουν να γίνονται κλήσεις. Ο ανυποψίαστος διαχειριστής του τηλεφωνικού κέντρου θα δει στα CDRs ότι το εσωτερικό π.χ. 203 έκανε πολλές κλήσεις στη Μοζαμβίκη

Τα συνήθη μέτρα προστασίας και τα προβλήματά τους

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

  • VPN: Ο πιο ασφαλής τρόπος προστασίας. Δεν υπάρχει καμία πρόσβαση από το Internet και μόνο αν κάποιος συνδεθεί στον VPN server και γίνει μέρος του δικτύου της εταιρείας, μόνο τότε μπορεί να συνδεθεί στο τηλεφωνικό κέντρο. Δυστυχώς λίγοι γνωρίζουν πώς να στήσουν σωστά έναν VPN server και ακόμη λιγότεροι πληρώνουν για να αγοράσουν ένα router/firewall που περιλαμβάνει VPN server. Επίσης, σε περίπτωση που θέλουμε να δώσουμε πρόσβαση στο τηλεφωνικό μας κέντρο σε κάποιον συνεργάτη μας, τα πράγματα μπλέκουν λίγο, αφού δεν πρέπει να έχει πρόσβαση και σε ολόκληρο το δίκτυό μας. Τίποτα δεν είναι αδύνατο βέβαια και η χρήση VPN είναι η πλέον ενδεδειγμένη και ασφαλής.
  • Χρήση αλφαριθμητικών εσωτερικών και passwords: Κάνει δύσκολη τη ζωή του επίδοξου hacker, αλλά τίποτα δεν αποκλείει ότι θα σκεφτεί και αυτός όπως εσείς
  • Αλλαγή της θύρας SIP: Κανείς δεν σας εγγυάται ότι ο hacker δεν θα δοκιμάσει και άλλες θύρες. Επίσης, θα πρέπει να κάνετε μεταβολές και σε όλες τις τηλεφωνικές σας συσκευές
  • Περιρισμός των διευθύνσεων IP που μπορούν να συνδεθούν στο τηλεφωνικό κέντρο: Ειναι ασφαλές, αλλά θα πρέπει να γνωρίζετε όλες τις διευθύνσεις IP από τις οποίες θα συνδεθείτε, οι οποίες θα πρέπει να είναι και στατικές
  • fail2ban: Λειτουργεί καλά, αλλά έχει δύο βασικά προβλήματα. Είναι δύσκολο στην εγκατάστασή του και αν κάποιος νόμιμος χρήστης δώσει λάθος κωδικό, κλειδώνεται αυτόματα από το σύστημα και πρέπει να επέμβει ο διαχειριστής του συστήματος

Πες το παρασύνθημα και συνδέσου

Η μέθοδος που παρουσιάζουμε πιο κάτω είναι δοκιμασμένη για μεγάλο χρονικό διάστημα και λειτουργεί άψογα. Η διαφορά της από τις άλλες μεθόδους είναι ότι δεν απομονώνει συγκεκριμένες διευθύνσεις IP, δεν αλλάζει τις προεπιλεγμένες θύρες (SIP, IAX κλπ) και δεν απομονώνει το τηλεφωνικό κέντρο από τον υπόλοιπο κόσμο. Αυτό που κάνει είναι ότι επιτρέπει σε όλους να συνδεθούν μόνο αν γνωρίζουν έναν πρόσθετο κωδικό ασφαλείας (το παρασύνθημα). Αυτη η μέθοδος είναι απλή στην υλοποίησή της και δεν παρουσιάζει τα προβλήματα των μέτρων προστασίας που αναφέρθηκαν πιο πάνω. Το σημαντικότερο είναι ότι δείχνει στον κάθε επίδοξο hacker ότι η θύρα 5060 είναι κλειστή και έτσι το πιο πιθανό είναι ότι δεν θα συνεχίσει να προσπαθεί να συνδεθεί στο κέντρο σας.

Πριν προχωρήσουμε, πρέπει να τονίσουμε τα ακόλουθα: Αυτή η μέθοδος είναι φτιαγμένη για να προστατεύει το τηλεφωνικό σας κέντρο που βασίζεται στο Asterisk από μη εξουσιοδοτημένες συνδέσεις στη θύρα 5060 (SIP). Μπορεί εύκολα να προσαρμοστεί για να προστατεύει και άλλες θύρες, αλλά δεν σας προστατεύει από αυτά που δεν έχετε σκεφτεί να προστατεύσετε. Η επίθεση δεν είναι απαραίτητο ότι έρχεται από έξω, γι’ αυτό βάζετε πάντα σύνθετα passwords στα εσωτερικά σας και πάντα διαφορετικά για καθένα από αυτά. Επίσης, ένας έξυπνος hacker μάλλον δεν θα κάνει κατά μέτωπο επίθεση στον Asterisk server σας. Το πιο πιθανό είναι ότι θα προσπαθήσει να αποκτήσει δικαιώματα root και να εγκαταστήσει κάποιο rootkit, ώστε κυριολεκτικά να κάνει ό,τι θέλει και όταν το θέλει. Φροντίστε λοιπόν να προμηθευτείτε ένα καλό firewall και όταν θέλετε να συνδεθείτε στον τηλεφωνικό σας κέντρο μέσω Internet χρησιμοποιείτε σύνδεση VPN. Θυμηθείτε ότι ένας λογαριασμός 5.000 € είναι ακριβότερος από την προμήθεια ενός καλού firewall και την εγκατάσταση ενός VPN server. Αν αυτά είναι δύσκολά ή αδύνατα ή απλά πρέπει να προωθήσετε κάποιες θύρες στο τηλεφωνικό σας κέντρο, συνεχείστε την ανάγνωση.

Το παρασύνθημα (the countersign method)
Αυτή η μέθοδος προέκυψε όταν προσπαθούσαμε να βρούμε γιατί κάποιο τηλέφωνο (ένα Yealink SIP-T26P) είχε προβλήματα αποσυνδέσεων με το τηλεφωνικό κέντρο στο οποίο συνδεόταν. Χρησιμοποιώντας το Wireshark καταγράφαμε τη «συνομιλία» του τηλεφώνου με το τηλεφωνικό κέντρο και διαπιστώσαμε ότι η τηλεφωνική συσκευή, κάθε φορά που έκανε register, έστελνε στο τηλεφωνικό κέντρο και πληροφορίες οι οποίες δεν ήταν χρήσιμες για το registration (η «συνομιλία» των συσκευών μέσω SIP γίνεται με μη κρυπτογραφημένο κείμενο και έτσι είναι απλό για οποιονδήποτε να την παρακολουθήσει). Στη συγκεκριμένη περίπτωση τη τηλέφωνο έστελνε το Display Name που είχε οριστεί στον λογαριασμό.

Αυτή η παρατήρηση μας οδήγησε στη μέθοδο που παρουσιάζουμε: Θα χρησιμοποιήσουμε το iptables για να κλείσουμε τη θύρα 5060 του τηλεφωνικού κέντρου και θα την ανοίγουμε μόνο αν λάβουμε το «άχρηστο» για το τηλεφωνικό κέντρο Display Name. Θα χρησιμοποιήσουμε δηλαδή μια πρόσθετη πληροφορία που στέλνει το τηλέφωνο για να ενεργοποιήσουμε έναν κανόνα του iptables, ο οποίος θα μας επιτρέπει την πρόσβαση στη θύρα που είναι κλειστή. Με αυτόν τον τρόπο, κάποιος που θα προσπαθήσει να απαριθμήσει τα εσωτερικά του τηλεφωνικού κέντρου δεν θα πάρει ποτέ απάντηση, αφού δεν θα καταφέρει ποτέ να συνδεθεί στον Asterisk. Αυτή η μέθοδος επιτρέπει τη σύνδεση σε ένα βήμα, δηλαδή δεν χρειάζεται πρώτα να σταλεί ο πρόσθετος κωδικός και μετά να γίνει το registration: το iptables ανοίγει τη θύρα εξετάζοντας μονομιάς όλο το string που στέλνει το τηλέφωνο κατά το registration.

Το να χρησιμοποιήσουμε το Display Name σαν παρασύνθημα δεν παρουσιάζει κάποιο πρόβλημα όταν κάνουμε κλήσεις, γιατί ο Asterisk χρησιμοποιεί το όνομα του χρήστη που έχει δηλωθεί στο εσωτερικό και αγνοεί το όνομα που του στέλνει η τηλεφωνική συσκευή. Το μόνο πρόβλημα που φαίνεται να υπάρχει σε αυτή τη μέθοδο είναι ότι Display Name συνήθως παρουσιάζεται και στην οθόνη του τηλεφώνου, οπότε καλό είναι να μην χρησιμοποιήσουμε το (*&^&^$&*). Σίγουρα δεν πρέπει να χρησιμοποιήσουμε τον αριθμό του εσωτερικού ή κάποιο νούμερο, γιατί κάποιος που προσπαθεί να απαριθμήσει τα εσωτερικά μάλλον θα πέσει από τύχη και στον αριθμό που έχουμε δηλώσει. Τα Display Names θα μπορούσαν να είναι το όνομα του χρήστη, το εσωτερικό και κάποιο σύμβολο, όπως για παράδειγμα George (127). Για ακόμα μεγαλύτερη ασφάλεια (σε περίπτωση που κάποιος παρακολουθεί τη σύνδεση από το ξενοδοχείο που βρίσκεστε) χρησιμοποιήστε κάτι που μοιάζει με συνομιλία SIP αλλά δεν είναι, όπως «SIP-User-Name-Additional» ή «SIP-Header-Comments-Extra».

Για την ιστορία, το πρόβλημα του τηλεφώνου ήταν τελικά πρόβλημα καλωδίου…

Υλοποίηση

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

Οι κανόνες του iptables
Συνδεθείτε στην κονσόλα του τηλεφωνικού σας κέντρου και πληκτρολογήστε τις εντολές που ακολουθούν. Πριν ξεκινήσετε την πληκτρολόγηση, διαβάστε τις σημειώσεις που ακολουθούν (η αρίθμηση των εντολών είναι για διευκόλυνσή σας όταν διαβάζετε τις σημειώσεις). Η σειρά με την οποία θα δώσετε τις εντολές είναι σημαντική – μην την αλλάξετε.

  1. iptables -N SIPport
  2. iptables -I SIPport 1 -p udp --dport 5060 -m string --string "George (127)" --algo bm -m recent --set --name AuthenticatedSIPClient
  3. ...
  4. iptables -A INPUT -p udp --dport 5060 --source 192.168.0.0/24 -j ACCEPT
  5. ...
  6. iptables -A INPUT -p udp --dport 5060 -m recent --rcheck --seconds 10000 --name AuthenticatedSIPClient -j ACCEPT
  7. iptables -A INPUT -p udp --dport 5060 -j SIPport
  8. iptables -A INPUT -p udp --dport 5060 -j DROP
  9. service iptables save

Σημειώσεις:

  • Γραμμή 2: Αντικαταστήστε το «George 127″ με το παρασύνθημα (Display Name) που θα χρησιμοποιήσετε
  • Γραμμή 3: Προσθέστε όσες περισσότερες εντολές χρειάζεστε (όπως αυτές στην γραμμή 2) για να καταχωρήσετε όλους του κωδικούς που θα χρησιμοποιήσετε
  • Γραμμή 4:  Αλλάξτε το subnet (192.168.0.0/24 κλπ) για να προσθέσετε τις τοπικές (εσωτερικές) σας διευθύνσεις, ώστε να μην χρειάζεται να αλλάξετε τα Display Names των τηλεφώνων που βρίσκονται εντός του γραφείου και να αφήσετε το iptables να κάνει έλεγχο μόνο για συνδέσεις από το Internet.
  • Γραμμή 5: Προσθέστε τόσες περισσότερες γραμμές (όπως η γραμμή 4) όσα και τα πρόσθετα subnets που επιθυμείτε να προσθέσετε
  • Γραμμές 2-8: Αλλάξτε την θύρα SIP, αν χρησιμοποιείτε κάποια διαφορετική από την προεπιλεγμένη. Αν προσθέσετε και άλλους κανόνες για να ελέγξετε τη σύνδεση π.χ. IAX αλλάξτε την 5060 σε αυτή που χρησιμοποιεί η σύνδεση που θέλετε να προστατέψετε (4569 για το IAX)
  • Γραμμή 6: Το 10000 είναι ο χρόνος σε δευτερόλεπτα κατά τον οποίο μένει ανοικτή η θύρα για το κάθε τηλέφωνο. Συνήθως τα τηλέφωνα έχουν χρόνο για re-register τα 3.600 δευτερόλεπτα, οπότε είναι καλή ιδέα να θέσετε αυτόν το χρόνο σε κάτι μεγαλύτερο από τον χρόνο re-register των τηλεφώνων σας. Με τον συγκεκριμένο κανόνα, την πρώτη φορά που θα συνδεθεί ένα τηλέφωνο θα ανοίξει η θύρα 5060 για 10.000 δευτερόλεπτα. Την επόμενη φορά που θα κάνει register (π.χ. σε 3.600 δευτερόλεπτα) θα ανανεωθεί ο χρόνος των 10.000 δευτερολέπτων κ.ο.κ.
  • Γραμμή 9: Δουλεύουμε σε CentOS :)

Για να δείτε σε ποιές διευθύνσεις IP βρίσκονται τηλέφωνα στα οποία έχει επιτραπεί η σύνδεση, δίνετε την εντολή:
cat /proc/net/ipt_recent/AuthenticatedSIPClient

Η παραμετροποίηση του τηλεφώνου
Στο παράδειγμα που ακολουθεί χρησιμοποιούμε ένα Yealink SIP-T28P. Το εσωτερικό είναι το 155 και για Display Name χρησιμοποιούμε μια διεύθυνση e-mail. Παρόμοια είναι η παραμετροποίηση και άλλων τηλεφωνικών συσκευών και softphones.

Αν θέλετε οποιαδήποτε βοήθεια για να υλοποιήσετε αυτή τη μέθοδο, γράψτε ένα σχόλιο, ή καλέστε μας στο 211-1003040.

Σχετικά άρθρα:

Κατηγορίες: Tips & Tricks & more, Ασφάλεια και VoIP, Τεχνικοί οδηγοί, Το ολοκληρωμένο τηλεφωνικό κέντρο. Ετικέτες: , , , , . Προσθήκη στους σελιδοδείκτες.


4 απαντήσεις στο Το παρασύνθημα: Ασφαλίστε τον Asterisk από εισβολείς!

  1. Ο/Η Panos λέει:

    Θα ήταν πολυ χρήσιμο να περιγράψετε πως παραμετροποιουμε το OPEN VPN που είναι πολυ εύκολο να στηθεί σε οποιοδήποτε συστημα με LINUX. Επίσης πως ρυθμίζονται τα τηλέφωνα Yealink που υποστηριζουν το OPEN VPN. Προσωπικά μπαινω με OPEN VPN απο τον Η/Υ στον OPEN VPN SERVER, αλλα το Τ28 δεν κατάφερα να το κάνω να συνδεθει.Με αυτον τον τρόπο εχουμε VPN και το μόνο που χρειάζεται είναι λιγο πιο τηλεφωνα VOIP. T26, T28.
    Ευχαριστώ.

  2. Ο/Η Λοτσαρης Δημήτρης λέει:

    Η ιδέα σας είναι πολύ έξυπνη. Θα ήθελα να κάνω μερικές ερωτήσεις πριν τη δουλέψω:
    Το firewall του elastix δουλεύει κανονικά. Μήπως επηρεαστεί αν κάνω και εντολές στο cli;
    Με ποιό τρόπο ακυρώνεις τους κανόνες, αν κάτι δεν πάει καλα;
    Όλα τα τηλέφωνα στέλνουν το display name; Τα remote μου θα ειναι iphone android softphones, dect ip phones και fritz box.
    Σας ευχαριστώ

  3. Ο/Η alex λέει:

    Όχι δεν υπάρχει κάποιο πρόβλημα με το να εκτελείτε εντολές στο cli. Για να αφαιρέσετε τους κανόνες εκτελείτε τις παρακάτω εντολές

    iptables -L
    iptables -F
    service iptables save
    service iptables restart

    Θεωρητικά ναι, δεν θα έχετε κάποιο πρόβλημα με τα softphones.

  4. Ο/Η Μανος λέει:

    Καλησπέρα,

    μπορείτε να εξηγήσετε λίγο παραπάνω τους κανόνες των iptables που χρησιμοποιούνται;

Γράψτε απάντηση