Утечки VPN и проверки маскировки

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

VPN меняет ровно одну вещь

VPN делает одну механическую работу, и делает её хорошо: он оборачивает ваш трафик в зашифрованный туннель к выходному серверу, и сайты, которые вы посещаете, видят этот сервер вместо вас. Ваш публичный IP-адрес меняется. Город и страна, привязанные к этому адресу, меняются вместе с ним. Сеть, владеющая адресом — обычно хостинговая компания или VPN-провайдер, а не домашняя широкополосная линия — тоже меняется. Если ваш единственный вопрос был «с какого адреса, по мнению этого сайта, я пришёл?», работающий VPN отвечает на него полностью, и ничто в этой статье этому не противоречит.

Всё остальное остаётся ровно там, где было. Ваше устройство не двигается: его размер экрана, графический чип, установленные шрифты, поведение батареи, аудиостек и десятки мелких аппаратных и программных считываний, которые объединяются в отпечаток браузера, идентичны до и после открытия туннеля. Ваши часы не двигаются, поэтому системный часовой пояс по-прежнему сообщает место, где вы действительно находитесь. Языки вашего браузера и операционной системы не двигаются. Ваши куки, вошедшие аккаунты и история просмотров не двигаются. Туннель перенаправляет пакеты; он не переодевает машину на их конце.

Это разделение — причина, по которой большая часть «обнаружения VPN» названа неверно. В обычном случае никто не обнаружил протокол VPN, туннель или зашифрованное соединение. Обнаружено несоответствие: IP утверждает одну страну, а часы — другую, адрес принадлежит дата-центру, а отпечаток описывает домашний ноутбук, список языков описывает путешественника, который никогда не путешествует. Сайты оценивают разрыв между слоем, который сдвинулся, и слоями, которые не сдвинулись. Понимание утечек, таким образом, на самом деле не про туннель — оно про аудит всего, что туннель оставил позади.

WebRTC: адрес, который обходит туннель

WebRTC — это браузерная технология, стоящая за голосом, видео и одноранговыми данными на странице. Чтобы соединить два браузера напрямую, она должна сначала обнаружить, как до каждого можно добраться, и этот процесс обнаружения называется ICE. Простыми словами, ваш браузер собирает кандидатов — возможные адреса самого себя — и предлагает их другой стороне. Некоторые он узнаёт, спрашивая себя, а другие — задавая STUN-серверу простой вопрос: «с того места, где ты сидишь, с какого адреса я звоню?» Ответы возвращаются как разные типы кандидатов, и разница между ними — вся история утечки.

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

Современные браузеры сильно это сузили. Chrome и Firefox теперь обычно заменяют адреса host случайными именами mDNS — вращающимся именем хоста .local вместо вашего настоящего LAN IP — так что страница видит кандидата, которого не может связать обратно с вашим роутером. Реализации различаются по браузеру и версии, некоторые корректно маршрутизируют WebRTC через туннель, а корпоративные или изменённые расширениями настройки различаются снова, поэтому два честных теста могут не согласиться. Относитесь к грубым исправлениям с осторожностью: полное отключение WebRTC останавливает утечку и также ломает законные звонки, а расширения, обещающие «подделывать» кандидатов, часто заменяют правдоподобный адрес неправдоподобным — а неправдоподобный кандидат сам по себе является противоречием, которое проверка маскировки может оценить.

DNS: резолвер, который остался дома

Каждое имя, которое вы посещаете, должно быть переведено в адрес, прежде чем что-либо соединится, и этот перевод делает резолвер. Если ваш браузер или система продолжает использовать резолвер, назначенный вашим интернет-провайдером — достигаемый напрямую, вне туннеля — каждая проверка утекает сразу двумя способами. Сами запросы идут к вашему ISP в открытом виде обычного DNS-трафика, раскрывая, какие имена вы разрешаете, хотя следующие страницы путешествуют через VPN. И любой сайт, который может наблюдать, какой резолвер спрашивал от вашего имени, узнаёт, где вы примерно находитесь, потому что люди подавляюще используют резолвер рядом со своим настоящим местоположением.

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

