PTP, WebRTC, WebRTC Leaks

WebRTC Leaks и атаки на P2P: как деанонимизировать пользователя через браузер

WebRTC (Web Real-Time Communication) — это браузерный стандарт для голосовых и видеозвонков, передачи данных прямо между браузерами без плагинов. Но за этим удобством скрывается фундаментальная проблема: протокол раскрывает реальный IP-адрес пользователя, даже если тот сидит за VPN. Разбираем механику до байта и показываем, как это использовать в атаке.

Архитектура WebRTC: где зарыта бомба

WebRTC для установки P2P-соединения использует несколько протоколов поверх UDP:

Ключевые протоколы:

ПротоколРольПочему это проблема
STUNОпределяет публичный IP через NATЗапрос идёт напрямую, минуя VPN-туннель
TURNRelay-сервер если P2P не работаетЛог реального IP на сервере
ICEНаходит лучший путь соединенияСобирает ВСЕ IP-кандидаты — и реальный, и VPN, и локальный
SDPОписание медиа-сессииСодержит IP в открытом виде

Суть атаки: JavaScript на странице может создать RTCPeerConnection и принудительно запросить ICE candidates. STUN-запрос летит напрямую через реальный сетевой интерфейс, обходя VPN-маршрут, потому что браузер обрабатывает его на уровне ОС.

Вектор атаки #1: WebRTC IP Leak через одну строку JS

Это самый простой и самый известный способ деанонимизации. Достаточно одного скрипта на странице:

⚠️ Что это даёт: если жертва за VPN, ты увидишь ДВА IP — VPN-адрес (как srflx candidate) и реальный публичный IP провайдера (как прямой host candidate). Разрешения на камеру/микрофон — не нужны.

Вектор атаки #2: Сбор локальных IP для сканирования сети

Помимо публичного IP, WebRTC сливает локальные IP-адреса — это открывает дорогу к сканированию внутренней сети жертвы прямо из браузера:

Вектор атаки #3: Деанон через IPv6

Многие VPN-провайдеры туннелируют только IPv4-трафик, забывая про IPv6. WebRTC честно сообщит IPv6-адрес, который напрямую привязан к провайдеру жертвы:

Вектор атаки #4: mDNS-обфускация и её обход

Начиная с Chrome 81+, браузер скрывает локальные IP, заменяя их на mDNS-имена вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.local. Но это не конец:

Автоматизированный дроп: встраиваем в XSS-пейлоад

Собираем всё воедино — боевой пейлоад для XSS/вредоносной страницы:

navigator.sendBeacon — отправляет данные даже при закрытии вкладки, гарантируя доставку.

Как защититься: для синего

Браузерный уровень:

  • Firefox: about:config → media.peerconnection.enabled = false
  • Chrome: расширение WebRTC Leak Prevent или uBlock Origin (включить блокировку WebRTC)
  • Tor Browser: WebRTC отключён по умолчанию

VPN/Proxy уровень:

  • Хороший VPN должен блокировать WebRTC на уровне браузерного расширения
  • Проверяй себя на: https://browserleaks.com/webrtc или https://ipleak.net

Для разработчиков приложений:

Матрица угроз

АтакаНужно разрешениеРаботает за VPNДетектируется
Public IP Leak (STUN)❌ Нет✅ ДаТолько спец. тест
Local IP Harvest❌ Нет✅ ДаНет
IPv6 Leak❌ Нет✅ Да (часто)Только спец. тест
LAN Port Scan (WS)❌ Нет✅ ДаНет
mDNS UUID → IP❌ Нет✅ Да (L2 доступ)Нет

WebRTC — это редкий случай, когда «фича» протокола является уязвимостью по дизайну. STUN должен знать твой реальный IP, чтобы работать — именно поэтому заплатку сюда не поставить: это не баг, это архитектура. Единственная реальная защита — отключить WebRTC полностью или использовать браузер с нативной изоляцией (Tor, Brave с режимом агрессивной защиты).

WebRTC Leaks и атаки на P2P: как деанонимизировать пользователя через браузер

На этом все. Всем хорошего дня!