← Назад в базу знаний

Как антифрод-системы вычисляют прокси по анализу TCP/IP стека (TCP fingerprint)

Как антифрод-системы вычисляют прокси по анализу TCP/IP стека (TCP fingerprint)

TCP/IP стек как отпечаток пальца

Каждое устройство в сети оставляет следы. Невидимые, но читаемые. TCP/IP стек — это не просто протокол, а сложная система с кучей параметров по умолчанию. Разные ОС, разные версии ядер, разные сборки — всё это даёт уникальную комбинацию.

Антифрод-системы давно научились снимать эти отпечатки. Берут TCP-пакет, разбирают его по косточкам, сравнивают с базой known fingerprints. Если виртуальная машина с прокси выдаёт fingerprint Windows Server 2019, а User-Agent в HTTP — iPhone 15 — тревога.

Хуже того, многие прокси-провайдеры используют шаблонные образы. Один образ на сотни клиентов. Один fingerprint на всех. Антифрод это видит: "О, 500 запросов с идентичным TCP fingerprint, но IP из разных подсетей. Блокируем."

Параметры, которые выдают прокси

TCP handshake — кладезь информации. SYN-пакет содержит кучу полей, которые разные ОС заполняют по-разному.

**TTL (Time To Live)**. Начальное значение — первый маркер. Windows: 128. Linux: 64. Cisco: 255. Если пакет пришёл с TTL=55, но через 5 хопов — значит стартовый был 60. Специфичная сборка? Возможно.

**Window Size**. Размер окна приёма. Windows 10: 65535. Linux: 29200 или 65535 в зависимости от версии. Прокси-софт часто не трогает этот параметр, оставляя дефолт.

**MSS (Maximum Segment Size)**. Обычно 1460 для Ethernet. Но некоторые VPS-провайдеры ставят 1440 или 1452. Мелкий нюанс, а антифрод цепляется.

**TCP Options**. Список опций и их порядок — самый информативный кусок. Windows: `MSS, NOP, WScale, NOP, NOP, SACK, Timestamp`. Linux: `MSS, SACK, Timestamp, WScale`. Разный порядок, разный набор. Прокси-сервера часто отдают опции хост-системы, а не клиента.

p0f и другие инструменты пассивного анализа

Самый известный инструмент — p0f (passive OS fingerprinting). Работает без инъекций, просто слушает трафик.

```

curl -s https://example.com | head -1

Антифрод на той стороне видит:

- TTL: 55

- Window: 65535

- Options: MSS,NOP,WScale,NOP,NOP,SACK,Timestamp

- Идентифицирует как Linux 4.x

```

p0f хранит базу сигнатур. Сравнивает входящий пакет с десятками тысяч записей. Результат — ОС, дистанция до хоста, иногда даже версия ядра.

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

TCP timestamp — ловушка для прокси

Опция Timestamp (TSval, TSecr) — мощный инструмент. Она показывает время отправки пакета с точностью до миллисекунд.

Проблема прокси: timestamp клиента не совпадает с timestamp сервера. Антифрод сравнивает: "Этот запрос пришёл с IP из Нью-Йорка, но timestamp соответствует UTC+3. Странно."

Хуже того, некоторые прокси забывают обновлять timestamp при пересылке пакетов. Клиент отправил пакет с TSval=1000, прокси переслал с тем же TSval. Сервер видит: "Пакет пришёл через 500 мс, но timestamp говорит 0 мс. Невозможно физически."

Ещё один трюк: по разнице timestamp можно определить, сколько времени прошло между запросами. Если один клиент шлёт запросы с разных IP, но timestamp растёт линейно — это один человек за прокси.

IP ID — скрытая метка

Поле Identification в IP-заголовке — ещё один маркер. Разные ОС генерируют ID по-разному:

- Linux: глобальный счётчик, увеличивается на 1 с каждым пакетом

- Windows: случайное значение

- OpenBSD: случайное, но с определённым распределением

Прокси часто кеширует пакеты. Если два запроса с разных IP имеют ID, идущие подряд (например, 12345 и 12346) — это один источник.

