Template
1
0
mirror of https://github.com/bol-van/zapret2.git synced 2026-03-14 06:13:09 +00:00

update docs

This commit is contained in:
bol-van
2025-12-19 12:30:58 +03:00
parent ec6e438144
commit d46edfdd55

View File

@@ -97,7 +97,7 @@ LUA инстанс может создавать копии текущего д
Итогом работы каждого инстанса является вердикт - VERDICT_PASS - не делать ничего с текущим диссектом, VERDICT_MODIFY - в конце всей цепочки отослать модифицированное содержимое диссекта,
VERDICT_DROP - дропнуть текущий диссект. Вердикты всех инстансов аггрегируются - MODIFY замещает PASS, а DROP замещает и PASS, и MODIFY.
LUA инстанс может сам себя отключить от получения дальнейших пакетов потока по направлению in/out - это назвается [instance cutoff](#instance-cutoff).
LUA инстанс может сам себя отключить от получения дальнейших пакетов потока по направлению in/out - это назвается [instance cutoff](#instance_cutoff).
Может отключить направление in/out текущего потока от всей LUA обработки - lua cutoff.
Может запросить отмену всей дальнейшей цепочки вызовов LUA инстансов по текущему диссекту. Инстанс, принимающий такое решение, берет на себя функцию координации дальнейших действий.
Такой инстанс называется оркестратором. Он получает от C кода план дальнейшего выполнения со всеми фильтрами профиля и параметрами вызова всех оставшихся инстансов
@@ -2484,7 +2484,7 @@ function direction_cutoff_opposite(ctx, desync, def)
Фильтр по направлению представляет собой строку "in", "out" или "any" и передается в desync.arg.dir. Если аргумент отсутствует, берется значение def.
* direction_check проверяет соответствие текущего направления фильтру.
* direction_cutoff_opposite выполняет [instance cutoff](#instance-cutoff) на текущее направление, если оно не соответствует фильтру.
* direction_cutoff_opposite выполняет [instance cutoff](#instance_cutoff) на текущее направление, если оно не соответствует фильтру.
```
function payload_match_filter(l7payload, l7payload_filter, def)
@@ -2520,7 +2520,7 @@ function replay_drop(desync)
Прокладки - это дублеры функций C кода для ситуации, когда у нас нет контекста ctx для связи с C кодом.
После начала оркестрации все дальнейшие инстансы вызываются оркестратором или вложенными оркестраторами.
Последний ctx, который доступен, это ctx первого оркестратора. Если его передавать другим инстансам, они будут действовать от имени оркестратора, а не от своего, поэтому им следует передавать ctx=nil.
После отмены execution plan C код не обслуживает последующие инстансы и не выдает на них ctx. Поэтому если нужно продолжить выполнение в стандартном стиле, необходимы дублирующие механизмы [instance cutoff](#instance-cutoff) и фильтров range и payload.
После отмены execution plan C код не обслуживает последующие инстансы и не выдает на них ctx. Поэтому если нужно продолжить выполнение в стандартном стиле, необходимы дублирующие механизмы [instance cutoff](#instance_cutoff) и фильтров range и payload.
Чтобы функции `--lua-desync` прозрачно работали под оркестрацией, необходимо использовать стандартные прокладки вместо прямых вызовов C функций,
берущих ctx. Чтобы корректно работали вложенные оркестраторы, нужно придерживаться стандартной схемы хранения [execution plan](#execution_plan) в desync.plan
@@ -2535,7 +2535,7 @@ function replay_drop(desync)
function instance_cutoff_shim(ctx, desync, dir)
```
Выполняет обычный [instance cutoff](#instance-cutoff) по направлению dir, если ctx присутствует, иначе cutoff через дублирующий механизм,
Выполняет обычный [instance cutoff](#instance_cutoff) по направлению dir, если ctx присутствует, иначе cutoff через дублирующий механизм,
состояние которого хранится в desync.track.lua_state. dir = true - исходящее направление, dir = false - входящее, dir = nil - оба направления.
### cutoff_shim_check
@@ -2544,7 +2544,7 @@ function instance_cutoff_shim(ctx, desync, dir)
function cutoff_shim_check(desync)
```
Проверяет состояние [instance cutoff](#instance-cutoff) для desync.func_instance по направлению desync.outgoing.
Проверяет состояние [instance cutoff](#instance_cutoff) для desync.func_instance по направлению desync.outgoing.
### apply_arg_prefix
@@ -2578,7 +2578,7 @@ function verdict_aggregate(v1, v2)
function plan_instance_execute(desync, verdict, instance)
```
Выполняет элемент [execution plan](#execution_plan) `instance` с учетом [instance cutoff](#instance-cutoff) и стандартных фильтров [payload](#внутрипрофильные-фильтры) и [range](#внутрипрофильные-фильтры).
Выполняет элемент [execution plan](#execution_plan) `instance` с учетом [instance cutoff](#instance_cutoff) и стандартных фильтров [payload](#внутрипрофильные-фильтры) и [range](#внутрипрофильные-фильтры).
Возвращает аггрегацию verdict и вердикта `instance`.
### plan_instance_pop
@@ -2612,7 +2612,7 @@ function orchestrate(ctx, desync)
function replay_execution_plan(desync)
```
Выполняет весь [execution plan](#execution_plan) из desync.plan с учетом [instance cutoff](#instance-cutoff) и стандартных фильтров [payload](#внутрипрофильные-фильтры) и [range](#внутрипрофильные-фильтры).
Выполняет весь [execution plan](#execution_plan) из desync.plan с учетом [instance cutoff](#instance_cutoff) и стандартных фильтров [payload](#внутрипрофильные-фильтры) и [range](#внутрипрофильные-фильтры).
# Библиотека программ атаки на DPI zapret-antidpi.lua
@@ -2733,7 +2733,7 @@ function wsize(ctx, desync)
* arg: wsize - размер tcp окна
* arg: scale - scaling фактор. заменяется в tcp option, если есть. только уменьшение, увеличение блокируется
Меняет tcp.th_win и/или scaling factor в tcp оцпии в tcp пакете SYN,ACK, после чего выполняет [instance cutoff](#instance-cutoff). Если изменение выполнено - выставляет VERDICT_MODIFY.
Меняет tcp.th_win и/или scaling factor в tcp оцпии в tcp пакете SYN,ACK, после чего выполняет [instance cutoff](#instance_cutoff). Если изменение выполнено - выставляет VERDICT_MODIFY.
Цель техники - подменить window size со стороны клиента или сервера, чтобы в ответ на это клиент отослал следующий пакет частями, поскольку целиком он не влезает в window size. Может приводить к замедлению. Устаревшая техника, рекомендуется применять только с сервера в крайнем случае для работы по клиентам, которые не делают ничего для обхода блокировки. С клиента лучше применять техники tcp сегментации, поскольку они лишены побочных эффектов в виде замедления скорости и имеют больше возможностей.
@@ -2746,12 +2746,12 @@ function wssize(ctx, desync)
* arg: [standard direction](#standard-direction)
* arg: wsize - размер tcp окна
* arg: scale - scaling фактор. заменяется в tcp option, если есть. только уменьшение, увеличение блокируется
* arg: forced_cutoff - список типов пейлоадов через зяпятую, при получении которых выполняется [instance cutoff](#instance-cutoff). Если нужно применять wssize бесконечно, можно указать forced_cutoff=no, то есть несуществующий тип пейлоада, который не придет никогда.
* arg: forced_cutoff - список типов пейлоадов через зяпятую, при получении которых выполняется [instance cutoff](#instance_cutoff). Если нужно применять wssize бесконечно, можно указать forced_cutoff=no, то есть несуществующий тип пейлоада, который не придет никогда.
Меняет tcp.th_win и/или scaling factor в tcp оцпии во всех tcp пакетах потока по направлению до достижения условия "cutoff".
Если изменение выполнено - выставляет VERDICT_MODIFY.
"cutoff" наступает при получении любого пакета с данными, если аргумент forced_cutoff не задан, или при получении одного из указанных в аргументе forced_cutoff пейлоадов.
В этом случае выполняется [instance cutoff](#instance-cutoff).
В этом случае выполняется [instance cutoff](#instance_cutoff).
Цель техники - заставить сервер фрагментировать свои ответы, когда DPI их проверяет (TLS 1.2).
Нужно держать сервер "в тонусе", чтобы он думал, что клиент не может принимать tcp сегменты большого размера и сам резал свои ответы,
@@ -2786,7 +2786,7 @@ function syndata(ctx, desync)
* arg: tls_mod - применить указанный tls_mod к пейлоаду blob
Функция добавляет в tcp SYN пакет пейлоад, применяет к нему модификации и отправляет вместо оригинала, вынося VERDICT_DROP.
Если проходит пакет без SYN, выполняется [instance cutoff](#instance-cutoff).
Если проходит пакет без SYN, выполняется [instance cutoff](#instance_cutoff).
Таким образом воздействие выполняется на все ретрансмиссии SYN, после чего функция прекращает работу.
Является стратегией нулевой фазы, которая работает с хостлистами только в режиме `--ipcache-hostname`.
@@ -3093,7 +3093,7 @@ function synack(ctx, desync)
* arg: [standard reconstruct](#standard-reconstruct)
* arg: [standard rawsend](#standard-rawsend)
Отсылает перед SYN пакет SYN,ACK, чтобы запутать DPI относительно направления IP соединения. Атака называется в литературе "TCB turnaround". Ломает NAT - через NAT применение невозможно. Применение на проходящем трафике требует nftables и режим POSTNAT. После прохода пакета без SYN выполняет [instance cutoff](#instance-cutoff). Вердикт не выносит.
Отсылает перед SYN пакет SYN,ACK, чтобы запутать DPI относительно направления IP соединения. Атака называется в литературе "TCB turnaround". Ломает NAT - через NAT применение невозможно. Применение на проходящем трафике требует nftables и режим POSTNAT. После прохода пакета без SYN выполняет [instance cutoff](#instance_cutoff). Вердикт не выносит.
### synack_split
@@ -3106,7 +3106,7 @@ function synack_split(ctx, desync)
* arg: [standard rawsend](#standard-rawsend)
* arg: mode - "syn", "synack" или "acksyn"
Методика предназначена для серверов. В литературе имеет название "TCP split handshake". Заменяет исходящий от сервера пакет SYN,ACK на SYN, 2 пакета SYN + ACK или 2 пакета ACK + SYN. В случае успеха отсылки выносит VERDICT_DROP. После прохода пакета без SYN,ACK выполняет [instance cutoff](#instance-cutoff).
Методика предназначена для серверов. В литературе имеет название "TCP split handshake". Заменяет исходящий от сервера пакет SYN,ACK на SYN, 2 пакета SYN + ACK или 2 пакета ACK + SYN. В случае успеха отсылки выносит VERDICT_DROP. После прохода пакета без SYN,ACK выполняет [instance cutoff](#instance_cutoff).
Многие DPI ожидают стандартный ответ на SYN в виде SYN,ACK. В реальности получается, что ответ на SYN является тоже SYN, а потом клиент шлет серверу SYN,ACK. Тем самым DPI перестает понимать какая сторона является клиентом, а какая сервером, и алгоритм проверки дает сбой. Атака может сработать даже если клиент не делает ничего для обхода блокировки. Может использоваться совместно с клиентскими техниками для точечного пробития tcp.