Как антифрод-системы вычисляют прокси по TCP fingerprint
Содержание
TCP fingerprint — что это вообще
TCP fingerprint — это цифровой отпечаток стека TCP/IP. Каждая ОС, каждое ядро, каждая библиотека оставляют уникальные следы в том, как формируют TCP-пакеты. Антифрод-системы снимают эти отпечатки и сравнивают с эталонами. Если fingerprint не совпадает с ожидаемым — это повод присмотреться.
Прокси-серверы, особенно публичные, часто используют нестандартные стеки. Или стандартные, но с дефолтными настройками. Это легко вычислить.
Как выглядит fingerprint на практике
Разберём на примере. Открываешь TCP-соединение. Сервер видит SYN-пакет. В нём куча полей:
- TTL (Time To Live) — сколько хопов может пройти пакет.
- Window Size — размер окна приёма.
- MSS (Maximum Segment Size) — максимальный размер сегмента.
- Опции TCP: SACK, Timestamp, WS (window scaling), и порядок их следования.
Комбинация этих параметров — и есть fingerprint. Разные ОС дают разные комбинации.
Таблица популярных fingerprint'ов:
| ОС | TTL | Window Size | MSS | Опции (порядок) |
|---|---|---|---|---|
| Windows 10 | 128 | 65535 | 1460 | MSS, SACK, TS, WS |
| Linux (ядро 5.x) | 64 | 29200 | 1460 | MSS, SACK, TS, WS, NOP |
| macOS | 64 | 65535 | 1460 | MSS, SACK, TS, WS, NOP, NOP |
| FreeBSD | 64 | 65535 | 1460 | MSS, SACK, TS, WS, NOP |
Видишь разницу? Linux добавляет NOP (No Operation) в конец. Windows — нет. Это и есть fingerprint.
Антифрод и p0f
Самый известный инструмент для пассивного fingerprint'инга — p0f. Он не влезает в соединение, просто слушает трафик. Анализирует SYN-пакеты и SYN+ACK. Выдаёт вероятность: «это Windows 10 с вероятностью 85%».
Антифрод-системы используют похожие методы. Только не для определения ОС, а для выявления несоответствий. Например:
- Трафик идёт с IP, который заявлен как мобильный оператор. Но fingerprint показывает Linux-сервер. Странно? Очень.
- Все клиенты с одного IP имеют одинаковый fingerprint. Хотя должны быть разные — Windows, macOS, Android.
Это прямой признак прокси или NAT.
Как прокси-серверы выдают себя
Прокси — это софт. Он работает поверх ОС. И использует её TCP-стек. Если на прокси стоит Linux с ядром 5.x, все клиенты через него будут иметь fingerprint Linux.
Даже если клиент реально сидит с Windows. Прокси пересобирает TCP-соединение. Fingerprint становится отпечатком прокси, а не клиента.
Бывают исключения. Некоторые прокси (например, socks5 с UDP) могут пробрасывать оригинальный стек. Но HTTP/HTTPS прокси — почти всегда пересобирают.
Реальные кейсы
**Кейс 1.** Банк. Клиент заходит с IP, принадлежащего мобильному оператору. Fingerprint — Linux. Банк знает, что мобильные операторы раздают NAT с Windows или iOS. Linux — аномалия. Блокировка.
**Кейс 2.** Торговая площадка. С одного IP заходят 50 аккаунтов. Все имеют одинаковый fingerprint. Площадка видит: 50 уникальных браузеров, но один TCP-стек. Это прокси. Аккаунты банятся.
**Кейс 3.** Соцсеть. Пользователь жалуется на блокировку. Проверяем — fingerprint соответствует прокси. Пользователь утверждает, что сидит с дома. Но его TTL=64, а у домашних роутеров обычно TTL=128. Враньё.
Как fingerprint вычисляют на практике
Антифрод-системы не просто смотрят на TTL. Они строят хеш из набора полей. Например:
```
hash = f(TTL, WindowSize, MSS, OptionsOrder, Timestamp, SACK)
```
Этот хеш — подпись. Если подпись повторяется у многих клиентов с разных IP — это кластер. Кластер = прокси.
Есть продвинутые методы. Анализируют не только SYN, но и весь поток. Смотрят на поведение: как меняется window size, как обрабатываются ретрансмиссии, какие ACK приходят.
Пример с curl
Хочешь проверить fingerprint своего сервера? Используй `nmap`:
```bash
nmap -sS -O --osscan-guess example.com
```
Или `p0f`:
```bash
p0f -i eth0 -p
```
Но это для общего понимания. Антифрод-системы работают на уровне ядра или DPI. Они видят каждый пакет.
Что делает lexic.ml
Наш сервис — IPv6 прокси. Мы не используем публичные стеки. Каждый прокси имеет уникальный fingerprint. Да, это сложнее. Но антифрод-системы не могут просто захешировать и забанить.
Мы подменяем TTL, window size, порядок опций. Используем рандомизацию. Но это не панацея. Если антифрод-система анализирует поведение — рандомизация не спасёт.
Как обходят fingerprint
Есть несколько методов:
**1. Подмена TTL.** Ставишь TTL=128, как у Windows. Но антифрод смотрит не только TTL.
**2. Использование raw sockets.** Программно формируешь пакеты с нужными параметрами. Сложно, но работает.
**3. Прокси на базе Windows.** Если прокси крутится на Windows, fingerprint будет Windows. Но антифрод видит, что все клиенты — Windows. Это подозрительно.
**4. Туннели с пробросом стека.** Например, WireGuard. Он не пересобирает TCP, а пробрасывает IP-пакеты. Fingerprint остаётся оригинальным.
Но у каждого метода есть грабли. Raw sockets требуют прав root. Туннели — сложной настройки. Антифрод-системы тоже не стоят на месте.
Что антифрод делает с fingerprint
Собирает статистику. Если fingerprint аномальный — помечает IP как подозрительный. Дальше — капча, замедление, блокировка.
Некоторые системы используют машинное обучение. Обучают модель на нормальном трафике. Потом ищут выбросы. Fingerprint — один из признаков.
Но это не единственный метод. Антифрод смотрит на:
- Время жизни сессии.
- Количество параллельных соединений.
- User-Agent и его соответствие fingerprint.
- Геолокацию и задержки.
Fingerprint — лишь часть пазла.
Как защититься от fingerprint
Честно? Полностью — никак. Если ты используешь прокси, антифрод рано или поздно это заметит. Вопрос времени и сложности.
Можно:
- Использовать выделенные прокси с уникальными fingerprint.
- Менять fingerprint динамически.
- Использовать туннели, а не прокси.
Но всё это костыли. Антифрод-системы адаптируются.
Итог
TCP fingerprint — мощный инструмент. Он позволяет вычислить прокси без анализа содержимого трафика. Просто по структуре пакетов.
Прокси-серверы выдают себя одинаковыми отпечатками. Антифрод это видит. И блокирует.
Если хочешь снизить риск — используй решения с рандомизацией fingerprint. Но помни: это не панацея. Антифрод эволюционирует.