У сучасному світі технологій антифрод-системи стають дедалі витонченішими. Крім використання Canvas, широко застосовуються такі параметри, як User Agent і обсяг пам'яті браузера для унікалізації користувачів і виявлення шахрайських дій. Розглянемо їх докладніше. #### Історія та призначення User-Agent User Agent - це рядок, який браузер надсилає серверу в HTTP-запиті, що містить інформацію про тип пристрою, операційну систему, браузер і його версію. З'явившись ще в епоху раннього інтернету, User Agent слугував для адаптації веб-контенту під різні пристрої. Сьогодні він використовується не тільки для відображення веб-сторінок, а й в антифрод-системах. ###### Де використовується User Agent - **Основний потік браузера:** Рядок User Agent доступний через navigator.userAgent. Він часто аналізується для первинної ідентифікації пристрою. - **Web-Workers:** У worker-потоках доступ до User Agent обмежений, але API на кшталт navigator.userAgentData дозволяє отримати інформацію про платформу. - **Service Workers:** Аналогічно Web-Workers, Service Workers можуть побічно працювати з User Agent, але для прямого аналізу необхідний основний потік. - **HTTP-запити:** Серверна обробка User Agent дає змогу ідентифікувати пристрої та перевіряти їхню відповідність іншим параметрам. ###### Проблеми та підміна User Agent Зловмисники можуть змінювати User Agent через налаштування браузера або використовувати антидетект-браузери. Це створює труднощі в ідентифікації, але сучасні антифрод-системи використовують кореляцію з іншими параметрами (наприклад, IP-адресами або відбитками Canvas і WebGL). Розглянемо на прикладах, який вигляд має рядок User Agent, відкриємо сторінку browserleaks.com/ip у нашому браузері:  User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 ###### З яких даних формується рядок User Agent? Загальний формат згідно зі специфікацією: User Agent: Product/Version (System and Browser Information) Engine/Version (Engine Information) Browser/Version 1. **Продукт/Версія** - ідентифікатор програмного продукту та його версія Приклад: Mozilla/5.0 1. **Додаткова інформація про платформу** Приклад: (Windows NT 10.0; Win64; x64) - Тип платформи - ідентифікатор операційної системи Приклад: Windows NT 10.0 - Архітектура - інформація про архітектуру системи Приклад: Win64; x64 3. **Рушій/Версія** - ідентифікатор і версія рушія рендерингу Приклад: AppleWebKit/537.36 4. **Інформація про сумісність** Приклад: (KHTML, like Gecko) 5. **Інформація про браузер** - ідентифікатор / версія браузера Приклад: Chrome/131.0.0.0.0 6. **Маркер сумісності/версія** з якою заявлена сумісність - Інформація про сумісність з іншими браузерами Приклад: Safari/537.36 Так виглядає рядок User Agent у браузері Chrome на мобільному пристрої:  Зазначимо, що рядок User Agent є основною інформацією для Антифрод-систем, велика кількість даних, зібраних із браузера користувача за допомогою інших API, порівнюється на відповідність з отриманою інформацією в рядку User Agent. Вище ми розглянули приклад отримання User Agent з переданих http-заголовків. Антифрод-системи так само отримують інформацію про браузер за допомогою JavaScript. Відкриємо сторінку browserleaks.com/javascript/ і подивимося на інформацію, отриману з нашого браузера:  На цій сторінці сайт отримує інформацію про браузер і систему користувача за допомогою двох різних API: застарілого Navigator API і сучасного User Agent Client Hints API. Порівняємо отриману інформацію з браузерів Chrome (ліворуч) і Firefox (праворуч):  На цьому прикладі ми бачимо, що між двома браузерами є суттєві відмінності: обсяг інформації, що повертається, формат інформації та обмеження щодо підтримки User Agent Client Hints API у браузері Firefox. Можемо зробити висновок, що Антифрод-системи досить легко можуть визначити невідповідність рядка User Agent і движка браузера. Розглянемо приклад подібної підміни, порівняємо інформацію з браузера Firefox (ліворуч) і антидетект-браузера на базі движка Chromium (праворуч):  Після підміни в антидетект браузері не відповідають значення BuildID, oscpu і на відміну від браузера Firefox є підтримка User Agent Client Hints API. Подібна підміна буде помічена Антифрод-системами дуже швидко. Відкриємо нашу тестову сторінку test-webapi.tech/ua у брузері Chrome і подивимося які ще способи отримання User Agent можуть використовувати Антифрод-системи:  У цьому прикладі ми отримуємо інформацію про User Agent та інформацію про браузер користувача з http-заголовків, в основному потоці браузера, у Web Worker і в Service Worker і порівнюємо отримані результати:  Разом із User Agent із браузера користувача Антифрод системи можуть отримувати інформацію про те, чи є пристрій мобільним, про кількість логічних ядер процесора, об'єм ОЗП пристрою та кількість одночасних точок дотику, підтримуваних пристроєм. Детальніше розглянемо ці параметри на нашій тестовій сторінці:  У розділі Main Thread Data звернемо увагу на: **«sec-ch-ua-mobile»**: «?0» - інформація, отримана з http-заголовків, вказує на те, що ми використовуємо десктоп браузер «maxTouchPoints": 0 - вказує на те, що наш пристрій не підтримує Touch **"hardwareConcurrency »**: 12 - вказує на кількість логічних процесорних ядер, доступних для браузера **"deviceMemory »**: 8 - приблизний обсяг ОЗП у Гігабайтах **"mobile »**: false - інформація, отримана за допомогою API User-Agent Client Hints, вказує на те, що наш пристрій не є мобільним. #### Пам'ять браузера. ###### Виділена пам'ять та її вимірювання Параметри пам'яті браузера (deviceMemory, performance.memory) надають інформацію про доступну пам'ять пристрою. Наприклад: - navigator.deviceMemory повертає обсяг пам'яті в гігабайтах. - performance.memory в основному потоці дає точну інформацію про поточне використання пам'яті. ###### Як використовується пам'ять в антифроді 1. **Ідентифікація пристроїв:** Різні пристрої виділяють пам'ять по-різному. Наприклад, мобільні пристрої часто мають менший обсяг пам'яті, ніж десктопи. 2. **Перевірка на підміну:** Порівняння заявленої пам'яті з фактичним використанням допомагає виявити підробку параметрів. ###### Методи підміни пам'яті - **Приховування реальних значень:** Зловмисники можуть використовувати розширення браузера, щоб змінити значення deviceMemory. - Викривлення даних про продуктивність:** Наприклад, повертати значення, які виглядають правдоподібно, але не відповідають реальним параметрам пристрою. Перевіримо на нашій тестовій сторінці інформацію про: - **jsHeapSizeLimit** - Максимальний розмір пам'яті, який може бути виділений для JavaScript - **totalJSHeapSize** - Загальний розмір виділеної пам'яті - **usedJSHeapSize** - Розмір реально використовуваної пам'яті  У розділі Main **Thread Data - memoryAnalysis** ми перевіряємо розмір пам'яті в браузері і таку перевірку ми запитуємо 3 рази через невеликі проміжки часу. Спробуємо пройти цей тест на мобільному пристрої:  Можемо помітити, що мобільний браузер округлює значення, що віддаються. Повторимо тест в антидетект браузері, використовуючи профіль мобільного пристрою:  Антидетект браузер правильно підмінив тільки значення для однієї властивості jsHeapSizeLimit, формат значень решти властивостей залишився схожий на формат десктоп-браузера. Такий набір значень може бути для Антифрод-систем тригером. Потрібно зазначити, що властивість performance.memory підтримується не у всіх браузерах, і успішне визначення подібних властивостей під час підміни на User Agent браузера, в якому немає підтримки зазначених властивостей, так само викликає підозру в Антифрод-систем. ###### User Agent на прикладі Amazon На прикладі сайту amazon.com розглянемо яку інформацію про User Agent отримує сайт. Розглянемо інформацію, що передається в http-заголовках:  Сайт отримує таку, що цікавить нас, інформацію про пристрій користувача з http-заголовків: device-memory: 8 sec-ch-device-memory: 8 sec-ch-ua: «Google Chrome»;v=«131», «Chromium»;v=«131», «Not_A Brand»;v="24» sec-ch-ua-mobile: ?0 sec-ch-ua-platform: «Windows» sec-ch-ua-platform-version: «10.0.0» user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0.0 Safari/537.36 Тепер перевіримо, яку інформацію пов'язану з User Agent отримав сайт за допомогою JavaScript:  Сайт отримує детальну інформацію про браузер, версію браузера, виробника браузера, платформу, розмір пам'яті, підтримку Touch на пристрої, кількість ядер процесора за допомогою різних API. #### Висновок User Agent і пам'ять браузера - ключові параметри для унікалізації користувачів в антифрод-системах. Їхнє використання в поєднанні з іншими факторами, такими як Canvas fingerprinting та іншими API, дає змогу створювати надійні алгоритми для виявлення шахрайської активності. *Bannykh M.V.*