Строка GPU-рендерера, сборка ОС и шрифты должны совпадать. Узнайте, какие сочетания физически невозможны и мгновенно выдают поддельный профиль.
Большинство несовпадений отпечатка — это просто необычное сочетание: скажем, редкий часовой пояс в паре с распространённым языком, — и системы обнаружения оценивают их вероятностно. Но есть несовпадения посерьёзнее: они описывают сочетания железа и ПО, которые в принципе не могут существовать ни на одном реальном устройстве. Строка GPU-рендерера, которая существует только на Windows, но исходит от браузера, заявляющего, что он работает на macOS, — это не событие с низкой вероятностью. Это противоречие. В этом материале разберём, откуда берутся такие невозможные сочетания — GPU-бэкенды, шрифты, эксклюзивные для конкретной ОС, и эпохи драйверов, — и почему это одни из самых быстрых и надёжных сигналов, на которые может опираться система обнаружения.
Ключевые выводы
- Некоторые несовпадения отпечатка не просто статистически редки — они физически невозможны, потому что архитектура браузера напрямую связывает возможные значения одного сигнала со значениями другого.
- Самый наглядный пример — строка WebGL-рендерера: она называет графический бэкенд (Direct3D, Metal, OpenGL, Vulkan), а каждый бэкенд существует только на определённых операционных системах.
- Списки установленных шрифтов работают так же — Windows, macOS и Linux по умолчанию поставляются с разными семействами шрифтов, которых нет у других, поэтому заявленная ОС с неподходящим набором шрифтов выдаёт подделку.
- Невозможные сочетания дёшево проверять, и они почти не дают ложных срабатываний, поэтому их часто используют как первый фильтр в пайплайне обнаружения мошенничества или ботов — ещё до более медленной вероятностной оценки.
- Свою собственную строку GPU-рендерера и раскрываемые шрифты можно увидеть с помощью проверки отпечатка от BrowserInsight.
Невозможное сильнее, чем несогласованное
Проверка согласованности отпечатка обычно оперирует вероятностями: необычный часовой пояс, нетипичный порядок языков, мобильный user-agent с чуть странным размером экрана — каждый из этих признаков повышает оценку подозрительности, но сам по себе ничего не исключает, ведь редкие, но реальные пользователи действительно существуют. Невозможные сочетания — это другая категория. Дело не в том, насколько распространена пара значений, а в том, может ли такая пара вообще существовать, если учитывать реальное устройство браузеров. Системе обнаружения не нужна статистическая модель, чтобы поймать такие случаи, — ей нужна таблица соответствий того, что физически достижимо, и всё, что выходит за её пределы, — это противоречие, а не просто выброс.
Это различие важно на практике. Вероятностные несовпадения объединяются во взвешенную оценку, которая может ошибаться для отдельного реального пользователя. Невозможные сочетания не нуждаются во взвешивании — они почти со стопроцентной уверенностью указывают на поддельный или синтетический профиль, и именно поэтому инструменты для антидетект-браузеров сильнее всего стараются их избегать — и всё равно регулярно ошибаются.
Почему строка GPU-рендерера привязана к операционной системе
Браузеры не обращаются к GPU напрямую. Вызовы WebGL проходят через ANGLE (Almost Native Graphics Layer Engine) — слой трансляции, который Chromium и Firefox используют, чтобы преобразовать вызовы OpenGL ES в тот графический API, который реально поддерживает операционная система хоста. В документации ANGLE его назначение описано так: он позволяет «пользователям разных операционных систем беспрепятственно запускать WebGL-контент, транслируя вызовы API OpenGL ES в один из аппаратно поддерживаемых API, доступных на данной платформе» — и это специфичное для платформы имя бэкенда напрямую попадает в строку, которую считывает скрипт.
Расширение WEBGL_debug_renderer_info раскрывает эту информацию в виде немаскированной строки рендерера:
const gl = document.createElement('canvas').getContext('webgl');
const dbg = gl.getExtension('WEBGL_debug_renderer_info');
gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL);
// Windows: "ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 Direct3D11 vs_5_0 ps_5_0, D3D11)"
// macOS: "ANGLE (Apple, ANGLE Metal Renderer: Apple M2, Unspecified Version)"
// Linux: "ANGLE (Mesa, llvmpipe (LLVM 15.0.7, 256 bits), OpenGL 4.5)"
Каждый токен бэкенда — D3D11, Metal, OpenGL/Vulkan — встречается только на той операционной системе, которая действительно поставляет этот графический API. Direct3D — API, доступный только на Windows; Metal — только у Apple; токен D3D11 в паре с user-agent macOS или Linux описывает операционную систему, использующую API, которого у неё нет. Ни одно реальное устройство не даёт такое сочетание — только инструмент подмены, который заменяет строку рендерера, не пересоздавая её на основе реального бэкенда заявленной платформы.
Невозможные сочетания GPU и ОС, которые проверяет детектор
Помимо самого токена бэкенда, есть ещё несколько сочетаний на стороне GPU, которые фактически невозможны или уже не встречаются:
| Заявленная платформа | Паттерн рендерера реального устройства | Невозможное / вымершее сочетание |
|---|---|---|
| macOS (любая современная версия) | ANGLE (Apple, ANGLE Metal Renderer: ...) или строка встроенного Intel/AMD на старых Intel Mac | Строка рендерера NVIDIA — Apple перестала поставлять GPU NVIDIA и много лет назад прекратила поддержку драйверов NVIDIA |
| macOS / Linux | Токен бэкенда Metal, OpenGL или Vulkan | Токен бэкенда Direct3D9/Direct3D11, который существует только на Windows |
| Мобильный UA (iPhone/Android) | Строка рендерера Apple GPU, Adreno, Mali или PowerVR | Строка рендерера десктопного класса NVIDIA/AMD/Intel, которую не сообщает ни один телефон |
| Windows on ARM | Строка рендерера Qualcomm Adreno | Сигнатура драйвера, характерная только для x86, в паре с токеном платформы ARM64 |
Ни для одного из этих случаев не нужна вероятностная модель — каждая строка таблицы описывает закрытый набор значений, и всё, что выходит за его пределы, — прямое противоречие. Та же логика лежит в основе того, как сайты обнаруживают подмену user-agent: заявление выдерживает проверку только тогда, когда с ним согласуется каждый независимо проверяемый сигнал, а токены GPU-бэкенда — одни из самых сложных для согласованной подделки, потому что для этого пришлось бы пересоздавать всю строку рендерера под заявленную платформу, а не редактировать одно поле.
Шрифты, которые существуют только на одной операционной системе
Списки установленных шрифтов несут ту же привязку к платформе, только на более грубом уровне. Операционные системы поставляются с разными наборами шрифтов по умолчанию, и скрипт, который перечисляет шрифты через измерение резервных начертаний, может определить, какие из них присутствуют. Несколько семейств шрифтов фактически эксклюзивны для конкретной ОС:
| Семейство шрифтов | Поставляется по умолчанию на |
|---|---|
| Segoe UI, Calibri, Cambria, Consolas | Только Windows |
| Helvetica Neue, Menlo, Monaco, Avenir | Только macOS |
| DejaVu Sans, Liberation Sans, Noto Sans (полный набор CJK) | Дистрибутивы Linux |
Профиль, который заявляет стандартную установку Windows, но не показывает Segoe UI, или профиль, заявленный как macOS, но сообщающий о наличии Calibri и Cambria, описывает набор шрифтов, который стандартная установка не создаёт. Строго говоря, это не невозможно — пользователь мог вручную установить шрифты Windows на Linux, — но это достаточно редкая ситуация, и в сочетании с соответствующим противоречием в GPU-бэкенде она переходит из категории «необычно» в категорию «поддельный профиль, который забыли снабдить фальшивым списком шрифтов».
Несовпадения эпохи драйверов и версии ОС
Более тонкая версия той же проблемы проявляется не в категориях, а во временных рамках. Графические драйверы, списки расширений WebGL и поведение точности шейдеров меняются вместе с релизами ОС и драйверов. Строка рендерера, называющая аппаратное обеспечение текущего поколения, в паре с номером сборки операционной системы, вышедшей несколькими годами раньше, — или версия браузера более новая, чем релиз ОС, на котором он якобы работает, — описывает временную последовательность, которая не встречается на реальном, обновлённом устройстве. Это не бинарная невозможность в духе строки Direct3D на macOS, но это вариант того же принципа с чуть меньшей уверенностью: заявленная идентичность должна быть внутренне непротиворечивой не только в том, что она сообщает, но и в том, когда эти значения могли правдоподобно сосуществовать.
Как детекторы используют невозможные сочетания
Системы предотвращения мошенничества и обнаружения ботов обычно выстраивают проверки по стоимости и уверенности. Невозможные сочетания находятся на дешёвом и максимально надёжном конце этой шкалы: сверка с известным набором допустимых пар «GPU-бэкенд — ОС» и «шрифт — ОС» выполняется за микросекунды и не требует исторической базы, в отличие от оценки уникальности на основе энтропии или поведенческого анализа. Это делает такую проверку эффективным первым фильтром — при обнаружении невозможного сочетания система может действовать немедленно, оставляя более медленные вероятностные уровни для профилей, которые прошли эту проверку, но всё равно выглядят синтетическими в совокупности.
Именно здесь инструменты для антидетект-браузеров сталкиваются с наибольшими трудностями. Создать профиль, в котором user-agent, заявленная ОС и строка рендерера меняются согласованно — да ещё и остаются внутренне непротиворечивыми с реальным бэкендом и стандартными шрифтами заявленной платформы, — гораздо сложнее, чем отредактировать одно поле, и именно этот шов раз за разом обнаруживается на практике.
Проверьте собственную конфигурацию
Проверка отпечатка от BrowserInsight показывает вашу реальную строку WebGL-рендерера и позволяет с первого взгляда увидеть, совпадает ли она с платформой, с которой вы заходите на сайт. Проверка ядра браузера делает то же самое для вашего движка рендеринга, сравнивая заявления user-agent с тем, чем среда выполнения является на самом деле. Если вы используете инструмент приватности или антидетект-профиль, это самый быстрый способ увидеть, не внёс ли он противоречие между GPU и ОС вместо того, чтобы убрать вашу уникальность.
Часто задаваемые вопросы
Любое ли необычное сочетание GPU и ОС невозможно?
Нет. Старые Intel Mac действительно поставлялись с GPU AMD и NVIDIA, а на некоторых системах Linux работают проприетарные драйверы NVIDIA — это необычно, но реально. По-настоящему невозможные случаи — это несовпадения токена бэкенда, например строка Direct3D при заявлении платформы, отличной от Windows, а также платформы, поддержку которых Apple полностью прекратила.
Может ли хорошо собранный антидетект-профиль избежать таких несовпадений?
В принципе, да — профиль, который пересоздаёт полностью согласованную строку рендерера, список шрифтов и сигнал эпохи драйверов под заявленную платформу, способен избежать невозможного сочетания. На практике большинство инструментов редактируют лишь часть полей, оставляя остальные значениями по умолчанию, — и именно там появляется шов.
Применимо ли это к мобильным устройствам?
Да. Мобильный user-agent в паре со строкой рендерера GPU десктопного класса — или наоборот, десктопный UA со строкой производителя GPU для телефона — это то же самое противоречие, только проверяемое по списку мобильных производителей GPU (Apple, Adreno, Mali, PowerVR) вместо десктопного.
Чем это отличается от проверки согласованности отпечатка?
Проверка согласованности охватывает весь спектр несовпадений, включая вероятностные, вроде необычного сочетания часового пояса и языка. Невозможные сочетания — это подмножество, в котором несовпадение не просто редкое: оно описывает то, что текущая архитектура браузера и ОС в принципе не может произвести, и именно поэтому детекторы могут считать его почти достоверным, а не просто подозрительным.
Заключение
Не все несовпадения отпечатка равнозначны. Редкое сочетание может принадлежать реальному, просто необычному пользователю; токен бэкенда Direct3D при заявлении macOS — никогда, потому что Windows и macOS попросту не используют один и тот же графический API. Понимание того, какие сигналы архитектурно связаны друг с другом — GPU-бэкенд с ОС, шрифты по умолчанию с ОС, эпоха драйверов с временной шкалой релизов, — объясняет, почему именно эти проверки настолько эффективны и настолько дёшевы для всех, кто создаёт или оценивает системы обнаружения на основе отпечатков.
Рекомендуем прочитать:


