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

Как антифрод-системы вычисляют прокси по TCP fingerprint

Как антифрод-системы вычисляют прокси по TCP fingerprint

Как антифрод вычисляет прокси по TCP fingerprint

Антифрод-системы копают глубже, чем IP-адреса. Они лезут на транспортный уровень. TCP fingerprint — их главный инструмент. Работает хитрее, чем кажется.

Что такое TCP fingerprint

TCP-рукопожатие — это обмен пакетами с кучей параметров. Sequence numbers, window size, опции вроде MSS, WS, SACK_PERM. Каждая ОС и каждый стек отправляют это по-своему. Отличия микроскопические, но стабильные.

Linux 6.1 на ядре по умолчанию ставит window size в 65535. FreeBSD — в 65536. Разница в один байт. Антифрод ловит такие мелочи. Собирает отпечаток за один SYN-пакет.

Как прокси выдают себя

Прокси ломают fingerprint двумя способами. Первый — прямое проксирование. Сервер видит SYN от прокси, а не от клиента. Отпечаток — серверный. Клиентский браузер тут ни при чём.

Второй — туннели. SOCKS5 или OpenVPN меняют параметры TCP-стека. Если прокси крутится на Debian, fingerprint будет Debian. Клиент с macOS 14.5 — невидимка. Антифрод видит только то, что на границе сети.

Обход через изменение параметров

Бывалые меняют TCP-параметры вручную. На Linux через sysctl:

```

net.ipv4.tcp_window_scaling = 0

net.ipv4.tcp_sack = 0

net.ipv4.tcp_timestamps = 0

```

Убирают уникальные опции. Приближают fingerprint к Windows. Но это палка о двух концах. Без масштабирования окна падает скорость.

На Windows через реестр:

```

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]

"Tcp1323Opts"=dword:00000001

```

Меняют комбинации опций. Подгоняют под нужный профиль.

Пример с curl

Смотрим fingerprint реального прокси:

```

curl -v --proxy http://proxy.example.com:8080 https://httpbin.org/ip

```

В выводе — детали рукопожатия. Антифрод забирает их через tcpdump на своей стороне:

```

tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0'

```

Сравнивает с базой. Если window scale factor = 7, а TTL = 64 — это Linux. Если TTL = 128 — Windows. Прокси с изменённым TTL — красный флаг.

Реальные кейсы

Кейс 1: Авиакомпания. Антифрод забанил всех с fingerprint Windows 10, хотя клиенты сидели на macOS. Оказалось, VPS-провайдер ставил Hyper-V на Windows Server. Fingerprint отображал хост, а не клиента.

Кейс 2: Банк. Прокси на OpenBSD давал TTL 255. Ни один браузер не живёт столько. Антифрод резал таких на раз. Пришлось ставить iptables с перезаписью TTL.

Кейс 3: Маркетплейс. Использовал nginx как обратный прокси. Fingerprint менялся каждые 5 минут из-за раунд-робина по разным серверам. Антифрод посчитал это атакой. Решили фиксацией бэкенда.

Таблица отпечатков

| ОС | Window size | TTL | Опции |

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

| Linux 6.x | 65535 | 64 | MSS, WS, SACK, Timestamps |

| Windows 11 | 65536 | 128 | MSS, WS, SACK |

| macOS 14 | 65535 | 64 | MSS, WS, SACK, Timestamps, MP TCP |

| FreeBSD 13 | 65536 | 64 | MSS, WS, SACK, Timestamps |

Разница в опциях — золотая жила для антифрода. Windows не шлёт Timestamps в каждом SYN. Linux — шлёт. macOS добавляет Multipath TCP. Это редкость.

Как антифрод собирает базу

Сканируют весь интернет. Nmap с кучей проб. Zmap по портам 80 и 443. Собирают fingerprint каждого IP. Потом машут на прокси-листы и дата-центры.

Если IP из DigitalOcean — fingerprint Linux. Нормально. Если IP из DigitalOcean, а fingerprint Windows — прокси или NAT. Гребут таких.

Обход через модуляцию

Продвинутый метод — модуляция fingerprint под клиента. Прокси на лету подменяет параметры TCP-стека. Берёт отпечаток из SYN-пакета клиента и шлёт его дальше. Сервер видит клиентский fingerprint.

Реализация через iptables + xt_TCPOPTSTRIP или nftables. На Python через scapy:

```python

from scapy.all import *

def modify_syn(pkt):

if TCP in pkt and pkt[TCP].flags == 'S':

del pkt[TCP].options

pkt[TCP].options = [('MSS', 1460), ('WScale', 7)]

return pkt

return pkt

```

Но это замедляет. Каждый пакет — обработка. Для высоких нагрузок не годится.

Почему VPN не спасает

VPN шифрует трафик. Но TCP-рукопожатие видно на обоих концах. Антифрод на сервере видит fingerprint VPN-сервера. Если сервер в AWS — fingerprint Linux. Клиент с macOS — невидимка.

Исключение — WireGuard. Он работает на UDP. TCP-отпечатка нет. Но антифрод тогда смотрит на IP и поведение. Дыра закрывается другими методами.

lexic.ml и его подход

На lexic.ml используют другую архитектуру. Прокси на IPv6 с изменёнными параметрами стека. TTL подгоняют под Windows. Window size — под macOS. Опции — под Linux. Гибридный fingerprint.

Это не панацея. Но антифроду сложнее. База не совпадает ни с одним профилем. Приходится анализировать глубже. А время на анализ — деньги для бизнеса.

Технические грабли

Главные грабли — статика. Fingerprint не должен меняться для одного IP. Если прокси крутится на кластере, каждый узел — свой отпечаток. Антифрод видит зоопарк. Банит всех.

Вторые грабли — MTU. Прокси с MTU 1500 на IPv4 и 1280 на IPv6 — разные fingerprint. При переходе между протоколами антифрод сходит с ума.

Третьи — TCP timestamp. Если клиент и прокси в разных часовых поясах, timestamp скачет. Антифрод ловит аномалию.

Будущее противостояния

Антифрод переходит на ML. Обучают модели на миллионах fingerprint. Прокси с модуляцией — временная мера. Скоро будут ловить по корреляции fingerprint и поведения.

С другой стороны — QUIC. Протокол на UDP. TCP fingerprint не работает. Но QUIC свой отпечаток — TLS fingerprint. Другая история.

Пока TCP жив — fingerprint остаётся главным оружием.

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