WebGL (Web Graphics Library) — это мощная технология для рендеринга 3D-графики в браузерах, которая использует возможности графического процессора (GPU). В отличие от Canvas, WebGL не только позволяет работать с 2D-графикой, но и открывает перед веб-разработчиками новые горизонты 3D-отрисовки и вычислений на GPU. Благодаря способности генерировать уникальные результаты, WebGL нашел свое применение в антифрод-системах, где его возможности помогают отслеживать и идентифицировать устройства пользователей через уникальные цифровые отпечатки. #### История создания и предназначение WebGL WebGL был разработан как дополнение к Canvas и впервые представлен организацией Khronos Group в 2011 году. Как открытый стандарт для рендеринга графики на веб-страницах, WebGL позволил отказаться от сторонних плагинов, таких как Flash или Java, что значительно повысило производительность и безопасность веб-приложений. WebGL расширил возможности HTML5 и JavaScript, добавив поддержку 3D-рендеринга и улучшив взаимодействие с GPU. Это делает его полезным не только для игр, визуализации и научных исследований, но и для антифрод-систем, где WebGL может помочь уникализировать устройства пользователей через "графический отпечаток". #### Технологические возможности WebGL WebGL предлагает разработчикам ряд уникальных инструментов для создания сложной графики: - Работа с 3D-графикой. WebGL поддерживает рисование сложных трехмерных моделей и текстур, используя аппаратное ускорение. Это позволяет строить реалистичные визуальные объекты, которые отличаются высокой производительностью. - Доступ к шейдерам. WebGL использует шейдеры (программы, выполняемые GPU), которые позволяют детализировать отображение объектов, создавая сложные текстурные эффекты и более высокое качество графики. - Анимация и интерактивность. Возможности WebGL позволяют строить динамичные веб-приложения, визуализировать научные данные и создавать сложные модели, такие как виртуальные миры и интерактивные симуляции. Эти особенности делают WebGL инструментом в различных сферах, а также — полезным помощником в антифрод-системах для обеспечения уникализации и защиты от мошенничества. #### WebGL в антифрод-системах: защита от мошенников Современные антифрод-системы используют графический отпечаток WebGL для идентификации устройств. В отличие от Canvas, WebGL отпечаток строится не только на основе пиксельного рендеринга, но также зависит от GPU и поддерживаемых браузером функций. Это помогает антифрод-системам создавать уникальные отпечатки для каждого устройства и выявлять подозрительные действия. ##### Как WebGL помогает идентифицировать пользователя? При рендеринге объектов на WebGL различные устройства могут выдавать незначительные различия в изображении из-за аппаратных особенностей GPU, шейдеров и драйверов. Факторы, влияющие на результаты рендеринга, включают: - Графический процессор — разные модели GPU по-разному обрабатывают 3D-объекты и текстуры. - Поддерживаемые шейдеры и расширения — набор поддерживаемых шейдеров, а также спецификации и точность их исполнения, зависят от устройства. ##### Настройки браузера и особенности рендеринга. Антифрод-системы используют эти особенности для создания уникального отпечатка, выявляя различия на уровне графики и характеристик, таких как размеры текстур и максимальные значения uniform-переменных. Совокупность этих параметров позволяет создать графический отпечаток, который в сочетании с другими данными помогает идентифицировать пользователя. ##### **Методы подмены отпечатков** **WebGL** Мошенники используют различные методы, чтобы подделать графические отпечатки WebGL и обойти антифрод-системы. Среди них можно выделить: - Имитация шейдеров и текстур. Злоумышленники могут модифицировать шейдеры и текстуры с добавлением шума, что помогает изменять отпечаток WebGL. - Внедрение заранее сохраненных отпечатков. Некоторые программы способны подменять отпечатки, выдавая результаты, заранее записанные с других устройств, что затрудняет их обнаружение. ##### **Какую же информацию веб-ресурс может получить из браузера с помощью WebGL?** Полный список свойств и значений WebGL для браузера можно посмотреть на тестовой странице https://test-webapi.tech/webglfull, наиболее значимые параметры для антифрод-систем мы рассмотрим подробнее, но сначала проверим как работает наложение шума в WebGL. Подробно о том как формируются значения при снятии отпечатка мы рассказывали в статье "Технология Canvas в Антифрод-системах и методы идентификации пользователей", сейчас же проведём небольшой тест, посмотрим на отпечаток WebGL браузера Chrome и антидетект-браузера без шума и с использованием шума, откроем в каждом из них страницу https://browserleaks.com/webgl Браузер Chrome: Обратим внимание на эти значения: WebGL Report Hash: af7f2acd5c7ab718eb78ab2d368860bd WebGL Image Hash: 31512603d8157a55323d306cc161fb49 Unmasked Vendor: Google Inc. (NVIDIA) Unmasked Renderer: ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11) Антидетект-браузер без шума: Антидетект-браузер с использованием шума: WebGL Report Hash: af7f2acd5c7ab718eb78ab2d368860bd WebGL Image Hash: 31512603d8157a55323d306cc161fb49 Unmasked Vendor: Google Inc. (NVIDIA) Unmasked Renderer: ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11) WebGL Report Hash: 251d629a393c4f10bfffe3b506696fdd WebGL Image Hash: 61b18870e8f14f0058bc5533468c685c Unmasked Vendor: Google Inc. (NVIDIA) Unmasked Renderer: ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 Ti (0x00001C8C) Direct3D11 vs_5_0 ps_5_0, D3D11) По результатам тестов мы видим, что значения при наложении шума изменились, и можем сделать вывод, что антидетект-браузер успешно подменяет наш отпечаток WebGL. ##### Как антифрод-системы определяют подмену отпечатка WebGL? Антифрод-системы используют методы, позволяющие распознать подделку отпечатка WebGL: - Проверка отклонений. Система анализирует и сравнивает отпечаток WebGL с параметрами устройства, такими как максимальное количество uniform-переменных и поддерживаемые расширения. Если значения не совпадают с реальными характеристиками устройства, это может указывать на подделку. - Искажение рендеринга. Антифрод-системы могут создавать изображения и проверять, как устройства рендерят определенные объекты. Например, если WebGL-рендеринг на устройстве не соответствует стандартным параметрам, это может сигнализировать о подмене. - Тестирование стабильности параметров. В системе могут быть тесты, проверяющие стабильность работы шейдеров и текстур, поскольку их изменение может выявить поддельный GPU. Наиболее важными параметрами для антифрод-систем в WebGL являются: информация об устройстве (unmaskedVendor, unmaskedRenderer, vendor, renderer, shadingLanguage, version, shadingLanguage2, version2), технические характеристики (maxFragmentUniformVectors, maxTextureSize) и extensions. Антидетект-браузеры успешно подменяют информацию об устройстве, посмотрим, как антифрод-системы могут проверять технические параметры: проверим реальные значения maxFragmentUniformVectors откроем в браузере нашу тестовую страницу https://test-webapi.tech/webglmaxfr, которая проверяет максимальное количество векторов униформ под нагрузкой. Браузер Chrome на компьютере: Реальное значение соответствует заявленному в свойствах браузера. Так как десктоп-устройства обычно имеют значение maxFragmentUniformVectors равное 1024, откроем эту же страницу на мобильном телефоне Android в браузере Chrome: В браузере мобильного телефона данные, полученные из свойств браузера, так же соответствуют реальным характеристикам. Теперь попробуем в антидетект-браузере подменить значения на значения телефона и повторим тест. Откроем нашу тестовую страницу: Антидетект-браузер с подменой значения maxFragmentUniformVectors не прошёл проверку, и это логично ведь мы запускаем его на нашем компьютере со значением maxFragmentUniformVectors:1024 Проведём аналогичный тест для maxTextureSize, откроем в браузере нашу тестовую страницу https://test-webapi.tech/webglmaxt, которая проверяет под нагрузкой максимальный размер текстуры в контексте Webgl. Браузер Chrome на компьютере: Реальное значение соответствует заявленному в свойствах браузера. Так как десктоп-устройства обычно имеют значение maxTextureSize равное 16384, откроем эту же страницу на мобильном телефоне Android в браузере Chrome: В браузере мобильного телефона данные, полученные из свойств браузера, так же соответствуют реальным характеристикам. Теперь попробуем в антидетект-браузере подменить значения на значения телефона и повторим тест Проверим значение на сайте browserleaks.com Откроем нашу тестовую страницу Антидетект-браузер с подменой значения maxTextureSize не прошёл проверку, наш тест обнаружил, что размер текстуры 4097поддерживается нашим браузером, и это логично, ведь мы запускаем его на нашем компьютере со значением maxTextureSize:16384 ##### **Расширения** **WebGL** Рассмотрим каким образом антифрод системы могут использовать информацию о расширениях WebGL для идентификации пользователей. Список расширений отличаются на уровне типов устройств и производителей. Для идентификации пользователей антифрод-системами может использоваться проверка поддержки каждого из известных расширений в браузере пользователя. Посмотрим на простом примере как это может выглядеть: В примере, для упрощения, напротив каждого расширения WebGL указаны две цифры, первое значение указывает на то, объявлено или нет расширение в свойствах браузера, вторая цифра указывает на то, поддерживается расширение или нет после проверки тестированием. В результате такого большого количества значений можно получить достаточно уникальный хэш для каждого пользователя. #### **Тесты производительности** **WebGL** На тестовой странице создадим программу, которая будет проверять производительность устройства и вычислим время, за которое наша программа будет выполняться. Результаты для десктоп-устройств: NVIDIA GeForce RTX 3060: 2023.6 мс AMD Radeon RX580: 1132.0 мс AMD Radeon™: 1611.2 мс Intel, UHD 620: 2576.1 мс Vulkan 1.3.0: 1364.2 мс Результаты для мобильных устройств: Mali-G77: 3369.3 мс Mali-G76: 5111.1 мс Adreno™ 642L: 4534.0 мс Adreno™ 642: 5763.3 мс Adreno™ 618: 9821.0 мс По результатам теста заметно, что мобильные устройства намного дольше справляются с отрисовкой задания WebGL, но значительную разницу во времени выполнения удаётся получить только в тестах со сложными заданиями, которые навряд ли могут быть применены в антифрод-системах, в тестах с простыми заданиями достаточно проблематично делать выводы о производительности устройств оценивая время, затраченное на выполнение заданий на отрисовку графики WebGL. ##### **WebGL** **на примере** **Amazon** **и** **Facebook** Рассмотрим на примере двух сайтов, какие данные они получают о пользователе с помощью технологии WebGL. Откроем главную страницу Amazon, и с помощью инструментов разработчика поищем в java sсrypt файлах функции, в которых встречается “renderer”, “canvas”, “webgl”,”vendor”, и исследуем, какие данные получает сайт с помощью этих функций. В результате мы увидим, что сайт Amazon на главной странице собирает информацию о свойствах Vendor, Renderer и Extensions. Повторим проверку на сайте Facebook. Сайт Facebook на странице входа в аккаунт собирает информацию о Vendor, Renderer из браузера пользователя. Можем сделать вывод, что при создании новых аккаунтов на этих сайтах, желательно, чтобы проверяемые свойства WebGL различались между аккаунтами, а при повторном использовании/входе - свойства не менялись в рамках одного профиля. ##### **Frames Per Second (FPS)** Этот параметр измеряет частоту, с которой обновляется изображение. WebGL, позволяет разработчикам получать данные о FPS непосредственно в браузере, что часто используется в антифрод-системах. У обычного пользователя, в подавляющем большинстве случаев, значение FPS находится на уровне 60 и выше, в то время как программы часто снижают это значение до 30, с целью снизить нагрузку на оборудование при работе. Такое изменение FPS в меньшую сторону для антифрод-систем является важным показателем использования автоматизации действий в браузере. #### Заключение Во многих антифрод-системах на популярных ресурсах технология WebGL используется и позволяет не только идентифицировать устройства пользователей через уникальные графические отпечатки, но и предоставляет инструменты для выявления и предотвращения мошенничества. Применение методов проверки на подмену, анализа стабильности параметров и сравнения с реальными характеристиками устройств значительно повышает эффективность антифрод-систем. Подмена значений и использование шума антидетект-браузерами в WebGL не является волшебным способом для обхода защиты популярных сайтов. В заключении статьи представим возможный метод определения шума WebGL: Изменение результатов отрисовки в WebGL с помощью наложения шума основано на подмене значений цвета пикселей, а конкретно цвета полупрозрачных пикселей. Представленный подход находится в стадии тестирования и не охватывает все возможные варианты подмены. Приступим к тестам: Откроем страницу https://test-webapi.tech/webgltamper в обычном браузере Chrome: Повторим в антидетект-браузере без использования шума: Теперь проверим в антидетект-браузере с наложением шума WebGL: Разберёмся каким образом в этом подходе вычисляется наложение шума. Сначала мы получаем hex из буфера webgl, и раскодируем hex в обратном порядке кодированию, в результате получаем значение цвета для каждого пикселя в изображении, последовательность этих действий полностью соответствует получению значений в антифрод-системах. На следующем шаге мы сравниваем цвет пикселя основной части фигуры, отрисованной с помощью WebGL (красный), и цвет полупрозрачного пикселя, который находится на границе белого фона и треугольника, в нашем случае мы сравниваем значения красного оттенка R и прозрачности A, в результате чего получаем разницу значений в процентах. На обычных устройствах разница между красными оттенками и прозрачностью двух таких пикселей должна быть одинаковой (в теории наш цвет пикселя должен изменяться на такое же значение, на которое изменяется значение его прозрачности), а при наложении шума способом замены цветов полупрозрачных пикселей, разница красных оттенков и прозрачности между двумя пикселями изменяется. На скриншотах из теста мы видим, что разница между красными оттенками без наложения шума имеет значение R: 50.20% и разница в прозрачности этих же пикселей A: 50.20%, при наложении шума в антидетект-браузере мы получаем следующие значения R: 48.63% и A: 50.59% В этой статье мы разобрали каким образом антифрод-системы могут использовать технологию WebGL для идентификации пользователей, обнаружения пользователей, использующих подмену отпечатка. Технология WebGL позволяет собрать большое количество информации для идентификации пользователей, по этой причине она часто используется в антифрод-системах. В то же время изменение информации о видеокарте (unmaskedVendor, unmaskedRenderer, vendor, renderer, shadingLanguage, version, shadingLanguage2, version2) в рамках одной линейки производителя видеокарт позволяет изменить отпечаток и не вызывать подозрение у антифрод-систем. В следующей статье мы продолжим разбор технологий браузера, используемых в антифрод-системах. _Bannykh M.V._