Как антифрод-системы вычисляют прокси по TCP/IP fingerprint
Содержание
Антифрод-системы давно перестали полагаться только на IP-репутацию. Они копают глубже — прямо в TCP-стек. И там, на уровне рукопожатия, можно спалить даже самый дорогой приватный прокси.
TCP/IP fingerprinting: что это вообще такое
Каждая операционная система отправляет TCP-пакеты по-своему. Разные значения TTL, window size, MSS, опции в SYN-пакете. Это как отпечатки пальцев. Собрал их — понял, кто стучится: Windows 11, Linux 6.x, macOS или какой-нибудь OpenBSD.
Антифрод смотрит на эти параметры и сравнивает с эталоном. Если у вас на сервере Linux, а TCP-стек клиента показывает Windows — странно. Если TTL 64, а window size не типичен для Linux — тоже подозрительно.
Вот базовые параметры, которые анализируются:
| Параметр | Что означает | Типичные значения |
|----------|--------------|-------------------|
| TTL | Время жизни пакета | 64 (Linux), 128 (Windows), 255 (BSD) |
| Window Size | Размер окна TCP | 65535, 29200, 8192 |
| MSS | Максимальный размер сегмента | 1460, 1440, 1380 |
| TCP Options | Набор опций в SYN | SACK, Timestamp, WScale |
| DF | Флаг Don't Fragment | 0 или 1 |
Проблема в том, что прокси-серверы часто форвардят пакеты без изменений. Клиент подключается к прокси, прокси — к серверу. Но TCP-рукопожатие между клиентом и сервером идёт напрямую. И если прокси не умеет подменять fingerprint, сервер видит реальную ОС клиента.
Как антифрод вычисляет прокси по fingerprint
Есть несколько сценариев.
**Сценарий 1. Прямое подключение через прокси без маскировки.**
Клиент с Windows 11 (TTL 128, window 65535) подключается к серверу через SOCKS5-прокси на Linux. Прокси форвардит пакет как есть. Сервер видит TTL 128 и window 65535. Но IP прокси — это Linux-сервер, который обычно даёт TTL 64. Несостыковка. Антифрод ставит флаг: "потенциальный прокси".
**Сценарий 2. Прокси меняет TTL, но забывает про window size.**
Прокси подменяет TTL на 64, чтобы выглядеть как Linux. Но window size остаётся 65535 — типично для Windows. Или MSS меняется на 1460, а window scale не соответствует. Антифрод видит гибрид — явный признак подмены.
**Сценарий 3. Использование публичных прокси с известным fingerprint.**
Многие бесплатные прокси работают на одинаковых конфигурациях. Например, Squid на Ubuntu 20.04. Антифрод знает fingerprint этой связки: TTL 64, window 29200, MSS 1460, опции: SACK, Timestamp, WScale. Если видит такой fingerprint, а клиент при этом из другого региона — 99% прокси.
MTU как дополнительный маркер
MTU — Maximum Transmission Unit. Размер пакета, который может пройти через сеть. Типичное значение для Ethernet — 1500 байт. Но через VPN или туннель MTU может быть меньше: 1400, 1300, 1200.
Антифрод анализирует MTU по ICMP-пакетам или по фрагментации. Если клиент шлёт пакеты с MTU 1400, а его IP принадлежит дата-центру — почти наверняка это VPN или прокси.
Вот как это выглядит на практике:
```
Клиент (MTU 1400) -> Прокси (MTU 1500) -> Сервер
```
Сервер видит, что пакеты приходят с MTU 1400. Но IP прокси — это дата-центр, где стандартный MTU 1500. Разница в 100 байт — повод задуматься.
Особенно жёстко это работает с IPv6. Там MTU может быть 1280 или 1500. Если клиент шлёт пакеты с MTU 1280, а его IP — домашний или мобильный — нормально. Но если IP из дата-центра, а MTU 1280 — это туннель.
Реальные кейсы из практики
**Кейс 1. Прокси на VPS с Windows.**
Клиент купил дешёвый VPS на Windows Server и поставил на него прокси. Fingerprint: TTL 128, window 65535, MSS 1460, опции: SACK, Timestamp, WScale. Антифрод сразу вычислил — Windows Server в дата-центре не может быть домашним пользователем.
**Кейс 2. Цепочка из нескольких прокси.**
Клиент использовал цепочку: SOCKS5 -> HTTP-proxy -> VPN. Fingerprint менялся на каждом шаге. Но антифрод заметил, что TTL уменьшается на 1 на каждом хопе. И window size не соответствует ни одному известному профилю. Результат — блокировка.
**Кейс 3. Прокси с подменой fingerprint.**
Некоторые прокси-сервисы (например, lexic.ml) умеют подменять fingerprint под целевую ОС. Клиент с Windows подключается к прокси, прокси с Linux отправляет запросы с fingerprint Windows. Антифрод видит: TTL 128, window 65535, MSS 1460 — похоже на реального пользователя. Но если прокси забывает подменить MTU — всё рушится.
Как защититься от fingerprint-анализа
Есть несколько способов.
**1. Подмена fingerprint на уровне прокси.**
Прокси должен уметь эмулировать TCP-стек клиента. Это сложно, но возможно. Некоторые решения типа `p0f` или `nmap` позволяют подменять параметры.
**2. Использование IPv6.**
IPv6-прокси сложнее анализировать. Там меньше стандартных fingerprint'ов. К тому же, IPv6-адреса чаще меняются, и антифрод не успевает накопить статистику.
**3. MTU-маскировка.**
Прокси должен форвардить MTU клиента, а не использовать свой. Или подменять MTU на стандартное значение 1500.
**4. Динамическая смена fingerprint.**
Менять параметры TCP-стека случайным образом. Но это может вызвать проблемы с совместимостью.
Практический пример: как проверить свой fingerprint
Вот как можно посмотреть, что видит сервер при подключении через прокси.
**На клиенте (Linux):**
```bash
curl -s https://tcpip.guru/api/fingerprint
```
**Через прокси:**
```bash
curl -x http://proxy:8080 -s https://tcpip.guru/api/fingerprint
```
Сравните результаты. Если fingerprint отличается от типичного для вашей ОС — антифрод это тоже видит.
**На Python:**
```python
import socket
import struct
def get_fingerprint(host, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
sock.connect((host, port))
Получаем TTL
ttl = struct.unpack('B', sock.getsockopt(socket.IPPROTO_IP, socket.IP_TTL))[0]
Получаем MSS
mss = struct.unpack('H', sock.getsockopt(socket.IPPROTO_TCP, socket.TCP_MAXSEG))[0]
sock.close()
return {'ttl': ttl, 'mss': mss}
print(get_fingerprint('example.com', 80))
```
Что в итоге
Антифрод-системы вычисляют прокси по TCP/IP fingerprint и MTU. Это работает, потому что большинство прокси не умеют маскироваться. TTL, window size, MSS, опции TCP — всё это выдаёт реальную ОС и тип подключения.
Защита — подмена fingerprint на уровне прокси, использование IPv6, правильная настройка MTU. Но даже это не даёт 100% гарантии. Антифрод постоянно совершенствуется, добавляет анализ поведения, временных задержек, HTTP-заголовков.
Хотите проверить, как выглядит ваш прокси со стороны? Возьмите любой публичный сервис для анализа TCP/IP и сравните fingerprint с эталоном. Если не совпадает — антифрод уже знает.