🔥

Тред (Сергей Ufocoder)


JavaScript и Браузерные отпечатки #тред
notion image

Не для кого не секрет, но за интернет пользователями следят, причем давно, а что если я скажу тебе, что это происходит и с помощью браузера тоже
notion image

Кому нужны мои данные? Рекламные сети: Google AdSense Брокеры данных: DoubleClick, ComScore, cXense Сервисы аналитики: Google Analytics, Yandex metrika Социальные сети: Facebook, Google Plus и так далее

Когда правительства собирают данные, мы называем это «слежкой», когда компании делают то же самое, мы ошибочно называем это «пользовательскими службами». myshadow.org/trackography#w…

Причем тут браузеры? Как правило в веб-сайты встраиваются трекеры, которые отправляют данные о пользовательской активности, в дальнейшей формируется статистика

1/2 Причем тут браузерные отпечатки? Можно пометить браузер пользователя, и отслеживать его перемещения. Как только он авторизируется на веб-сайте или воспользуется социальными сетями — его метка (отпечаток) будет связан с его реальным профилем

2/2 Далее если пользователь будет неавторизованным, то мы все равно сможем все равно сказать, что это вот тот самый.

Отпечатком может воспользоваться как одиночный сайт и анализировать активность анонимов Так и сеть сайтов, которая может следить какие сайты сети посещает пользователь с этой меткой, можно даже выстроить маршрут

Например, рекламные сервисы. Сделав запрос на поиск товара на одном сайте, свяжем метку и запрос. Зайдешь на другой сайт из этой сети, мы порекомендуем тебе похожий на твой запрос товар Встречали как гугл подсовывает вам похожую рекламу, а вы нигде не логинились? Вот это оно

Отчасти дело в трекерах, трекеры повсюду! Одно время был популярен сторонний сервис комментирования disqus. Некий Дон Вильямсон отключил его на своем сайте и снизил количество сетевых запросов с 105 до 16 Статья за апрель, 2017 donw.io/post/github-co…
notion image

Далее, чтобы не затягивать спойлер, многое буду брать из доклада про отпечатки youtu.be/3D7HjYLkVrs

Отпечаток это своего рода идентификатор id Отпечатки бывают трех видов Пассивные, когда мы ориентируемся на заголовки http и ip протокола, берём хэш от их суммы, коллизий определённо будет много, по таким полям делать id проблемно, но подход имеет место быть

Пассивные отпечатки могут использоваться HTTP-заголовки: Accept, Accept-Encoding, Accept-Language, Connection, Host, User-Agent, Version + Source Address из IP протокола Пример реализации: github.com/actionhero/bro… Звезд мало, тк пассивные отпечатки малоэффективны, не интересны

Активные отпечатки для сбора характеристик запускают какой-нибудь код, как правило это JavaScript-код. Здесь также берутся характеристики, например в строковом виде, конкатенируются, затем берется от большой строки хэш - это и есть id

Для активных отпечатков большое раздолье, можно брать очевидные характеристики браузера: включены ли Cookies, timezone, список плагинов, глубина цвета экрана и его разрешение, поддержка Do Not Track, Поддержка LocalStorage/SessionStorage/OpenDatabase, Название UserAgent

Грубо говоря, все то, что можно вытащить из navigator может попасть в активный отпечаток:
notion image

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

Набор состоит из определяющий характеристик, по сути все то, что характеризует пользовательский браузер, вспомните свойства объекта navigator. Каждую характеристику можно описать использую факторы: энтропия, обнаруживаемость, живучесть, доступность, масштаб

Важным фактором является энтропия, она показывает насколько бит поверхность одного отпечатка, может отличаться от другого отпечатка. Покажу важность на примере

1/2 У вас есть 100 знакомых все из них живут на улице Большая Садовая, и вы знаете адрес каждого но без личности если все живут в 1ом доме, то разницы м/у таким отпечатком, как номер дома, нет, он бесполезен, энтропия ноль
notion image

2/2 Если, каждый будет жить по своему номеру доме, тогда вести, слежку и устанавливать личность будет проще. Если в одном доме будут жить скажем 5еро, тогда если кто-то выйдет из него, нужно будет понять кто же это из тех 5ых

