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

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

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

Антифрод-системы научились видеть прокси на уровне TCP. Не по IP, не по заголовкам HTTP, а по тому, как соединение устанавливается. Разберём механику.

Что такое TCP fingerprint

Каждая операционная система собирает TCP-пакеты по-своему. Linux, Windows, macOS — у каждого свой почерк. Разница в начальном TTL, размере окна, опциях TCP, таймингах.

Пример fingerprint'а Linux 5.x:

```

TTL: 64

Window: 29200

Options: MSS, SACK, TS, NOP, WScale

MSS: 1460

WScale: 7

```

Windows 10 выдаст:

```

TTL: 128

Window: 65535

Options: MSS, SACK, TS, WScale

MSS: 1460

WScale: 8

```

Антифрод снимает отпечаток с каждого входящего соединения. Если fingerprint не совпадает с ожидаемым для реального пользователя — прокси.

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

Система пассивно слушает SYN-пакеты. Ей не нужно отвечать — достаточно первого пакета трёхстороннего рукопожатия.

Что анализируется:

- Размер начального окна (IW)

- Список опций TCP и их порядок

- Значение TTL

- Timestamp и их точность

- Флаги ECN, SACK

Всё это складывается в хеш. Базы данных вроде p0f или JA3 собирают миллионы таких отпечатков. Сравнение занимает миллисекунды.

Почему стандартные прокси палятся

Обычный прокси-сервер работает на Linux. Он шлёт пакеты с fingerprint'ом Linux. Пользователь сидит на Windows, но антифрод видит Linux-отпечаток. Несостыковка.

Хуже того — многие VPS и dedicated серверы используют дефолтные настройки ядра. Все они выглядят одинаково. Антифрод знает: если пришёл запрос с fingerprint'ом DigitalOcean или AWS — это почти наверняка прокси.

Реальный кейс: бан по TTL

Была история: клиент купил прокси, всё работало неделю. Потом — блокировка. Антифрод засёк TTL=64. У реальных пользователей в этом регионе TTL=128 (Windows). Разница в 64 хопа — очевидный признак прокси.

Решение примитивное, но рабочее: подкрутить TTL в iptables:

```bash

iptables -t mangle -A POSTROUTING -j TTL --ttl-set 128

```

Но это лечит только один симптом.

Техники обхода: маскировка fingerprint'а

1. Подмена TTL

Меняем TTL на значение, типичное для целевой ОС. Для Windows — 128, для macOS — 64, для Android — 64.

```bash

Установить TTL=128 для всех исходящих пакетов

iptables -t mangle -A POSTROUTING -j TTL --ttl-set 128

```

2. Настройка TCP-стэка

Linux позволяет менять параметры TCP через sysctl. Можно подогнать под fingerprint Windows.

```bash

Размер окна как у Windows

sysctl -w net.ipv4.tcp_window_scaling=1

sysctl -w net.ipv4.tcp_rmem='4096 87380 6291456'

sysctl -w net.ipv4.tcp_wmem='4096 87380 6291456'

Отключить SACK (Windows не всегда использует)

sysctl -w net.ipv4.tcp_sack=0

```

3. Эмуляция через nfqueue

Более сложный, но гибкий вариант. Перехватываем SYN-пакеты и модифицируем их на лету.

```python

from nfqueue import Queue

from scapy.all import IP, TCP

def modify_packet(payload):

data = payload.get_data()

pkt = IP(data)

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

Меняем TTL

pkt[IP].ttl = 128

Меняем размер окна

pkt[TCP].window = 65535

Удаляем опцию TS (часто палит прокси)

del pkt[TCP].options

payload.set_verdict_modified(1, bytes(pkt), len(pkt))

else:

payload.set_verdict(1)

q = Queue()

q.open()

q.set_callback(modify_packet)

q.bind(0)

q.run()

```

Продвинутые методы антифрода

Антифрод не стоит на месте. Они научились анализировать:

