WebSocket Attacks
Czym są WebSockety
Połączenia WebSocket są nawiązywane poprzez początkowy uścisk dłoni HTTP i są zaprojektowane tak, aby były długotrwałe, umożliwiając dwukierunkową komunikację w dowolnym momencie bez konieczności posiadania systemu transakcyjnego. Dzięki temu WebSockety są szczególnie korzystne dla aplikacji wymagających niskiego opóźnienia lub komunikacji inicjowanej przez serwer, takich jak strumienie danych finansowych na żywo.
Nawiązywanie połączeń WebSocket
Szczegółowe wyjaśnienie nawiązywania połączeń WebSocket można znaleźć tutaj. W skrócie, połączenia WebSocket są zwykle inicjowane za pomocą JavaScriptu po stronie klienta, jak pokazano poniżej:
Protokół wss
oznacza połączenie WebSocket zabezpieczone protokołem TLS, podczas gdy ws
oznacza niezabezpieczone połączenie.
Podczas nawiązywania połączenia, między przeglądarką a serwerem odbywa się proces ustanawiania połączenia, który odbywa się za pomocą protokołu HTTP. Proces ten polega na wysłaniu żądania przez przeglądarkę, a następnie odpowiedzi serwera, jak to przedstawiono w poniższych przykładach:
Przeglądarka wysyła żądanie ustanowienia połączenia:
Odpowiedź serwera na handshake:
Po nawiązaniu połączenia, komunikacja między stronami odbywa się w obie strony.
Kluczowe punkty podczas negocjacji WebSocket:
Nagłówki
Connection
iUpgrade
sygnalizują rozpoczęcie negocjacji WebSocket.Nagłówek
Sec-WebSocket-Version
wskazuje żądaną wersję protokołu WebSocket, zwykle13
.W nagłówku
Sec-WebSocket-Key
wysyłana jest losowa wartość zakodowana w Base64, zapewniająca unikalność każdej negocjacji i pomagająca zapobiegać problemom z proxy cache. Ta wartość nie służy do uwierzytelniania, ale do potwierdzenia, że odpowiedź nie została wygenerowana przez źle skonfigurowany serwer lub cache.Nagłówek
Sec-WebSocket-Accept
w odpowiedzi serwera to suma kontrolnaSec-WebSocket-Key
, potwierdzająca intencję serwera otwarcia połączenia WebSocket.
Te funkcje zapewniają bezpieczny i niezawodny proces negocjacji, umożliwiając efektywną komunikację w czasie rzeczywistym.
Konsola Linux
Możesz użyć websocat
, aby nawiązać surowe połączenie z WebSocketem.
Aby utworzyć serwer websocat:
Ataki typu MitM na połączenia websocket
Jeśli zauważysz, że klienci są podłączeni do websocketu HTTP z twojej obecnej lokalnej sieci, możesz spróbować przeprowadzić Atak ARP Spoofing, aby przeprowadzić atak typu MitM między klientem a serwerem. Gdy klient próbuje się połączyć, możesz użyć:
Wyliczanie Websockets
Możesz użyć narzędzia https://github.com/PalindromeLabs/STEWS do automatycznego odkrywania, identyfikowania i wyszukiwania znanych podatności w websockets.
Narzędzia do debugowania Websocket
Burp Suite obsługuje komunikację websockets w sposób bardzo podobny do komunikacji HTTP.
Rozszerzenie socketsleuth dla Burp Suite pozwoli Ci lepiej zarządzać komunikacją Websocket w Burp, pobierać historię, ustawiać reguły przechwytywania, używać reguł dopasowania i zamiany, korzystać z Intrudera i AutoRepeater.
WSSiP: Skrót od "WebSocket/Socket.io Proxy", narzędzie napisane w Node.js, które zapewnia interfejs użytkownika do przechwytywania, przechwytywania, wysyłania niestandardowych wiadomości i przeglądania wszystkich komunikacji WebSocket i Socket.IO między klientem a serwerem.
wsrepl to interaktywne REPL websocket zaprojektowane specjalnie do testów penetracyjnych. Zapewnia interfejs do obserwowania przychodzących wiadomości websocket i wysyłania nowych, z łatwym w użyciu frameworkiem do automatyzacji tej komunikacji.
https://websocketking.com/ to strona internetowa do komunikacji z innymi stronami internetowymi za pomocą websockets.
https://hoppscotch.io/realtime/websocket oprócz innych typów komunikacji/protokołów, zapewnia stronę internetową do komunikacji z innymi stronami internetowymi za pomocą websockets.
Laboratorium Websocket
W Burp-Suite-Extender-Montoya-Course znajdziesz kod do uruchomienia strony internetowej za pomocą websockets, a w tym poście znajdziesz wyjaśnienie.
Przechwytywanie WebSocket Cross-site (CSWSH)
Przechwytywanie WebSocket Cross-site, znane również jako przechwytywanie WebSocket Cross-origin, jest określane jako szczególny przypadek Cross-Site Request Forgery (CSRF) dotyczący negocjacji WebSocket. Podatność ta występuje, gdy negocjacje WebSocket uwierzytelniają się wyłącznie za pomocą ciasteczek HTTP, bez tokenów CSRF lub podobnych środków bezpieczeństwa.
Atakujący mogą wykorzystać to, hostując złośliwą stronę internetową, która inicjuje połączenie WebSocket między witryną a podatną aplikacją. W rezultacie to połączenie jest traktowane jako część sesji ofiary z aplikacją, wykorzystując brak ochrony CSRF w mechanizmie obsługi sesji.
Prosty atak
Należy zauważyć, że podczas ustanawiania połączenia websocketowego, ciasteczko jest wysyłane do serwera. Serwer może go używać do powiązania każdego konkretnego użytkownika z jego sesją websocketową na podstawie wysłanego ciasteczka.
Następnie, jeśli na przykład serwer websocketowy wysyła historię rozmowy użytkownika, jeśli zostanie wysłana wiadomość z "READY", to proste XSS ustanawiające połączenie (ciasteczko zostanie automatycznie wysłane, aby autoryzować użytkownika ofiarę) wysyłając "READY" będzie w stanie odzyskać historię rozmowy.
Cross Origin + Cookie z inną subdomeną
W tym wpisie na blogu https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ atakujący zdołał wykonać dowolny kod JavaScript w subdomenie domeny, w której odbywała się komunikacja za pomocą gniazd sieciowych. Ponieważ była to subdomena, cookie było wysyłane, a ponieważ Websocket nie sprawdzał poprawnie pochodzenia, było możliwe komunikowanie się z nim i kradzież tokenów.
Kradzież danych od użytkownika
Skopiuj aplikację internetową, którą chcesz podszyć (np. pliki .html) i wewnątrz skryptu, w którym odbywa się komunikacja za pomocą gniazd sieciowych, dodaj ten kod:
Teraz pobierz plik wsHook.js
z https://github.com/skepticfx/wshook i zapisz go wewnątrz folderu z plikami internetowymi.
Ujawniając aplikację internetową i zmuszając użytkownika do połączenia się z nią, będziesz w stanie kraść wysłane i otrzymane wiadomości za pomocą protokołu websocket:
Wyścig warunków
Wyścigi warunków w WebSockets również są możliwe, sprawdź te informacje, aby dowiedzieć się więcej.
Inne podatności
Ponieważ WebSockets są mechanizmem do wysyłania danych po stronie serwera i klienta, w zależności od tego, jak serwer i klient obsługują informacje, WebSockets mogą być wykorzystane do eksploatacji innych podatności, takich jak XSS, SQLi lub inne powszechne podatności internetowe, używając danych wprowadzonych przez użytkownika za pośrednictwem WebSockets.
WebSocket Smuggling
Ta podatność może umożliwić ominięcie ograniczeń odwróconych proxy przez sprawienie, że uwierzą one, że nawiązano komunikację WebSocket (nawet jeśli tak nie jest). To może umożliwić atakującemu dostęp do ukrytych punktów końcowych. Aby uzyskać więcej informacji, sprawdź następującą stronę:
pageUpgrade Header SmugglingOdwołania
Last updated