feat(fuzzer): add RAG knowledge base and LLM-powered strategy synthesizer
This commit is contained in:
@@ -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` для большинства магистральных операторов РФ.
|
||||
@@ -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 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user