WebSocket Attacks
Τι είναι οι WebSockets
Οι συνδέσεις WebSocket δημιουργούνται μέσω μιας αρχικής χειραψίας HTTP και σχεδιάστηκαν να είναι μακροβιότερες, επιτρέποντας την αμφίδρομη ανταλλαγή μηνυμάτων ανά πάσα στιγμή χωρίς την ανάγκη για ένα συστηματικό σύστημα. Αυτό καθιστά τα WebSockets ιδιαίτερα ευνοϊκά για εφαρμογές που απαιτούν χαμηλή καθυστέρηση ή επικοινωνία που προκαλείται από τον διακομιστή, όπως ζωντανά ροές χρηματοοικονομικών δεδομένων.
Δημιουργία Συνδέσεων WebSocket
Μια λεπτομερής εξήγηση για τη δημιουργία συνδέσεων WebSocket μπορεί να βρεθεί εδώ. Συνοψίζοντας, οι συνδέσεις WebSocket συνήθως εκκινούν μέσω JavaScript που εκτελείται στην πλευρά του πελάτη, όπως φαίνεται παρακάτω:
Το πρωτόκολλο wss
υποδηλώνει μια ασφαλή σύνδεση WebSocket με TLS, ενώ το ws
υποδηλώνει μια μη ασφαλή σύνδεση.
Κατά τη διάρκεια της δημιουργίας της σύνδεσης, πραγματοποιείται μια χειραψία μεταξύ του προγράμματος περιήγησης και του διακομιστή μέσω του πρωτοκόλλου HTTP. Η διαδικασία της χειραψίας περιλαμβάνει την αποστολή ενός αιτήματος από τον προγραμματιστή περιήγησης και την απόκριση του διακομιστή, όπως φαίνεται στα παρακάτω παραδείγματα:
Ο προγραμματιστής περιήγησης αποστέλλει ένα αίτημα χειραψίας:
Απόκριση χειραψίας του διακομιστή:
Η σύνδεση παραμένει ανοιχτή για ανταλλαγή μηνυμάτων και στις δύο κατευθύνσεις μόλις καθιερωθεί.
Κύρια σημεία της αρχικής συνεδρίας WebSocket:
Οι κεφαλίδες
Connection
καιUpgrade
σηματοδοτούν την έναρξη μιας αρχικής συνεδρίας WebSocket.Η κεφαλίδα
Sec-WebSocket-Version
υποδεικνύει την επιθυμητή έκδοση πρωτοκόλλου WebSocket, συνήθως13
.Ένας τυχαίος κωδικοποιημένος σε Base64 τιμή αποστέλλεται στην κεφαλίδα
Sec-WebSocket-Key
, εξασφαλίζοντας ότι κάθε αρχική συνεδρία είναι μοναδική, προκειμένου να αποφευχθούν προβλήματα με ενδιάμεσους διακομιστές προσωρινής αποθήκευσης. Αυτή η τιμή δεν χρησιμοποιείται για ταυτοποίηση, αλλά για να επιβεβαιωθεί ότι η απόκριση δεν παράγεται από έναν κακοδιαμορφωμένο διακομιστή ή προσωρινή αποθήκευση.Η κεφαλίδα
Sec-WebSocket-Accept
στην απόκριση του διακομιστή είναι ένα hash τηςSec-WebSocket-Key
, επαληθεύοντας την πρόθεση του διακομιστή να ανοίξει μια σύνδεση WebSocket.
Αυτά τα χαρακτηριστικά εξασφαλίζουν ότι η διαδικασία της αρχικής συνεδρίας είναι ασφαλής και αξιόπιστη, ανοίγοντας τον δρόμο για αποτελεσματική επικοινωνία πραγματικού χρόνου.
Κονσόλα Linux
Μπορείτε να χρησιμοποιήσετε το websocat
για να καθιερώσετε μια ακατέργαστη σύνδεση με ένα WebSocket.
Ή για να δημιουργήσετε έναν διακομιστή websocat:
Επίθεση MitM σε συνδέσεις websocket
Εάν διαπιστώσετε ότι οι πελάτες είναι συνδεδεμένοι σε ένα HTTP websocket από το τρέχον τοπικό δίκτυο, μπορείτε να δοκιμάσετε μια επίθεση ARP Spoofing για να πραγματοποιήσετε μια επίθεση MitM μεταξύ του πελάτη και του διακομιστή. Αφού ο πελάτης προσπαθήσει να συνδεθεί, μπορείτε να χρησιμοποιήσετε:
Απαρίθμηση Websockets
Μπορείτε να χρησιμοποιήσετε το εργαλείο https://github.com/PalindromeLabs/STEWS για να ανακαλύψετε, να εντοπίσετε και να αναζητήσετε γνωστές ευπάθειες σε websockets αυτόματα.
Εργαλεία εντοπισμού σφαλμάτων Websocket
Το 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 που έχει σχεδιαστεί ειδικά για τον έλεγχο διείσδυσης. Παρέχει μια διεπαφή για την παρατήρηση εισερχόμενων μηνυμάτων websocket και την αποστολή νέων, με ένα εύκολο στη χρήση πλαίσιο για την αυτοματοποίηση αυτής της επικοινωνίας.
Το https://websocketking.com/ είναι ένα web για επικοινωνία με άλλα ιστότοπα χρησιμοποιώντας websockets.
Το https://hoppscotch.io/realtime/websocket μεταξύ άλλων τύπων επικοινωνίας/πρωτοκόλλων, παρέχει ένα web για επικοινωνία με άλλα ιστότοπα χρησιμοποιώντας websockets.
Εργαστήριο Websocket
Στο Burp-Suite-Extender-Montoya-Course έχετε έναν κώδικα για να ξεκινήσετε έναν ιστότοπο χρησιμοποιώντας websockets και σε αυτήν την ανάρτηση μπορείτε να βρείτε μια εξήγηση.
Απάτη Cross-site WebSocket (CSWSH)
Η Cross-site WebSocket hijacking, επίσης γνωστή ως cross-origin WebSocket hijacking, αναγνωρίζεται ως ένα ειδικό περιστατικό της Cross-Site Request Forgery (CSRF) που επηρεάζει τις αρχικές συνδέσεις WebSocket. Αυτή η ευπάθεια προκύπτει όταν οι αρχικές συνδέσεις WebSocket επαληθεύονται αποκλειστικά μέσω HTTP cookies χωρίς CSRF tokens ή παρόμοια μέτρα ασφαλείας.
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό δημιουργώντας μια κακόβουλη ιστοσελίδα που ξεκινά μια συνδεση WebSocket από απόσταση σε μια ευπαθή εφαρμογή. Ως εκ τούτου, αυτή η σύνδεση θεωρείται μέρος της συνεδρίας του θύματος με την εφαρμογή, εκμεταλλευόμενη την έλλειψη προστασίας CSRF στον μηχανισμό διαχείρισης της συνεδρίας.
Απλή Επίθεση
Σημειώστε ότι κατά την καθιέρωση μιας σύνδεσης websocket το cookie αποστέλλεται στον διακομιστή. Ο διακομιστής μπορεί να το χρησιμοποιεί για να συσχετίσει κάθε συγκεκριμένο χρήστη με την συνεδρία του websocket βασισμένη στο απεσταλμένο cookie.
Έπειτα, αν για παράδειγμα ο διακομιστής websocket επιστρέφει το ιστορικό της συνομιλίας ενός χρήστη αν σταλεί ένα μήνυμα με το "READY", τότε ένα απλό XSS που θεσπίζει τη σύνδεση (το cookie θα αποσταλεί αυτόματα για να εξουσιοδοτήσει το θύμα) αποστέλλοντας το "READY" θα μπορεί να ανακτήσει το ιστορικό της συνομιλίας.
Cross Origin + Cookie με διαφορετικό subdomain
Σε αυτή την ανάρτηση ιστολογίου https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/, ο επιτιθέμενος κατάφερε να εκτελέσει αυθαίρετο Javascript σε ένα subdomain του τομέα όπου πραγματοποιούνταν η επικοινωνία του web socket. Επειδή ήταν ένα subdomain, το cookie ήταν αποστέλλεται, και επειδή το Websocket δεν ελέγχει σωστά την προέλευση (Origin), ήταν δυνατό να επικοινωνήσει μαζί του και να κλέψει τα αναγνωριστικά (tokens) από αυτό.
Κλοπή δεδομένων από τον χρήστη
Αντιγράψτε την ιστοσελίδα εφαρμογής που θέλετε να παραπλανήσετε (τα αρχεία .html για παράδειγμα) και μέσα στο script όπου πραγματοποιείται η επικοινωνία του web socket, προσθέστε αυτόν τον κώδικα:
Τώρα κατεβάστε το αρχείο wsHook.js
από https://github.com/skepticfx/wshook και αποθηκεύστε το μέσα στον φάκελο με τα αρχεία του ιστότοπου.
Αποκαλύπτοντας την ιστοσελίδα και κάνοντας έναν χρήστη να συνδεθεί σε αυτήν, θα μπορείτε να κλέψετε τα μηνύματα που αποστέλλονται και λαμβάνονται μέσω του websocket:
Συνθήκες Αγώνας (Race Conditions)
Οι Συνθήκες Αγώνας στα WebSockets είναι επίσης ένα θέμα, ελέγξτε αυτές τις πληροφορίες για να μάθετε περισσότερα.
Άλλες ευπάθειες
Καθώς τα Web Sockets είναι ένας μηχανισμός για αποστολή δεδομένων προς τον διακομιστή και την πλευρά του πελάτη, ανάλογα με τον τρόπο που ο διακομιστής και ο πελάτης χειρίζονται τις πληροφορίες, τα Web Sockets μπορούν να χρησιμοποιηθούν για την εκμετάλλευση πολλών άλλων ευπαθειών όπως XSS, SQLi ή οποιαδήποτε άλλη κοινή ευπάθεια του web χρησιμοποιώντας εισαγωγή ενός χρήστη από ένα WebSocket.
WebSocket Smuggling
Αυτή η ευπάθεια μπορεί να σας επιτρέψει να παρακάμψετε τους περιορισμούς αντίστροφων διαμεσολαβητών κάνοντας τους να πιστέψουν ότι έγινε μια επικοινωνία WebSocket (ακόμα κι αν δεν είναι αληθές). Αυτό μπορεί να επιτρέψει σε έναν επιτιθέμενο να έχει πρόσβαση σε κρυφούς σημείους πρόσβασης. Για περισσότερες πληροφορίες, ελέγξτε την ακόλουθη σελίδα:
pageUpgrade Header SmugglingΑναφορές
Last updated