CoderCastrov logo
CoderCastrov
Анти Бот

Как работает PerimeterX Bot Defender

Как работает PerimeterX Bot Defender
просмотров
5 мин чтение
#Анти Бот

PerimeterX является ведущим поставщиком технологии анти-бота, используемой порталами, такими как Zillow, Crunchbase, StockX и многими другими. Многие разработчики, работающие над парсингом веб-сайтов или автоматизированными сценариями, сталкиваются с вызовом PerimeterX Human Challenge - собственным CAPTCHA, которая включает нажатие и удержание элемента HTML и не может быть решена ни одним из сервисов по решению CAPTCHA.

PerimeterX зарегистрировал следующие патенты США:

  • US 10,708,287B2 - АНАЛИЗ ПОВЕДЕНИЯ КЛИЕНТСКОГО ПРИЛОЖЕНИЯ ДЛЯ ОБНАРУЖЕНИЯ АНОМАЛИЙ И ПРЕДОТВРАЩЕНИЯ ДОСТУПА
  • US 10,951,627B2 - ОБЕСПЕЧЕНИЕ БЕЗОПАСНОГО ДОСТУПА К УПОРЯДОЧЕННЫМ РЕСУРСАМ
  • US 2021/064685A1 - ОПРЕДЕЛЕНИЕ СЦЕНАРИЯ, КОТОРЫЙ ИСХОДИТ СИНХРОННЫЕ И АСИНХРОННЫЕ ДЕЙСТВИЯ (ожидающая заявка)

Давайте рассмотрим эти патенты, чтобы узнать основные принципы работы технологии защиты от ботов PerimeterX.

US 10,708,287B2

Следующая диаграмма визуализирует общий поток системы обнаружения ботов PerimeterX с точки зрения клиента:

https://patentimages.storage.googleapis.com/a1/62/94/7dc9c2325f3243/US20190173900A1-20190606-D00005.png

В этом контексте "Application Server" - это веб-сервер, на котором размещается веб-приложение. "Client Device" - это компьютер или смартфон, получающий доступ к защищенному сайту с помощью PerimeterX. "Security Verification System" - это бэкэнд PerimeterX. Обратите внимание, что Application Server может быть многопроцессорной системой, если используется CDN или если веб-приложение состоит из нескольких подсистем. Есть еще один патент, который расширяет здесь обсуждаемую технику для возможности использования ее на нескольких серверах.

Первый шаг потока - это попытка конечного пользователя загрузить страницу. Когда используется PerimeterX Bot Defender, в HTML-документ, загружаемый, включается JavaScript-код от PerimeterX. Этот код называется Security Loader. При отображении страницы браузер загружает и выполняет дополнительный JavaScript-код, называемый Security Module. Он получается из бэкэнда PerimeterX с некоторыми параметрами о тестах, которые нужно запустить в браузере. Целью Security Module является поиск вещей, которые могут быть полезными в качестве сигнала для автоматизации, и проверка, не является ли окружение JavaScript браузера аномальным. Security Module может проверять следующие вещи:

  • JavaScript-движок
  • HTML-элементы
  • Исходящие ссылки
  • Cookies
  • Поведение и время пользовательского ввода (движение мыши, клики и т. д.)
  • Локальное хранилище
  • История браузера

По завершении тестов Security Module сообщает обо всем этом Security Verification System, которая обогащает и обрабатывает данные. Обогащение включает добавление дополнительных полей к IP-адресу, геолокации, заголовку User-Agent и так далее. PerimeterX собирает данные и обучает модели машинного обучения для установления базового уровня нормальной активности. Оценка безопасности вычисляется на основе того, насколько близки результаты тестов к базовому уровню. Кроме того, на этом этапе могут быть обнаружены некоторые аномалии, такие как несоответствие количества HTML-элементов, несоответствие заголовка User-Agent объектам в среде JS и так далее. Например, если браузер утверждает, что он Google Chrome в заголовке User-Agent, но не имеет объекта window.chrome, это может быть такая аномалия, которая заставляет PerimeterX заблокировать браузер для дальнейшего взаимодействия с защищенным веб-приложением.

