Как антифрод-системы вычисляют прокси по TCP/IP стеку и MTU
Содержание
- Как антифрод вычисляет прокси по TCP/IP стеку
- TCP timestamps — главный индикатор
- Опции TCP — зоопарк значений
- TTL — время жизни пакета
- MTU — размер имеет значение
- Window Size — окно в систему
- TCP timestamp randomization — костыль
- IP ID — идентификатор пакета
- MSS — максимальный размер сегмента
- Window Scale — масштабирование окна
- SACK — выборочное подтверждение
- PAWS — защита от скручивания таймстампов
- Реальные кейсы антифрода
- Как проверить свой стек
- Получаем TCP info
- Linux specific
- Как прокси обманывают антифрод
- Что делать, если ты прокси
- Итог
Как антифрод вычисляет прокси по TCP/IP стеку
Антифрод-системы давно перестали смотреть только на IP. Они лезут в сетевой стек глубже, чем ты думаешь. TCP/IP — не просто протокол, а отпечаток пальцев твоего соединения.
TCP timestamps — главный индикатор
Каждый TCP-пакет несёт временные метки. Опция `TCP Timestamp` (RFC 1323) должна быть монотонной. Прокси часто сбрасывают счётчик при переподключении. Или, наоборот, таймстампы не меняются годами — явный признак прокси.
Реальная картина: если сервер видит timestamp = 0 или скачки более 1000 секунд — это подозрительно. Нормальный клиент увеличивает значение равномерно. Прокси-агрегаторы ленятся эмулировать это поведение.
Опции TCP — зоопарк значений
Каждая ОС отправляет свой набор TCP-опций. Windows, Linux, macOS — у всех разный порядок и значения. Антифрод собирает сигнатуру:
- MSS (Maximum Segment Size)
- Window Scale
- SACK Permitted
- WS Opt
Прокси часто подменяют эти значения. Или используют дефолтные настройки ядра сервера. Если у 1000 клиентов одинаковый набор опций — это прокси-пул.
TTL — время жизни пакета
TTL (Time To Live) — классическая ловушка. Начальное значение ОС Windows — 128, Linux — 64, macOS — 64. Если TTL прилетает 64, а ОС клиента Windows — это прокси.
Прокси-серверы часто не меняют TTL. Или ставят случайное значение. Но антифрод смотрит не только на TTL, но и на его стабильность. Резкие скачки между запросами — красный флаг.
MTU — размер имеет значение
MTU (Maximum Transmission Unit) — ещё один параметр. Нормальное значение для Ethernet — 1500. Для VPN и туннелей — меньше. Прокси с PPPoE или GRE-туннелями режут MTU до 1400-1480.
Антифрод измеряет MTU через ICMP-пакеты или анализируя фрагментацию. Если клиент передаёт пакеты меньше 1500 без видимой причины — это прокси.
Пример из жизни: сервис доставки еды заметил, что 90% заказов с MTU 1472 приходят с одних и тех же IP. Оказалось — пул прокси.
Window Size — окно в систему
Размер TCP-окна (Window Size) зависит от буфера приёма ОС. Windows использует auto-tuning, Linux — фиксированные значения. Прокси часто наследуют настройки сервера.
Сравнение типичных значений:
| ОС | Начальный Window Size |
|---|---|
| Windows 10 | 65535-65536 |
| Linux (ядро 5.x) | 29200-65535 |
| macOS | 65535 |
| Прокси-сервер (Debian) | 29200 |
Если у клиента с Windows Window Size = 29200 — это прокси.
TCP timestamp randomization — костыль
Некоторые прокси пытаются рандомизировать таймстампы. Но делают это криво. Счётчик может обнуляться, прыгать назад или использовать одно и то же значение для всех соединений.
Антифрод отслеживает корреляцию между timestamp и реальным временем. Если за 10 минут timestamp изменился на 1000, а прошло 600 секунд — несоответствие.
IP ID — идентификатор пакета
IP ID (Identification field) — ещё один параметр. Linux использует случайные значения, Windows — инкремент. Прокси часто копируют поведение сервера.
Если все запросы от клиента идут с IP ID, увеличивающимся на 1 — это не Windows. И не Linux. Это прокси с дефолтными настройками.
MSS — максимальный размер сегмента
MSS (Maximum Segment Size) вычисляется из MTU. Обычно MSS = MTU - 40 (заголовки IP и TCP). Для Ethernet это 1460. Для VPN — меньше.
Прокси часто не меняют MSS при туннелировании. Если клиент шлёт MSS 1460, но MTU 1400 — пакеты будут фрагментироваться. Антифрод это видит.
Window Scale — масштабирование окна
Window Scale — множитель для Window Size. Windows использует 8 (коэффициент 256), Linux — 7 (128). Прокси могут использовать любые значения, но часто остаются с настройками ОС сервера.
Если Window Scale = 7, а ОС клиента Windows — это прокси.
SACK — выборочное подтверждение
SACK (Selective Acknowledgment) — опция, которая говорит о поддержке выборочных подтверждений. Windows включает её всегда. Linux — зависит от версии ядра. Прокси могут не поддерживать SACK.
PAWS — защита от скручивания таймстампов
PAWS (Protection Against Wrapped Sequences) — механизм, использующий TCP timestamps. Антифрод проверяет, как клиент обрабатывает старые пакеты. Прокси часто игнорируют PAWS.
Реальные кейсы антифрода
Кейс 1: Банк заметил, что клиенты из одного региона используют одинаковые TCP-опции. Оказалось — прокси-пул провайдера. Заблокировали 5000 IP.
Кейс 2: Игровой сервер видел TTL 64 у всех игроков. Но 30% имели Windows. Прокси-сервис не менял TTL. Баним по IP.
Кейс 3: Интернет-магазин анализировал MTU. Клиенты с MTU 1472 чаще всего были прокси. Оказалось, что прокси-сервер использует PPPoE с MTU 1492, но из-за заголовков GRE реальный MTU 1472.
Как проверить свой стек
Используй `curl` с опцией `--tcp-nodelay` и смотри заголовки. Или пиши скрипт на Python:
```python
import socket
import struct
def get_tcp_options(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
s.connect((host, port))
Получаем TCP info
import fcntl
import os
Linux specific
TCP_INFO = 11
info = fcntl.ioctl(s, TCP_INFO, struct.pack('I', 0))
print(info)
s.close()
```
Но проще — сервисы типа `whatismyip.com` с детальным анализом.
Как прокси обманывают антифрод
Продвинутые прокси эмулируют TCP-стек. Например, `proxychains` с `--tcp-stack` параметрами. Или `socks5` с подменой TTL. Но это сложно.
Есть решения на уровне ядра — `netfilter` модули, которые подменяют TCP-опции. Но они дорогие и нестабильные.
Что делать, если ты прокси
Если используешь прокси для работы — убедись, что провайдер эмулирует TCP-стек. Спроси про поддержку TCP timestamp randomization и подмену TTL.
На `lexic.ml` есть IPv6 прокси с полной эмуляцией стека. Проверено на антифрод-системах.
Итог
Антифрод смотрит на TCP/IP стек как на отпечаток пальца. TTL, MTU, Window Size, TCP timestamps — всё это сигналы. Прокси без эмуляции стека — дырявое ведро.
Помни: даже идеально настроенный прокси может выдать себя через комбинацию параметров. Антифрод-системы умнеют каждый день.