WebSocket Attacks
Τι είναι τα WebSockets
Οι συνδέσεις WebSocket δημιουργούνται μέσω μιας αρχικής HTTP χειραψίας και είναι σχεδιασμένες να είναι μακροχρόνιες, επιτρέποντας τη διπλής κατεύθυνσης επικοινωνία οποιαδήποτε στιγμή χωρίς την ανάγκη ενός συναλλακτικού συστήματος. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν χαμηλή καθυστέρηση ή επικοινωνία που ξεκινά από τον διακομιστή, όπως οι ζωντανές ροές χρηματοοικονομικών δεδομένων.
Δημιουργία Συνδέσεων WebSocket
Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να προσπελαστεί εδώ. Σε σύνοψη, οι συνδέσεις WebSocket συνήθως ξεκινούν μέσω JavaScript πλευράς πελάτη όπως φαίνεται παρακάτω:
Ο πρωτόκολλος wss
σηματοδοτεί μια σύνδεση WebSocket που είναι ασφαλής με TLS, ενώ το ws
υποδηλώνει μια μη ασφαλή σύνδεση.
Κατά την εγκαθίδρυση της σύνδεσης, πραγματοποιείται μια διαδικασία χειραψίας μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω HTTP. Η διαδικασία χειραψίας περιλαμβάνει το πρόγραμμα περιήγησης να στέλνει ένα αίτημα και τον διακομιστή να απαντά, όπως απεικονίζεται στα παρακάτω παραδείγματα:
Ο προγράμματος περιήγησης στέλνει ένα αίτημα χειραψίας:
Απάντηση χειραψίας του διακομιστή:
Η σύνδεση παραμένει ανοιχτή για ανταλλαγή μηνυμάτων και στις δύο κατευθύνσεις μόλις καθοριστεί.
Βασικά Σημεία του WebSocket Handshake:
Οι κεφαλίδες
Connection
καιUpgrade
σηματοδοτούν την έναρξη ενός WebSocket handshake.Η κεφαλίδα
Sec-WebSocket-Version
υποδεικνύει την επιθυμητή έκδοση πρωτοκόλλου WebSocket, συνήθως13
.Ένα τυχαίο Base64-κωδικοποιημένο τιμή αποστέλλεται στην κεφαλίδα
Sec-WebSocket-Key
, διασφαλίζοντας ότι κάθε handshake είναι μοναδικό, το οποίο βοηθά στην αποφυγή προβλημάτων με caching proxies. Αυτή η τιμή δεν προορίζεται για αυθεντικοποίηση αλλά για επιβεβαίωση ότι η απάντηση δεν έχει παραχθεί από έναν κακώς ρυθμισμένο διακομιστή ή cache.Η κεφαλίδα
Sec-WebSocket-Accept
στην απάντηση του διακομιστή είναι ένα hash τηςSec-WebSocket-Key
, επαληθεύοντας την πρόθεση του διακομιστή να ανοίξει μια σύνδεση WebSocket.
Αυτές οι δυνατότητες διασφαλίζουν ότι η διαδικασία handshake είναι ασφαλής και αξιόπιστη, ανοίγοντας το δρόμο για αποδοτική επικοινωνία σε πραγματικό χρόνο.
Linux console
Μπορείτε να χρησιμοποιήσετε το websocat
για να καθορίσετε μια ακατέργαστη σύνδεση με ένα websocket.
Ή για να δημιουργήσετε έναν διακομιστή websocat:
MitM websocket connections
Αν διαπιστώσετε ότι οι πελάτες είναι συνδεδεμένοι σε ένα HTTP websocket από το τρέχον τοπικό σας δίκτυο, μπορείτε να δοκιμάσετε μια ARP Spoofing Attack για να εκτελέσετε μια επίθεση MitM μεταξύ του πελάτη και του διακομιστή. Μόλις ο πελάτης προσπαθήσει να συνδεθεί, μπορείτε στη συνέχεια να χρησιμοποιήσετε:
Websockets enumeration
Μπορείτε να χρησιμοποιήσετε το tool https://github.com/PalindromeLabs/STEWS για να ανακαλύψετε, να αναγνωρίσετε και να αναζητήσετε γνωστές ευπάθειες σε websockets αυτόματα.
Websocket Debug tools
Burp Suite υποστηρίζει την επικοινωνία MitM websockets με πολύ παρόμοιο τρόπο όπως το κάνει για την κανονική HTTP επικοινωνία.
Η socketsleuth επέκταση του Burp Suite θα σας επιτρέψει να διαχειριστείτε καλύτερα τις επικοινωνίες Websocket στο Burp αποκτώντας το ιστορικό, ρυθμίζοντας κανόνες παρεμβολής, χρησιμοποιώντας κανόνες αντιστοίχισης και αντικατάστασης, χρησιμοποιώντας Intruder και AutoRepeater.
WSSiP: Συντομογραφία για "WebSocket/Socket.io Proxy", αυτό το εργαλείο, γραμμένο σε Node.js, παρέχει μια διεπαφή χρήστη για καταγραφή, παρεμβολή, αποστολή προσαρμοσμένων μηνυμάτων και προβολή όλων των επικοινωνιών WebSocket και Socket.IO μεταξύ του πελάτη και του διακομιστή.
wsrepl είναι ένα διαδραστικό websocket REPL σχεδιασμένο ειδικά για penetration testing. Παρέχει μια διεπαφή για την παρακολούθηση εισερχόμενων μηνυμάτων websocket και αποστολής νέων, με ένα εύχρηστο πλαίσιο για αυτοματοποίηση αυτής της επικοινωνίας.
https://websocketking.com/ είναι μια ιστοσελίδα για επικοινωνία με άλλες ιστοσελίδες χρησιμοποιώντας websockets.
https://hoppscotch.io/realtime/websocket μεταξύ άλλων τύπων επικοινωνιών/πρωτοκόλλων, παρέχει μια ιστοσελίδα για επικοινωνία με άλλες ιστοσελίδες χρησιμοποιώντας websockets.
Websocket Lab
Στο Burp-Suite-Extender-Montoya-Course έχετε έναν κώδικα για να εκκινήσετε μια ιστοσελίδα χρησιμοποιώντας websockets και σε αυτή την ανάρτηση μπορείτε να βρείτε μια εξήγηση.
Cross-site WebSocket hijacking (CSWSH)
Cross-site WebSocket hijacking, γνωστό και ως cross-origin WebSocket hijacking, αναγνωρίζεται ως μια συγκεκριμένη περίπτωση Cross-Site Request Forgery (CSRF) που επηρεάζει τις χειραψίες WebSocket. Αυτή η ευπάθεια προκύπτει όταν οι χειραψίες WebSocket αυθεντικοποιούνται αποκλειστικά μέσω HTTP cookies χωρίς CSRF tokens ή παρόμοια μέτρα ασφαλείας.
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό φιλοξενώντας μια κακόβουλη ιστοσελίδα που ξεκινά μια διασυνοριακή σύνδεση WebSocket σε μια ευάλωτη εφαρμογή. Ως εκ τούτου, αυτή η σύνδεση θεωρείται μέρος της συνεδρίας του θύματος με την εφαρμογή, εκμεταλλευόμενη την έλλειψη προστασίας CSRF στον μηχανισμό διαχείρισης συνεδριών.
Simple Attack
Σημειώστε ότι όταν ιδρύεται μια websocket σύνδεση, το cookie αποστέλλεται στον διακομιστή. Ο διακομιστής μπορεί να το χρησιμοποιεί για να σχετίσει κάθε συγκεκριμένο χρήστη με τη συνεδρία websocket του βασισμένο στο αποσταλθέν cookie.
Έτσι, αν για παράδειγμα ο websocket διακομιστής επιστρέψει το ιστορικό της συνομιλίας ενός χρήστη αν αποσταλεί ένα μήνυμα με "READY", τότε μια απλή XSS που ιδρύει τη σύνδεση (το cookie θα αποσταλεί αυτόματα για να εξουσιοδοτήσει τον θύμα χρήστη) στέλνοντας "READY" θα είναι σε θέση να ανακτήσει το ιστορικό της συνομιλίας.
Cross Origin + Cookie with a different subdomain
Σε αυτή την ανάρτηση του blog https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ ο επιτιθέμενος κατάφερε να εκτελέσει αυθαίρετο Javascript σε ένα υποτομέα του τομέα όπου γινόταν η επικοινωνία μέσω web socket. Επειδή ήταν υποτομέας, το cookie αποστέλλονταν, και επειδή το Websocket δεν έλεγξε σωστά την προέλευση, ήταν δυνατό να επικοινωνήσει μαζί του και να κλέψει tokens από αυτό.
Stealing data from user
Αντιγράψτε την web εφαρμογή που θέλετε να μιμηθείτε (τα αρχεία .html για παράδειγμα) και μέσα στο σενάριο όπου γίνεται η επικοινωνία μέσω websocket προσθέστε αυτόν τον κώδικα:
Τώρα κατεβάστε το αρχείο wsHook.js
από https://github.com/skepticfx/wshook και αποθηκεύστε το μέσα στον φάκελο με τα αρχεία ιστού.
Εκθέτοντας την εφαρμογή ιστού και κάνοντάς την να συνδεθεί ένας χρήστης, θα μπορείτε να κλέψετε τα μηνύματα που αποστέλλονται και λαμβάνονται μέσω websocket:
Συνθήκες Αγώνα
Οι Συνθήκες Αγώνα στα WebSockets είναι επίσης ένα θέμα, ελέγξτε αυτές τις πληροφορίες για να μάθετε περισσότερα.
Άλλες ευπάθειες
Καθώς τα Web Sockets είναι ένας μηχανισμός για να στέλνουν δεδομένα στον διακομιστή και στον πελάτη, ανάλογα με το πώς ο διακομιστής και ο πελάτης χειρίζονται τις πληροφορίες, τα Web Sockets μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν πολλές άλλες ευπάθειες όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια ιστού χρησιμοποιώντας είσοδο ενός χρήστη από ένα websocket.
WebSocket Smuggling
Αυτή η ευπάθεια θα μπορούσε να σας επιτρέψει να παρακάμψετε τους περιορισμούς των αντίστροφων διακομιστών μεσολάβησης κάνοντάς τους να πιστεύουν ότι μια επικοινωνία websocket έχει καθιερωθεί (ακόμα και αν δεν είναι αλήθεια). Αυτό θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να πρόσβαση σε κρυφές τελικές σημεία. Για περισσότερες πληροφορίες, ελέγξτε την παρακάτω σελίδα:
Αναφορές
Last updated