Антифрод собирает статистику: "С этого IP ID всегда чётный, с этого — нечётный. Совпадение? Нет."

Window Scale и другие тонкости

Window Scale — множитель для размера окна. Значение от 0 до 14. Windows 10: 8 (множитель 256). Linux: 7 (128). Разные сборки Linux могут иметь 6 или 9.

MSS тоже варьируется. Стандарт 1460, но:

- VPN-туннели: 1400-1450

- PPPoE: 1492

- Loobpack: 16384

Прокси, работающие через туннели, часто имеют MSS ниже стандартного. Антифрод это видит и понимает: "MSS=1400 — почти наверняка туннель или прокси."

Реальные кейсы блокировок

**Кейс 1: Одинаковый fingerprint на всех клиентах**

Провайдер арендовал 1000 IP на одном VPS. Все прокси — Docker-контейнеры с одинаковым образом. Антифрод увидел 1000 запросов с идентичным fingerprint и заблокировал всю подсеть за 10 минут.

**Кейс 2: Несоответствие TTL и геолокации**

Клиент из Австралии, TTL=55 (стартовый 60, 5 хопов). Но сервер в США. TTL через 10 хопов должен быть 50, а не 55. Значит, клиент физически ближе к серверу, чем заявляет. Прокси.

**Кейс 3: Timestamp-атака**

Прокси-сервер в Нидерландах. Клиент из России. При каждом запросе timestamp увеличивается на 50-100 мс. Но сервер видит, что RTT (round-trip time) между клиентом и прокси — 200 мс. Разница timestamp меньше RTT — невозможно. Прокси.

Как защититься от fingerprint-детекта

Полностью скрыть TCP fingerprint — задача сложная. Но можно минимизировать риски.

**Способ 1: Использовать однородную инфраструктуру**

Если все клиенты используют одну ОС с одинаковыми настройками стека — fingerprint будет одинаковым. Это не скроет прокси, но сделает детект сложнее.

**Способ 2: Модифицировать TCP/IP стек**

На Linux можно через sysctl изменить TTL, window size, MSS. Но полную эмуляцию Windows сделать сложно — слишком много нюансов.

```

Пример изменения TTL на Linux

sysctl -w net.ipv4.ip_default_ttl=128

```

**Способ 3: Использовать специализированные прокси**

Некоторые провайдеры, вроде lexic.ml, модифицируют TCP-стек клиента, подгоняя его под target-систему. Но это костыль, не панацея.

**Способ 4: Прокси с поддержкой TCP splicing**

Терминируют TCP-соединение на своей стороне, создавая новое — к серверу. Fingerprint клиента не передаётся. Минус: latency растёт.

Таблица сравнения fingerprint разных ОС

| Параметр | Windows 10 | Linux 5.x | macOS | Android |

|----------|------------|-----------|-------|---------|

| TTL | 128 | 64 | 64 | 64 |

| Window Size | 65535 | 29200 | 65535 | 65535 |

| MSS | 1460 | 1460 | 1460 | 1460 |

| WScale | 8 | 7 | 3 | 8 |

| Опции | MSS,NOP,WScale,NOP,NOP,SACK,Timestamp | MSS,SACK,Timestamp,WScale | MSS,NOP,WScale,NOP,SACK,Timestamp | MSS,SACK,Timestamp,WScale |

Разница очевидна. Особенно порядок опций и WScale.

Будущее TCP fingerprinting

С развитием HTTP/3 и QUIC классический TCP fingerprint теряет актуальность. QUIC работает поверх UDP, там свои механизмы идентификации.

Но антифрод не стоит на месте. Уже сейчас анализируют:

- Packet inter-arrival time (время между пакетами)

- Congestion control алгоритмы (CUBIC, BBR, Reno)

- ACK-стратегии

Прокси-провайдерам придётся адаптироваться. Эмуляция стека на уровне ядра — тренд. Но это дорого и сложно.

Для обычного пользователя совет один: не используйте дешёвые прокси с VPS-образов. Они все одинаковые, и антифрод их видит за километр.

✔️Купить прокси