Цифровой отпечаток устройства

Цифровой отпечаток устройства (также машинный отпечаток) — это информация, собираемая о программном и аппаратном обеспечении удалённого вычислительного устройства с целью его идентификации. Обычно эта информация агрегируется в краткий идентификатор с помощью алгоритма снятия отпечатков. Одним из наиболее распространённых видов цифровых отпечатков устройств является отпечаток браузера, который строится на данных, собираемых при взаимодействии с веб-браузером устройства[1].

Цифровые отпечатки устройств могут использоваться для полной или частичной идентификации отдельных устройств даже в случаях, когда постоянные куки (а также зомби-куки) недоступны для чтения или записи в браузере, клиентский IP-адрес скрыт или пользователь переключается на другой браузер на том же устройстве[2]. Это позволяет, с одной стороны, выявлять и предотвращать кражу идентичности и мошенничество с банковскими картами[3][4][5][6], но, с другой стороны, — формировать долгосрочные базы истории посещений пользователей (а также использовать таргетированную рекламу[7][8] или целевые атаки посредством эксплуатации уязвимостей[9]), даже если пользователь предпринимает попытки уклониться от слежки. Это вызывает значительные опасения у сторонников конфиденциальности в интернете[10].

История

Базовая информация о конфигурации веб-браузеров давно собирается сервисами веб-аналитики для оценки реального человеческого веб-трафика и фильтрации различных видов кликфрода. С конца 1990-х годов появление клиентского сценарного языка позволило собирать всё больше разнообразной информации, и уже в начале 2000-х эксперты по компьютерной безопасности стали выражать обеспокоенность возможностями массового извлечения параметров браузера[11].

В 2005 году исследователи из Калифорнийского университета в Сан-Диего показали, как с помощью отметок времени TCP можно оценить дрейф часов устройства, а значит и получить удалённый аппаратный отпечаток[12].

В 2010 году организация Electronic Frontier Foundation, EFF запустила веб-сайт для тестирования уникальности отпечатка браузера пользователя[13]. После сбора 470 161 отпечатка было измерено, что отпечатки браузеров могут содержать не менее 18,1 бит энтропии[14], что было до появления технологий, таких как цифровой отпечаток с использованием canvas (добавляющих ещё 5,7 бита). Panopticlick показал, что 83,6 % отпечатков уникальны, а при наличии Flash или Java — 94,2 %.

В 2012 году Кейтон Моури и Ховав Шахам, исследователи из Калифорнийского университета в Сан-Диего, показали, как элемент HTML5 canvas может использоваться для создания цифровых отпечатков браузеров[15].

В 2013 году не менее 0,4 % топ-10 000 сайтов по версии Alexa были обнаружены использующими скрипты для снятия отпечатков, предоставляемые сторонними сервисами[9].

В 2014 году 5,5 % топ-10 000 сайтов по Alexa применяли скрипты для снятия отпечатков Canvas, размещённые на 20 доменах. Подавляющее большинство (95 %) подобных скриптов размещались на платформе AddThis, начавшей использовать такую технологию без ведома своих клиентов.[4][15][16][17][18]

В 2015 году в Firefox версии 41 появилась экспериментальная функция против снятия отпечатков браузера[19], однако она до сих пор не включена по умолчанию[20]. В той же версии 42 появилась функция Enhanced Tracking Protection для борьбы с отслеживанием в приватном режиме просмотра, блокируя скрипты сторонних доменов с чёрных списков Disconnect Mobile[21].

В 2016 году исследование AmIUnique показало, что 89,4 % отпечатков уникальны, и набор определяющих признаков со временем меняется.

В WWDC 2018 компания Apple объявила о том, что Safari в macOS Mojave «выдаёт упрощённую системную информацию при просмотре сайтов, не позволяя идентифицировать пользователя по конфигурации системы»[22]. Исследование Hiding in the Crowd (2018) показало, что только 33,6 % десктопных отпечатков уникальны; для мобильных устройств — 18,5 % против 81 % в прежних данных. Для ПК уникальность чаще достигается за счёт комбинации признаков; для мобильных устройств — благодаря уникальным значениям отдельных атрибутов.

