Всем привет!
В этой статье рассмотрим методы обхода Deep Packet Inspection (DPI) и систем цензуры.
Теоретическая часть
Что такое DPI и зачем его обходить
Deep Packet Inspection (DPI) — это технология глубокого анализа сетевого трафика, которая проверяет не только заголовки пакетов, но и их содержимое. DPI позволяет провайдерам и цензорам:
DPI системы анализируют трафик на нескольких уровнях:
Методы обхода DPI
В этой статье рассмотрим следующие методы:
Подготовка окружения
Установка необходимых инструментов
На Linux (Ubuntu/Debian):
Установка Python библиотек:
Для работы с VPN может потребоваться установка дополнительных инструментов (WireGuard, OpenVPN клиенты), которые мы рассмотрим в соответствующих разделах.
Метод 1: DNS-over-HTTPS (DoH) — обход DNS блокировок
Что такое DoH
DNS-over-HTTPS (DoH) — это протокол, который шифрует DNS запросы внутри HTTPS пакетов. Это делает DNS запросы невидимыми для DPI систем, так как весь трафик выглядит как обычный HTTPS.
Преимущества DoH:
Шаг 1: Тестирование DoH через Cloudflare
Cloudflare предоставляет публичный DoH сервер, который работает по адресу https://cloudflare-dns.com/dns-query. Этот сервер поддерживает стандарт RFC 8484.
Создадим простой Python скрипт для тестирования DoH:
POST метод (RFC 8484) более надежен, так как DNS запрос находится в теле запроса, а не в URL, что затрудняет его анализ DPI системами.
Шаг 2: Использование DoH через curl
Можно использовать DoH напрямую через curl, если он поддерживает эту функцию (curl 7.62+):
Статус 0 означает успешный ответ. Поле data содержит IP адрес домена.
Метод 2: SSH SOCKS туннель — обход DPI через SSH
Что такое SSH SOCKS туннель
SSH SOCKS туннель создает зашифрованное соединение через SSH, через которое проходит весь трафик. DPI системы видят только SSH трафик, но не могут расшифровать его содержимое.
Преимущества:
Шаг 1: Создание SSH SOCKS туннеля
Для создания SSH SOCKS туннеля используется опция -D команды ssh. Эта опция создает локальный SOCKS прокси на указанном порту.
Команда -N означает, что не нужно выполнять удаленные команды, только создать туннель. Опция -C включает сжатие для повышения скорости.
Туннель будет работать в фоновом режиме. Для запуска в фоне можно использовать опцию -f или запустить команду в отдельном терминале.
Шаг 2: Проверка работы туннеля
После создания туннеля нужно проверить, что он работает. Можно проверить, слушает ли порт 1080:
Порт должен слушать только на 127.0.0.1 (localhost), а не на всех интерфейсах, для безопасности.
Шаг 3: Использование туннеля для HTTP запросов
Теперь можно использовать туннель для доступа к заблокированным ресурсам через curl:
curl --socks5 127.0.0.1:1080 http://blocked-site.com
Опция --socks5 указывает curl использовать SOCKS5 прокси. Для HTTPS запросов используется та же опция:
IP адрес изменился на IP SSH сервера, что подтверждает, что трафик проходит через туннель.
Шаг 4: Использование туннеля с Python
Для использования SSH SOCKS туннеля в Python скриптах нужно использовать библиотеку pysocks:
Для автоматического создания туннеля при загрузке системы можно создать systemd service или добавить команду в автозагрузку.
Метод 3: VPN туннелирование — полный обход DPI
WireGuard — современный VPN протокол
WireGuard — это современный VPN протокол с минимальными накладными расходами и высокой производительностью. Он специально разработан для обхода DPI систем.
Преимущества WireGuard:
Шаг 1: Установка WireGuard
На Linux установка WireGuard выполняется через пакетный менеджер:
Шаг 2: Генерация ключей
WireGuard использует пары ключей (приватный и публичный) для аутентификации. Сначала генерируем приватный ключ:
Шаг 3: Создание конфигурации клиента
Создаем конфигурационный файл для WireGuard клиента:
Содержимое конфигурации:
AllowedIPs = 0.0.0.0/0 означает, что весь трафик будет идти через VPN. Для split-tunneling можно указать конкретные сети.
Шаг 4: Подключение к VPN
После создания конфигурации можно подключиться к VPN:
показывает время последнего рукопожатия. Если это значение большое, соединение может быть нестабильным.
Шаг 5: Проверка изменения IP
После подключения к VPN нужно проверить, что IP адрес изменился:
IP адрес должен соответствовать IP VPN сервера, а не вашему реальному IP.
Метод 4: Shadowsocks — легкий прокси с обфускацией
Что такое Shadowsocks
Shadowsocks — это легкий прокси-сервер с обфускацией трафика, специально разработанный для обхода цензуры. Он маскирует трафик под обычный HTTPS, что затрудняет его обнаружение DPI системами.
Преимущества:
Шаг 1: Установка Shadowsocks клиента
На Linux установка выполняется через pip:
Шаг 2: Создание конфигурации
Создаем конфигурационный файл для Shadowsocks клиента:
Метод aes-256-gcm обеспечивает хорошую производительность и безопасность. Для обхода DPI можно использовать методы с обфускацией, такие как chacha20-ietf-poly1305.
Шаг 3: Запуск Shadowsocks клиента
Запускаем Shadowsocks клиент в фоновом режиме:
Шаг 4: Использование Shadowsocks
Использование Shadowsocks аналогично использованию SSH SOCKS туннеля:
Shadowsocks можно использовать вместе с другими методами для повышения надежности обхода DPI.
Метод 5: TLS туннелирование через stunnel
Что такое stunnel
stunnel — это программа, которая создает TLS/SSL туннель для любого трафика. Она позволяет зашифровать любой протокол через TLS, что делает трафик похожим на обычный HTTPS.
Преимущества:
Практическая реализация stunnel
Шаг 1: Установка stunnel
Шаг 2: Создание конфигурации клиента
Создаем конфигурационный файл для stunnel клиента:
Содержимое:
Шаг 3: Запуск stunnel
Шаг 4: Использование туннеля
Теперь можно использовать туннель для подключения к сервисам через TLS:
ssh -p 2222
Трафик будет зашифрован через TLS, что затрудняет его анализ DPI системами.
Комбинированные методы — максимальная эффективность
Комбинация DoH + SSH SOCKS
Для максимальной эффективности можно комбинировать несколько методов. Например, использовать DoH для DNS запросов и SSH SOCKS для HTTP/HTTPS трафика.
Шаг 1: Настройка DoH
Сначала настраиваем DoH для DNS запросов. Это можно сделать через системные настройки или через специальные инструменты.
Шаг 2: Создание SSH SOCKS туннеля
Создаем SSH SOCKS туннель для HTTP/HTTPS трафика:
Шаг 3: Настройка браузера
В браузере настраиваем:
Комбинация методов значительно повышает эффективность обхода DPI, так как защищает и DNS запросы, и HTTP/HTTPS трафик.
Обход TLS fingerprinting и SNI inspection
Что такое TLS fingerprinting
TLS fingerprinting — это техника определения приложений по характеристикам TLS handshake. DPI системы анализируют параметры TLS соединения (версия протокола, cipher suites, extensions) для идентификации приложений и обнаружения VPN/прокси.
Как работает TLS fingerprinting:
Шаг 1: Анализ текущего TLS fingerprint
Для начала нужно понять, какой fingerprint имеет ваше соединение. Можно использовать инструмент tls-client или Python библиотеку tls_client:
Создаем скрипт для анализа TLS fingerprint:
JA3 fingerprint — это уникальный идентификатор TLS клиента, который создается на основе параметров ClientHello. DPI системы могут использовать его для обнаружения VPN и прокси.
Шаг 2: Маскировка под популярный браузер
Для обхода TLS fingerprinting нужно маскировать параметры TLS под популярный браузер. Библиотека tls_client поддерживает различные профили браузеров:
Использование профилей популярных браузеров делает ваш трафик неотличимым от обычного браузерного трафика, что затрудняет его обнаружение DPI системами.
Что такое SNI inspection
Server Name Indication (SNI) — это расширение TLS протокола, которое передает имя сервера в незашифрованном виде во время TLS handshake. Это позволяет DPI системам анализировать SNI для блокировки определенных доменов еще до установления соединения.
Проблема SNI:
Шаг 1: Использование ESNI (Encrypted SNI)
Encrypted SNI (ESNI) шифрует имя сервера, но поддержка ограничена. Cloudflare поддерживает ESNI для своих серверов.
Проверка поддержки ESNI:
ESNI требует поддержки как на клиенте, так и на сервере. Не все серверы поддерживают ESNI.
Шаг 2: Domain fronting через Cloudflare
Domain fronting — это техника, при которой используется SNI одного домена, а реальный запрос идет к другому домену. Cloudflare позволяет это делать.
Создаем скрипт для domain fronting:
Шаг 3: Использование CDN для маскировки SNI
Многие заблокированные сайты используют CDN (Cloudflare, Fastly). Можно использовать это для обхода SNI inspection:
Этот метод работает только если целевой домен действительно использует указанный CDN. В противном случае запрос будет отклонен.
Шаг 4: Использование нестандартных портов
Некоторые DPI системы проверяют SNI только на стандартных портах (443 для HTTPS). Использование нестандартных портов может помочь обойти проверку:
Шаг 5: Комбинированный подход — TLS fingerprinting + SNI обход
Для максимальной эффективности можно комбинировать оба метода:
Комбинация методов (TLS fingerprinting маскировка + SNI обход + прокси) обеспечивает максимальную эффективность обхода DPI систем.
Материал предназначен для сотрудников, которые занимаются криминалистикой, то есть исключительно для легального использования. Автор не несет ответственности за неправомерное использование.
В этой статье рассмотрим методы обхода Deep Packet Inspection (DPI) и систем цензуры.
Теоретическая часть
Что такое DPI и зачем его обходить
Deep Packet Inspection (DPI) — это технология глубокого анализа сетевого трафика, которая проверяет не только заголовки пакетов, но и их содержимое. DPI позволяет провайдерам и цензорам:
- Выявлять и блокировать определенные типы соединений (VPN, прокси)
- Анализировать содержимое HTTP/HTTPS запросов
- Блокировать доступ к определенным доменам и IP-адресам
- Отслеживать активность пользователей
- Доступ к заблокированным ресурсам
- Защита приватности и анонимности
- Обход цензуры и ограничений
- Безопасность в небезопасных сетях
DPI системы анализируют трафик на нескольких уровнях:
- Анализ заголовков — проверка портов, протоколов, размеров пакетов
- Анализ содержимого — поиск ключевых слов, паттернов, сигнатур
- TLS fingerprinting — определение приложений по TLS handshake
- SNI inspection — анализ Server Name Indication в TLS
- Статистический анализ — выявление паттернов трафика
Не удалось прогрузить медиа
Методы обхода DPI
В этой статье рассмотрим следующие методы:
- DNS-over-HTTPS (DoH) — обход DNS блокировок
- SSH SOCKS туннель — маскировка трафика через SSH
- VPN туннелирование — WireGuard, OpenVPN, IKEv2
- Shadowsocks — легкий прокси с обфускацией
- TLS туннелирование — stunnel для шифрования трафика
- HTTP/2 и HTTP/3 — использование современных протоколов
- CDN маскировка — Cloudflare, domain fronting
- MTU манипуляции — изменение размера пакетов
- Обфускация статистических паттернов — маскировка трафика
Подготовка окружения
Установка необходимых инструментов
На Linux (Ubuntu/Debian):
Code:
sudo apt-get update
Code:
sudo apt-get install -y curl wget openssh-client python3 python3-pip dnsutils
Установка Python библиотек:
Code:
pip3 install requests pysocks dnspython cryptography
Для работы с VPN может потребоваться установка дополнительных инструментов (WireGuard, OpenVPN клиенты), которые мы рассмотрим в соответствующих разделах.
Метод 1: DNS-over-HTTPS (DoH) — обход DNS блокировок
Что такое DoH
DNS-over-HTTPS (DoH) — это протокол, который шифрует DNS запросы внутри HTTPS пакетов. Это делает DNS запросы невидимыми для DPI систем, так как весь трафик выглядит как обычный HTTPS.
Не удалось прогрузить медиа
Преимущества DoH:
- Не требует специального сервера (используются публичные DoH серверы)
- Простота настройки
- Высокая скорость
- Защита от DNS блокировок
- Защищает только DNS запросы, не весь трафик
- Может быть заблокирован через блокировку DoH серверов
Шаг 1: Тестирование DoH через Cloudflare
Cloudflare предоставляет публичный DoH сервер, который работает по адресу https://cloudflare-dns.com/dns-query. Этот сервер поддерживает стандарт RFC 8484.
Создадим простой Python скрипт для тестирования DoH:
Code:
#!/usr/bin/env python3
import requests
import json
import dns.message
import dns.rdatatype
import base64
def doh_query_get(domain, server="https://cloudflare-dns.com/dns-query"):
"""DoH запрос через GET метод"""
params = {
'name': domain,
'type': 'A'
}
headers = {
'Accept': 'application/dns-json'
}
try:
response = requests.get(server, params=params, headers=headers, timeout=5)
response.raise_for_status()
return response.json()
except Exception as e:
print(f"Ошибка: {e}")
return None
def doh_query_post(domain, server="https://cloudflare-dns.com/dns-query"):
"""DoH запрос через POST метод (RFC 8484)"""
query = dns.message.make_query(domain, dns.rdatatype.A)
wire = query.to_wire()
encoded = base64.urlsafe_b64encode(wire).decode('utf-8').rstrip('=')
headers = {
'Content-Type': 'application/dns-message',
'Accept': 'application/dns-message'
}
try:
response = requests.post(server, data=wire, headers=headers, timeout=5)
response.raise_for_status()
dns_response = dns.message.from_wire(response.content)
return dns_response
except Exception as e:
print(f"Ошибка: {e}")
return None
if __name__ == "__main__":
import sys
domain = sys.argv[1] if len(sys.argv) > 1 else "google.com"
print(f"Тестирование DoH для домена: {domain}")
print("\n[1] GET метод (Cloudflare):")
result = doh_query_get(domain)
if result:
print(f"IP адрес: {result['Answer'][0]['data']}")
print("\n[2] POST метод (RFC 8484):")
result = doh_query_post(domain)
if result:
for answer in result.answer:
print(f"IP адрес: {answer[0]}")
Code:
chmod +x test_doh.py
Code:
python3 test_doh.py google.com
POST метод (RFC 8484) более надежен, так как DNS запрос находится в теле запроса, а не в URL, что затрудняет его анализ DPI системами.
Шаг 2: Использование DoH через curl
Можно использовать DoH напрямую через curl, если он поддерживает эту функцию (curl 7.62+):
Code:
curl -H "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=google.com&type=A"
Статус 0 означает успешный ответ. Поле data содержит IP адрес домена.
Не удалось прогрузить медиа
Метод 2: SSH SOCKS туннель — обход DPI через SSH
Что такое SSH SOCKS туннель
SSH SOCKS туннель создает зашифрованное соединение через SSH, через которое проходит весь трафик. DPI системы видят только SSH трафик, но не могут расшифровать его содержимое.
Преимущества:
- Простота использования
- Не требует дополнительного ПО на сервере
- Работает через стандартные SSH соединения
- Защищен шифрованием SSH
- Требует доступ к SSH серверу
- SSH трафик может быть обнаружен через фингерпринты
- Высокая задержка через дополнительное шифрование
Не удалось прогрузить медиа
Шаг 1: Создание SSH SOCKS туннеля
Для создания SSH SOCKS туннеля используется опция -D команды ssh. Эта опция создает локальный SOCKS прокси на указанном порту.
Команда -N означает, что не нужно выполнять удаленные команды, только создать туннель. Опция -C включает сжатие для повышения скорости.
Code:
ssh -N -D 1080 -C -o StrictHostKeyChecking=no [email protected]
Не удалось прогрузить медиа
Туннель будет работать в фоновом режиме. Для запуска в фоне можно использовать опцию -f или запустить команду в отдельном терминале.
Шаг 2: Проверка работы туннеля
После создания туннеля нужно проверить, что он работает. Можно проверить, слушает ли порт 1080:
Порт должен слушать только на 127.0.0.1 (localhost), а не на всех интерфейсах, для безопасности.
Шаг 3: Использование туннеля для HTTP запросов
Теперь можно использовать туннель для доступа к заблокированным ресурсам через curl:
curl --socks5 127.0.0.1:1080 http://blocked-site.com
Опция --socks5 указывает curl использовать SOCKS5 прокси. Для HTTPS запросов используется та же опция:
Code:
curl --socks5 127.0.0.1:1080 https://api.ipify.org
Не удалось прогрузить медиа
IP адрес изменился на IP SSH сервера, что подтверждает, что трафик проходит через туннель.
Шаг 4: Использование туннеля с Python
Для использования SSH SOCKS туннеля в Python скриптах нужно использовать библиотеку pysocks:
Code:
#!/usr/bin/env python3
import requests
import socks
import socket
# Настройка SOCKS прокси
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 1080)
socket.socket = socks.socksocket
# Тестовый запрос
response = requests.get("https://api.ipify.org")
print(f"IP адрес через SOCKS: {response.text.strip()}")
Code:
python3 test_socks.py
Для автоматического создания туннеля при загрузке системы можно создать systemd service или добавить команду в автозагрузку.
Метод 3: VPN туннелирование — полный обход DPI
WireGuard — современный VPN протокол
WireGuard — это современный VPN протокол с минимальными накладными расходами и высокой производительностью. Он специально разработан для обхода DPI систем.
Преимущества WireGuard:
- Высокая скорость
- Минимальные накладные расходы
- Современное шифрование
- Сложно обнаружить через DPI
- Требует настройки сервера
- Может быть заблокирован через порты
Шаг 1: Установка WireGuard
На Linux установка WireGuard выполняется через пакетный менеджер:
Code:
sudo apt-get install wireguard wireguard-tools
Шаг 2: Генерация ключей
WireGuard использует пары ключей (приватный и публичный) для аутентификации. Сначала генерируем приватный ключ:
Code:
wg genkey | tee private.key | wg pubkey > public.key
Code:
cat private.key
Code:
cat public.key
Не удалось прогрузить медиа
Приватный ключ должен храниться в секрете. Публичный ключ можно передавать серверу.
Шаг 3: Создание конфигурации клиента
Создаем конфигурационный файл для WireGuard клиента:
Code:
sudo nano /etc/wireguard/wg0.conf
Содержимое конфигурации:
Code:
[Interface]
PrivateKey = 4GgaQ2KjZ3j7J8K9L0M1N2O3P4Q5R6S7T8U9V0W1X2Y3Z4=
Address = 10.0.0.2/24
DNS = 1.1.1.1, 8.8.8.8
[Peer]
PublicKey = xKjZ3j7J8K9L0M1N2O3P4Q5R6S7T8U9V0W1X2Y3Z4A5B6C7D=
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Code:
Шаг 4: Подключение к VPN
После создания конфигурации можно подключиться к VPN:
Code:
sudo wg-quick up wg0
Проверка статуса:[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables -t nat -I POSTROUTING -o wg0 -j MASQUERADE
Code:
sudo wg show
latest handshakeпоказывает время последнего рукопожатия. Если это значение большое, соединение может быть нестабильным.
Шаг 5: Проверка изменения IP
После подключения к VPN нужно проверить, что IP адрес изменился:
Code:
сurl https://api.ipify.org
IP адрес должен соответствовать IP VPN сервера, а не вашему реальному IP.
Метод 4: Shadowsocks — легкий прокси с обфускацией
Что такое Shadowsocks
Shadowsocks — это легкий прокси-сервер с обфускацией трафика, специально разработанный для обхода цензуры. Он маскирует трафик под обычный HTTPS, что затрудняет его обнаружение DPI системами.
Преимущества:
- Специально разработан для обхода DPI
- Легкий и быстрый
- Поддерживает различные методы обфускации
- Похож на обычный HTTPS трафик
- Требует отдельного сервера
- Может потребовать настройки клиента
Шаг 1: Установка Shadowsocks клиента
На Linux установка выполняется через pip:
Code:
pip3 install shadowsocks
Шаг 2: Создание конфигурации
Создаем конфигурационный файл для Shadowsocks клиента:
Code:
cat shadowsocks
Code:
{
"server": "ss-server.example.com",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "your-password",
"method": "aes-256-gcm",
"timeout": 300
}
Метод aes-256-gcm обеспечивает хорошую производительность и безопасность. Для обхода DPI можно использовать методы с обфускацией, такие как chacha20-ietf-poly1305.
Шаг 3: Запуск Shadowsocks клиента
Запускаем Shadowsocks клиент в фоновом режиме:
Code:
sslocal -c shadowsocks.json -d start
Шаг 4: Использование Shadowsocks
Использование Shadowsocks аналогично использованию SSH SOCKS туннеля:
Code:
curl --socks5 127.0.0.1:1080 https://api.ipify.org
Shadowsocks можно использовать вместе с другими методами для повышения надежности обхода DPI.
Метод 5: TLS туннелирование через stunnel
Что такое stunnel
stunnel — это программа, которая создает TLS/SSL туннель для любого трафика. Она позволяет зашифровать любой протокол через TLS, что делает трафик похожим на обычный HTTPS.
Преимущества:
- Можно зашифровать любой протокол
- Выглядит как обычный HTTPS
- Простой в настройке
- Требует настройки сервера
- Дополнительные накладные расходы
Не удалось прогрузить медиа
Практическая реализация stunnel
Шаг 1: Установка stunnel
Code:
sudo apt-get install stunnel4
Шаг 2: Создание конфигурации клиента
Создаем конфигурационный файл для stunnel клиента:
Code:
sudo nano /etc/stunnel/stunnel.conf
Содержимое:
Эта конфигурация создает TLS туннель от локального порта 2222 к серверу stunnel на порту 443.client = yes
[ssh]
accept = 127.0.0.1:2222
connect = stunnel-server.example.com:443
Шаг 3: Запуск stunnel
Code:
sudo systemctl start stunnel4
Code:
sudo systemctl status stunnel4
Не удалось прогрузить медиа
Шаг 4: Использование туннеля
Теперь можно использовать туннель для подключения к сервисам через TLS:
ssh -p 2222
Трафик будет зашифрован через TLS, что затрудняет его анализ DPI системами.
Комбинированные методы — максимальная эффективность
Комбинация DoH + SSH SOCKS
Для максимальной эффективности можно комбинировать несколько методов. Например, использовать DoH для DNS запросов и SSH SOCKS для HTTP/HTTPS трафика.
Шаг 1: Настройка DoH
Сначала настраиваем DoH для DNS запросов. Это можно сделать через системные настройки или через специальные инструменты.
Шаг 2: Создание SSH SOCKS туннеля
Создаем SSH SOCKS туннель для HTTP/HTTPS трафика:
Code:
ssh -N -D 1080 -C [email protected]
Шаг 3: Настройка браузера
В браузере настраиваем:
- DNS: использовать DoH сервер (Cloudflare, Google)
- Прокси: SOCKS5 на 127.0.0.1:1080
- Включить: "Proxy DNS when using SOCKS v5"
Комбинация методов значительно повышает эффективность обхода DPI, так как защищает и DNS запросы, и HTTP/HTTPS трафик.
Обход TLS fingerprinting и SNI inspection
Что такое TLS fingerprinting
TLS fingerprinting — это техника определения приложений по характеристикам TLS handshake. DPI системы анализируют параметры TLS соединения (версия протокола, cipher suites, extensions) для идентификации приложений и обнаружения VPN/прокси.
Как работает TLS fingerprinting:
- Анализ порядка cipher suites
- Проверка TLS extensions
- Анализ размера ClientHello
- Проверка поддержки определенных протоколов
Шаг 1: Анализ текущего TLS fingerprint
Для начала нужно понять, какой fingerprint имеет ваше соединение. Можно использовать инструмент tls-client или Python библиотеку tls_client:
Code:
pip3 install tls-client
Создаем скрипт для анализа TLS fingerprint:
Code:
#!/usr/bin/env python3
import tls_client
import json
# Создаем клиент с параметрами браузера Chrome
session = tls_client.Session(
client_identifier="chrome_120",
random_tls_extension_order=True
)
# Выполняем запрос
response = session.get("https://tls.browserleaks.com/json")
# Анализируем fingerprint
data = response.json()
print("TLS Fingerprint:")
print(f"JA3: {data.get('ja3', 'N/A')}")
print(f"JA3 Hash: {data.get('ja3_hash', 'N/A')}")
print(f"TLS Version: {data.get('tls_version', 'N/A')}")
print(f"Cipher Suites: {len(data.get('cipher_suites', []))}")
Code:
chmod +x analyze_tls_fingerprint.py
Code:
python3 analyze_tls_fingerprint.py
JA3 fingerprint — это уникальный идентификатор TLS клиента, который создается на основе параметров ClientHello. DPI системы могут использовать его для обнаружения VPN и прокси.
Шаг 2: Маскировка под популярный браузер
Для обхода TLS fingerprinting нужно маскировать параметры TLS под популярный браузер. Библиотека tls_client поддерживает различные профили браузеров:
Code:
#!/usr/bin/env python3
import tls_client
# Список доступных профилей
profiles = [
"chrome_120",
"chrome_119",
"firefox_120",
"safari_ios_17_0",
"safari_17_0"
]
for profile in profiles:
try:
session = tls_client.Session(
client_identifier=profile,
random_tls_extension_order=True
)
response = session.get("https://api.ipify.org")
print(f"[+] {profile}: {response.text.strip()}")
except Exception as e:
print(f"[-] {profile}: Ошибка - {e}")
Code:
python3 mask_tls_fingerprint.py
Не удалось прогрузить медиа
Использование профилей популярных браузеров делает ваш трафик неотличимым от обычного браузерного трафика, что затрудняет его обнаружение DPI системами.
Что такое SNI inspection
Server Name Indication (SNI) — это расширение TLS протокола, которое передает имя сервера в незашифрованном виде во время TLS handshake. Это позволяет DPI системам анализировать SNI для блокировки определенных доменов еще до установления соединения.
Не удалось прогрузить медиа
Проблема SNI:
- SNI передается в открытом виде
- DPI системы могут читать SNI до шифрования
- Блокировка происходит на этапе handshake
Шаг 1: Использование ESNI (Encrypted SNI)
Encrypted SNI (ESNI) шифрует имя сервера, но поддержка ограничена. Cloudflare поддерживает ESNI для своих серверов.
Проверка поддержки ESNI:
Code:
openssl s_client -connect cloudflare.com:443 -servername cloudflare.com 2>&1 | grep -i "esni\|ech"ESNI supported: yes
Не удалось прогрузить медиа
ESNI требует поддержки как на клиенте, так и на сервере. Не все серверы поддерживают ESNI.
Шаг 2: Domain fronting через Cloudflare
Domain fronting — это техника, при которой используется SNI одного домена, а реальный запрос идет к другому домену. Cloudflare позволяет это делать.
Создаем скрипт для domain fronting:
Code:
#!/usr/bin/env python3
import requests
import tls_client
# Используем Cloudflare домен в SNI, но запрашиваем другой домен
session = tls_client.Session(
client_identifier="chrome_120"
)
# Domain fronting: SNI = cloudflare.com, Host = blocked-site.com
headers = {
'Host': 'blocked-site.com'
}
# Запрос через Cloudflare
response = session.get(
"https://cloudflare.com",
headers=headers,
allow_redirects=False
)
print(f"Статус: {response.status_code}")
print(f"Заголовки: {dict(response.headers)}")
Code:
python3 domain_fronting.py
Domain fronting работает только если оба домена находятся на одном CDN (например, Cloudflare). DPI система видит SNI для Cloudflare, но реальный запрос идет к заблокированному домену.Статус: 200
Заголовки: {'Content-Type': 'text/html', 'Server': 'cloudflare', ...}
Шаг 3: Использование CDN для маскировки SNI
Многие заблокированные сайты используют CDN (Cloudflare, Fastly). Можно использовать это для обхода SNI inspection:
Code:
#!/usr/bin/env python3
import requests
import tls_client
# Список CDN доменов для маскировки
cdn_domains = [
"cloudflare.com",
"fastly.com",
"amazonaws.com"
]
target_domain = "blocked-site.com"
for cdn in cdn_domains:
try:
session = tls_client.Session(
client_identifier="chrome_120"
)
# Используем CDN домен в SNI
headers = {
'Host': target_domain
}
response = session.get(
f"https://{cdn}",
headers=headers,
timeout=5
)
if response.status_code == 200:
print(f"[+] Успешно через {cdn}")
break
except Exception as e:
print(f"[-] {cdn}: {e}")
Code:
python3 cdn_sni_bypass.py
Этот метод работает только если целевой домен действительно использует указанный CDN. В противном случае запрос будет отклонен.
Шаг 4: Использование нестандартных портов
Некоторые DPI системы проверяют SNI только на стандартных портах (443 для HTTPS). Использование нестандартных портов может помочь обойти проверку:
Code:
curl -v --resolve blocked-site.com:8443:198.51.100.1 https://blocked-site.com:8443 2>&1 | grep -i "sni\|server name"
Нестандартные порты могут быть заблокированы на уровне файрвола, поэтому этот метод не всегда эффективен.
- Server Name Indication: blocked-site.com
- SSL connection using TLSv1.3
Шаг 5: Комбинированный подход — TLS fingerprinting + SNI обход
Для максимальной эффективности можно комбинировать оба метода:
Code:
#!/usr/bin/env python3
import tls_client
import socks
import socket
# Настройка SOCKS прокси
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 1080)
socket.socket = socks.socksocket
# Создаем сессию с маскировкой TLS под Chrome
session = tls_client.Session(
client_identifier="chrome_120",
random_tls_extension_order=True
)
# Domain fronting через Cloudflare
headers = {
'Host': 'blocked-site.com'
}
response = session.get(
"https://cloudflare.com",
headers=headers
)
print(f"Статус: {response.status_code}")
print(f"Контент: {len(response.text)} байт")
Комбинация методов (TLS fingerprinting маскировка + SNI обход + прокси) обеспечивает максимальную эффективность обхода DPI систем.
Материал предназначен для сотрудников, которые занимаются криминалистикой, то есть исключительно для легального использования. Автор не несет ответственности за неправомерное использование.
👍37
😁6
😮7
👏9
🤔9
LIMB