Что такое определение идентификационных признаков HTTP/2?

Идентификация по HTTP/2 представляет собой метод обнаружения на уровне соединения, который идентифицирует клиента путем анализа того, как он формирует кадры протокола HTTP/2, а не только на основе содержания запроса. Настоящие браузеры отправляют определённый, неизменный набор параметров SETTINGS, значений WINDOW_UPDATE и порядок псевдозаголовков. Большинство HTTP-библиотек и ботов не воспроизводят этот шаблон, что позволяет их обнаружить ещё до отправки первого URL-адреса.

Как работает определение уникальных идентификаторов по HTTP/2?

Когда клиент открывает соединение HTTP/2, он отправляет несколько низкоуровневых фреймов до начала передачи каких-либо прикладных данных. Исследователи компании Akamai установили, что серверы могут идентифицировать клиента по четырём наблюдаемым сигналам: параметрам кадра SETTINGS (в виде упорядоченных пар «ID:значение»), приращению WINDOW_UPDATE, данным кадра PRIORITY и порядку псевдозаголовков (:method, :authority, :scheme, :path) (Технический документ Akamai — «Пассивная идентификация клиентов HTTP/2», Black Hat EU 2017, 2017 г.).

Каждый из основных браузеров (Chrome, Firefox, Safari) генерирует однозначный и известный «отпечаток». Клиенты для работы с необработанными HTTP-запросами, такие как curl или модуль Python's requests Библиотеки генерируют иные отпечатки, поскольку они не имитируют процесс инициализации HTTP/2 на уровне браузера. Системы обнаружения ботов создают таблицы известных отпечатков браузеров и помечают всё, что не соответствует этим отпечаткам.

Полнофункциональная браузерная среда, поддерживающая выполнение JavaScript и отображение страниц, по умолчанию генерирует аутентичный отпечаток HTTP/2. Именно поэтому подход, основанный на рендеринге, проходит эту проверку, в то время как простой HTTP-клиент или базовый прокси — нет.

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

Серверы считывают фрейм SETTINGS (конкретные параметры и их порядок), шаг WINDOW_UPDATE, данные PRIORITY, а также порядок псевдозаголовков (:method, :authority, :scheme, :path). В совокупности эти сигналы образуют практически уникальный «отпечаток» для каждого типа HTTP-клиента.

Метод идентификации по отпечаткам TLS (JA3/JA4) анализирует процесс установления соединения TLS до начала обмена данными по протоколу HTTP. Идентификация по отпечаткам HTTP/2 происходит на один уровень выше — после открытия зашифрованного туннеля — путем анализа структуры первых кадров HTTP/2. Оба метода часто используются совместно для многоуровневого обнаружения ботов.

Прокси-сервер лишь перенаправляет трафик; он не изменяет HTTP-клиент, генерирующий фреймы. Если программное обеспечение, работающее за прокси-сервером, отправляет HTTP/2-фреймы, не генерируемые браузером, «отпечаток» по-прежнему будет отмечен. Только настоящая браузерная среда изначально генерирует ожидаемую структуру фреймов.