В 2019 году начиная с Firefox 69 Enhanced Tracking Protection включается по умолчанию для всех пользователей, не только в приватном режиме[23].

Разнообразие и стабильность

Концепция цифрового отпечатка устройства во многом вдохновлена судебно-медицинской ценностью отпечатков пальцев.

Для того чтобы отпечатки позволяли уникально отличать устройства в долгосрочной перспективе, они должны быть одновременно достаточно разнообразными и стабильными. На практике достижение обеих свойств одновременно невозможно: повышение разнообразия обычно снижает стабильность — например, если добавить в отпечаток ещё одну настройку браузера, индивидуальность возрастёт, но при изменении этой настройки отпечаток изменится[1]. Тем не менее, если пользователь не противодействует идентификации, отпечатки несложно выделять, учитывая большое разнообразие собираемых данных. Согласно исследованиям, 56,86 % пользователей имеют уникальные расширения, а по 43 символам используемых шрифтов идентифицируется 34 % выборки[24].

Частичная нестабильность отпечатков может компенсироваться алгоритмами сопоставления, связывающими частично совпадающие отпечатки (например, различающиеся только версией браузера, которая изменяется последовательно). Для этого применяются как простые алгоритмы на правилах, так и системы машинного обучения[25].

Энтропия — один из способов измерения разнообразия отпечатков.

Источники идентифицирующей информации

Локально установленные приложения могут собирать большой объём данных о программном и аппаратном обеспечении, включая уникальные идентификаторы — например, MAC-адрес и серийный номер. Многие программы, использующие DRM, специально применяют эту информацию для идентификации устройства.

Даже если приложение не предназначено для сбора идентификаторов, оно может непреднамеренно раскрывать их через взаимодействие с удалённой стороной, наиболее очевидный пример — веб-браузеры, которые предоставляют столько разнообразной и стабильной информации, что позволяют идентифицировать устройство удалённо.

На уровне ниже приложений идентификационные данные можно получить с помощью сетевых протоколов. По уровням модели OSI примеры протоколов для снятия цифрового отпечатка:

Пассивные методы требуют лишь наблюдения за трафиком от целевого устройства; активные — инициирования соединения с этим устройством; полуактивные — взаимодействия по соединению, инициированному устройством[12].

Отпечаток браузера

Сбор большого объёма разнообразной и стабильной информации браузерами стал возможен благодаря появлению языков клиентского сценарного программирования в конце 1990-х годов. Существуют открытые библиотеки для снятия отпечатков браузеров, такие как FingerprintJS, ImprintJS, ClientJS; FingerprintJS наиболее активно развивается и в значительной степени заменяет остальные[29].

Версия браузера

User-Agent браузера содержит сведения о названии и версии программы и другую информацию о совместимости[30][31]. Однако поскольку эти сведения предоставляет сам клиент, им не стоит доверять при идентификации. Вместо этого тип и версию браузера можно определять по характерным различиям в поведении (например, порядок и число полей в HTTP-заголовке уникальны для каждого семейства браузеров)[32], реализации HTML5[32], CSS[32][33] и JavaScript[9][34]. Такие различия можно проверять с помощью JavaScript. Сравнение с помощью расстояния Хэмминга отличий в действиях парсера помогает эффективно различать большинство версий браузеров.

Расширения браузера

Комбинация установленных расширений или плагинов может уникально идентифицировать браузер.[9] Некоторые расширения также влияют на поведение других характеристик браузера, увеличивая сложность отпечатка.[8][35][36][37] Плагины Adobe Flash и Java ранее широко использовались для доступа к информации пользователя до их устаревания[9][34][38].

Аппаратные свойства