Можно посчитать какой длинны необходима в идеале определяющая характеристика, население планеты ~7,5 млрд -> 33 бита Грубо говоря, если мы сможем собрать такую строку из характеристик браузера, которая будет отличаться от других строк на 33-бита каждый будет под колпаком
notion image

Есть еще другие факторы определяющих характеристик, которые описывает спецификация да, да, да не удивляйтесь такое существует с браузерными отпечатками уже давно борются, первая версия спеки март 2013 год w3c.github.io/fingerprinting…

Вернемся к техникам получения активных отпечатков, а именно к неочевидным и возможно самым практичным

1/2 Canvas Fingerprint, 2012 год hovav.net/ucsd/papers/ms… Самая эффективная и самая простая в реализации техника, необходимо отрисовать текст разными шрифтами и необычными символами, далее canvas переводим в base64, далее хэшируем - получаем id
notion image

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

Есть еще техники получения через работу с audioContext (почти устарело), через WebGL как продолжение идеи canvas fingerprint Интересным является то, что в свое время Battery API позволял также получать строку с высокой энтропией, считай быть отпечатком, но это пофиксили

Кстати и у браузера Tor, есть своя дока, которая описывает как она борется со всеми этими трекерами и фингепринтами 2019.www.torproject.org/projects/torbr…

Несмотря наличие встроенных механизмов можно все таки провернуть одну технику для браузера Tor browserleaks.com/rects

Повторюсь для закрепления активные отпечатки позволяют через выполнение кода получить наблюдаемые характеристики очевидные или не очевидные, ценность характеристик определяется факторами (см спеку w3c)

Реализации: - github.com/fingerprintjs/… (github ~11,6k stars) - github.com/Song-Li/cross_… (github ~1k stars) - github.com/jackspirou/cli… (github ~1,2k stars) - github.com/carlo/jquery-b… (github ~150 starts) - github.com/RobinLinus/ube… (github <100 stars)

Первая реализации это похоже на реинкарнацию другой библиотеки от Валентина Васильева, тк он майнтейнер в новой по первому линку, прошлая реализация жила до 2018 года. Была оч популярна. Кстати вот его доклад на эту тему youtube.com/watch?v=RcB-Jq…

@jsunderhood Еще есть: WebRTC, Permissions API, размеры окна браузера (звучит дико, но в 99% помогает в отпечатке пользователей маков), window.chrome, Math, SharedArrayBuffer, PaymentRequest, matchMedia, createEvent, HTMLMediaElement, Performance API, рендеринг шрифтов в div, и т.д.
Как заметил @Vitalliumm реализаций FP (fingerprint) очень много, есть даже веб-сайт библиотека таких техник и подходов browserleaks.com twitter.com/Vitalliumm/sta…

Перейдем к 3ему виду отпечатков, cookie-like или куки-подобные отпечатки, суть: формируем значение (на сервере) отдаем клиенту, он записывает в хранилища, браузера и вы извлекаем по имени это значение из них Очевидными к использованию здесь является localStorage, sessionStorage

Самый интересный баг, который мог стать экзотическим хранилищем - могли читать историю браузера, записать и прочитать "значение". Доступ к истории браузера был возможен благодаря атаке по времени, существовала разница по отрисовке посещенной и нет ссылки owasp.org/www-pdf-archiv…

Было еще одно экзотическое хранилище на основе HSTS, но изначальный pdf документ исследование недоступен, radicalresearch.co.uk/lab/hstssuperc… техника называется HSTS Supercookies или HSTS Fingerprint

Окей, есть 3 вида отпечатков, с нас собирают характеристики, чтобы из них сформировать уникальный id, что делать? Браузерные расширения, блэклист на известные трекеры на уровне расширения, прокси это хорошо, но это не все.

И кстати парадокс, но чем больше вы боретесь, тем более уникальным вы становитесь, лучшая тактика быть как все. Но если серьезно, стоит снова заглянуть в спеку w3c

И эти меры уже предпримаются браузерами, но по разному w3c.github.io/fingerprinting…
notion image

Из браузеров по слухам рекомендуется браузер brave.com, там из коробки больше анти трекинговых механизмов

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