diff --git a/docs/manual.md b/docs/manual.md index be92955..2ad7066 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -763,6 +763,7 @@ Windows : поэтому ничто не предотвращает чтение большинства файлов, если на них есть доступ для Administrators. LUA не имеет встроенных средств чтения содержимого каталогов, поэтому обнаружение интересующих файлов для злоумышленника затруднено. * Безвозвратно убираются все Se* привилегии из токена, кроме SeChangeNotifyPrivilege. +* С помощью Job запрещается создание дочерних процессов и ограничивается взаимодействие с десктопом - clipboard, change desktop, change dispay settings и тд Есть простой способ передать LUA коду каталог, доступный на запись - параметр `--writeable[=]`. nfqws2 создает каталог, назначает на него такие права, чтобы LUA код смог писать туда файлы, передает имя директории в переменной env `WRITEABLE`. @@ -1802,7 +1803,7 @@ function execution_plan_cancel(ctx) Инстанс, выполняющий отмену, берет на себя координацию дальнейших действий и называется оркестратором. -# Базовая библиотека функций zapret-lib.lua +# Библиотека базовых функций zapret-lib.lua Почти каждая функция имеет подробные комментарии о своем предназначении и параметрах. Чтение LUA кода и комментариев позволит лучше понять для чего нужна конкретная функция и как ее вызывать. @@ -2322,3 +2323,81 @@ mss берется из desync.tcp_mss. * rawsend : repeats берется из desync.arg.repeats, ifout и fwmark берутся из desync.arg, если они там есть, либо из desync (то, что пришло в desync функцию) * reconstruct : берется только desync.arg.badsum, остальные опции не используются + +# Библиотека программ атаки на DPI zapret-antidpi.lua + +## Стандартные наборы параметров + +Многие функции берут стандартные наборы аргументов, классифицируемые по их назначанию. + +Дополнительные фильтры по направлению и пейлоаду внутри функций anti-dpi сделаны в основном на случай не слишком грамотного написания опций командной строки как дополнительный предохранитель и защита от дурака, чтобы сделать флуд как это было в winws1 с `--dpi-desync-any-protocol` непреднамеренно было непросто. + +В nfqws2 по умолчанию стоит запрет на передачу входящих (`--in-range=x`), неограниченная передача исходящих (`--out-range=a` ) и пропуск любых пейлоадов (`--payload=all`), что соответствуют поведению nfqws1 с опцией `--dpi-desync-any-protocol`. В nfqws1 все атаки были зашиты в C код, поэтому было известно какие техники работают с какими пейлоадами. Каким-то нужны были любые пакеты, в том числе пустые, а другим - только tls hello или http request. + +nfqws2 ничего не знает о том, что нужно `--lua-desync` функциям. Поэтому фильтрация направления и типа пейлоадов ложится целиком на вас. По умолчанию стоит запрет только на входящие, потому что они используются редко, а пользователь может не написать ограничение, и все это пойдет на LUA функции и будет напрасно грузить процессор гигабайтами скачиваемого трафика. + +Фильтр по направлению. В большинстве функций, использующих фильтр по направлению, значение по умолчанию - "out", но есть и те, где по умолчанию "any". Фильтр по направлению можно реализовать и средствами C кода `--in-range` и `--out-range`. + +**standard direction** +| Поле | Описание | +|:------|:---------| +| dir | in - входящее направление
out - исходящее направление
any - любое направление | + +Фильтр по пейлоаду берет список типов пейлоада. Список известных типов пейлоада можно получить из help текста nfqws2. Все пустые пакеты имеют пейлоад empty, неизвестные - unknown. Особые значения - all и known. all означает любой пейлоад, known - не unknown и не empty. + +**standard payload** +| Поле | Описание | +|:------|:---------| +| payload | список допустимых пейлоадов через запятую. ~ в начале означает инверсию | + + +Применяются так же наборы опций + +* [**standard ipfrag**](#операции-с-диссектами) +* [**standard ipid**](#операции-с-диссектами) +* [**standard_fooling**](#операции-с-диссектами) +* [**standard_reconstruct**](#опции-по-работе-с-пакетами) +* [**standard rawsend**](#опции-по-работе-с-пакетами) + + +## Базовые функции + +``` +function drop(ctx, desync) +``` + +Выносит VERDICT_DROP при выполнении условий фильтра. +* [**standard direction**](#станадртные-наборы-параметров) +* [**standard payload**](#станадртные-наборы-параметров) +* По умолчанию payload=all, direction=any, то есть drop всего. + +``` +function send(ctx, desync) +``` + +Отсылает текущий диссект c опциональным применением модификаций. + +* [**standard direction**](#станадртные-наборы-параметров) +* [**standard_fooling**](#операции-с-диссектами) +* [**standard ipid**](#операции-с-диссектами) +* [**standard ipfrag**](#операции-с-диссектами) +* [**standard_reconstruct**](#опции-по-работе-с-пакетами) +* [**standard rawsend**](#опции-по-работе-с-пакетами) + +``` +function send(ctx, desync) +``` + +Применить модификации к текущему диссекту без отправки и вынесения вердикта. + +``` +function pktmod(ctx, desync) +``` + +Отсылает текущий диссект c опциональным применением модификаций. + +* [**standard direction**](#станадртные-наборы-параметров) +* [**standard_fooling**](#операции-с-диссектами) +* [**standard ipid**](#операции-с-диссектами) + +