Unprotected Your provider sees every site you open. Encrypt it →
← All posts

Утечка WebRTC: как браузер отдаёт ваш настоящий IP

Самый частый способ раскрыться при подключённом VPN. Не баг и не сломанный туннель — функция видеозвонков, делающая ровно то, для чего создана.

WebRTC Leak: How Your Browser Hands Out Your Real IP
TL;DR
  • WebRTC позволяет браузерам устанавливать прямые соединения для звонков. Для этого он обязан узнать ваши адреса — включая настоящий за VPN — и спрашивает операционную систему напрямую, минуя туннель.
  • Запустить это может любая страница молча: без запроса разрешения, без доступа к камере и без единого следа на экране.
  • Раскрывается ваш реальный публичный IP рядом с адресом VPN плюс локальный адрес в сети. Вместе они сводят на нет весь смысл туннеля для того, кто их сопоставит.
  • Способ отключения зависит от браузера: у Firefox есть настоящий переключатель, Chrome требует расширения, Safari спрашивает по каждому сайту. Плата — перестают работать звонки в браузере.
  • Перепроверяйте после каждого обновления браузера: настройки WebRTC сбрасываются чаще любых других настроек приватности.

Утечка DNS раскрывает, какие сайты вы посещаете. Утечка WebRTC раскрывает вас. Она отдаёт веб-странице ваш настоящий публичный IP-адрес, пока VPN подключён и работает исправно, — без запроса разрешения, без обращения к камере и не оставляя следа на странице, которую вы видите. Если вы когда-нибудь удивлялись, откуда сайт знает ваше реальное местоположение при включённом VPN, ответ почти всегда этот.

Для чего нужен WebRTC

WebRTC — технология, позволяющая браузерам передавать аудио и видео в реальном времени без плагинов. Звонок из вкладки, демонстрация экрана через веб, браузерная игра с голосовым чатом — всё это WebRTC. Он есть во всех крупных браузерах больше десяти лет и приносит реальную пользу.

Его определяющая черта — прямое соединение между участниками. Вместо прогона видео через центральный сервер два браузера соединяются напрямую, и поэтому у браузерных звонков ниже задержка. Но прямое соединение требует, чтобы каждая сторона знала, как до неё достучаться, — и здесь рождается проблема приватности.

Зачем ему ваш адрес и как он его получает

Чтобы установить прямое соединение, браузер собирает список возможных маршрутов до вас — так называемые ICE-кандидаты. В список входят локальный адрес в вашей сети, публичный адрес, каким он виден из интернета, и адреса ретрансляторов на случай, если прямой путь не сложится. Затем браузер предлагает этих кандидатов второй стороне, чтобы та выбрала рабочего.

Ключевая деталь: чтобы построить список, браузер обращается к сетевому стеку операционной системы напрямую и опрашивает STUN-серверы, выясняя свой публичный адрес. Это происходит ниже того уровня, на котором ваш VPN обрабатывает обычные веб-запросы, — а значит, перечисление видит и сообщает настоящий адрес за туннелем. WebRTC не обходит ваш VPN злонамеренно: он выполняет поиск адресов, необходимый для прямого соединения, и этот поиск по замыслу находит все маршруты, включая те, что туннель должен скрывать.

В итоге скрипт на любой странице может создать объект соединения, который никогда не собирался использовать для звонка, прочитать список кандидатов и узнать и адрес VPN, и настоящий. Разрешение для этого не нужно: сбор кандидатов — не то же самое, что доступ к камере или микрофону.

Что именно утекает

Три сведения, очень разной ценности для того, кто их собирает:

Современные браузеры усложнили задачу по сравнению с 2015 годом. Chrome и Firefox по умолчанию прячут локальные адреса за случайными mDNS-именами, что лишает локальный адрес ценности для стороннего отпечатка. Чего они не убрали — определение публичного адреса, потому что без него функция не работает вовсе.

Как отключить, по браузерам

Единого переключателя нет, и качество доступного контроля сильно различается.

Firefox — единственный массовый браузер с настоящим выключателем. Откройте about:config, примите предупреждение, найдите media.peerconnection.enabled и поставьте false. WebRTC отключается полностью. Браузерные звонки не заработают, пока не вернёте значение обратно.

