WebGL Fingerprinting: ваш GPU идентифицирует браузер
Браузер и устройство

WebGL Fingerprinting: ваш GPU идентифицирует браузер

WebGL fingerprinting считывает производителя GPU, модель и результат рендеринга для создания стабильного идентификатора, не зависящего от cookies.

8 мин чтения·

WebGL fingerprinting использует 3D graphics API браузера для считывания производителя GPU, модели и результатов рендеринга на уровне драйвера — создавая идентификатор устройства, который сохраняется во всех браузерах на одной машине и абсолютно не зависит от очистки cookies или смены сети. Проверьте, что раскрывает ваш браузер, прямо сейчас на whatsmy.fyi.

TL;DR

WebGL fingerprinting эксплуатирует WebGL API — тот же, что рендерит браузерные игры и 3D-карты — для извлечения строки производителя GPU, названия модели и пиксельного вывода рендеринга. Каждая модель GPU даёт немного разные результаты для идентичных команд рендеринга из-за различий в округлении чисел с плавающей точкой, поведении драйвера и аппаратной архитектуре. В сочетании с другими сигналами данные WebGL могут уникально идентифицировать 99,24% браузеров. Никакого хранения данных, ничего нельзя удалить, и VPN не может этому помешать.

Что такое WebGL Fingerprinting?

WebGL fingerprinting — техника отслеживания в браузере, злоупотребляющая WebGL API — интерфейсом JavaScript для рендеринга аппаратно-ускоренной 2D и 3D графики — для считывания специфических для устройства характеристик GPU. В отличие от отслеживания через cookies, это не требует хранения данных и не зависит от режима инкогнито или очистки данных браузера.

Техника имеет два взаимодополняющих компонента. Первый считывает статические аппаратные метаданные напрямую из API браузера: название производителя GPU, модель GPU и полный список расширений WebGL, поддерживаемых вашим драйвером. Второй компонент рендерит скрытую 3D-сцену и считывает обратно пиксельные данные — процесс, дающий немного разные результаты на каждом сочетании аппаратного обеспечения и драйвера.

WebGL fingerprinting тесно связан с canvas fingerprinting, но нацелен на другой — и более информативный — уровень вашей системы. Canvas fingerprinting фиксирует различия в 2D-рендеринге шрифтов; WebGL fingerprinting напрямую проникает в аппаратное обеспечение GPU.

Как работает WebGL Fingerprinting?

Отпечаток WebGL формируется в три этапа, каждый занимает несколько миллисекунд и полностью невидим для пользователя.

Этап 1 — Считывание аппаратных параметров

Скрипт вызывает gl.getParameter() с десятками констант для извлечения аппаратных возможностей. Большинство значений сами по себе безвредны — максимальный размер текстуры, максимальные размеры области просмотра, поддерживаемая точность шейдеров GLSL. Но одно расширение WebGL меняет всё.

Расширение WEBGL_debug_renderer_info раскрывает две константы, предназначенные для отладки: UNMASKED_VENDOR_WEBGL и UNMASKED_RENDERER_WEBGL. При запросе они возвращают точную, немаскированную строку производителя GPU — например, "NVIDIA Corporation" — и полную строку рендерера GPU — например, "NVIDIA GeForce RTX 4080/PCIe/SSE2". Эти строки одни могут сузить популяцию посетителей до менее чем 100 человек.

Этап 2 — Рендеринг 3D-сцены

Скрипт создаёт скрытый WebGL canvas и рендерит сложную сцену: градиенты, расчёты освещения и прозрачную геометрию с конкретными текстурными координатами. Поскольку арифметика с плавающей точкой обрабатывается по-разному шейдерными блоками каждого GPU — NVIDIA, AMD, Intel и Apple Silicon реализуют немного разное поведение округления — результирующие пиксели различаются на бинарном уровне.

Этап 3 — Хеш пикселей через readPixels()

Скрипт вызывает gl.readPixels() для извлечения сырого буфера пикселей RGBA из отрендеренной сцены и хеширует его — обычно с помощью MurmurHash — в компактное значение отпечатка. Этот хеш стабилен между сессиями браузера, в режиме инкогнито и после перезагрузки. Он меняется только при обновлении драйвера GPU или замене физического оборудования.

// Этап 1 — считывание немаскированных строк GPU через расширение отладки
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');

const ext = gl.getExtension('WEBGL_debug_renderer_info');
if (ext) {
  const vendor   = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
  const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
  // напр. "NVIDIA Corporation", "NVIDIA GeForce RTX 4080/PCIe/SSE2"
}

// Этап 2 — сбор параметров аппаратных возможностей
const params = {
  maxTextureSize:     gl.getParameter(gl.MAX_TEXTURE_SIZE),
  maxViewportDims:    gl.getParameter(gl.MAX_VIEWPORT_DIMS),
  supportedExts:      gl.getSupportedExtensions(),
  highFloatPrecision: gl.getShaderPrecisionFormat(
    gl.FRAGMENT_SHADER, gl.HIGH_FLOAT
  ).precision,
};

