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-18 16:42:09 +03:00
parent 6d249528e4
commit 83feefdc18

View File

@@ -2592,8 +2592,8 @@ function syndata(ctx, desync)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg : blob - blob, содержащий фейковый payload. Должен помещаться в один пакет, сегментация невозможна.
* arg : tls_mod - применить указанный tls_mod к пейлоаду blob
* arg: blob - blob, содержащий фейковый payload. Должен помещаться в один пакет, сегментация невозможна.
* arg: tls_mod - применить указанный tls_mod к пейлоаду blob
Функция добавляет в tcp SYN пакет пейлоад, применяет к нему модификации и отправляет вместо оригинала, вынося VERDICT_DROP.
Если проходит пакет без SYN, выполняется instance cutoff.
@@ -2611,8 +2611,231 @@ function fake(ctx, desync)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg : blob - blob, содержащий фейковый payload. Может быть любой длины - сегментация выполняется автоматически.
* arg : tls_mod - применить указанный tls_mod к пейлоаду blob
* arg: blob - blob, содержащий фейковый payload. Может быть любой длины - сегментация выполняется автоматически.
* arg: tls_mod - применить указанный tls_mod к пейлоаду blob
* payload фильтр по умолчанию - "known"
Это прямой фейк - отдельный пакет или группа пакетов. Функция не выносит вердикт и не блокирует отправку оригинала.
```
function rst(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: rstack - отсылка RST,ACK вместо RST
* payload фильтр по умолчанию - "known"
Отослать пустой TCP пакет с флагами RST или RST+ACK. Функция не выносит вердикт и не блокирует отправку оригинала.
## TCP сегментация
```
function multisplit(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: pos - список через запятую позиционных маркеров - точек разреза. По умолчанию "2".
* arg: seqovl - число - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево за границу tcp window
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
* arg: blob - заменить текущий пейлоад на указанный blob
* arg: nodrop - отказ от вынесения VERDICT_DROP
* payload фильтр по умолчанию - "known"
Multisplit реализует последовательную сегментацию текущего диссекта или реасма с разрезом в определяемых списком маркеров позициях. Опционально поддерживается замена блока данных на произвольный blob и техника seqovl.
Выносится VERDICT_DROP после успешной отправки всех сегментов.
Если происходит перепроигрывание (replay) задержанных пакетов и присутствует reasm, то вместо desync.dis.payload берется desync.reasm_data. Нарезание проиходит только при перепроигрывании первой части reasm, по остальным частям выносится VERDICT_DROP, если отсылка была успешна. Поскольку весь reasm уже отправлен нарезанным, нет смысла повторно отправлять его оригинальные части.
Может использоваться для отправки произвольных данных, в том числе фейков с заменой текущего пейлоада на произвольный blob.
О размерах частей и вписывании в MTU думать не нужно - применяется дополнительная автоматическая сегментация по MSS.
seqovl может быть только числом, маркеры не поддерживаются. Применяется к первому нарезаемому сегменту. К пейлоаду первого сегмента приписывается слева seqovl_pattern по размеру seqovl, а tcp.th_seq уменьшается на seqovl. Таким образом слева образуется блок данных, выходящий влево за tcp window, и поэтому он игнорируется сервером, а часть, входящая в tcp window - принимается.
seqovl - это фактически средство замешивания фейковых и реальных данных, средство создания скрытых фейков в реальных tcp сегментах. Если DPI не ведет учет sequence numbers, он может проглотить весь передаваемый сегмент и купиться на ложную информацию в начале, которая сервером принята не будет.
Особое преимущество seqovl - в отсутствии необходимости фулинга. Сервер принимает только часть сегмента за счет игры с sequence numbers, а не за счет модификации каких-то элементов ip и tcp заголовков, что привело бы к полному непринятию.
```
function multidisorder(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: pos - список через запятую позиционных маркеров - точек разреза. По умолчанию "2".
* arg: seqovl - маркер - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
* arg: blob - заменить текущий пейлоад на указанный blob
* arg: nodrop - отказ от вынесения VERDICT_DROP
* payload фильтр по умолчанию - "known"
Аналогично multisplit, но отправка сегментов производится в обратном порядке - с последнего по первый.
Техника seqovl в данном случае работает иначе. Она применятся ко второму в оригинальной очередности (предпоследнему отсылаемому) сегменту. seqovl может быть маркером. Например, можно сделать разрез по midsld, а seqovl сделать "midsld-1". seqovl обязательно должен быть меньше первого сегмента в оригинальной очередности (последнего отсылаемого), иначе эта ситуация распознается и seqovl отменяется.
Смысл seqovl в варианте disorder - в переписывании буфера сокета на принимающем конце. tcp сокет выдает данные в приложение последовательно, в порядке их оригинальной передачи. Если сначала приходит сегмент "спереди", не образующий с уже принятыми данными непрерывной оригинальной последовательности, происходит задержка информации в буфере без выдачи ее приложению. Если далее приходит перекрывающийся по sequence сегмент, то информация из него переписыват уже имеющуюся в буфере. Так ведут себя все системы, кроме Windows, поэтому на Windows серверах эта техника не работает.
Windows сохраняет старую информацию.
К предпоследнему отсылаемому сегменту (2-му по оригинальной очередности) приписывается слева seqovl_pattern размером seqovl (результат ресолвинга маркера), а tcp.th_seq уменьшается на seqovl.
Последний отсылаемый сегмент (1-й в оригинальной очередности) отправляется неизменным, переписывая в буфере сокета ложные данные из seqovl_pattern реальными. Восстанавливается непрерывная последовательность потока, данные передаются в сокет приложения.
```
function fakedsplit(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: pos - один позиционный маркер - точка разреза. По умолчанию "2".
* arg: seqovl - число - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево за границу tcp window
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
* arg: blob - заменить текущий пейлоад на указанный blob
* arg: nodrop - отказ от вынесения VERDICT_DROP
* arg: nofake1, nofake2, nofake3, nofake4 - отказ от отсылки отдельных фейков
* arg: pattern - blob, которым заполняются фейковые части. По умолчанию 0x00.
* payload фильтр по умолчанию - "known"
Функция работает аналогично multisplit с одной позицией разреза, но с замешиванием фейков между реальными сегментами. Фейки совпадают в размерах с отсылаемыми частями и формируются на базе pattern со смещением, которое соответствует смещению tcp sequence отсылаемой части относительно первой.
Для фейков необходим фулинг, чтобы они не были приняты сервером.
Последовательность отсылки :
1. Фейк 1-й части. (fake1)
2. Реальная 1-я часть.
3. Фейк 1-й части. (fake2)
4. Фейк 2-й части. (fake3)
5. Реальная 1-я часть.
6. Фейк 2-й части. (fake4)
Цель данной техники - запутать DPI что есть оригинал, а что есть fake. Части одного размера, в одной мусор, в другой - реальные данные. Что выбрать ? Не знаем... Все выглядит как ретрансмиссии, имеет те же sequence и размеры.
* К оригиналам применяется только fooling_opts.tcp_ts_up. reconstruct_opts не применяются.
* К фейкам применяются fooling_opts и reconstruct_opts в полном обьеме.
* ipid_opts и rawsend_opts применяются и к фейкам, и к оригиналом. ipfrag_opts не задействуются ни для фейков, ни для оригиналов.
В случае успеха отсылки выносится VERDICT_DROP, если не указано "nodrop".
blob позволяет заменить текущией пейлоад на произвольный блоб, и тем самым отослать любой совместимый пейлоад с тем же разбиением.
```
function fakeddisorder(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: pos - один позиционный маркер - точка разреза. По умолчанию "2".
* arg: seqovl - маркер - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
* arg: blob - заменить текущий пейлоад на указанный blob
* arg: nodrop - отказ от вынесения VERDICT_DROP
* arg: nofake1, nofake2, nofake3, nofake4 - отказ от отсылки отдельных фейков
* arg: pattern - blob, которым заполняются фейковые части. По умолчанию 0x00.
* payload фильтр по умолчанию - "known"
Функция работает аналогично multidisorder с одной позицией разреза, но с замешиванием фейков между реальными сегментами. Фейки совпадают в размерах с отсылаемыми частями и формируются на базе pattern со смещением, которое соответствует смещению tcp sequence отсылаемой части относительно первой.
Для фейков необходим фулинг, чтобы они не были приняты сервером.
Последовательность отсылки :
1. Фейк 2-й части. (fake1)
2. Реальная 2-я часть.
3. Фейк 2-й части. (fake2)
4. Фейк 1-й части. (fake3)
5. Реальная 1-я часть.
6. Фейк 1-й части. (fake4)
Кроме запутывания DPI в реальных и фейковых сегментах, добавляется еще и запутывание в их последовательности.
* К оригиналам применяется только fooling_opts.tcp_ts_up. reconstruct_opts не применяются.
* К фейкам применяются fooling_opts и reconstruct_opts в полном обьеме.
* ipid_opts и rawsend_opts применяются и к фейкам, и к оригиналом. ipfrag_opts не задействуются ни для фейков, ни для оригиналов.
В случае успеха отсылки выносится VERDICT_DROP, если не указано "nodrop".
blob позволяет заменить текущией пейлоад на произвольный блоб, и тем самым отослать любой совместимый пейлоад с тем же разбиением.
```
function hostfakesplit(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: host - шаблон для генерации фейкового хоста - random.template
* arg: midhost - маркер для дополнительного разреза сегмента с реальным хостом
* arg: disorder_after - маркер для дополнительного разреза заключительной реальной части и отправки сегментов в обратном порядке
* arg: nofake, nofake2 - отказ от отсылки отдельных фейков
* arg: blob - заменить текущий пейлоад на указанный blob
* arg: nodrop - отказ от вынесения VERDICT_DROP
* payload фильтр по умолчанию - "known"
Это специальный "резатель" с замешиванием фейков для пейлоадов, в которых присутствует имя хоста - http_req и tls_client_hello.
Двумя основными точкам разреза являются начало имени хоста - маркер "host" и конец имени хоста - маркер "endhost". Дополнительными и опциональными точками разреза являются маркер midhost (должен быть в пределах host..endost) и маркер disorder_after (должен быть больше endhost). При разрезе по disorder_after части отправляются в обратном порядке.
Последовательность отсылки :
1. Реальная часть до host
2. Фейк host..endhost-1 (fake1)
3. Реальная часть host..endhost, либо 2 части : host..midhost-1, midhost..endhost-1
4. Фейк host..endhost-1 (fake2)
5. Реальная часть после host, либо 2 части : disorder_after..-1, endhost..disorder_after-1
* К оригиналам применяется только fooling_opts.tcp_ts_up. reconstruct_opts не применяются.
* К фейкам применяются fooling_opts и reconstruct_opts в полном обьеме.
* ipid_opts и rawsend_opts применяются и к фейкам, и к оригиналом. ipfrag_opts не задействуются ни для фейков, ни для оригиналов.
В случае успеха отсылки выносится VERDICT_DROP, если не указано "nodrop".
blob позволяет заменить текущией пейлоад на произвольный блоб, и тем самым отослать любой совместимый пейлоад с тем же разбиением.
```
function tcpseg(ctx, desync)
```
* arg: [standard direction](#стандартные-наборы-параметров)
* arg: [standard payload](#стандартные-наборы-параметров)
* arg: [standard fooling](#операции-с-диссектами)
* arg: [standard ipid](#операции-с-диссектами)
* arg: [standard ipfrag](#операции-с-диссектами)
* arg: [standard reconstruct](#опции-по-работе-с-пакетами)
* arg: [standard rawsend](#опции-по-работе-с-пакетами)
* arg: pos - список из двух маркеров, определяющий границы tcp сегмента
* arg: seqovl - число - смещение относительно текущего sequence для создания дополнительной части сегмента, выходящей влево за границу tcp window
* arg: seqovl_pattern - blob, используемый для заполнения seqovl. По умолчанию 0x00
* arg: blob - заменить текущий пейлоад на указанный blob
* payload фильтр по умолчанию - "known"
Отсылает часть текущего диссекта, реасма, или произвольного blob, ограниченную двумя маркерами pos с опциональным применением техники seqovl таким же способом, как и в multisplit. Дополнительная сегментация при превышении MSS производится автоматически.
В случае reasm работает только при приеме его первой части.
Вердикт не выносится.
С помощью tcpseg можно сделать seqovl без сегментации, используя маркеры "0,-1". Для замещения текущего диссекта можно комбинировать с drop.