Браузерний відбиток (browser fingerprinting) — це метод відстеження онлайн-користувачів шляхом збору унікальних, не пов'язаних з IP-адресою атрибутів їхнього пристрою та конфігурації браузера для створення стійкого, ідентифікованого профілю. Ця техніка дозволяє веб-сайтам та рекламодавцям ідентифікувати окремих користувачів у різних сесіях, навіть коли традиційні методи відстеження, такі як файли cookie, заблоковані або IP-адреси маскуються за допомогою таких сервісів, як проксі.
Що таке браузерний відбиток?
Браузерний відбиток працює шляхом агрегування численних, на перший погляд, нешкідливих даних, доступних з веб-браузера та операційної системи користувача. Окремо ці дані (наприклад, роздільна здатність екрана, встановлені шрифти, рядок user-agent) не є унікальними. Однак їхня специфічна комбінація часто формує дуже виразний підпис, подібно до відбитка пальця людини. Цей цифровий підпис потім може бути використаний для відстеження активності користувача в Інтернеті, пов'язуючи розрізнені сеанси перегляду з тим самим пристроєм та користувачем. Основна мета полягає у встановленні постійного відстеження та ідентифікації, обходячи заходи, призначені для підвищення конфіденційності, такі як очищення файлів cookie, використання режиму інкогніто або ротація IP-адрес через проксі-сервери.
Як працює браузерний відбиток
Веб-сайти та скрипти відстеження використовують JavaScript та інші веб-API для запиту браузера та операційної системи на предмет конкретних характеристик. Ці характеристики потім комбінуються та хешуються для генерації унікального ідентифікатора. Ефективність відбитків зумовлена величезною кількістю потенційних комбінацій цих атрибутів, що робить статистично малоймовірним, щоб два користувачі мали ідентичний набір характеристик, якщо не застосовуються спеціальні контрзаходи.
Ключові дані, що використовуються для відбитків:
- Рядок User-Agent: Цей рядок надає деталі про тип браузера, версію, операційну систему та апаратну архітектуру. Хоча сам по собі він не є унікальним, він сприяє формуванню загального профілю.
- Роздільна здатність екрана та глибина кольору: Збираються розміри дисплея (наприклад,
1920x1080), співвідношення пікселів (devicePixelRatio) та кількість кольорів, які може відображати екран (screen.colorDepth). - Встановлені шрифти: Веб-сайти можуть виявляти, які шрифти встановлені в системі користувача, намагаючись відтворити текст різними поширеними та незвичайними шрифтами та вимірюючи їхні розміри. Унікальна колекція встановлених шрифтів є сильним ідентифікатором.
- Canvas Fingerprinting: Ця техніка передбачає інструктування браузера відтворити приховану графіку або текст на елементі HTML
<canvas>. Через незначні відмінності в GPU, графічних драйверах, операційній системі та механізмах рендерингу браузера, точний вихідний результат цього відтвореного зображення на рівні пікселів буде дещо відрізнятися на різних системах. Дані зображення потім витягуються та хешуються для створення унікального ідентифікатора. - WebGL Fingerprinting: Подібно до Canvas fingerprinting, WebGL використовує можливості браузера для рендерингу 3D-графіки. Він запитує постачальника GPU, рендерер та специфічні можливості. Незначні варіації в апаратному забезпеченні, драйверах та програмних стеках призводять до унікальних результатів при рендерингу складних 3D-сцен.
- Audio Fingerprinting: Цей метод передбачає генерацію короткого аудіосигналу (наприклад, певного тону) та його обробку через аудіостек браузера. Відмінності в аудіоапаратному забезпеченні, драйверах та обробці аудіо операційною системою можуть призвести до унікального аудіовиходу, який потім хешується.
- Плагіни та розширення браузера: Список встановлених плагінів браузера (наприклад, переглядачі PDF, хоча зараз менш поширені) та іноді навіть розширень може бути перерахований, що додає унікальності.
- Апаратна паралельність: Кількість логічних ядер процесора, доступних браузеру (
navigator.hardwareConcurrency). - Пам'ять пристрою: Приблизний обсяг пам'яті пристрою в гігабайтах (
navigator.deviceMemory). - Мовні налаштування: Заголовок HTTP
Accept-Languageта властивістьnavigator.languageвказують на бажану мову користувача. - Часовий пояс: Локальний часовий пояс користувача відносно UTC.
- HTTP-заголовки: Інші HTTP-заголовки, такі як
DNT(Do Not Track), можуть надавати додаткові, хоча й менш унікальні, дані. - Розкриття локальної IP-адреси WebRTC: Хоча це не є суто атрибутом відбитків, WebRTC у деяких конфігураціях може розкривати реальні локальні та публічні IP-адреси користувача, навіть якщо він знаходиться за проксі або VPN. Сучасні браузери впровадили засоби пом'якшення для цього.
Чому браузерний відбиток є загрозою
Браузерний відбиток створює значні виклики для конфіденційності та анонімності в Інтернеті:
- Постійне відстеження: Він дозволяє суб'єктам відстежувати користувачів в Інтернеті незалежно від зміни IP-адреси, блокування файлів cookie або використання режимів інкогніто. Це підриває ефективність багатьох поширених інструментів конфіденційності.
- Ерозія конфіденційності: Організації можуть створювати детальні профілі поведінки користувачів, інтересів та демографічних даних без явної згоди, що викликає занепокоєння щодо агрегації даних та спостереження.
- Цільова реклама та цінова дискримінація: Профілі користувачів, отримані з відбитків, можуть використовуватися для високоцільової реклами. У деяких випадках це може призвести до цінової дискримінації, коли користувачам показують різні ціни на товари чи послуги на основі їхнього передбачуваного профілю (наприклад, уявного багатства або місцезнаходження).
- Заходи проти ботів та контроль доступу: Хоча часто використовуються для законних цілей безпеки (наприклад, виявлення шахрайської діяльності або ботнетів), вони також можуть обмежувати доступ для законних користувачів, які використовують інструменти конфіденційності.
- Обхід проксі: Для користувачів, які покладаються на проксі-сервіси для маскування своєї IP-адреси, браузерний відбиток може звести нанівець значну частину передбачуваної анонімності, надаючи постійний ідентифікатор, який пов'язує сесії навіть зі змінною IP-адресою.
Стратегії захисту від браузерного відбитка
Захист від браузерного відбитка вимагає багатошарового підходу, оскільки жодне окреме рішення не забезпечує повної невразливості.
Проксі-сервіси та їхні обмеження
Проксі-сервіси є важливими для маскування вашої IP-адреси, що запобігає відстеженню на основі IP та геолокації. Однак проксі не змінює внутрішні атрибути вашого браузера або операційної системи. Тому, хоча ваша IP-адреса прихована, унікальний відбиток вашого браузера залишається видимим для веб-сайтів. Проксі є фундаментальним компонентом для онлайн-анонімності, але має бути доповнений іншими контрзаходами проти відбитків.
Конфігурація браузера та практики використання
- Використовуйте браузери, орієнтовані на конфіденційність:
- Tor Browser: Спеціально розроблений для того, щоб усі користувачі виглядали максимально ідентично, стандартизуючи багато атрибутів відбитків. Він також маршрутизує трафік через мережу Tor для анонімності IP.
- Brave Browser: Включає вбудоване блокування реклами та трекерів, а також за замовчуванням активно рандомізує або блокує багато векторів відбитків.
- Firefox з
privacy.resistFingerprinting: Увімкненняprivacy.resistFingerprintingуabout:configFirefox намагається представити загальний відбиток. Це включає стандартизацію роздільної здатності екрана за допомогою "letterboxing", зменшення інформації, доступної з об'єктівnavigator, та відключення певних API. - Посилені браузери на базі Chromium: Деякі спеціалізовані форки Chromium зосереджені на підвищеній конфіденційності, часто включаючи захист від відбитків.
- Вимикайте JavaScript (вибірково): Більшість складних технік відбитків покладаються на JavaScript. Вимкнення JavaScript значно зменшує поверхню атаки, але порушить функціональність багатьох веб-сайтів. Використовуйте розширення браузера, такі як NoScript, щоб увімкнути JavaScript лише для довірених доменів.
- Блокуйте сторонні файли cookie та сховища: Хоча це безпосередньо не стосується відбитків, блокування сторонніх файлів cookie та інших механізмів постійного зберігання (
localStorage,sessionStorage,IndexedDB) запобігає традиційному відстеженню та зменшує загальний обсяг даних. - Підробка User-Agent: Ручна зміна рядка user-agent можлива, але часто неефективна ізольовано. Веб-сайти можуть виявити невідповідності, якщо інші атрибути браузера (наприклад, роздільна здатність екрана, встановлені шрифти) не відповідають підробленому user-agent.
- Блокування Canvas/WebGL: Налаштуйте свій браузер або використовуйте розширення для блокування або рандомізації виводу Canvas та WebGL API.
resistFingerprintingу Firefox включає засоби пом'якшення для них. - Обмежте доступ до API: Вимкніть або обмежте доступ до певних API браузера (наприклад, Battery Status API, WebRTC, якщо він не потрібен, а ваш браузер не пропонує надійних засобів пом'якшення).
- Регулярно очищуйте дані браузера: Хоча це менш ефективно проти постійних відбитків, регулярне очищення файлів cookie, кешу та даних сайту допомагає запобігти іншим формам відстеження та зменшує зберігання даних.
Розширення браузера
- uBlock Origin: Крім блокування реклами, uBlock Origin може блокувати багато скриптів та мережевих запитів від відомих доменів відстеження, тим самим зменшуючи обсяг даних, доступних для відбитків.
- CanvasBlocker: Спеціально розроблений для запобігання або підробки Canvas та WebGL відбитків шляхом зміни виводу цих API.
- Privacy Badger: Вчиться ідентифікувати та блокувати невидимі трекери на основі їхньої поведінки, допомагаючи зменшити міжсайтове відстеження.
- NoScript: Забезпечує детальний контроль над JavaScript, плагінами та іншим виконуваним вмістом на основі кожного сайту, дозволяючи користувачам вимикати скрипти, які сприяють відбиткам.
Заходи на рівні операційної системи
- Віртуальні машини (ВМ): Використання нового екземпляра віртуальної машини для конфіденційного перегляду може забезпечити послідовне та ізольоване середовище. Скидання або видалення ВМ після використання забезпечує новий, загальний відбиток для наступних сесій.
- Спеціалізовані середовища перегляду: Операційні системи, такі як Tails OS, розроблені для максимальної анонімності, застосовуючи суворі заходи конфіденційності та маршрутизуючи весь інтернет-трафік через мережу Tor.
Розширені техніки
- Рандомізація атрибутів браузера: Досвідчені користувачі або спеціалізовані інструменти можуть намагатися активно рандомізувати різні атрибути браузера (наприклад, незначно змінювати вивід canvas, обертати рядки user-agent, імітувати роздільну здатність екрана). Це складно і вимагає ретельної реалізації, щоб уникнути створення "непослідовного" відбитка, який сам по собі може бути виявлений як спроба уникнути відстеження.
Порівняння стійкості до браузерного відбитка
| Функція/Браузер | Tor Browser | Brave Browser | Firefox (resistFingerprinting) | Standard Chrome/Edge |
|---|---|---|---|---|
| Маскування IP | Вбудовано (Tor) | Ні (потрібен VPN/Proxy) | Ні (потрібен VPN/Proxy) | Ні (потрібен VPN/Proxy) |
| Підробка Canvas | Так | Так | Так | Ні |
| Підробка WebGL | Так | Так | Так | Ні |
| Перелік шрифтів | Стандартизовано | Пом'якшено | Пом'якшено | Повний |
| User-Agent | Стандартизовано | За замовчуванням | Стандартизовано | Повний |
| Роздільна здатність екрана | Letterboxing | За замовчуванням | Letterboxing | Повний |
| Контроль JavaScript | Так (NoScript) | Частковий | Частковий | Повний |
| Загальна стійкість | Висока (мета дизайну) | Середня-Висока | Середня-Висока | Низька |
Приклад коду: Доступ до даних для браузерного відбитка за допомогою JavaScript
Наведені нижче фрагменти JavaScript ілюструють, як веб-сайти отримують доступ до поширених атрибутів браузера, що використовуються для відбитків.
// Accessing navigator object properties
console.log("User Agent:", navigator.userAgent);
console.log("Platform:", navigator.platform);
console.log("Language:", navigator.language);
console.log("Hardware Concurrency (CPU cores):", navigator.hardwareConcurrency);
console.log("Device Memory (GB):", navigator.deviceMemory || 'N/A');
// Accessing screen object properties
console.log("Screen Resolution:", screen.width + "x" + screen.height);
console.log("Color Depth:", screen.colorDepth);
console.log("Pixel Ratio:", window.devicePixelRatio);
// Accessing time zone information
console.log("Time Zone Offset (minutes from UTC):", new Date().getTimezoneOffset());
// Conceptual example of Canvas fingerprinting
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = 200;
canvas.height = 20;
// Draw some text with specific styles
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillStyle = '#f60';
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = '#069';
ctx.fillText('Browser Fingerprint Test', 2, 15);
ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';
ctx.fillText('Browser Fingerprint Test', 4, 17);
// Return the data URL of the canvas content, which will vary based on rendering
return canvas.toDataURL();
}
// To avoid logging a very long string, we just show a part of it conceptually:
// console.log("Canvas Fingerprint (partial data URL):", getCanvasFingerprint().substring(0, 100) + "...");