Ловушки в основном связаны с конфигурацией, а не со злым умыслом. Настройки разделённого туннеля намеренно отправляют часть трафика — часто включая DNS — вне VPN ради скорости или локального доступа. Роутеры, раздающие резолвер ISP каждому устройству, продолжают делать это, пока VPN работает на одном из них. Браузеры с собственными настройками зашифрованного DNS могут обходить и систему, и резолвер VPN-провайдера, исправляя одну утечку и тихо создавая проблему согласованности, если новый резолвер находится в другой стране, чем выход. Рабочее правило повторяет остальную часть этой статьи: резолвер должен жить там, где выход утверждает, что живёт, и до него следует добираться через туннель, а единственный способ узнать, что оба утверждения верны, — протестировать это снаружи.

Противоречия: маскировка, которая спорит сама с собой

Рассмотрим четыре считывания, которые страница может снять за секунду. Ваш IP-адрес помещает вас в Амстердам. Ваш системный часовой пояс сообщает UTC−5 и город в Америках. Список языков вашего браузера возглавляет язык, на котором редко говорят в Нидерландах, и голландского в нём нигде нет. А ваш user agent утверждает настольный Windows, пока ваш графический рендерер называет мобильный чип. Ни одно из этих значений само по себе ничего не доказывает — путешественники, экспаты, виртуальные машины и странные конфигурации невинно производят каждое из них каждый день. Вместе они спорят. Проверка маскировки — это просто машина, которая слушает этот спор и присваивает ему вес.

Некоторые противоречия повторяются так часто, что стали стандартной батареей. Часовой пояс против страны IP — самое громкое, потому что часы тривиально читать странице, и большинство пользователей VPN никогда не думают их менять. Язык против страны IP мягче — люди законно просматривают на втором языке — но полное отсутствие языка страны выхода всё равно засчитывается. User agent против платформы ловит грубую подделку: строка, утверждающая одну операционную систему, пока поддержка касания, форма экрана или GPU-рендерер описывает другую. ASN хостинга против жилой истории — самое тихое и часто самое решающее: выходной адрес принадлежит сети дата-центра, а всё остальное в сессии описывает обычного домашнего пользователя, который в реальности приходил бы от широкополосного провайдера.

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

Контрольный список, чтобы выглядеть согласованно

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

Затем закройте боковые каналы. Держите WebRTC внутри туннеля или, если вы никогда не используете звонки в браузере, полностью выключенным — и перепроверьте, какое поведение на самом деле у вашего браузера, а не предполагайте. Убедитесь, что DNS разрешается через туннель к резолверу, который соответствует истории выхода, и предпочитайте жилой выход, когда история, которую вы предъявляете, жилая, потому что никакая настройка часов не исправит ASN дата-центра. После каждого изменения снова запускайте тест отпечатка браузера и читайте его так, как это сделал бы сайт: не охотясь за одним красным флагом, а спрашивая, рассказывает ли вся страница одну историю. О том, почему такой тест может работать, не собирая считывания, которые он вам показывает, смотрите как тест приватности не хранит данные.

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

Источники и дополнительное чтение

Часто задаваемые вопросы

Скрывает ли VPN мой отпечаток?

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

Опасна ли утечка DNS, если я доверяю своему ISP?

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

Почему тест говорит, что мой WebRTC в порядке, а другой сайт не согласен?

Обычно потому, что два теста смотрят на разные вещи, и оба честны. Современные браузеры маскируют кандидатов host за вращающимися именами mDNS, поэтому один тест сообщает «IP не утёк», потому что видел только заполнитель .local, а другой помечает само присутствие кандидатов, рефлексивный адрес или несоответствие между страной кандидата и страной выхода. Разрешения тоже имеют значение: страница, которой предоставлен доступ к микрофону или камере, может узнать больше, чем та, которой не предоставлен, а браузеры и версии различаются в том, что они раскрывают по умолчанию. Несогласие между тестирующими — это информация о том, какой слой читает каждый, а не доказательство, что какой-то из них сломан.