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:
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user