Низкоуровневые отпечатки как они палят?
Zl0yДрузья сегодня хотел бы поговорить о низкоуровневых отпечатках и треднах современных антифрод систем а так же о технологиях Ja4+. В качестве вступления я хочу начать с истории отпечатков
Вот хронология развития технологий отпечатков для антифрод систем:
90-е годы:
- Использование базовых HTTP-заголовков (User-Agent, Accept, Accept-Language), IP-адрес
Начало 2000-х:
- Cookies, Flash cookies (Local Shared Objects), Анализ установленных шрифтов и плагинов
2005-2010:
- Canvas, WebGL, Аудио fingerprinting
2010-2015:
- Evercookies - комбинация различных методов хранения данных, Анализ характеристик устройства (разрешение экрана, глубина цвета)
- Анализ сетевых характеристик, Использование WebRTC для определения реального IP
2015-2020:
- Поведенческие паттерны (движения мыши, скорость набора текста)
- Анализ установленных расширений браузера, Font fingerprinting
- TLS fingerprinting
2020-настоящее время:
- JA3 и JA3S fingerprinting (анализ TLS-рукопожатия), TCP/IP fingerprinting
- Использование машинного обучения для анализа комбинаций признаков
- JA4 fingerprinting (улучшенная версия JA3, включающая HTTP/2 параметры)
Современные топовые системы используют комбинацию всех доступных методов, включая самые новые, такие как JA4. Они также применяют продвинутую аналитику и машинное обучение для выявления аномалий и связей между различными отпечатками.
Посмотрим на Тренды в Гугле за последние 5 лет

Но это пока еще только Тренды .Давайте посмотрим на реальные запросы в Гугле. Сколько их?
Вот популярные антифрод системы которые открыто пишут о том что они используют их:
https://developers.cloudflare.com/bots/concepts/ja3-ja4-fingerprint/
https://www.greynoise.io/blog/six-ways-to-threat-hunt-in-greynoise
https://hunt.io/blog/decoding-cyber-shadow
(Аккаунт последнего не зарегистрировать без подмены низкого уровня)
Полный список смотреть тут https://github.com/FoxIO-LLC/ja4?tab=readme-ov-file#ja4-network-fingerprinting
Подробнее про отпечатки ja4
JA4+ - это набор новых методов сетевого фингерпринтинга, разработанный для улучшения стандарта JA3 от 2017 года. JA4+ включает в себя несколько модульных отпечатков, которые легко использовать и обмениваться. Эти методы удобны как для машинного, так и для человеческого анализа, что облегчает обнаружение угроз и анализ фрода.

Из них нас(как для исследователей антифрод систем) больше всего будут интересовать следующие:
- JA4 (отпечаток TLS-клиента(JA3) с некоторыми модификациями)
- JA4L (измеряет расстояние между клиентом и сервером, глядя на задержку между первыми несколькими пакетами в соединении)
- JA4T (обычный ja4 отпечаток + различные сетевые TCP\UDP параметры, такие как mss, windows scale, tcp options)
Все эти отпечатки пассивные - то есть для их сбора с вашей системы - серверу не требуется отправлять какие то дополнительные пакеты\сообщения. Каждый компонент предоставляет уникальную информацию о сетевом взаимодействии. JA4+ может применяться для обнаружения вредоносного ПО, предотвращения перехвата сессий, автоматизации проверки соответствия требованиям, отслеживания местоположения и многих других задач безопасности (Включая нашу любимую Анти-фрод Систему).
JA4