- **TCP timestamps**. У реальных пользователей они монотонно растут. У прокси — сбрасываются при перезапуске сервера.

- **RTT (Round-Trip Time)**. Слишком стабильное время ответа — признак прокси.

- **Sequence numbers**. Предсказуемые последовательности — признак ботов.

- **IP ID**. У прокси часто одинаковый IP ID для всех соединений.

Таблица: fingerprint'ы популярных ОС

| ОС | TTL | Window | MSS | WScale | SACK | Timestamp |

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

| Windows 10 | 128 | 65535 | 1460 | 8 | + | + |

| Windows 11 | 128 | 65535 | 1460 | 8 | + | + |

| Linux 5.x | 64 | 29200 | 1460 | 7 | + | + |

| macOS 14 | 64 | 65535 | 1460 | 6 | + | + |

| Android 13 | 64 | 29200 | 1460 | 7 | + | + |

| iOS 17 | 64 | 65535 | 1460 | 6 | + | + |

Практический тест

Проверяем fingerprint своего сервера через curl:

```bash

curl -s https://tcpip.pro/api/fingerprint

```

Ответ покажет, как вас видит антифрод. Если TTL=64 и window=29200 — вы Linux. Для маскировки под Windows нужно TTL=128 и window=65535.

Что делает lexic.ml

Провайдеры вроде lexic.ml уже встроили маскировку TCP fingerprint в свои прокси. Они подменяют fingerprint на уровне ядра, эмулируя Windows или macOS. Плюс рандомизируют параметры, чтобы каждый запрос выглядел как от отдельного пользователя.

Но это не панацея. Антифрод эволюционирует. Теперь они смотрят на:

- **HTTP/2 fingerprint**. Как клиент устанавливает h2-соединение — свой почерк.

- **TLS fingerprint (JA3)**. Как клиент договаривается о шифровании.

- **WebRTC fingerprint**. Даже без WebRTC, системные вызовы оставляют следы.

Как обходить комплексно

Одной подменой TTL не отделаться. Нужен многослойный подход:

1. **TCP-стек** — подогнать под целевую ОС.

2. **HTTP-заголовки** — User-Agent, Accept-Language, порядок заголовков — всё должно соответствовать.

3. **TLS** — использовать библиотеки, эмулирующие fingerprint браузера.

4. **Поведение** — имитировать человеческие паузы, скролл, клики.

Пример настройки Python requests с маскировкой:

```python

import requests

from requests.adapters import HTTPAdapter

from urllib3.util.ssl_ import create_urllib3_context

class TlsAdapter(HTTPAdapter):

def init_poolmanager(self, *args, **kwargs):

ctx = create_urllib3_context()

ctx.set_ciphers('ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM')

ctx.set_alpn_protocols(['h2', 'http/1.1'])

kwargs['ssl_context'] = ctx

return super().init_poolmanager(*args, **kwargs)

session = requests.Session()

session.mount('https://', TlsAdapter())

```

Грабли, на которые наступают

- **Слишком чистый fingerprint**. Если все параметры идеально совпадают с Windows, но при этом нет ни одного отклонения — это подозрительно. У реальных пользователей бывают вариации.

- **Постоянный IP ID**. Некоторые забывают рандомизировать IP ID. Антифрод видит: все пакеты от этого IP имеют последовательные ID — явный признак одного устройства.

- **Отсутствие background traffic**. У реального пользователя в фоне идут обновления, DNS-запросы, синхронизация. У прокси — тишина.

Вывод

TCP fingerprint — мощный инструмент, но не абсолютный. Антифрод смотрит не на один параметр, а на совокупность. Маскировка должна быть комплексной: от TTL до TLS.

Если используете прокси для критичных задач — проверяйте fingerprint вашего сервера. И не забывайте про поведенческий анализ. Технические параметры можно подделать, но паттерны поведения пользователя — сложнее.

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