Отпечатки браузера долгое время считались важным и практически уникальным способом идентификации и уникализации юзера. И правда, фингерпринт годами выполнял эту роль (и продолжает выполнять ее), а некоторые крупные платформы вроде Cloudflare сделали поставили цифровые отпечатки во главу проверок.

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

Предел статических подмен

Классический мультиаккаунтинг и автоматизация базируется на простых правилах, которым следуют защитные системы («если — то»).

К примеру — сопоставление заголовка User-Agent с реальным системным окружением.

Допустим в User-Agent указан Windows на Chrome, а при рендеринге Canvas или проверке системных шрифтов антифрод увидит что имеет дело с дистрибутивом Linux или с MacOS , возникytт рассинхорон (который никак не повлияет на работоспособность устройства или профиля, но на уровне железа это критично). Естественно, антифрод-система отреагирует на такое несоответствие, так как ее научили, либо сбросит сессию, либо выдаст капчу или просто ограничит выдачу, вариантов много.

Слабое место таких правил — предсказуемость. Для обхода достаточно убрать конфликты между параметрами, а разработчики такое умеют. В результате статическая проверка уже не является 100% фильтром для антифрода.

Непрерывная проверка и динамический Trust Score

Но не только устаревание самой системы статичных проверок повлияло на развитие отпечатков, но и появление нейросетей способствует прогрессу. Развитие ИИ (да и систем машинного обучения) помогло сместить фокус безопасности с четких правил («если — то») на использование вероятностных моделей. Антифрод уже не ограничивается разовой сверкой характеристик устройства на старте сессии, как все успели привыкнуть. Система осуществляет непрерывную оценку пользователя, на протяжении всей сессии, и если аргументов «за», будет больше чем аргументов «против» к сессии могут применить санкции в процессе ее выполнения.

Вместо разовой проверки окружения скрипты внедряют концепцию непрерывной аутентификации. Работает такая аутентификация на базе JavaScript-модулей, которые собирают параметры взаимодействия пользователя со страницей в фоновом режиме. При такой непрерывной проверке система может в режиме онлайн корректировать индекс доверия к сессии (Trust Score).

Такую механику можно сравнить с многоуровневым контролем доступа. Для доступа к ресурсу нужен качественный отпечаток и чистый IP-адрес. С этим помогает качественный антидетект-браузер, такой как Aurorium Browser. Он генерит качественный отпечатки браузера, которые не триггерят антифрод системы.

Но даже после доступа, за вами продолжают следить.

Скрипты антифрода логируют активность и сопоставляют ее с накопленными у них данными реальных пользователей.

Система накапливает микроаномалии. К примеру примитивные скрипты заполняют формы очень быстро, как правило без переключения фокуса или перемещают указатель по строгим геометрическим линиям. Когда суммарный порог отклонений превышен, антифрод действует (отклонение платежа, запрос дополнительной верификации, перевод профиля в статус скрытой блокировки для ручной проверки).

Антифрод осуществляет запись сессии, не в виде скринкаста, а в виде накопления данных, в частности:

  • координаты курсора по осям X и Y;

  • события смены фокуса и тапов;

  • динамику и скорость вертикальной прокрутки;

  • факты выделения текста и взаимодействия с элементами DOM.

Существует три уровня на котором формируется классический портрет

  • микроуровень;

  • технический уровень;

  • макроуровень.

Микроуровень — клавиатурный почерк и траектории курсора

Физические паттерны генерируют такой поток данных, который невозможно скрыть подменой сетевого адреса или маскировкой системных заголовков.

Динамика ввода текста

При работе с клавиатурой у каждого человека есть собственные уникальные временные показатели:

  1. Dwell Time (время удержания) — интервал в миллисекундах между событиями keydown и keyup для одной клавиши. Живой человек физически не может удерживать разные символы с одинаковой длительностью. Наличие статической паузы или мгновенной генерации событий посылает антифроду сигнал, что он имеет дело со скриптом.

  2. Flight Time (время перелета) — пауза между отпусканием одной клавиши и нажатием следующей. Этот интервал постоянно колеблется в зависимости от используемой руки, расположения символов на раскладке и навыков печати.

Важный маркер, который часто упускают — наличие ошибок. В реальных сессиях пользователи регулярно нажимают соседние клавиши, удаляют символы через Backspace или Del, возвращаются по строке стрелками или дважды кликают для выделения фрагмента (кажется мелочь, но из мелочей складывается полная картина). Когда скрипт вставляет длинные строки за миллисекунды, с равными интервалами и без единой ошибки, система может среагировать.

Кинематика курсора и закон Фиттса

Следующий маркер чуть сложнее предыдущего, но только при объяснении, реализация на самом деле не так сложна, как кажется.

Перемещение руки подчиняется законам биомеханики. Простые алгоритмы автоматизации же перемещают указатель, как правило, по прямым отрезкам, либо применяют кривые Безье. Антифрод-системы такую математику распознают с помощью анализа тепловых карт и распределения скоростей.

В реальных сессиях есть два обязательных физических фактора:

  • Естественный микротремор. Рука никогда не будет удерживать ровную линию при перемещении мышки, траектория всегда содержит микроколебания с определенной физиологической частотой.

  • Закон Фиттса. Движение к цели строится по фазам (быстрое ускорение на старте, торможение при подлете к объекту и микрокорректировки позиции перед самим кликом). Когда мышка попадает в небольшой чекбокс с первого раза на максимальной скорости сильно нехарактерно для живого оператора.

Технический уровень — целостность цепочки событий и маркеры сред