Давайте рассмотрим процесс формирования JA4 отпечатка шаг за шагом (вот так формируется он из кода ):
- Базовая структура JA4:
JA4 = ptvdhCeAl_sCipher_sExtensions
Где каждый компонент представляет:
p - протокол (t для TCP, q для QUIC); t - версия TLS (например, 12 для TLS 1.2, 13 для TLS 1.3); v - наличие SNI (d если есть, i если нет); dh - количество шифров в шестнадцатеричном формате; Ce - количество расширений в шестнадцатеричном формате; Al - ALPN (если есть, например h2 для HTTP/2); sCipher - SHA256 хеш отсортированных шифров (первые 6 символов); sExtensions - SHA256 хеш отсортированных расширений и алгоритмов подписи (первые 6 символов).
2. Пример данных TLS рукопожатия:
Протокол: TCP Версия TLS: 1.2 SNI: присутствует Количество шифров: 12 Количество расширений: 15 ALPN: h2 Шифры: [0x1301, 0x1302, 0x1303, 0xc02b, 0xc02f, 0xc02c, 0xc030, 0xcca9, 0xcca8, 0xc013, 0xc014, 0x009c] Расширения: [0x0000, 0x000b, 0x000a, 0x000d, 0x0023, 0x0005, 0x0012, 0x0010, 0x0015, 0x000f, 0x0017, 0xff01, 0x0001, 0x0002, 0x0016]
3. Формирование отпечатка:
a) Базовая часть (ptvdhCeAl):
t12d0c0fh2
Это расшифровывается как: t (TCP) + 12 (TLS 1.2) + d (SNI присутствует) + 0c (12 шифров в шестнадцатеричном формате) + 0f (15 расширений в шестнадцатеричном формате) + h2 (ALPN)
b) Хеш шифров (sCipher):
Сортируем шифры, соединяем их в одну строку и берем SHA256 хеш. Затем берем первые 6 символов хеша:
009c1301130213031303c013c014c02bc02cc02fc030cca8cca9 -> SHA256 -> 62f51c
c) Хеш расширений (sExtensions):
Сортируем расширения, добавляем алгоритмы подписи (если есть), соединяем в строку и берем SHA256 хеш. Затем берем первые 6 символов хеша:
00000001000200050009000a000b000d000f00100012001500160017002300ff01 -> SHA256 -> 3a93ef
4. Итоговый JA4 отпечаток:
t12d0c0fh2_62f51c_3a93ef
В общем JA4 Это немного доработанная версия JA3. (Идентифицирует клиента на основе его TLS параметров)
JA4L (Light Distance Locality)

JA4L (JA4 Latency) - это отпечаток, который предоставляет информацию о задержке и маршрутизации сетевого соединения. Он состоит из двух компонентов, разделенных подчеркиваниями:
- Время прохождения в одну сторону (мкс)
- TTL (Time To Live)
Формат JA4L выглядит так:
время_TTL
Пример:

JA4L = 2449_42
Давайте разберем каждый компонент:
JA4L-S = {(B-A)/2}_Server TTL
JA4L-S = {(21,838817−21,833919)/2}_Server TTL
Давайте к делу :) для чего это всё нужно вообще?
Конечно же это нужно для того что бы определять не врём ли мы о нашем местоположении Давайте разберем процесс вычисления расстояния от сервера к клиенту шаг за шагом, используя формулу и данные,.
Шаги для вычисления расстояния:
Формула: D = jc/p D = Расстояние j = JA4L_a (первое число в JA4L) c = Скорость света в оптоволокне (0.128 миль/мкс или 0.206 км/мкс) p = Фактор задержки распространения
Пример:
JA4L-S of 2449_42
- 2449 - это JA4L_a (j в формуле).
- Фактор задержки распространения (p) в примере взят 1.6 (это значение между "хорошим" (1.5) и "плохим" (2) факторами из таблицы).
Подставляем значения в формулу:
D = 2449 * 0.128 / 1.6
Вычисляем:
D ≈ 195 миль

