SIP (Session Initiation Protocol)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
SIP (Session Initiation Protocol) είναι ένα ** πρωτόκολλο σήμανσης και ελέγχου κλήσεων** που χρησιμοποιείται ευρέως για την εγκαθίδρυση, τροποποίηση και τερματισμό πολυμεσικών συνεδριών, συμπεριλαμβανομένων φωνής, βίντεο και άμεσων μηνυμάτων, μέσω δικτύων IP. Αναπτύχθηκε από την Internet Engineering Task Force (IETF), το SIP ορίζεται στο RFC 3261 και έχει γίνει το de facto πρότυπο για VoIP και ενοποιημένες επικοινωνίες.
Ορισμένα βασικά χαρακτηριστικά του SIP περιλαμβάνουν:
Πρωτόκολλο βασισμένο σε κείμενο: Το SIP είναι ένα πρωτόκολλο βασισμένο σε κείμενο, το οποίο το καθιστά αναγνώσιμο από ανθρώπους και πιο εύκολο στην αποσφαλμάτωση. Βασίζεται σε ένα μοντέλο αιτήματος-απάντησης, παρόμοιο με το HTTP, και χρησιμοποιεί μεθόδους όπως INVITE, ACK, BYE και CANCEL για τον έλεγχο των συνεδριών κλήσεων.
Κλιμάκωση και Ευελιξία: Το SIP είναι εξαιρετικά κλιμακούμενο και μπορεί να χρησιμοποιηθεί σε μικρές αναπτύξεις καθώς και σε μεγάλες επιχειρηματικές και carrier-grade περιβάλλοντα. Μπορεί να επεκταθεί εύκολα με νέες δυνατότητες, καθιστώντας το προσαρμόσιμο σε διάφορες περιπτώσεις χρήσης και απαιτήσεις.
Διαλειτουργικότητα: Η ευρεία υιοθέτηση και τυποποίηση του SIP εξασφαλίζουν καλύτερη διαλειτουργικότητα μεταξύ διαφορετικών συσκευών, εφαρμογών και παρόχων υπηρεσιών, προάγοντας την απρόσκοπτη επικοινωνία σε διάφορες πλατφόρμες.
Μοναδικός Σχεδιασμός: Το SIP συνεργάζεται με άλλα πρωτόκολλα όπως το RTP (Real-time Transport Protocol) για τη μετάδοση μέσων και το SDP (Session Description Protocol) για την περιγραφή πολυμεσικών συνεδριών. Αυτός ο μοναδικός σχεδιασμός επιτρέπει μεγαλύτερη ευελιξία και συμβατότητα με διαφορετικούς τύπους μέσων και κωδικοποιητές.
Proxy και Redirect Servers: Το SIP μπορεί να χρησιμοποιεί proxy και redirect servers για να διευκολύνει τη δρομολόγηση κλήσεων και να παρέχει προηγμένες δυνατότητες όπως προώθηση κλήσεων, μεταφορά κλήσεων και υπηρεσίες φωνητικού ταχυδρομείου.
Παρουσία και Άμεσες Μηνύματα: Το SIP δεν περιορίζεται μόνο στην επικοινωνία φωνής και βίντεο. Υποστηρίζει επίσης την παρουσία και τα άμεσα μηνύματα, επιτρέποντας μια ευρεία γκάμα εφαρμογών ενοποιημένης επικοινωνίας.
Παρά τα πολλά πλεονεκτήματά του, το SIP μπορεί να είναι περίπλοκο να ρυθμιστεί και να διαχειριστεί, ιδιαίτερα όταν ασχολείται με ζητήματα NAT traversal και firewall. Ωστόσο, η ευελιξία, η κλιμάκωση και η εκτενή υποστήριξή του σε όλη τη βιομηχανία το καθιστούν δημοφιλή επιλογή για VoIP και πολυμεσική επικοινωνία.
Οι βασικές μέθοδοι SIP που ορίζονται στο RFC 3261 περιλαμβάνουν:
INVITE: Χρησιμοποιείται για να ξεκινήσει μια νέα συνεδρία (κλήση) ή να τροποποιήσει μια υπάρχουσα. Η μέθοδος INVITE μεταφέρει την περιγραφή της συνεδρίας (συνήθως χρησιμοποιώντας SDP) για να ενημερώσει τον παραλήπτη σχετικά με τις λεπτομέρειες της προτεινόμενης συνεδρίας, όπως τύποι μέσων, κωδικοποιητές και πρωτόκολλα μεταφοράς.
ACK: Αποστέλλεται για να επιβεβαιώσει την παραλαβή μιας τελικής απάντησης σε ένα αίτημα INVITE. Η μέθοδος ACK εξασφαλίζει την αξιοπιστία των συναλλαγών INVITE παρέχοντας αναγνώριση από άκρο σε άκρο.
BYE: Χρησιμοποιείται για να τερματίσει μια καθιερωμένη συνεδρία (κλήση). Η μέθοδος BYE αποστέλλεται από οποιοδήποτε μέρος της συνεδρίας για να υποδείξει ότι επιθυμεί να τερματίσει την επικοινωνία.
CANCEL: Αποστέλλεται για να ακυρώσει ένα εκκρεμές αίτημα INVITE πριν καθιερωθεί η συνεδρία. Η μέθοδος CANCEL επιτρέπει στον αποστολέα να ακυρώσει μια συναλλαγή INVITE εάν αλλάξει γνώμη ή εάν δεν υπάρχει απάντηση από τον παραλήπτη.
OPTIONS: Χρησιμοποιείται για να ερωτήσει τις δυνατότητες ενός SIP server ή user agent. Η μέθοδος OPTIONS μπορεί να αποσταλεί για να ζητήσει πληροφορίες σχετικά με υποστηριζόμενες μεθόδους, τύπους μέσων ή άλλες επεκτάσεις χωρίς να καθιερωθεί πραγματικά μια συνεδρία.
REGISTER: Χρησιμοποιείται από έναν user agent για να καταχωρήσει την τρέχουσα τοποθεσία του σε έναν SIP registrar server. Η μέθοδος REGISTER βοηθά στη διατήρηση μιας ενημερωμένης αντιστοίχισης μεταξύ του SIP URI ενός χρήστη και της τρέχουσας διεύθυνσης IP του, διευκολύνοντας τη δρομολόγηση και την παράδοση κλήσεων.
Σημειώστε ότι για να καλέσετε κάποιον δεν είναι απαραίτητο να χρησιμοποιήσετε το REGISTER για οτιδήποτε.
Ωστόσο, είναι πιθανό ότι προκειμένου να πραγματοποιηθεί μια INVITE ο καλών χρειάζεται να αυθεντικοποιηθεί πρώτα ή θα λάβει μια 401 Unauthorized
απάντηση.
Εκτός από αυτές τις βασικές μεθόδους, υπάρχουν πολλές επεκτάσεις μεθόδων SIP που ορίζονται σε άλλα RFC, όπως:
SUBSCRIBE: Ορισμένο στο RFC 6665, η μέθοδος SUBSCRIBE χρησιμοποιείται για να ζητήσει ειδοποιήσεις σχετικά με την κατάσταση ενός συγκεκριμένου πόρου, όπως η παρουσία ή η κατάσταση κλήσης ενός χρήστη.
NOTIFY: Επίσης ορισμένο στο RFC 6665, η μέθοδος NOTIFY αποστέλλεται από έναν server για να ενημερώσει έναν εγγεγραμμένο user agent σχετικά με αλλαγές στην κατάσταση ενός παρακολουθούμενου πόρου.
REFER: Ορισμένο στο RFC 3515, η μέθοδος REFER χρησιμοποιείται για να ζητήσει από τον παραλήπτη να πραγματοποιήσει μια μεταφορά ή να παραπέμψει σε τρίτο μέρος. Αυτό χρησιμοποιείται συνήθως για σενάρια μεταφοράς κλήσεων.
MESSAGE: Ορισμένο στο RFC 3428, η μέθοδος MESSAGE χρησιμοποιείται για να στείλει άμεσα μηνύματα μεταξύ των user agents SIP, επιτρέποντας την κειμενική επικοινωνία εντός του πλαισίου SIP.
UPDATE: Ορισμένο στο RFC 3311, η μέθοδος UPDATE επιτρέπει την τροποποίηση μιας συνεδρίας χωρίς να επηρεάζεται η κατάσταση του υπάρχοντος διαλόγου. Αυτό είναι χρήσιμο για την ενημέρωση παραμέτρων συνεδρίας, όπως κωδικοποιητές ή τύποι μέσων, κατά τη διάρκεια μιας σε εξέλιξη κλήσης.
PUBLISH: Ορισμένο στο RFC 3903, η μέθοδος PUBLISH χρησιμοποιείται από έναν user agent για να δημοσιεύσει πληροφορίες κατάστασης γεγονότων σε έναν server, καθιστώντας τις διαθέσιμες σε άλλα ενδιαφερόμενα μέρη.
1xx (Προσωρινές Απαντήσεις): Αυτές οι απαντήσεις υποδεικνύουν ότι το αίτημα ελήφθη και ο server συνεχίζει να το επεξεργάζεται.
100 Trying: Το αίτημα ελήφθη και ο server εργάζεται πάνω σε αυτό.
180 Ringing: Ο καλούμενος ειδοποιείται και θα απαντήσει στην κλήση.
183 Session Progress: Παρέχει πληροφορίες σχετικά με την πρόοδο της κλήσης.
2xx (Επιτυχείς Απαντήσεις): Αυτές οι απαντήσεις υποδεικνύουν ότι το αίτημα ελήφθη με επιτυχία, κατανοήθηκε και έγινε αποδεκτό.
200 OK: Το αίτημα ήταν επιτυχές και ο server το έχει εκπληρώσει.
202 Accepted: Το αίτημα έγινε αποδεκτό για επεξεργασία, αλλά δεν έχει ολοκληρωθεί ακόμη.
3xx (Απαντήσεις Ανακατεύθυνσης): Αυτές οι απαντήσεις υποδεικνύουν ότι απαιτείται περαιτέρω ενέργεια για την εκπλήρωση του αιτήματος, συνήθως επικοινωνώντας με έναν εναλλακτικό πόρο.
300 Multiple Choices: Υπάρχουν πολλές διαθέσιμες επιλογές και ο χρήστης ή ο πελάτης πρέπει να επιλέξει μία.
301 Moved Permanently: Ο ζητούμενος πόρος έχει ανατεθεί σε μια νέα μόνιμη URI.
302 Moved Temporarily: Ο ζητούμενος πόρος είναι προσωρινά διαθέσιμος σε διαφορετική URI.
305 Use Proxy: Το αίτημα πρέπει να σταλεί σε έναν καθορισμένο proxy.
4xx (Απαντήσεις Σφάλματος Πελάτη): Αυτές οι απαντήσεις υποδεικνύουν ότι το αίτημα περιέχει κακή σύνταξη ή δεν μπορεί να εκπληρωθεί από τον server.
400 Bad Request: Το αίτημα ήταν κακώς διαμορφωμένο ή μη έγκυρο.
401 Unauthorized: Το αίτημα απαιτεί αυθεντικοποίηση χρήστη.
403 Forbidden: Ο server κατάλαβε το αίτημα αλλά αρνείται να το εκπληρώσει.
404 Not Found: Ο ζητούμενος πόρος δεν βρέθηκε στον server.
408 Request Timeout: Ο server δεν έλαβε ένα πλήρες αίτημα εντός του χρόνου που ήταν προετοιμασμένος να περιμένει.
486 Busy Here: Ο καλούμενος είναι αυτή τη στιγμή απασχολημένος και δεν μπορεί να απαντήσει στην κλήση.
5xx (Απαντήσεις Σφάλματος Server): Αυτές οι απαντήσεις υποδεικνύουν ότι ο server απέτυχε να εκπληρώσει ένα έγκυρο αίτημα.
500 Internal Server Error: Ο server συνάντησε ένα σφάλμα κατά την επεξεργασία του αιτήματος.
501 Not Implemented: Ο server δεν υποστηρίζει τη λειτουργικότητα που απαιτείται για την εκπλήρωση του αιτήματος.
503 Service Unavailable: Ο server είναι αυτή τη στιγμή ανίκανος να χειριστεί το αίτημα λόγω συντήρησης ή υπερφόρτωσης.
6xx (Παγκόσμιες Απαντήσεις Αποτυχίας): Αυτές οι απαντήσεις υποδεικνύουν ότι το αίτημα δεν μπορεί να εκπληρωθεί από κανέναν server.
600 Busy Everywhere: Όλοι οι πιθανοί προορισμοί για την κλήση είναι απασχολημένοι.
603 Decline: Ο καλούμενος δεν επιθυμεί να συμμετάσχει στην κλήση.
604 Does Not Exist Anywhere: Ο ζητούμενος πόρος δεν είναι διαθέσιμος πουθενά στο δίκτυο.
Η μέθοδος REGISTER χρησιμοποιείται στο Πρωτόκολλο Έναρξης Συνεδρίας (SIP) για να επιτρέψει σε έναν χρήστη (UA), όπως ένα τηλέφωνο VoIP ή ένα softphone, να καταχωρήσει την τοποθεσία του σε έναν διακομιστή καταχώρησης SIP. Αυτή η διαδικασία ενημερώνει τον διακομιστή πού να δρομολογήσει τις εισερχόμενες SIP αιτήσεις που προορίζονται για τον καταχωρημένο χρήστη. Ο διακομιστής καταχώρησης είναι συνήθως μέρος ενός διακομιστή μεσολάβησης SIP ή ενός αφιερωμένου διακομιστή καταχώρησης.
Ακολουθεί ένα λεπτομερές παράδειγμα των μηνυμάτων SIP που εμπλέκονται σε μια διαδικασία αυθεντικοποίησης REGISTER:
Αρχικό REGISTER αίτημα από τον UA προς τον διακομιστή καταχώρησης:
Αυτό το αρχικό μήνυμα REGISTER αποστέλλεται από τον UA (Άλις) στον διακομιστή καταχώρισης. Περιλαμβάνει σημαντικές πληροφορίες όπως τη διάρκεια καταχώρισης που επιθυμεί (Expires), το SIP URI του χρήστη (sip:alice@example.com), και τη διεύθυνση επαφής του χρήστη (sip:alice@192.168.1.100:5060).
401 Unauthorized απάντηση από τον διακομιστή καταχώρισης:
Ο διακομιστής μητρώου απαντά με ένα μήνυμα "401 Unauthorized", το οποίο περιλαμβάνει μια κεφαλίδα "WWW-Authenticate". Αυτή η κεφαλίδα περιέχει πληροφορίες που απαιτούνται για να πιστοποιήσει τον εαυτό του το UA, όπως το authentication realm, nonce, και αλγόριθμο.
Αίτημα REGISTER με διαπιστευτήρια πιστοποίησης:
Ο UA στέλνει ένα άλλο αίτημα REGISTER, αυτή τη φορά περιλαμβάνοντας την κεφαλίδα "Authorization" με τα απαραίτητα διαπιστευτήρια, όπως το όνομα χρήστη, το realm, το nonce και μια τιμή απόκρισης που υπολογίζεται χρησιμοποιώντας τις παρεχόμενες πληροφορίες και τον κωδικό πρόσβασης του χρήστη.
Έτσι υπολογίζεται η απόκριση Authorization:
Επιτυχής εγγραφή απάντηση από τον διακομιστή μητρώου:
Μετά την επαλήθευση των παρεχόμενων διαπιστευτηρίων από τον διακομιστή μητρώου, στέλνει μια απάντηση "200 OK" για να υποδείξει ότι η εγγραφή ήταν επιτυχής. Η απάντηση περιλαμβάνει τις καταχωρημένες πληροφορίες επαφής και τον χρόνο λήξης για την εγγραφή. Σε αυτό το σημείο, ο χρήστης (Άλις) είναι επιτυχώς εγγεγραμμένος με τον διακομιστή SIP και οι εισερχόμενες SIP αιτήσεις για την Άλις μπορούν να δρομολογηθούν στη σωστή διεύθυνση επαφής.
Δεν αναφέρεται, αλλά ο Χρήστης Β πρέπει να έχει στείλει ένα REGISTER μήνυμα στο Proxy 2 πριν μπορέσει να λάβει κλήσεις.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)