На этом этапе, если оценка безопасности достаточно высока, PerimeterX может разрешить браузеру получить доступ к ресурсам (с дальнейшим мониторингом во время сеанса клиента). Однако анализ может быть неоднозначным, что может вызвать дополнительные тесты, которые могут включать действия пользователя (например, решение CAPTCHA). На основе результатов этих дополнительных тестов PerimeterX может разрешить или запретить дальнейший доступ к веб-приложению. Код, разрешающий или запрещающий доступ, называется Security Enforcement Module и интегрируется с Application Server.

Когда PerimeterX разрешает доступ, он выдает Security Token, который является криптографически подписанным объектом, содержащим оценку безопасности с информацией о пройденных и неудачных тестах. Во время сеанса клиента Security Module продолжает работать и предоставляет информацию о действиях на стороне клиента PerimeterX. Это позволяет дальнейшему обучению моделей машинного обучения и обновлению оценки безопасности при необходимости. Это также позволяет PerimeterX прервать сеанс клиента, если обнаруживаются аномальные действия некоторое время после выполнения начальных тестов. Кроме того, Security Token предоставляется Application Server, который может запретить доступ на основе оценки безопасности.

Обратите внимание, что PerimeterX также может охватывать мобильные приложения. Когда он интегрируется с системами мобильных приложений, Security Loader отсутствует, но Security Module интегрируется в виде нативного мобильного SDK. Все остальное работает так же.

US 10,951,627B2

Веб-приложения, защищенные PerimeterX, могут загружать некоторый контент (изображения, данные и т. д.) с серверов, отличных от основного веб-сервера. Сущности, использующие PerimeterX, могут хотеть, чтобы эти запросы также были покрыты контрмерами против ботов.

Идея здесь заключается в том, что основной веб-сервер выдает что-то, называемое Risk Token, которое должно быть предоставлено вторичным серверам для авторизации доступа к ресурсам (например, в виде значения HTTP-куки или параметра URL). Этот токен генерируется на основе параметров, описывающих запрос с идентификаторами клиента и сроком действия. Он также может включать идентификатор сеанса клиента или некоторую дополнительную информацию. Для предотвращения подделки токен криптографически подписывается с использованием HMAC или другой криптографической техники.

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

US 2021/064685A1

Как уже обсуждалось ранее, модуль безопасности PerimeterX выполняет мониторинг действий на стороне клиента для наблюдения за аномальным поведением после предоставления доступа. Данное патентное заявление относится к реализации мониторинга вызовов API в среде фронтенд JavaScript. Код PerimeterX перезаписывает JS функции, которые нужно отслеживать, с помощью оберточного кода, который записывает вызовы API и вызывает исходную функцию. В случае асинхронных действий обратные вызовы также перезаписываются. Это позволяет определить точный JS скрипт, который вызвал данную JS функцию. В патентной заявке приведен следующий пример кода для мониторинга вызовов функции sync():

let initiatorScript = null; 
function getCurentScript() {
  if (document.curentScript) {
    return document.curentScript;
  } else {
    // если в данный момент не выполняется ни один скрипт - 
    // тогда document.curentScript равен null
    return initiatorScript;
  } 
}
// сохраняем ссылку на исходную функцию API sync 
const realSyncAPI = window['sync']; 
window['sync'] = function(url) {
  // используем 'document.curentScript' для записи того скрипта, 
  // который инициировал вызов sync() 
  capture('sync', getCurentScript()); 
  // теперь вызываем исходную функцию API sync, чтобы выполнить ее 
  // естественное поведение в браузере, так как она была перезаписана 
  return realSyncAPI(url);
};

Если в браузере выполняется дополнительный JS код (например, из-за атаки XSS или автоматизации), PerimeterX способен обнаружить это через такой вид мониторинга.

Продолжение следует...