Как рекламные фильтры деанонимизируют пользователей.

Исследователь Мелвин Ламмертс (Melvin Lammerts) представил PoC-инструмент Adbleed, который показывает неожиданный способ частично «деанонимизировать» пользователей VPN. Идея в том, что VPN действительно скрывает реальный IP-адрес и подменяет геолокацию на сторону выбранного сервера, но не меняет то, какие правила блокировки рекламы применяет ваш браузер. А эти правила часто зависят от страны и языка.
Большинство блокировщиков рекламы работают на фильтр-листах: это большие текстовые списки правил, которые запрещают загрузку доменов, элементов страниц и трекеров. Базовые списки вроде EasyList рассчитаны на англоязычную рекламу и крупные международные сети, но для многих стран пользователи (или сам блокировщик) дополнительно включают локальные фильтры. Например, в Германии может быть активен EasyList Germany, во Франции - Liste FR. В таких списках много доменов, которых нет в базовом наборе, и именно эта разница превращается в отпечаток, по которому можно угадывать страну проживания или язык, даже если весь трафик уходит через VPN-выход в другом государстве.
Adbleed определяет активные локальные списки полностью на стороне клиента, через JavaScript в браузере. Трюк основан на времени отказа: скрипт пытается загрузить маленькую иконку сайта с домена, который блокируется только конкретным списком фильтров для определенной страны. Если блокировщик перехватывает запрос, ошибка возникает почти мгновенно, до попадания в сетевой стек, обычно быстрее 5 мс. Если блокировки нет, запрос реально уходит в сеть, и даже простой DNS-поиск при несуществующем домене добавляет десятки или сотни миллисекунд. Это отличие по задержке и становится сигналом.
Для каждой страны автор проверяет 30 доменов и делает вывод о включенном локальном списке, если заблокированными оказываются минимум 20 из 30. Порог выбран специально высоким, чтобы снизить ложные срабатывания: разные браузеры и расширения поставляются с разными наборами базовых фильтров, и часть доменов может блокироваться «случайно» пересечением списков. В реальном же случае с активным локальным фильтром результат обычно близок к 25-30 из 30.
Отдельная сложность - собрать «сигнатуры» доменов так, чтобы они действительно были уникальны для локальных списков и не попадали в базовый EasyList. Для этого автор описывает подход со сравнением правил: извлечь доменные правила из базового списка, затем из каждого локального, вычесть пересечения и отдать приоритет доменам с национальными TLD. В качестве проверок используются «позитивные» домены из базового EasyList, чтобы понять, включен ли вообще блокировщик, и «негативные» домены, которые блокироваться не должны, чтобы отсеять странные конфигурации.
Ключевой вывод неприятный для тех, кто рассчитывает на анонимность: такой отпечаток работает через VPN, через Tor Browser и вообще через любые прокси, не требует cookies, разрешений и участия сервера. Сам по себе он не раскрывает личность, но в связке с другими сигналами вроде часового пояса, раскладки, шрифтов и разрешения экрана может заметно сузить круг.
С практической стороны «лечится» это неудобно. Можно не включать локальные фильтры, но тогда больше рекламы и трекинга на вашем языке пройдет. Можно включить несколько «случайных» локальных списков, но это может ломать сайты и повышать шум. Или отказаться от блокировщика, что для приватности обычно только хуже. Автор предлагает подумать о более аккуратном применении локальных правил на стороне разработчиков блокировщиков, например активировать часть правил только на релевантных доменах самого сайта, а не глобально.
Adbleed доступен как демонстрация, и автор прямо предупреждает: конфигурация блокировщика рекламы тоже становится частью вашего цифрового отпечатка, который VPN не скрывает.