WebSocket Attacks
Що таке WebSockets
Підключення WebSocket встановлюються через початковий HTTP рукостискання і призначені для довгострокового використання, що дозволяє бідирекціональну передачу повідомлень у будь-який момент без необхідності у транзакційній системі. Це робить WebSockets особливо вигідними для застосунків, які вимагають низької затримки або серверно-ініційованої комунікації, таких як потоки живих фінансових даних.
Встановлення підключень WebSocket
Детальне пояснення щодо встановлення підключень WebSocket можна знайти тут. У кратці, підключення WebSocket зазвичай ініціюються через JavaScript на стороні клієнта, як показано нижче:
Протокол wss
позначає безпечне з'єднання WebSocket з TLS, тоді як ws
вказує на незахищене з'єднання.
Під час встановлення з'єднання відбувається рукостискання між браузером та сервером через HTTP. Процес рукостискання включає відправлення запиту браузером та відповідь сервера, як показано в наступних прикладах:
Браузер відправляє запит на рукостискання:
Відповідь рукостискання сервера:
Підключення залишається відкритим для обміну повідомленнями у обох напрямках після встановлення.
Основні моменти рукостискання WebSocket:
Заголовки
Connection
таUpgrade
сигналізують про початок рукостискання WebSocket.Заголовок
Sec-WebSocket-Version
вказує на бажану версію протоколу WebSocket, зазвичай13
.В заголовку
Sec-WebSocket-Key
надсилається випадкове значення, закодоване Base64, що гарантує унікальність кожного рукостискання, що допомагає уникнути проблем з кешуючими проксі. Це значення не призначене для аутентифікації, а лише для підтвердження того, що відповідь не генерується неправильно налаштованим сервером або кешем.Заголовок
Sec-WebSocket-Accept
у відповіді сервера є хешемSec-WebSocket-Key
, що підтверджує намір сервера відкрити з'єднання WebSocket.
Ці функції забезпечують безпечний та надійний процес рукостискання, відкриваючи шлях для ефективного спілкування в реальному часі.
Консоль Linux
Ви можете використовувати websocat
, щоб встановити пряме з'єднання з WebSocket.
Або створити сервер websocat:
Атаки на проміжний час websocket
Якщо ви виявите, що клієнти підключені до HTTP websocket з вашої поточної локальної мережі, ви можете спробувати ARP Spoofing Attack, щоб виконати атаку на проміжний час між клієнтом та сервером. Після того, як клієнт намагається підключитися до вас, ви можете скористатися:
Перелік вебсокетів
Ви можете використовувати інструмент https://github.com/PalindromeLabs/STEWS для виявлення, відбитків та пошуку відомих вразливостей вебсокетів автоматично.
Інструменти налагодження вебсокетів
Burp Suite підтримує MitM комунікацію вебсокетів дуже схожим чином, як він це робить для звичайної комунікації HTTP.
Розширення socketsleuth для Burp Suite дозволить вам краще керувати комунікацією вебсокетів в Burp, отримуючи історію, встановлюючи правила перехоплення, використовуючи правила відповідності та заміни, використовуючи Intruder та AutoRepeater.
WSSiP (скорочено від "WebSocket/Socket.io Proxy") - цей інструмент, написаний на Node.js, надає користувацький інтерфейс для захоплення, перехоплення, відправки користувацьких повідомлень та перегляду всіх комунікацій WebSocket та Socket.IO між клієнтом та сервером.
wsrepl - це інтерактивний websocket REPL, призначений спеціально для тестування на проникнення. Він надає інтерфейс для спостереження за вхідними повідомленнями вебсокетів та відправки нових, з простою у використанні структурою для автоматизації цієї комунікації.
https://websocketking.com/ - це веб для комунікації з іншими веб-сайтами за допомогою вебсокетів.
https://hoppscotch.io/realtime/websocket серед інших типів комунікацій/протоколів, це надає веб для комунікації з іншими веб-сайтами за допомогою вебсокетів.
Лабораторія вебсокетів
У Burp-Suite-Extender-Montoya-Course є код для запуску веб-сайту за допомогою вебсокетів, а в цій публікації ви можете знайти пояснення.
Перехоплення вебсокетів міжсайтового викрадення (CSWSH)
Перехоплення вебсокетів міжсайтового викрадення, також відоме як перехоплення вебсокетів між джерелами, ідентифікується як конкретний випадок Підроблення запитів міжсайтового типу (CSRF), що впливає на рукостискання вебсокетів. Ця вразливість виникає, коли рукостискання вебсокетів аутентифікуються виключно через HTTP cookies без токенів CSRF або подібних заходів безпеки.
Зловмисники можуть використовувати це, розмістивши шкідливу веб-сторінку, яка ініціює зв'язок вебсокетів між джерелами з вразливою програмою. В результаті цей зв'язок розглядається як частина сеансу жертви з програмою, використовуючи відсутність захисту CSRF в механізмі обробки сеансу.
Проста атака
Зверніть увагу, що при встановленні з'єднання вебсокету cookie надсилається на сервер. Сервер може використовувати його для пов'язання кожного конкретного користувача з його сеансом вебсокету на основі надісланого cookie.
Отже, якщо, наприклад, сервер вебсокетів надсилає історію розмови користувача, якщо надіслано повідомлення з "READY", то простий XSS, який встановлює з'єднання (cookie буде надіслано автоматично для авторизації користувача-жертви) надсилаючи "READY", зможе отримати історію розмови.
Крос-походження + Куки з іншим піддоменом
У цьому блозі https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ зловмисник зміг виконати довільний JavaScript в піддомені домену, де відбувалася комунікація через веб-сокет. Оскільки це був піддомен, куки надсилалися, і через те, що Websocket не перевіряв Походження належним чином, було можливо з ним спілкуватися та викрасти токени з нього.
Викрадення даних від користувача
Скопіюйте веб-застосунок, який ви хочете підробити (наприклад, файли .html) та в середині скрипту, де відбувається комунікація через веб-сокет, додайте цей код:
Зараз завантажте файл wsHook.js
з https://github.com/skepticfx/wshook та збережіть його всередині папки з веб-файлами.
Викриваючи веб-додаток та змушуючи користувача підключатися до нього, ви зможете вкрасти надіслані та отримані повідомлення через веб-сокет:
Гонки умов
Гонки умов у WebSockets також є реальністю, перевірте цю інформацію, щоб дізнатися більше.
Інші вразливості
Оскільки WebSockets є механізмом для надсилання даних на серверну та клієнтську сторону, залежно від того, як сервер та клієнт обробляють інформацію, WebSockets можуть бути використані для експлуатації кількох інших вразливостей, таких як XSS, SQLi або будь-яка інша загальна вразливість веб-додатків за допомогою введення користувача через WebSocket.
WebSocket Smuggling
Ця вразливість може дозволити вам обійти обмеження обертових проксі-серверів, змушуючи їх вважати, що встановлено зв'язок WebSocket (навіть якщо це не так). Це може дозволити зловмиснику отримати доступ до прихованих кінцевих точок. Для отримання додаткової інформації перегляньте наступну сторінку:
pageUpgrade Header SmugglingПосилання
Last updated