// Этап 3 — рендеринг сцены и извлечение пикселей
const pixels = new Uint8Array(4 * canvas.width * canvas.height);
gl.readPixels(
  0, 0, canvas.width, canvas.height,
  gl.RGBA, gl.UNSIGNED_BYTE, pixels
);
// Хеш 'pixels' → стабильный отпечаток GPU

Насколько уникален WebGL Fingerprint?

WebGL — один из сигналов с наивысшей энтропией в браузерном финп. Слой параметров GPU один даёт 10–15 бит энтропии — достаточно для идентификации марки и модели вашего оборудования. Хеш рендеринга добавляет дополнительную дискриминацию между устройствами с идентичными моделями GPU, но разными версиями драйверов.

НаходкаЗначениеИсточник
Энтропия от строк производителя и рендерера GPU10–15 битCao et al., NDSS 2017
Энтропия только от вывода рендеринга WebGL~5,7 битИсследование Fingerprint.com
Пользователи ПК, уникально идентифицированные (комбинированные сигналы)99,24%Исследование Fingerprint.com
Мобильные пользователи, уникально идентифицированные94,5%Исследование Fingerprint.com
Популяция, суженная только строкой рендерера GPU< 0,01% посетителейИсследование Inria / KU Leuven
Поддержка WebGL 2.0 браузерами (Chrome, Edge, Safari)95–99%BrowserLeaks WebGL Test

Кто использует WebGL Fingerprinting в реальной жизни?

Рекламные сети

Компании в сфере рекламных технологий используют WebGL fingerprinting для отслеживания пользователей на разных сайтах — для поведенческого таргетинга и ограничения частоты показа. По мере того как Safari заблокировал сторонние cookies по умолчанию и Chrome двигался к их отмене, fingerprinting на аппаратном уровне стал привлекательной заменой cookies.

Обнаружение мошенничества и борьба с ботами

Платформы безопасности используют данные WebGL как сигнал обнаружения ботов. Автоматизированные браузеры, запускающие headless Chrome или Puppeteer, часто сообщают строки рендерера GPU, несовместимые с заявленным user-agent. Несоответствия между заявлениями о GPU и доступными расширениями WebGL — сильные индикаторы автоматизации или виртуальных окружений.

Межбраузерное отслеживание

Поскольку строка рендерера WebGL и хеш пикселей получаются из физического оборудования, они остаются одинаковыми в разных браузерах на одной машине. Пользователь, чередующий Chrome, Firefox и Edge для обхода слежки, будет давать одинаковую строку рендерера GPU в каждом браузере.

Как защититься от WebGL Fingerprinting?

  • Tor Browser (наиболее сильная защита): Tor Browser полностью отключает функцию gl.readPixels() и ограничивает WebGL минимальным режимом через webgl.min_capability_mode. Расширение WEBGL_debug_renderer_info заблокировано.
  • Brave Browser (рекомендуется для ежедневного использования): Brave применяет технику Farbling к WebGL: шум на уровне сессии и сайта вводится в вывод пикселей canvas и WebGL. API WebGL также по умолчанию блокируются в контекстах третьих лиц.
  • Firefox с privacy.resistFingerprinting: Установка этого флага в true в about:config полностью отключает расширение WEBGL_debug_renderer_info, возвращая общие значения вместо реальных строк GPU.
  • Safari на устройствах Apple: Safari сообщает общую строку "Apple GPU" вместо конкретных моделей чипов.
  • Что не может VPN: VPN направляет трафик через зашифрованный туннель и скрывает IP-адрес, но не влияет на вывод WebGL. Проверьте работу VPN на whatsmy.fyi.

Часто задаваемые вопросы

Что именно раскрывает WebGL fingerprinting о моём оборудовании?

Как минимум: производитель GPU (NVIDIA, AMD, Intel, Apple, Qualcomm), название модели GPU и иногда версия драйвера — всё это раскрывается через расширение WEBGL_debug_renderer_info. Хеш рендеринга дополнительно кодирует поведение GPU при операциях с плавающей точкой.

Работает ли WebGL fingerprinting в режиме инкогнито?

Да. Режим инкогнито предотвращает сохранение cookies, истории и данных форм на диске — но не меняет GPU или драйвер. Расширение WEBGL_debug_renderer_infoвозвращает те же строки в окне инкогнито, что и в обычном окне.

WebGL fingerprinting мощнее canvas fingerprinting?

Они нацелены на дополняющие измерения уникальности устройства. Canvas fingerprinting фиксирует 2D-различия рендеринга шрифтов. WebGL fingerprinting напрямую раскрывает метаданные производителя и модели GPU и фиксирует 3D различия на уровне шейдеров. WebGL как правило даёт большую энтропию на сигнал. Подробнее в руководстве по canvas fingerprinting.

Может ли WebGL fingerprinting отслеживать меня в разных браузерах?

Да — это одна из его наиболее значимых возможностей. Поскольку строки производителя и рендерера GPU получаются из оборудования, они идентичны в Chrome, Firefox, Edge и любом другом браузере на одной машине.

Связанные статьи

Проверьте свой IP-адрес, местоположение и оценку конфиденциальности — мгновенно.

Без логов. Без слежки. Без внешних API.

Запустить проверку →

Похожие статьи

WebGL Fingerprinting: ваш GPU идентифицирует браузер | whatsmy.fyi