Как антифрод-системы вычисляют прокси по TCP fingerprint (анализ стека и window size)
Содержание
- Как антифрод вычисляет прокси по TCP fingerprint
- Window size — главный триггер
- TTL — время жить, но не для прокси
- Опции TCP — зоопарк вариаций
- Linux 4.15
- Windows 10
- Как антифрод собирает fingerprint
- Реальные кейсы обнаружения
- Как защититься от fingerprint-анализа
- Технические детали: как это выглядит в коде
- Отправляем SYN
- Пример использования
- Проверка TTL
- Проверка window size через tcpdump
- Что делать, если тебя уже вычислили
- Таблица сравнения fingerprint разных систем
- Почему IPv6 не спасает
- Будущее TCP fingerprint
- Итог
Как антифрод вычисляет прокси по TCP fingerprint
TCP fingerprint — это цифровой отпечаток сетевого стека. Каждая ОС, каждое ядро, каждый билд отправляет пакеты чуть иначе. Размер окна, TTL, опции TCP, порядок их следования — всё это складывается в уникальный паттерн.
Антифрод-системы давно научились читать эти отпечатки. И ты даже не представляешь, как много они могут сказать о твоём соединении.
Window size — главный триггер
Размер окна (TCP Window) — это количество байт, которое устройство готово принять без подтверждения. Звучит безобидно. Но именно window size чаще всего выдает прокси.
Почему? Потому что серверные ОС используют другие значения, чем десктопные. Linux по умолчанию ставит 29200 или 65535. Windows — 65535 или 8192. macOS — 65535.
А теперь представь: антифрод видит, что клиент шлёт window size 65535, но TTL указывает на Linux. Это уже подозрительно. А если ты используешь прокси, который форвардит пакеты без изменения стека — всё, ты попался.
TTL — время жить, но не для прокси
TTL (Time To Live) — количество хопов, которое пакет может пройти. Каждый маршрутизатор уменьшает его на единицу.
Дефолтные значения:
- Windows: 128
- Linux: 64
- macOS: 64
- Cisco: 255
Когда ты подключаешься через прокси, TTL меняется. Если у тебя Windows (128), а прокси на Linux (64), то после прокси TTL станет 63 или около того. Антифрод видит TTL=63 и понимает: это не прямое соединение.
Хитрые прокси пытаются подменять TTL. Но это работает только если знаешь оригинальное значение. А если не знаешь — можно только гадать.
Опции TCP — зоопарк вариаций
TCP-опции — это дополнительные поля в заголовке. Они нужны для разных фич: масштабирование окна, временные метки, SACK, selective ACK.
Каждая ОС использует свой набор опций и свой порядок. Linux, например, всегда ставит MSS, потом SACK, потом Timestamp. Windows — сначала Timestamp, потом SACK.
Антифрод собирает эти последовательности и сравнивает с базой. Если у тебя порядок опций как у Linux, а TTL как у Windows — красный флаг.
Вот пример, как выглядит TCP-отпечаток в реальности:
```
Linux 4.15
MSS: 1460
WScale: 7
Timestamp: yes
SACK: yes
Window size: 29200
TTL: 64
```
```
Windows 10
MSS: 1460
WScale: 8
Timestamp: yes
SACK: yes
Window size: 65535
TTL: 128
```
Разница очевидна. И это только верхушка айсберга.
Как антифрод собирает fingerprint
Антифрод-системы используют библиотеки вроде p0f или собственные разработки. Они пассивно слушают трафик и собирают статистику.
Процесс выглядит так:
1. Перехватывается SYN-пакет (первый пакет соединения)
2. Извлекаются все параметры: window size, TTL, опции, их порядок
3. Строится хеш-сумма набора параметров
4. Хеш сравнивается с базой известных отпечатков
Если отпечаток не соответствует ни одной известной ОС — значит, пакет модифицирован. Антифрод ставит метку "подозрительный".
Реальные кейсы обнаружения
Кейс 1. Ты сидишь в Москве, используешь прокси в Амстердаме. Антифрод видит: TTL=58 (прошёл 6 хопов), window size=65535, опции как у Windows. Но прокси на Linux подменяет window size на 29200. Всё, прокси вычислен.
Кейс 2. Ты используешь цепочку прокси. Первый прокси меняет TTL, второй — нет. Антифрод видит несоответствие между TTL и window size. Опять красный флаг.
Кейс 3. Ты используешь IPv6 прокси с lexic.ml. Там своя специфика: window size может быть любым, но TTL почти всегда 64. Если твой клиент — Windows, антифрод заметит разницу.
Как защититься от fingerprint-анализа
Полная защита — миф. Но можно усложнить жизнь антифроду.
Первый способ — использовать прокси, которые модифицируют TCP-стек. Например, подменяют window size и TTL под клиента. Но это требует глубокой интеграции.
Второй способ — использовать IP-транспорт, который не даёт антифроду собрать fingerprint. Например, WireGuard или OpenVPN в режиме TUN. Они инкапсулируют трафик, и антифрод видит только fingerprint VPN-сервера.
Третий способ — менять прокси каждые N запросов. Антифрод не успеет накопить статистику.
Технические детали: как это выглядит в коде
Вот как можно собрать TCP fingerprint с помощью Python:
```python
import socket
from scapy.all import *
def get_tcp_fingerprint(ip, port):
Отправляем SYN
syn = IP(dst=ip)/TCP(dport=port, flags='S')
ans = sr1(syn, timeout=2, verbose=0)
if ans and ans.haslayer(TCP):
tcp = ans.getlayer(TCP)
ip_layer = ans.getlayer(IP)
fingerprint = {
'window_size': tcp.window,
'ttl': ip_layer.ttl,
'options': tcp.options,
'flags': tcp.flags
}
return fingerprint
return None
Пример использования
fp = get_tcp_fingerprint('8.8.8.8', 80)
print(fp)
```
А вот как антифрод может проверить, не прокси ли это:
```bash
Проверка TTL
ping -c 1 example.com | grep ttl
Проверка window size через tcpdump
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' -c 10
```
Что делать, если тебя уже вычислили
Если антифрод определил, что ты через прокси — не паникуй. Есть несколько вариантов.
Первый — сменить прокси на другой, с другим fingerprint. Например, если использовал прокси на Linux, попробуй на FreeBSD.
Второй — использовать ротацию IP. Антифрод запоминает fingerprint для каждого IP. Если менять IP каждые 5 минут, он не успеет собрать статистику.
Третий — вообще отказаться от прокси и использовать VPN. VPN меняет весь стек, и антифрод видит только fingerprint VPN-сервера.
Таблица сравнения fingerprint разных систем
| Параметр | Windows 10 | Linux 5.4 | macOS 11 | FreeBSD 12 |
|----------|------------|-----------|----------|------------|
| MSS | 1460 | 1460 | 1460 | 1460 |
| WScale | 8 | 7 | 3 | 6 |
| Timestamp | да | да | да | нет |
| SACK | да | да | да | да |
| Window size | 65535 | 29200 | 65535 | 65535 |
| TTL | 128 | 64 | 64 | 64 |
Разница видна невооружённым глазом. Особенно TTL и window size.
Почему IPv6 не спасает
Многие думают, что IPv6 решит проблему fingerprint. Наивные. Антифрод адаптировался.
В IPv6 TTL работает так же. Window size — тоже. Опции TCP — те же. Единственное отличие — адресация. Но fingerprint остаётся fingerprint.
Прокси на lexic.ml работают с IPv6, но это не панацея. Антифрод всё равно может вычислить прокси по TCP-стеку.
Будущее TCP fingerprint
Антифрод-системы эволюционируют. Сейчас они уже используют машинное обучение для анализа fingerprint.
Нейросети могут определять прокси даже по косвенным признакам. Например, по времени между пакетами или по вариациям window size.
Но и прокси не стоят на месте. Появляются технологии, которые подменяют fingerprint под клиента. Это сложно, но возможно.
Итог
TCP fingerprint — мощный инструмент в руках антифрода. Window size, TTL, опции — всё это выдает прокси.
Но не всё так плохо. Есть способы защиты: смена прокси, ротация IP, использование VPN. Главное — понимать, как работает система, которую ты пытаешься обмануть.
И помни: идеальной защиты не существует. Всегда есть риск быть вычисленным. Вопрос только в том, насколько сильно антифрод хочет тебя поймать.