В Chrome и браузерах на Chromium, включая Edge и Brave, встроенной настройки нет: Google убрал флаг, который раньше этим управлял. Поддерживаемый путь — расширение вроде WebRTC Network Limiter, ограничивающее сбор кандидатов основным публичным интерфейсом вместо перечисления всех адаптеров. У Brave вдобавок есть политика обработки IP в WebRTC в настройках щитов — лучший контроль в семействе Chromium.

Safari по умолчанию строже: он спрашивает, прежде чем разрешить сайту перечисление адресов, и не раздаёт их произвольным скриптам так свободно. В меню «Разработка», раздел WebRTC, можно отключить устаревший API. Большинству пользователей Safari менять ничего не нужно.

На мобильных всё хуже. Firefox для Android в части сборок даёт about:config, Chrome для Android не даёт ничего. Если ваш риск живёт в мобильном браузере, берите браузер с контролем WebRTC, а не пытайтесь настроить Chrome.

Чем вы платите за отключение

Отключение WebRTC не бесплатно. Перестают работать браузерные видеозвонки: Google Meet, Jitsi, Discord во вкладке, Whereby, большинство веб-конференций. Некоторые сайты покажут невнятную ошибку вместо объяснения причины.

Практическая схема, к которой приходит большинство, — два браузера: основной с отключённым WebRTC и второй только для звонков, где VPN либо выключен, либо утечка на это время принимается сознательно. Это менее изящно, чем одна настройка, и это честное состояние экосистемы.

Посмотрите, что отдаёт ваш браузер.

Проверки IP, WebRTC и DNS на одной странице, прямо в браузере. Ничего не сохраняется, регистрация не нужна.

Запустить проверку

Почему VPN не может это починить за вас

Здесь стоит быть точным, потому что многие провайдеры рекламируют защиту от утечек WebRTC так, будто это серверная функция.

Утечка происходит внутри браузера, на вашем устройстве, до того как хоть один пакет дойдёт до туннеля. Никакая настройка на наших выходах или чьих-либо ещё не помешает браузеру спросить у локального сетевого стека, какие у него адреса. Честно провайдер может сделать одно: поставлять клиент, который правит настройки браузера или системы за вас. Мы не поставляем клиента вовсе — и потому прямо говорим, что эту настройку делаете вы.

Что мы можем — показать результат. Наша страница проверки выполняет перечисление WebRTC в вашем браузере и выводит ровно то, что собрала бы враждебная страница, рядом с тестами DNS и IP, ничего не сохраняя у себя.

Дисциплина проверок

Две привычки важнее самой первой настройки:

FAQ

Утечка WebRTC означает, что VPN сломан?

Нет. Туннель исправно несёт ваш трафик. WebRTC спрашивает у операционной системы адреса по пути, которым веб-трафик не идёт, поэтому получает настоящий ответ. Эта уязвимость есть у любого VPN, потому что причина в браузере.

Сайт правда может узнать мой IP без разрешения?

Да. Создание соединения и чтение списка кандидатов не требуют разрешения пользователя, потому что это не доступ к камере или микрофону. На экране ничего не появляется. Знакомый запрос разрешения возникает позже, когда сайт просит сами устройства.

Спасает ли режим инкогнито?

Нет. Приватный просмотр меняет то, что останется на устройстве после сессии. Он не меняет того, что сетевой стек сообщает во время сессии, и WebRTC работает в приватном окне точно так же.

Достаточно ли одного mDNS?

Он решает половину задачи. Случайные mDNS-имена скрывают локальный адрес и убирают один сигнал для отпечатка. Ваш настоящий публичный IP по-прежнему определяется, а именно он вас и идентифицирует.

Может, просто отключить WebRTC везде?

Если вы не звоните из браузера — да, это ничего не стоит. Если звоните, держите второй браузер для звонков. Не оставляйте его включённым в том браузере, где VPN должен вас защищать, в расчёте, что ни одна страница не посмотрит.

Проверяйте сами, не верьте на слово.

Бесплатная проверка утечек без регистрации. А если нужен туннель под ней — без аккаунта и почты, крипта от $1.99 за неделю. Telegram: t.me/CypherESIM_bot

Открыть Cypher VPN