User-Agent может содержать информацию о модели устройства[37][39], а также операционной системе, разрешении и ориентации экрана, соотношении сторон дисплея, что может быть получено с помощью JavaScript через медиа-запросы CSS[33].

История посещённых сайтов

С помощью JavaScript и CSS-селектора: visited злоумышленник мог определить, какие сайты пользователь уже посещал[40]. Обычно для уникального профиля хватало списка из 50 популярных сайтов. Однако современные браузеры устранили этот риск[41].

Характеристики шрифтов

Ограничивающие прямоугольники букв отличаются между браузерами в зависимости от настроек сглаживания и хинтинга и могут быть определены с помощью JavaScript[42].

Canvas и WebGL

Отпечатки Canvas используют элемент HTML5 canvas[43], обрабатывающий 2D/3D-графику браузера через WebGL, чтобы получить сведения о установленном графическом драйвере, видеокарте или GPU. Техники отпечатков Canvas также могут выявлять установленные компьютерные шрифты[39]. Если GPU отсутствует, отпечаток может содержать информацию о CPU.

Скрипт сначала рисует текст определённого шрифта, размера и цвета, затем получает его изображение с помощью метода ToDataURL Canvas API и хеширует полученные данные для отпечатка[16]. Такие методы дают до 5,7 бита энтропии и позволяют собирать информацию, ортогональную по энтропии предыдущим признакам (разрешение экрана, возможности JavaScript и др.).

Аппаратное бенчмаркинг-тестирование

Бенчмарки позволяют по времени выполнения определить использование процессором инструкций AES-NI или Intel Turbo Boost[44].

Возможно использование специализированных API, например Battery API для кратковременного отпечатка по текущему состоянию батареи[45], или OscillatorNode для вывода волны на основании пользовательской энтропии[46].

Аппаратный идентификатор устройства (криптографический хеш, задаваемый производителем) также может использоваться для построения отпечатка[39].

Методы противодействия снятию отпечатка браузера

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

Предоставление упрощённого отпечатка

Пользователи могут снизить отпечаткоёмкость устройства, выбрав браузер, минимизирующий выдачу идентифицирующих данных — шрифтов, идентификатора устройства, отрисовки Canvas, информации WebGL и локального IP-адреса[39].

По состоянию на 2017 год Microsoft Edge считался наиболее легко идентифицируемым браузером, за ним следовали Firefox, Google Chrome, Internet Explorer и Safari.[39] Среди мобильных браузеров наиболее уязвимы Google Chrome и Opera Mini, затем идут мобильные версии Firefox, Edge и Safari.[39]

Tor Browser отключает такие функции, как Canvas и WebGL API, и сообщает пользователю о попытках получения отпечатка.[16].

С целью снижения разнообразия Tor Browser ограничивает допустимые значения ширины и высоты окна страницы — используются только определённые размеры, в результате чего страница размещается в области немного меньше окна[47].

Генерация поддельного отпечатка

Подмена частей информации (например, user agent) может снизить разнообразие[48], но эффект может оказаться обратным, если подделанные данные выделяют пользователя сильнее, чем реальные[9].

Если же подменять информацию при каждом визите (например, добавляя случайный шум в звук или отрисовку Canvas), снижается стабильность отпечатка.[7] Такую технологию реализовал браузер Brave в 2020 году[49].

Блокировка скриптов

Полная блокировка клиентских скриптов с третьих и/или основных доменов (например, отключение JavaScript или использование NoScript) может привести к неработоспособности сайтов. Предпочтительный вариант — блокировка только третьих доменов, замеченных в отслеживании (на основе чёрных списков, как в блокировщиках рекламы, или по анализу поведения, как в Privacy Badger)[17][50][51][52].

Использование нескольких браузеров

Разные браузеры на одном устройстве обычно дают разные отпечатки, но если отпечатки не защищены, их можно идентифицировать как принадлежащие одному устройству[53].

Примечания

Литература

Ссылки