feat(fuzzer): add RAG knowledge base and LLM-powered strategy synthesizer

This commit is contained in:
Dushnilin
2026-08-26 22:50:12 +03:00
parent dc6f0547b4
commit 3ead229264
24 changed files with 3315 additions and 1880 deletions
@@ -0,0 +1,91 @@
# 14. Руководство по Zapret v2 (nfqws2): Архитектура, Lua-десинхронизация и Стратегии
## 1. Введение и Архитектурные отличия Zapret v2
Zapret v2 (`nfqws2`) — это эволюция классического `nfqws`, переписанная с акцентом на **модульную Lua-логику десинхронизации** и высокопроизводительное мультипрофилирование. В отличие от Zapret v1, где все параметры передавались через монолитные CLI-флаги `--dpi-desync-*`, в `nfqws2` обработка пакетов построена на вызове Lua-скриптов (`--lua-init`) и специализированных действий `--lua-desync`.
### Ключевые преимущества `nfqws2`:
1. **Мультипрофилирование в одном процессе:** возможность разделять правила для разных протоколов (HTTP, TLS, QUIC, UDP Voice) и диапазонов портов без запуска отдельных демонов.
2. **Гибкое позиционирование фрагментов (`pos`):** поддержка составных позиций сплита (`pos=1,midsld,sniext+4`), позволяющих резать пакет ровно в уязвимых местах сигнатур DPI.
3. **Управление перекрытием (`seqovl`):** внедрение контролируемого наложения TCP Sequence чисел (`seqovl=1..2`), сбивающего стейтфул-реассемблеры ТСПУ.
4. **Контроль размера TCP окна (`wsize`):** принудительное занижение Window Size в исходящих пакетах (`wsize=1`), заставляющее сервер и стек дробить поток на однобайтовые сегменты.
---
## 2. Формат командной строки и Lua-инициализация
Tachyon запускает `nfqws2` со стандартным набором Lua-библиотек из `/opt/zapret2/lua/`:
```bash
/opt/zapret2/nfq2/nfqws2 \
--qnum=<QNUM> \
--fwmark=<FWMARK> \
--lua-init=@/opt/zapret2/lua/zapret-lib.lua \
--lua-init=@/opt/zapret2/lua/zapret-antidpi.lua \
--lua-init=@/opt/zapret2/lua/zapret-auto.lua \
[СТРАТЕГИИ]
```
---
## 3. Функции Lua-десинхронизации (`--lua-desync`)
В `nfqws2` действия десинхронизации задаются через параметр `--lua-desync=<функция>[:ключ=значение[:ключ2=значение2]]`.
### 3.1. `multisplit` (Многосегментная фрагментация)
Основная и самая эффективная функция против современных ТСПУ.
- **Синтаксис:** `--lua-desync=multisplit:pos=<позиции>[:seqovl=<N>][:fooling=<метод>][:wsize=<N>]`
- **Параметры `pos`:**
- `pos=1` — сплит на 1-м байте payload (режет TLS ClientHello на этапе Handshake Type).
- `pos=midsld` — сплит посередине Second Level Domain внутри SNI (например, `you` | `tube.com`).
- `pos=sniext` — сплит в начале блока расширений TLS SNI.
- `pos=sniext+4` — сплит на 4 байта глубже расширения SNI (разрывает парсер расширений DPI).
- `pos=1,midsld,sniext+2` — тройной сплит, создающий 3 фрагмента с высоким уровнем энтропии.
- **Параметр `seqovl` (Sequence Overlap):**
- `seqovl=1` или `seqovl=2` — второй фрагмент отправляется со сдвигом TCP Sequence назад на 1–2 байта. DPI видит конфликт перекрытия данных и пропускает поток, в то время как целевой сервер корректно отбрасывает дублирующийся байт.
- **Параметр `wsize`:**
- `wsize=1` — зажимает размер TCP-окна, препятствуя реассемблингу со стороны DPI.
### 3.2. `fake` (Инжекция фейковых пакетов)
Отправка ложного ClientHello с некорректным SNI или контрольной суммой перед настоящим пакетом.
- **Синтаксис:** `--lua-desync=fake[:ttl=<N>][:fooling=<метод>]`
- **Параметры:**
- `ttl=6` / `ttl=8` — Time-To-Live фейкового пакета. Должен быть достаточным, чтобы долететь до ТСПУ провайдера, но недостаточным, чтобы дойти до сервера назначения.
- `fooling=badseq` — отправка фейка с невалидным TCP Sequence номером.
- `fooling=md5sig` — добавление TCP Option 19 (MD5 Signature) в фейковый пакет. ТСПУ часто пассивно анализирует такой пакет и сбрасывает стейт сессии, а сервер назначения дропает его из-за отсутствия MD5-ключа.
### 3.3. `split2` и `disorder2`
- `split2:pos=<N>` — классическое деление пакета на 2 части в указанной позиции.
- `disorder2:pos=<N>` — деление на 2 части с обратным порядком отправки (сначала хвост, затем голова).
---
## 4. Методы дурения DPI (`fooling`)
| Метод | Механизм действия | Когда применять |
|---|---|---|
| `badseq` | Фейковый пакет имеет ACK/SEQ вне текущего окна TCP. | Универсально против большинства ТСПУ (Ростелеком, МТС, Мегафон, Билайн). |
| `md5sig` | Пакет содержит TCP MD5 Signature Option (RFC 2385). | Эффективно, если ТСПУ валидирует опции TCP и дропает сессию. |
| `badack` | Инвертированный или повреждённый ACK-номер. | Против DPI с жестким контролем двустороннего TCP-хэндшейка. |
| `datanoack` | Данные в сегменте передаются без флага ACK. | Обход сигнатур, триггерящихся только на валидные ACK-сегменты. |
---
## 5. Готовые шаблоны стратегий под сервисы
### YouTube 4K (GoogleVideo chunk stream)
```text
--lua-desync=multisplit:pos=1,midsld:seqovl=1:fooling=badseq
```
*Разрывает SNI googlevideo и ClientHello, предотвращая троттлинг видеопотока 2160p60.*
### Discord (Gateway, API и Голосовые каналы UDP)
```text
--filter-tcp=443 --lua-desync=multisplit:pos=1,sniext+4:seqovl=1:fooling=badseq --new --filter-udp=50000-65535 --lua-desync=fake:ttl=8
```
*Комбинированный профиль: TCP 443 для шлюза сообщений и UDP-фейк для RTC Voice серверов.*
### Instagram & Meta (TLS 1.3 / ECH)
```text
--lua-desync=fake:ttl=8 --lua-desync=multisplit:pos=midsld:fooling=badseq
```
*Низко-TTL фейк перегружает стейт ТСПУ, после чего фрагментированный TLS 1.3 хэндшейк проходит без сброса.*
@@ -0,0 +1,66 @@
# 15. Руководство по Zapret v1 (nfqws): Полная спецификация и рецепты
## 1. Архитектура и принцип работы `nfqws` (Zapret v1)
Классический `nfqws` — это высокопроизводительный демон перехвата пакетов через Linux Netfilter Queue (`NFQUEUE`). Он работает на уровне ядра и L4/L7 сетевого стека, перехватывая исходящие TCP и UDP соединения до отправки в физический сетевой интерфейс и модифицируя структуру пакетов.
---
## 2. Основные параметры десинхронизации (`--dpi-desync`)
В Zapret v1 режим десинхронизации задается флагом `--dpi-desync=<режим1>,<режим2>`.
| Режим | Описание | Механика |
|---|---|---|
| `split2` | Деление пакета на 2 части | Пакет режется на 2 TCP-сегмента по указанной позиции. |
| `disorder2` | Деление с обратной отправкой | Сегменты отправляются в порядке [хвост, голова]. |
| `fake` | Инжекция фейкового пакета | Перед реальным запросом отправляется ложный payload с низким TTL. |
| `multisplit` | Множественная фрагментация | Пакет делится на 3+ сегмента по списку позиций. |
| `ipfrag2` | IP-фрагментация | Фрагментация на сетевом уровне L3 (IP-пакет делится на части). |
| `syndata` | Данные в SYN пакете | Внедрение полезной нагрузки в первый TCP SYN пакет (TCP Fast Open). |
---
## 3. Позиционирование сплита (`--dpi-desync-split-pos`)
Параметр `--dpi-desync-split-pos` определяет точное смещение (байт), по которому происходит разрезание TCP-сегмента:
- `--dpi-desync-split-pos=1` — сплит на 1-м байте payload. Разрывает первый байт TLS Content Type (`0x16`).
- `--dpi-desync-split-pos=2` — сплит на 2-м байте. Разрывает версию TLS (`0x0301`).
- `--dpi-desync-split-pos=midsld` — сплит посередине доменного имени второго уровня в SNI.
- `--dpi-desync-split-pos=sniext+4` — сплит в блоке TLS расширений.
- `--dpi-desync-split-pos=1,midsld` — комбинированное разделение.
---
## 4. Перекрытие Sequence (`--dpi-desync-split-seqovl`)
- `--dpi-desync-split-seqovl=1` или `2` — при сплите второй сегмент имеет начальный Sequence номер, заходящий на N байт назад (перекрывает конец первого сегмента).
- ТСПУ видит коллизию данных в потоке и сбрасывает проверку, а сервер назначения корректно дедуплицирует байты по RFC 793.
---
## 5. Методы дурения ТСПУ (`--dpi-desync-fooling`)
- `badseq` — отправка фейка с невалидным Sequence номером.
- `md5sig` — добавление опции TCP MD5 signature, заставляющей DPI дропнуть фейк или пропустить сессию.
- `badack` — невалидный номер подтверждения ACK.
- `hopbyhop` — добавление IPv6 Hop-by-Hop extension header.
---
## 6. Проверенные рецепты для Zapret v1
### 1. YouTube 4K / Web
```text
--dpi-desync=fake,split2 --dpi-desync-split-pos=1 --dpi-desync-ttl=8 --dpi-desync-fooling=badseq
```
### 2. RuTracker & Заблокированные HTTP/HTTPS ресурсы
```text
--dpi-desync=disorder2 --dpi-desync-split-pos=1 --dpi-desync-fooling=badseq
```
### 3. State-DPI Bypass (Перекрытие TCP Sequence)
```text
--dpi-desync=split2 --dpi-desync-split-seqovl=1 --dpi-desync-fooling=badseq
```
@@ -0,0 +1,69 @@
# 16. Справочник по ByeDPI (ciadpi): SOCKS5/TProxy десинхронизация
## 1. Архитектура и принцип работы ByeDPI (`ciadpi`)
`ciadpi` (ByeDPI) — это легковесный локальный прокси-сервер (SOCKS5 / Transparent TCP), который принимает исходящий трафик и выполняет фрагментацию и манипуляцию пакетами на сокетовом уровне (L7/L4).
### Ключевое отличие от Zapret:
- Zapret работает через перехват `NFQUEUE` (L3/L4 фильтрация ядра).
- ByeDPI работает как SOCKS5 прокси (по умолчанию порт `4539` в Tachyon) или прозрачный прокси, модифицируя TCP payload непосредственно перед системным вызовом `send()`/`write()`.
---
## 2. Основные параметры командной строки ByeDPI
### 2.1. Фрагментация (`--split` / `-s`)
- `--split <позиция>` или `-s <позиция>`
- **Значения позиции:**
- `1` — сплит на 1-м байте payload.
- `2` — сплит на 2-м байте.
- `1+sniext` — сплит в начале блока TLS SNI расширений.
- `midsld` — сплит посередине SLD домена.
### 2.2. Изменение порядка сегментов (`--disorder` / `-d`)
- `--disorder <позиция>` или `-d <позиция>`
- Отправляет первый сегмент с задержкой или после второго сегмента (out-of-order delivery).
### 2.3. Инжекция фейковых пакетов (`--fake` / `-f` и `--ttl` / `-t`)
- `--fake <смещение>` или `-f <смещение>` — смещение вставки фейкового пакета (`-1` = перед началом реального запроса).
- `--ttl <N>` или `-t <N>` — Time-To-Live для фейковых пакетов (обычно `4..8` в зависимости от провайдера).
### 2.4. Out-of-Band данные (`--oob` / `-o`)
- `--oob <смещение>` или `-o <смещение>` — отправка одного срочного байта TCP OOB (Urgent Pointer) на указанном смещении. Ломает разбор буфера в DPI, заставляя его пропустить пакет.
### 2.5. Автоматический режим (`--auto` / `-a`)
- `--auto=t,r,a,s`
- Адаптивный режим подбора: ByeDPI автоматически пробует комбинации флагов при обнаружении сброса соединения или таймаута:
- `t` — TLS Record splitting
- `r` — Reverse disorder
- `a` — Auto-ttl
- `s` — Simple split
### 2.6. Дополнительные опции
- `--tlsrec <N>` / `-r <N>` — деление одного ClientHello на несколько независимых TLS Records.
- `--ip-frag` — включение фрагментации на уровне IP.
- `--mod-http` / `-M` — модификация HTTP заголовков (манипуляция Host/символами переноса строки).
---
## 3. Рецепты ByeDPI
### 1. Универсальный адаптивный авто-режим
```text
-o 2 --auto=t,r,a,s -d 2
```
### 2. Disorder + Fake с контролем TTL
```text
--split 1 --disorder 1 --fake -1 --ttl 8
```
### 3. SNI Extension Split + Fake
```text
-s 1+sniext -f -1 -t 6
```
### 4. Агрессивный низко-TTL фейк
```text
--fake -1 --ttl 4 --disorder 1 --split 1
```
@@ -0,0 +1,49 @@
# 17. Сигнатуры ТСПУ (РКН) и методы противодействия десинхронизацией
## 1. Архитектура и принципы работы ТСПУ
ТСПУ (Технические средства противодействия угрозам) — это аппаратно-программные комплексы глубокого анализа пакетов (DPI), установленные на сетях операторов связи в РФ.
### Основные режимы фильтрации:
1. **Пассивный анализ (In-line / TAP):** ТСПУ прослушивает зеркалированный трафик. При обнаружении запрещенного SNI или URL генерирует и инжектирует TCP RST пакет в обе стороны соединения.
2. **Активный дроп (In-line Drop):** ТСПУ установлен в разрыв канала и физически отбрасывает пакеты сессии, вызывая `Connection Timeout` или `EOF`.
3. **Троттлинг (Шейпинг по L7-сигнатурам):** Ограничение пропускной способности (например, до 128 Кбит/с) при обнаружении определённых потоков данных (YouTube `googlevideo.com` CDN).
---
## 2. Анализ блокировок по ключевым сервисам
### 2.1. YouTube (GoogleVideo 4K троттлинг)
- **Механика блокировки:** ТСПУ анализирует TLS ClientHello при обращении к CDN-нодам `rr*.googlevideo.com`. При совпадении сигнатуры ТСПУ не закрывает соединение сразу, а переводит TCP-сессию в режим искусственного ограничения скорости или отбрасывает чанки видео.
- **Эффективное противодействие:**
- `multisplit:pos=1,midsld:seqovl=1:fooling=badseq` (Zapret v2)
- `fake,split2:pos=1:ttl=8:fooling=badseq` (Zapret v1)
- Сплит на `midsld` разрывает домен `googlevideo` пополам, предотвращая сработку строкового парсера ТСПУ.
### 2.2. Discord (Gateway + Голосовые каналы RTC)
- **Механика блокировки:** Блокировка состоит из двух компонентов:
1. TCP 443 — шлюз сообщений и API (`discord.com`, `gateway.discord.gg`).
2. UDP 50000-65535 — голосовые сессии WebRTC / Voice.
- **Эффективное противодействие:**
- Мультипрофиль `zapret2`:
- Для TCP 443: `--filter-tcp=443 --lua-desync=multisplit:pos=1,sniext+4:seqovl=1:fooling=badseq`
- Для UDP Voice: `--filter-udp=50000-65535 --lua-desync=fake:ttl=8`
### 2.3. Instagram & Meta (TLS 1.3 / ECH)
- **Механика блокировки:** ТСПУ сбрасывает TCP-соединение инжекцией RST-пакета сразу после получения первого ClientHello с открытым SNI `instagram.com`.
- **Эффективное противодействие:**
- Низко-TTL фейк с `fooling=badseq` или `fooling=md5sig`, за которым следует сегментированный TLS-хэндшейк. ТСПУ «съедает» фейковый пакет и блокирует его, игнорируя последующий настоящий запрос.
### 2.4. RuTracker & Сайты из реестра РКН
- **Механика блокировки:** HTTP перенаправление на заглушку провайдера (302 Redirect) или TCP RST на HTTPS SNI.
- **Эффективное противодействие:**
- `disorder2:pos=1` или `split2:pos=1:seqovl=1` нарушает сборку HTTP/TLS заголовка в DPI.
---
## 3. Вычисление оптимального TTL до ТСПУ
Для стратегий с инжекцией фейковых пакетов (`fake`) критически важно подобрать параметр `ttl`:
- **Слишком маленький TTL (< 3):** фейковый пакет умирает на маршрутизаторах провайдера до того, как долетит до ТСПУ. ТСПУ видит реальный пакет и блокирует сессию.
- **Слишком большой TTL (> 15):** фейковый пакет долетает до сервера назначения, и сервер разрывает соединение из-за невалидного хэндшейка.
- **Оптимальный диапазон:** `TTL = 6..8` для большинства магистральных операторов РФ.
+4
View File
@@ -21,6 +21,10 @@ Welcome to the comprehensive technical knowledge base for **Tachyon**. This dire
| [**11. Troubleshooting Manual**](11_TROUBLESHOOTING_AND_FIELD_MANUAL.md) | Field diagnostics & emergency recovery | Symptom resolution matrix, diagnostic commands, log inspection paths |
| [**12. ucode Programming Patterns**](12_UCODE_PROGRAMMING_PATTERNS.md) | Developer guidelines for OpenWrt ucode | Atomic file writes, shell quoting, libuci bindings, RAM efficiency |
| [**13. REST API & MCP Specification**](13_REST_API_AND_MCP_SPECIFICATION.md) | REST Agent API & MCP tool definitions | OpenAPI 3.0.3, Bearer Auth, OpenAI Function Calling, MCP JSON schema |
| [**14. Zapret v2 (nfqws2) Deep Dive**](14_ZAPRET2_DEEP_DIVE_MANUAL.md) | Comprehensive Zapret v2 Lua manual | Lua desync functions, multisplit, seqovl, wsize, fooling, multi-profiles |
| [**15. Zapret v1 (nfqws) Field Guide**](15_ZAPRET1_NFQWS_FIELD_GUIDE.md) | Complete Zapret v1 CLI specification | NFQUEUE desync modes, split-pos, seqovl, syndata, ipfrag, fooling |
| [**16. ByeDPI (ciadpi) Reference**](16_BYEDPI_CIADPI_REFERENCE.md) | Complete ByeDPI SOCKS5/TProxy manual | Split, disorder, fake, ttl, auto-mode, oob, tlsrec, ip-frag |
| [**17. TSPU / DPI Signatures & Counters**](17_TSPU_DPI_SIGNATURES_AND_COUNTERS.md) | TSPU filtering mechanics and counters | GoogleVideo 4K, Discord WebRTC, TLS 1.3 RST, TTL distance calculation |
---