Помимо внешнего рисунка движений (то что происходит на фронтенде), системы защиты контролируют и корректность генерации событий браузерным движком (то что происходит внутри и не видно простым глазом).

Любое действие пользователя в браузере состоит из последовательности событий. Стандартный клик мышью для юзера это одно действие, а для браузерацепочка событий:

{mousemove} → {mouseenter} → {mouseover} → {mousedown} → {[удержание]} → {mouseup} → {click}


Когда в этой цепочке событие click выполнено напрямую через DOM API, а промежуточные стадии наведения и нажатия пропущены, либо выставлен флаг Event.isTrusted = false, антифрод среагирует.

Помимо этого распознать бота можно через инструменты управления браузером Chrome DevTools Protocol (CDP):

  • Глобальные переменные среды. Наличие специфических свойств (window.cdc_... или дефолтного navigator.webdriver = true) четко показывает, что управление осуществляется через внешние драйверы.

  • Аномалии отображения. Headless-режимы часто выдают себя несоответствием между размером виртуального вьюпорта и фактическими экранными координатами системы.

  • Сетевые и тайминговые следы. На тот случай, когда разработчик умеет прятать глобальные переменные, существует анализ открытых локальных WebSocket-портов и специфические задержки при обработке команд через протокол отладки, которые позволяют зафиксировать наличие автоматизации.

Мобильная телеметрия — пространственные датчики и физика тач-скрина

На мобильных устройствах нет мыши, но есть лучший способ понять кто по ту сторону экрана — встроенные сенсоры.

Акселерометр и гироскоп

Когда смартфон находится в руках, он непрерывно фиксирует микроколебания от пульса, дыхания, движения человека или изменения положения его тела (человек лег или встал, положение изменилось). Эти данные доступны через интерфейсы DeviceMotionEvent и DeviceOrientationEvent.

Постоянное нулевое значение или заблокированные отклики датчиков выдают дешевые эмуляторы или серверные сборки. Разумеется, телефон может лежать на столе, и само по себе статичное положение не приведет к бану. Однако диссонанс между высокой интенсивностью ввода и абсолютным покоем пространственных датчиков может снизить общий Trust Score профиля.

Параметры касания

В отличие от мыши, курсор которой кликает в единичный пиксель, палец захватывает гораздо большее пространство при нажатии на стекло. Вот что передается при нажатии пальцем на экран:

  • Площадь и форма контакта: радиусы эллипса касания (radiusX, radiusY) и угол его наклона.

  • Силу нажатия (force): значение от 0.0 до 1.0.

Геометрия свайпа и мультитач

Большой палец руки анатомически закреплен в суставе, поэтому длинный вертикальный свайп по экрану описывает дугу с переменным радиусом. Когда прокрутка экрана выполняется по прямой, да еще и с постоянной скоростью, антифрод понимает, что человек так не сможет сделать физически, небольшая дуга будет точно.

Аналогично работает проверка масштабирования, так как два пальца никогда не будут касаться экрана точно в одно мгновение. Они всегда будут иметь разные векторы ускорения и отрываться от поверхности с задержкой.

Системные индикаторы и взаимодействие с формами

В арсенал поведенческого анализа входят и косвенные системные показатели:

  • Статус зарядки батареи. Там, где есть возможность это проверить, защита отслеживает динамику разряда аккумулятора. Виртуальные машины в большинстве случаев отдают статичные 100% заряда с постоянным подключением к сети, что при длительной сессии формирует аномалию.

  • События фокуса и вставки данных. При заполнении форм реальный пользователь сначала активирует поле (focus), сгенерирует последовательность клавиатурных событий и после уйдет из него (blur). Как и в случае с вводом, прямая инъекция без задержек и вызова событий фокуса сигнализирует антифроду о работе скрипта.

  • Специфика менеджеров паролей. Если форма заполняется через стандартные инструменты (вставка из буфера обмена, например), браузер сам выставляет псевдокласс :autofill и генерирует нативные системные события. Эмуляция же быстрой вставки пароля без сопутствующего события paste выглядит аномально.

Макроуровень: психология интерфейса и естественные реакции

Даже при качественной имитации микромоторики автоматизацию нередко подводит отсутствие логики восприятия интерфейса.

Стандартная пауза при первом касании

При посещении незнакомого ресурса в первый раз человеку требуется время на изучение и понятие что он видит на странице и где находятся элементы интерфейса. В этот момент курсор либо блуждает, либо замирает.

Скрипт со свежим профилем и пустым кэшем, который быстро и четко перемещается от одной кнопки к другой на первом же экране, демонстрирует наличие «памяти интерфейса», которой не может быть у реального пользователя. Для ML-моделей это тоже аномалия.

Пределы человеческого восприятия и эмоциональные клики

Слишком быстрое пролистывание простыней текста с установкой чекбокса максимально быстро — типичный маркер автоматизации. Человек прокручивает страницу неравномерно, с остановками, возвратами наверх и выделением фрагментов (либо листает до конца быстро, но все равно неравномерно, пример политика конфиденциальности).

Другой маркер — поведение при ошибках. Если интерфейс зависает или кнопка отправки формы не реагирует на нажатие, живой пользователь скорее всего совершает выполняет частые раздраженные клики (для этого даже придумали термин — яростные клики). Бот в аналогичной ситуации будет спокойно ждать пока DOM-элемент появится, либо завершит выполнение задачи ошибкой.

Таким образом анализ поведенческих паттернов сильно усложняет задачу для обхода антифрод систем, но не делает ее невыполнимой. Нужно учитывать больше нюансов, проектировать более сложные системы, так сказать — учить бота дышать.