Фингерпринтинг через рекламные баннеры? Теперь это обычное дело

Вчера на Stack Overflow задали странный вопрос: почему загрузка страницы Stack Overflow инициирует аудиоконтент? Что за звук на текстовом сайте?

Скриншот из инструментов разработчика:

lb20ci0glkc526mtvvj8bdlbwce.png

Ответ оказался интереснее, чем можно было предположить.
Сам автор внимательнее изучил трафик и разобрался, что запросы связаны со скриптом:

https://static.adsafeprotected.com/sca.17.4.95.js

…и появляются только в том случае, если на странице присутствует определённый рекламный баннер, который поставляется через рекламную сеть Google AdSense.

ows44mzgm0zdyl1hjlvcnaphx0o.png


Читатели сначала подумали, что это первоапрельская шутка. Но один из разработчиков не пожалел времени и внимательно разобрался, что конкретно делает вышеупомянутый скрипт.

Выяснилась очень интересная вещь. Оказалось, что баннер пытается использовать Audio API в качестве одного из сотен фрагментов данных, которые собирает о браузере, пытаясь осуществить его фингерпринтинг. Это нужно, чтобы однозначно идентифицировать браузер на различных сайтах, независимо от настроек конфиденциальности. Хотя браузер блокирует передачу данных конкретно по Audio API, но он не блокирует большую часть остальных данных, так что владельцы баннера успешно выполняют фингерпринтинг и, возможно, деанонимизацию пользователей.

Обнаруженная функциональность совершенно точно не нужна для работы баннера, то есть она не используется для включения или отключения каких-то интерактивных функций. Они используются только в совокупности для создания уникального «отпечатка» пользователя, который затем баннер передаёт вместе с рекламным ID при записи аналитики для рекламодателя.

Например, этот фрагмент определяет разрешение дисплея и параметры accessibility в системе:

function "==typeof matchMedia&&a239.a341.a77 ("
all and(min--moz - device - pixel - ratio: 0) and(min - resolution: .001 dpcm)
")},function(){return"
function "==typeof matchMedia&&a239.a341.a77 ("
all and(-moz - images - in -menus: 0) and(min - resolution: .001 dpcm)
")},function(){return"
function "==typeof matchMedia&&a239.a341.a77 ("
screen and(-ms - high - contrast: active) and(-webkit - min - device - pixel - ratio: 0), (-ms - high - contrast: none) and(-webkit - min - device - pixel - ratio: 0)
")},function(){return"
function "==typeof matchMedia&&a239.a341.a77 ("
screen and(-webkit - min - device - pixel - ratio: 0)
")},function(){return"


Проверка наличия конкретных криптографических API:

return "function" == typeof MSCredentials && a239.a341.a66(MSCredentials)
}, function() {
return "function" == typeof MSFIDOSignature && a239.a341.a66(MSFIDOSignature)
}, function() {
return "function" == typeof MSManipulationEvent && a239.a341.a66(MSManipulationEvent)
}, function() {


Получение списка установленных шрифтов:

 return "object" == typeof document && a239.a341.a68("fonts", document.fonts)


Определение возможностей Audio API:

 return "undefined" != typeof window && "undefined" !== window.StereoPatternNode && a239.a341.a66(window.StereoPannerNode)


Определение специфических API в мобильных браузерах:

 return "function" == typeof AppBannerPromptResult && a239.a341.a66(AppBannerPromptResult)


Проверка поддержки DRM для конкретной платформы.

}, function() {
return !!a239.a341.a72() && a239.a341.a66(a239.a341.a72().webkitGenerateKeyRequest) && a239.a341.a66(a239.a341.a72().webkitCancelKeyRequest) && a239.a341.a66(a239.a341.a72().webkitSetMediaKeys) && a239.a341.a66(a239.a341.a72().webkitAddKey)
}, function() {


И сотни других параметров, которые в совокупности составляют уникальный «портрет» браузера. Ему присваивается уникальный ID, который потом используется для отслеживания действий пользователя в интернете.

Похоже, методы фингерпринтинга уже вышли из разряда «тёмных практик» и открыто применяются крупнейшими рекламодателями и рекламными сетями. Защититься от такого сканирования системы помогает блокировщик рекламы.

В такой ситуации блокировка рекламы становится не просто удобной опцией, а обязательным требованием для нормальной работы в интернете. Это минимальное, но не достаточное требование для защиты от трекинга.

Об использовании рекламодателями фингерпринтинга давно предупреждал Фонд электронных рубежей. На их сайте работает инструмент Panopticlick, который эмулирует действия враждебного трекера и определяет, насколько уникален отпечаток вашего браузера.

hnc0lcgskdqsumct6jv-ffzwde0.png

Например, таблица вверху соответствует реальным результатам сканирования браузера с выявлением 17,67 бит идентифицирующей информации. Это уникальный отпечаток среди всех 208 788 пользователей, которые проходили тестирование на сайте за последние 45 дней.

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

Представители Stack Overflow сказали, что они в курсе проблемы. Им не нравится такая ситуация и они думают, как с ней бороться. Но факт в том, что баннеры с трекингом могут встретиться вам абсолютно на любом сайте.


yhx6xmbzv4dhszpo0vntju4greu.jpeg

© Habrahabr.ru