mirror of
https://github.com/bol-van/zapret.git
synced 2025-05-24 22:32:58 +03:00
nfqws: seqovl
This commit is contained in:
@@ -294,3 +294,8 @@ tpws: --split-tls
|
||||
tpws: --tlsrec=sniext
|
||||
nfqws: --dpi-desync-split-http-req, --dpi-desync-split-tls. multi segment TLS support for split.
|
||||
blockcheck: mdig dns cache
|
||||
|
||||
v60
|
||||
|
||||
blockcheck: port block test, partial ip block test
|
||||
nfqws: seqovl split/disorder modes
|
||||
|
@@ -180,6 +180,8 @@ nfqws takes the following parameters:
|
||||
--dpi-desync-split-pos=<1..9216> ; data payload split position
|
||||
--dpi-desync-split-http-req=method|host ; split at specified logical part of plain http request
|
||||
--dpi-desync-split-tls=sni|sniext ; split at specified logical part of TLS ClientHello
|
||||
--dpi-desync-split-seqovl=<int> ; use sequence overlap before first sent original split segment
|
||||
--dpi-desync-split-seqovl-pattern=<filename>|0xHEX ; pattern for the fake part of overlap
|
||||
--dpi-desync-ipfrag-pos-tcp=<8..9216> ; ip frag position starting from the transport header. multiple of 8, default 8.
|
||||
--dpi-desync-ipfrag-pos-udp=<8..9216> ; ip frag position starting from the transport header. multiple of 8, default 32.
|
||||
--dpi-desync-badseq-increment=<int|0xHEX> ; badseq fooling seq signed increment. default -10000
|
||||
@@ -292,6 +294,16 @@ Mode `split2` disables sending of fake segments. It can be used as a faster alte
|
||||
|
||||
In `disorder2` and 'split2` modes no fake packets are sent, so ttl and fooling options are not required.
|
||||
|
||||
`seqovl` adds to the first sent original segment (1st for split, 2nd for disorder) seqovl bytes to the beginning and decreases
|
||||
sequence number.
|
||||
In `split2` mode this creates partially in-window packet. OS receives only in-window part.
|
||||
In `disorder2` mode OS receives fake and real part of the second segment but does not pass received data to the socket until first
|
||||
segment is received. First segment overwrites fake part of the second segment. Then OS passes original data to the socket.
|
||||
All unix OS preserve last received data. This may not be the case for Windows servers and may not work.
|
||||
Disorder requires `seqovl` to be less than `split_pos`. Either statically defined or automatically calculated.
|
||||
Otherwise desync is not possible and will not happen.
|
||||
Method allows to avoid separate fakes. Fakes and real data are mixed.
|
||||
|
||||
`hopbyhop`, `destopt` and `ipfrag1` desync modes (they're not the same as `hopbyhop` fooling !) are ipv6 only. One `hop-by-hop`,
|
||||
`destination options` or `fragment` header is added to all desynced packets.
|
||||
Extra header increases packet size and can't be applied to the maximum size packets.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
zapret v.59
|
||||
zapret v.60
|
||||
|
||||
English
|
||||
-------
|
||||
@@ -253,6 +253,8 @@ nfqws
|
||||
--dpi-desync-split-pos=<1..1500> ; (только для split*, disorder*) разбивать пакет на указанной позиции
|
||||
--dpi-desync-split-http-req=method|host ; разбивка http request на указанном логическом месте
|
||||
--dpi-desync-split-tls=sni|sniext ; разбивка tls client hello на указанном логическом месте
|
||||
--dpi-desync-split-seqovl=<int> ; использовать sequence overlap перед первым отсылаемым оригинальным tcp сегментом
|
||||
--dpi-desync-split-seqovl-pattern=<filename>|0xHEX ; чем заполнять фейковую часть overlap
|
||||
--dpi-desync-badseq-increment=<int|0xHEX> ; инкремент sequence number для badseq. по умолчанию -10000
|
||||
--dpi-desync-badack-increment=<int|0xHEX> ; инкремент ack sequence number для badseq. по умолчанию -66000
|
||||
--dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello 1=по всем непустым пакетам данных
|
||||
@@ -379,6 +381,26 @@ fakeknown отличается от fake тем, что применяется
|
||||
|
||||
disorder2 и split2 не предполагают отсылку фейк пакетов, поэтому опции ttl и fooling неактуальны.
|
||||
|
||||
seqovl добавляет в начало первой отсылаемой части оригинального пакета (1 часть для split и 2 часть для disorder)
|
||||
seqovl байт со смещенным в минус sequence number на величину seqovl.
|
||||
В случае split2 расчет идет на то, что предыдущий отсыл, если он был, уже попал в сокет серверного приложения,
|
||||
поэтому новая пришедшая часть лишь частично находится в пределах текущего окна (in-window).
|
||||
Спереди фейковая часть отбрасывается, а оставшаяся часть содержит оригинал и начинается с начала window,
|
||||
поэтому попадает в сокет.
|
||||
Серверное приложение получает все, что реально отсылает клиент, отбрасывая фейковую out-of-window часть.
|
||||
Но DPI не может этого понять, поэтому у него происходит sequence десинхронизация.
|
||||
|
||||
Для disorder2 overlap идет на 2-ю часть пакета. Обязательно, чтобы seqovl был меньше split_pos, иначе
|
||||
все отосланное будет передано в сокет сразу же, включая фейк, ломая протокол прикладного уровня.
|
||||
При соблюдении этого условия 2-я часть пакета является полностью in-window,
|
||||
поэтому серверная ОС принимает ее целиком, включая фейк. Но поскольку начальная часть данных из 1 пакета еще не принята,
|
||||
то фейк и реальные данные остаются в памяти ядра, не отправляясь в серверное приложение. Как только приходит 1-я часть пакета,
|
||||
она переписывает фейковую часть в памяти ядра. Ядро получает данные из 1 и 2 части, поэтому далее
|
||||
идет отправка в сокет приложения. Таково поведение всех unix ОС - оставлять последние принятые данные.
|
||||
Для windows серверов может быть наоборот, поэтому не факт, что такой вариант будет на них работать.
|
||||
Метод позволяет обойтись без fooling и TTL. Фейки перемешаны с реальным данными.
|
||||
split/disorder вместо split2/disorder2 по-прежнему добавляют дополнительные отдельные фейки.
|
||||
|
||||
Режимы десинхронизации hopbyhop, destopt и ipfrag1 (не путать с fooling !) относятся только к ipv6 и заключается
|
||||
в добавлении хедера "hop-by-hop options" , "destination options" или "fragment" во все пакеты, попадающие под десинхронизацию.
|
||||
Здесь надо обязательно понимать, что добавление хедера увеличивает размер пакета, потому не может быть применено
|
||||
|
Reference in New Issue
Block a user