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

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

Основной инструмент обхода 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