Перейти к основному содержимому

Фрагментация

Основной инструмент обхода DPI. Суть: разбить TCP-пакет на части так, чтобы DPI не смог собрать их и прочитать содержимое (в частности, поле SNI в TLS ClientHello).

fragment

Метод фрагментации

МетодОписание
tcpРазделение на уровне TCP-сегментов. Один пакет становится двумя TCP-сегментами
ipРазделение на уровне IP. Один IP-пакет разбивается на IP-фрагменты
tlsОдна TLS-запись разбивается на несколько TLS-записей внутри одного TCP-пакета
oobOut-of-Band - вставка байта с TCP URG флагом, который сбивает DPI
comboКомбинация нескольких точек разделения с приманками, перемешиванием и фейками между фрагментами
hybridГибрид combo и disorder - комбинированные методы с изменённым порядком
disorderФрагменты отправляются не по порядку со случайными задержками
extsplitАвтоматическое разделение перед SNI-расширением в TLS ClientHello
firstbyteОтправка одного байта, пауза, затем остальное - атака по таймингу
noneБез фрагментации (используйте, если нужен только faking)
Как выбрать метод

Используйте Дискавери - он протестирует все методы и найдёт рабочий. Ручной подбор нужен, если дискавери не справился или вы хотите оптимизировать конкретный случай.

Пул стратегий

Если включён пул, b4 случайным образом выбирает метод из пула для каждого нового соединения. Это затрудняет DPI адаптацию к конкретному методу - каждое соединение выглядит по-разному.

подсказка

Выберите несколько стратегий, которые работают у вашего провайдера (через дискавери), и включите их в пул. Пул не используется, если он пуст - в этом случае используется метод, выбранный выше.

Обратный порядок

Отправляет фрагменты в обратном порядке (последний фрагмент первым). DPI, ожидающий данные по порядку, не сможет собрать содержимое.


TCP/IP Segmentation

Доступно при методе tcp или ip.

Умное разделение SNI

Автоматически находит SNI-поле в TLS ClientHello и разделяет посередине имени хоста. Рекомендуемый вариант - не требует ручной настройки.

Фиксированная позиция разделения

Ручное смещение точки разделения (0–50 байт от начала TLS payload). Используйте, если умное разделение не работает у вашего провайдера. Задаётся как диапазон мин–макс - для каждого соединения b4 выберет случайную позицию из диапазона.

3 сегмента

Если включены оба варианта (умное SNI + фиксированная позиция) - пакет разделяется на 3 сегмента: на фиксированной позиции и в середине SNI.


Combo

Комбинирует несколько точек разделения с приманками и перемешиванием. Самый гибкий метод.

Приманка (Decoy)

Отправляет фейковый ClientHello с разрешённым SNI перед реальным трафиком:

  1. Фейковый пакет (с низким TTL) → DPI видит и анализирует, но пакет не доходит до сервера
  2. Реальный пакет (фрагментированный) → проходит мимо DPI и доставляется серверу

Точки разделения

splitpoints

ПараметрОписание
First ByteРазделение после первого байта (десинхронизация по времени)
Extension SplitРазделение перед SNI-расширением
SNI SplitРазделение в середине имени хоста SNI

Каждая включённая точка добавляет дополнительный сегмент. Интерфейс показывает количество активных разделений и результирующее число сегментов.

warning

Должна быть включена хотя бы одна точка разделения, иначе combo отправит пакет одним сегментом.

Режим перемешивания

РежимОписание
middleПервый и последний сегменты остаются на месте, перемешиваются только средние
fullВсе сегменты случайно перемешиваются
reverseСегменты отправляются в обратном порядке

Тайминги

timeings

ПараметрОписаниеДиапазон
Задержка первого сегментаПауза после отправки первого сегмента10–500 мс
Макс. джиттерСлучайная задержка между остальными сегментами100–10000 мкс

Фейк на сегмент (мультидисордер)

Отправляет фейковые перекрывающие пакеты перед каждым реальным сегментом, а не только перед первым. Засоряет реассемблер DPI мусором.

ПараметрОписаниеДиапазон
Фейк на сегментВключить фейки между сегментами-
Фейков на сегментКоличество фейковых пакетов перед каждым сегментом1–11

Disorder

Отправляет реальные TCP-сегменты не по порядку со случайными задержками. В отличие от combo, disorder не использует фейковые пакеты (кроме мультидисордера) - он полагается на то, что DPI ожидает последовательные данные.

Режим перемешивания

РежимОписание
fullВсе сегменты случайно перемешиваются
reverseСегменты отправляются в обратном порядке

Временной джиттер

Случайная задержка между сегментами. Задаётся как диапазон мин–макс (мкс).

к сведению

Джиттер используется, когда Seg2Delay (задержка между пакетами на вкладке Общее) равен 0. Если Seg2Delay задан - он имеет приоритет.

warning

Максимальный джиттер должен быть больше минимального.

Перекрытие последовательности (seqovl)

Добавляет фейковые байты с уменьшённым TCP sequence number. DPI видит фейковый заголовок протокола, а сервер отбрасывает перекрытие (у него уже есть правильные данные).

ПаттернЧто видит DPI
tls12Заголовок TLS 1.2
tls11Заголовок TLS 1.1
tls10Заголовок TLS 1.0
http_getHTTP GET-запрос
zerosНулевые байты
customСвои hex-байты

Мультидисордер

Аналогично combo - отправляет фейковые перекрывающие пакеты перед каждым реальным сегментом.


Extension Split

Автоматически разделяет TLS ClientHello прямо перед расширением SNI. DPI видит неполный список расширений и не может распарсить SNI.

[TLS Header] [Handshake] [Ciphers] [Ext₁] [Ext₂] | [SNI: youtube.com] [Ext...]
↑ разделение здесь
Настройка не требуется

Extension Split работает автоматически. Используйте переключатель Обратный порядок и Задержку между пакетами (Seg2Delay) на вкладке Общее для дополнительной настройки.


First-Byte Desync

Атака по таймингу: отправляет один байт (0x16 - тип TLS-записи), делает паузу, затем отправляет остальной ClientHello. DPI видит неполную TLS-запись и не может распарсить SNI до истечения таймаута.

[0x16] ──── пауза ──── [остальная часть TLS ClientHello...]
Настройка не требуется

Задержка контролируется Seg2Delay на вкладке Общее. Минимум 100 мс применяется автоматически - если Seg2Delay меньше, b4 использует 100 мс.


OOB (Out-of-Band)

Вставляет байт с TCP URG (urgent) флагом в поток данных. Сервер игнорирует OOB-данные (они обрабатываются отдельно от основного потока), но DPI с отслеживанием состояния путается - видит лишний байт, который смещает его парсинг.

ПараметрОписаниеДиапазон
Позиция вставкиСколько байтов до точки вставки OOB. Задаётся как диапазон мин–макс1–50
OOB байтБайт, передаваемый через OOB (отображается символ + hex)-

TLS Record Splitting

Разделяет ClientHello на несколько TLS-записей внутри одного TCP-пакета. DPI, ожидающий однозаписный хендшейк, не может сопоставить сигнатуру.

ПараметрОписаниеДиапазон
Позиция разделенияРазмер первой TLS-записи в байтах. Задаётся как диапазон мин–макс1–100