В современном мире технологий антифрод-системы становятся все более изощренными. Помимо использования 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 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 Safari/537.36 Теперь проверим, какую информацию связанную с User Agent получил сайт с помощью JavaScript:  Сайт получает подробную информацию о браузере, версии браузера, производителе браузера, платформе, размере памяти, поддержки Touch на устройстве, количестве ядер процессора с помощью разных API. #### Заключение User Agent и память браузера — ключевые параметры для уникализации пользователей в антифрод-системах. Их использование в сочетании с другими факторами, такими как Canvas fingerprinting и другими API, позволяет создавать надежные алгоритмы для выявления мошеннической активности. *Bannykh M.V.*