Метод идентификации браузера через манипуляции с кэшированием Favicon

Опубликована реализация новой техники идентификации конкретного экземпляра браузера. Техника основана на особенностях кэширования изображений Favicon, при помощи которых сайт определяет пиктограммы, отображаемые в закладках, вкладках и прочих элементах интерфейса браузера. Метод основывается на особенностях обработки Favicon в браузерах, которые позволяют использовать кэш Favicon, в качестве области хранения, изначально не предназначенной для постоянного хранения информации (“Supercookies”).

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

В основе метода идентификации лежит то, что на стороне сервера можно определить открывал ли пользователь страницу через анализ информации о загрузке Favicon – если браузер не запросил указанное в параметрах страницы изображение Favicon, то страница загружалась ранее и картинка показана из кэша. Так как браузеры позволяют задавать свой Favicon для каждой страницы имеется возможность кодирования полезной информации через последовательный проброс пользователя на несколько уникальных страниц.

Чем больше редиректов в цепочке, тем больше идентификаторов можно определить (число идентификаторов определяется по формуле 2^N, где N – число редиректов). Например, в два редиректа могут адресовать 4 пользователей, 3 – 8, 4 – 16, 10 – 1024, 24 – 16 млн, 32 – 4 миллиарда. Недостатком метода являются большие задержки – чем выше точность, тем больше времени требуется на редиректы перед открытием страницы. 32 редиректа позволяют сгенерировать идентификаторы для всех пользователей интернета, но приводят к возникновению задержки примерно в 6 секунды при первом входе и 3 секунды при последующих. Для миллиона идентификаторов задержка составляет около 3 секунд при первом входе и 1.5 секунд при последующих.

Метод подразумевает работу в двух режимах – записи и чтения. Режим записи осуществляет генерацию и сохранение идентификатора для пользователя впервые обратившегося к сайту. Режим чтения осуществляется чтение ранее сохранённого идентификатора. Выбор режима зависит от запроса файла Favicon для основной страницы сайта – если картинка запрошена, значит данные не прокэширования и можно предположить, что пользователь не обращался к сайту ранее. По данным исследователей, через указание HTTP-заголовка Cache-Control можно добиться нахождения Favicon в кэше сроком до одного года.

В режиме чтения при открытии сайта пользователь по цепочке перенаправляется на предопределённые страницы со своими Favicon (например, “demo.supercookie.me/t/50fd23e6:9bpZVrAwOmieUkMPkAeG”), а HTTP-сервер анализирует, какие из Favicon запрошены с сервера, а какие показаны без обращения к серверу из кэша. Наличие запроса кодируется как “0”, а отсутствие, как “1”. Для того, чтобы идентификатор сохранился и при будущих обращениях, в ответ на запросы Favicon выводится 404 код ошибки.

В режиме записи в цикле редиректов для страниц, кодирующих “1”, выдаётся ответ с Favicon, оседающий в кэше браузера (при повторном прохождении цикла данные Favicon будут отдаваться из кэша, без обращения к серверу), а для страниц кодирующих “0” – 404 код ошибки (при повторном цикле редиректа данные страницы будут запрошены вновь).


Метод применим в Chrome, Safari, Edge и частично в Firefox. В Firefox для Linux использованию Favicon в качестве Supercookies мешает особенность, из-за которой браузер вообще не кэширует Favicon. Интересно, что авторы метода идентификации уведомили разработчиков Firefox о данной особенности около года назад, указав на наличие ошибки в работе кэша, но не упомянув о своей работе и о том, что исправление приведёт к возможности идентификации пользователей. Дополнительно можно напомнить, что начиная с Firefox 85 в браузер добавлен режим сегментирования сети (Network Partitioning), позволяющий блокировать методы отслеживания перемещений, манипулирующие извлечением информации из различных браузерных кэшей.

Release. Ссылка here.