30.07.2021

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

Опубликована реализация новой техники идентификации конкретного экземпляра браузера. Метод основывается на особенностях обработки изображений Favicon, при помощи которых сайт определяет пиктограммы, отображаемые в закладках, вкладках и прочих элементах интерфейса браузера. В качестве области хранения используется кэш Favicon, который выступает в роли «Supercookie».

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

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

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

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

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

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

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

Источник.