Які сигнали переживають оновлення браузерів? Аналіз стабільності
Ми проаналізували стабільність сигналів на 50 оновленнях Chrome, Firefox і Safari. Ось найбільш і найменш стабільні сигнали для фінгерпринтингу.
Оновлення браузерів — природний ворог фінгерпринтингу пристроїв. Кожні 4–6 тижнів Chrome, Firefox і Safari випускають нові версії, які можуть змінювати значення сигналів — змінювати рядки user-agent, модифікувати поведінку рендерингу, додавати чи прибирати API. Як зазначено в рекомендаціях W3C щодо фінгерпринтингу, браузери активно працюють над обмеженням площі поверхні, придатної для фінгерпринтингу. Для систем фінгерпринтингу, які трактують усі сигнали однаково, кожне оновлення — це потенційний розрив ідентичності для мільйонів відвідувачів.
Ми провели комплексний аналіз стабільності на 50 оновленнях браузерів, щоб відповісти на фундаментальне питання: на які сигнали можна покладатися, а які вас зрадять?
Методологія
Ми інструментували 200 фізичних пристроїв на 5 операційних системах (Windows 10, Windows 11, macOS Ventura, macOS Sonoma, Ubuntu 22.04) і 3 браузерах (Chrome, Firefox, Safari). Кожен пристрій щодня виконував автоматизований збір сигналів упродовж 14 місяців, охопивши 50 великих оновлень версій браузерів: 24 релізи Chrome, 16 релізів Firefox і 10 релізів Safari.
Для кожного сигналу ми відстежували: як часто змінювалося значення, чи корелювала зміна з оновленням браузера або зовнішнім чинником (оновлення драйвера, патч ОС) та величину зміни (повна заміна значення проти незначної варіації).
Рівні стабільності
Рівень 1: Непохитні (99,5%+ стабільності)
Ці сигнали змінювалися лише тоді, коли змінювалося фізичне обладнання або оновлювалися драйвери, — ніколи через самі лише оновлення браузерів.
Апаратний паралелізм (navigator.hardwareConcurrency): 99,97% стабільності. Змінився лише на 1 пристрої, де оновлення BIOS вплинуло на hyperthreading. Пам'ять пристрою (navigator.deviceMemory): 99,98% стабільності. Один пристрій під час дослідження оновили з 8 ГБ до 16 ГБ. Роздільність екрана та глибина кольору: 99,92% стабільності. Зміни корелювали із заміною моніторів і подіями докінг-станцій. Максимальний розмір текстури WebGL: 99,99% стабільності. Нуль змін, пов'язаних з браузером. Змінився один раз на пристрої, який отримав оновлення драйвера NVIDIA. Частота дискретизації аудіо: 100% стабільності. Нуль змін на всіх 200 пристроях і 50 оновленнях. Це найстабільніший сигнал, який ми відстежуємо.
Рівень 2: Переважно стабільні (95–99,5%)
Ці сигнали час від часу змінюються з оновленнями браузерів, але залишаються стабільними на більшості релізів.
Canvas 2D fingerprint: 97,8% стабільності. Зміни сталися в Chrome 118 (оновлення рушія рендерингу шрифтів), Chrome 122 (зміна субпіксельного згладжування) і Firefox 121 (оновлення шейпінгу тексту). Кожна зміна одночасно зачіпала всі пристрої на цьому браузері — виявний патерн, який ми обробляємо зіставленням з урахуванням версії браузера. Рядок WebGL Renderer: 98,1% стабільності. Chrome інколи переформатовує рядок обгортки ANGLE. Базова інформація про GPU не змінюється, але текстове подання зсувається. Ми парсимо модель GPU з рядка, а не хешуємо рядок безпосередньо. Список шрифтів: 96,4% стабільності. Оновлення ОС інколи додають або прибирають системні шрифти. Оновлення браузерів рідко впливають на перелічення шрифтів, але Chrome 120 змінив порядок, у якому повідомляються шрифти, що зламало фінгерпринтинг шрифтів на основі хешів. Ми використовуємо порівняння на основі множин (подібність множин) замість упорядкованого хешування.
Рівень 3: Помірна стабільність (80–95%)
Ці сигнали змінюються з відчутною частотою, але все ж дають корисну ідентифікаційну цінність між змінами.
Встановлені плагіни: 89,2% стабільності. Продовжуване скорочення Chrome масиву плагінів (navigator.plugins) повністю прибрало видимість плагінів у деяких контекстах. Firefox зберіг перелічення плагінів. Safari обмежив його стандартним набором. Виявлення CSS-можливостей: 91,7% стабільності. З кожним релізом браузера додаються нові CSS-можливості, що змінює набір можливостей, які виявляє наше CSS-зондування. Ми зважуємо нові можливості нижче за усталені, щоб зменшити вплив. Підтримка сенсорного вводу: 93,1% стабільності. Настільні браузери інколи змінюють повідомлену підтримку сенсорного вводу, коли Chrome коригує виявлення емуляції пристроїв.
Рівень 4: Волатильні (<80%)
Ці сигнали часто змінюються й ніколи не повинні бути первинними опорами ідентифікації.
Рядок User Agent: 42,3% стабільності. Ініціатива Chrome зі скорочення User-Agent кілька разів змінювала формат рядка. Firefox оновлює номер версії з кожним релізом. Safari регулярно модифікує рядок версії WebKit. Раніше це було хребтом простих систем фінгерпринтингу — тепер ці системи зламані. Тип з'єднання (navigator.connection): 68,4% стабільності. Змінюється з перемиканням мережі (WiFi на стільниковий, різні мережі WiFi). Battery API: 71,2% стабільності. Варіюється зі станом заряду та доступністю API браузера. Chrome обмежив доступ до Battery API в деяких контекстах. Доступна площа екрана: 76,8% стабільності. Змінюється з видимістю панелі завдань, керуванням вікнами та коригуванням масштабування дисплея.
Порівняння між браузерами
Chrome — найволатильніший браузер щодо стабільності фінгерпринтингу. Google активно працює над зменшенням придатності до фінгерпринтингу, а це означає, що оновлення Chrome ламають більше сигналів, ніж оновлення Firefox чи Safari. За період нашого дослідження:
Chrome спричинив зміни сигналів у 3,2% сесій збору. Firefox спричинив зміни сигналів у 1,8% сесій збору. Safari спричинив зміни сигналів у 1,1% сесій збору.
Нижча волатильність Safari частково пояснюється тим, що Apple випускає менше релізів на рік, а частково тим, що заходи Safari проти фінгерпринтингу (Intelligent Tracking Prevention) працюють на мережевому рівні, а не змінюють значення, що повертають API.
Практичні рекомендації
На основі цього аналізу ми даємо п'ять рекомендацій для продакшн-систем фінгерпринтингу:
Ніколи не використовуйте user-agent як опору ідентифікації. Це найменш стабільний відмітний сигнал. Використовуйте його лише для визначення браузера та оцінювання впевненості Рівня 3.
Відокремлюйте апаратні сигнали від програмних. Апаратні сигнали (GPU, екран, аудіо) у 40 разів стабільніші за програмні (user agent, плагіни, CSS-можливості). Зважуйте їх відповідно.
Використовуйте порівняння на основі множин для перелічуваних сигналів. Списки шрифтів, списки плагінів і результати виявлення можливостей слід порівнювати за допомогою подібності множин або схожих метрик відстані між множинами, а не впорядкованого хешування. Зміни порядку поширені; зміни вмісту трапляються рідко.
Впроваджуйте зіставлення з урахуванням версії браузера. Коли Chrome 118 одночасно змінює рендеринг canvas для всіх користувачів Chrome, ваша система має розпізнати це як оновлення браузера, а не масовий розрив ідентичності. Відстежуйте версії браузерів і застосовуйте специфічні для версії допуски зіставлення.
Безперервно моніторте стабільність сигналів. Наші відсотки стабільності базуються на історичних даних. Майбутні оновлення браузерів можуть змінити профіль стабільності будь-якого сигналу. Ми ведемо безперервний моніторинг і автоматично коригуємо ваги сигналів, коли стабільність змінюється.
Вплив на tracio.ai
Наша архітектура багаторівневої ідентифікації V3 безпосередньо відображає цей аналіз стабільності. Сигнали Рівня 1 (обладнання) несуть 60% ваги. Сигнали Рівня 2 (рендеринг, шрифти) несуть 30% ваги. Сигнали Рівня 3 (метадані браузера, з'єднання) несуть 10% ваги. Це зважування гарантує, що ідентифікацію рухають найстабільніші сигнали, тоді як волатильні сигнали додають до оцінювання впевненості, не спричиняючи розривів ідентичності.
Результат: 99,5% стабільності ідентифікації на 50 оновленнях браузерів проти 69% у систем, що використовують плоский фінгерпринтинг на основі хешів. Різниця не в алгоритмічній кмітливості — це емпіричний аналіз сигналів, застосований до архітектурних рішень.