На изображении у нас три точки (То есть мы сделали запрос к серверу из разных мест) с различными значениями JA4L:
Точка 1
JA4L=10218_43
Точка 2
JA4L=5738_42
Точка 3
JA4L=2836_109
Расчеты:
Точка 1
JA4L=10218_43 TTL = 43, начальный TTL = 64 (Linux/Unix) Hop count(число хопов) = 64 - 43 = 21 Фактор задержки распространения (p) предположим 1.5 (хороший) D = 10218 * 0.128 / 1.5 ≈ 872.96 миль
Точка 2
JA4L=5738_42 TTL = 42, начальный TTL = 64 (Linux/Unix) Hop count(число хопов) = 64 - 42 = 22 Фактор задержки распространения (p) предположим 1.5 (хороший) D = 5738 * 0.128 / 1.5 ≈ 489.6 миль
Точка 3
JA4L=2836_109 TTL = 109, начальный TTL = 128 (Windows) Hop count(число хопов) = 128 - 109 = 19 Фактор задержки распространения (p) предположим 1.5 (хороший) D = 2836 * 0.128 / 1.5 ≈ 241.6 миль
Итог:
1. JA4L=10218_43: Расстояние ≈ 872.96 миль
2. JA4L=5738_42: Расстояние ≈ 489.6 миль
3. JA4L=2836_109: Расстояние ≈ 241.6 миль
На изображении видны три окружности, каждая из которых представляет расчетное расстояние от сервера до клиента. Точка пересечения этих окружностей указывает на примерное местоположение клиента.
Заключение:
Используя формулу и данные, можно определить расстояние от сервера к клиенту и визуализировать это на карте. На изображении показано, как три различных точки с различными значениями JA4L могут помочь в определении местоположения клиента.
JA4T

По сути это просто TCP отпечаток, только с приставкой JA4 ;) в Ja4TScan добавили еще подсчёт задержек.
TCP отпечаток позволяет идентифицировать(не точно) операционные системы и устройства по их TCP/IP стекам. Каждая операционная система имеет свои уникальные комбинации размера окна, опций и масштаба окна. Например, Microsoft Windows не использует TCP Option 8 (timestamp), в то время как все Unix-подобные операционные системы используют. iOS заканчивает список опций TCP Option 0 (End of list), в то время как другие операционные системы этого не делают. Интересно, что iOS добавила еще одну Option 0, чтобы их список опций был кратен 4, вместо того чтобы удалить NOP (Option 1). Это связано с решениями, которые программисты принимали при создании сетевого кода.
Изменения в MSS (Maximum Segment Size), могут помочь определить условия сети для устройства. Например, каждый мобильный оператор устанавливает различный MSS для накладных расходов в своей сотовой сети:

Это означает, что мы можем идентифицировать оператора, к которому подключены устройства:

Когда устройство подключено через VPN, MSS и иногда размер окна изменяются в зависимости от накладных расходов VPN и используемых шифров. Когда устройство подключено через прокси, на стороне сервера виден отпечаток TCP прокси, а не клиента. Например, полное изменение отпечатка, когда iPhone подключается через iCloud Relay:

Пример Ja4TScan:
JA4T=65535 2-1-3-1-1-4 1460 8 1-2-4-8-R6
- 65535 - Размер TCP окна
- 2-1-3-1-1-4 - Опции TCP (в порядке их появления)
- 1460 Максимальный размер сегмента TCP
- 8 - Масштаб TCP окна (множитель)
- 1-2-4-8-R6 Временные метки повторной передачи TCP (только для JA4Tscan)
Эти параметры позволяют довольно точно определить, какое устройство или операционная система используется, а также определить условия сети, через которые устройство подключено.
Методы JA4+ продолжают развиваться, и новые компоненты добавляются по мере их разработки.
И так же нам ничего не стоит собрать свой собственный отпечаток из параметров которые использует ja4,ja3 или http\tcp, и назвать его Madam_Jaba_2000 :)
Выводы:
Первый и самый главный вывод - Очевидно антифрод системы будут и дальше умнеть, они будут использовать технологии нейросетей и погружаться в большие массивы данных - что бы оценивать поведение пользователя на предмет фрода. Наша задача это бороться с новыми вызовами и делать нашу жизнь проще и лучше :). При чём автоматизация уже применяется как в кардинге так и в других сферах где применяются анти-антифрод системы. И Выход на самом всегда есть. Я считаю что ключ к успеху - это:
- Персонализация и Уточнение.
- Оптимизация.
- Автоматизация.
Присоединяйтесь к нашей дружной команде https://t.me/Zl0yTeam