nfqws: code refactoring. split/split2 modes.

This commit is contained in:
bol-van 2020-02-02 15:46:54 +03:00
parent 96ef89b0b2
commit 796a5a221f
13 changed files with 55 additions and 5 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -152,3 +152,8 @@ ip exclude system
v30
nfqws : DPI desync attack modes : fake,rst
v31
nfqws : DPI desync attack modes : disorder,disorder2,split,split2.
nfqws : DPI desync fooling mode : badseq. multiple modes supported

View File

@ -139,7 +139,7 @@ It takes the following parameters:
--pidfile=<filename> ; write pid to file
--user=<username> ; drop root privs
--uid=uid[:gid] ; drop root privs
--dpi-desync[=<mode>] ; try to desync dpi state. modes : fake rst rstack disorder disorder2
--dpi-desync[=<mode>] ; try to desync dpi state. modes : fake rst rstack disorder disorder2 split split2
--dpi-desync-fwmark=<int|0xHEX> ; override fwmark for desync packet. default = 0x40000000
--dpi-desync-ttl=<int> ; set ttl for desync packet
--dpi-desync-fooling=none|md5sig|ts|badseq|badsum ; can take multiple comma separated values
@ -196,7 +196,14 @@ If position is higher than packet length, pos=1 is used.
This sequence is designed to make reconstruction of critical message as difficult as possible.
Fake segments may not be required to bypass some DPIs, but can potentially help if more sophisticated reconstruction
algorithms are used.
Mode 'disorder2' disables sending of fake segments. It can be used as a faster alternative to --wsize.
Mode 'disorder2' disables sending of fake segments.
Split mode is very similar to disorder but without segment reordering :
1. 1st segment
2. fake 1st segment, data filled with zeroes
3. fake 1st segment, data filled with zeroes (2nd copy)
4. 2nd segment
Mode 'split2' disables sending of fake segments. It can be used as a faster alternative to --wsize.
There are DPIs that analyze responses from the server, particularly the certificate from the ServerHello
that contain domain name(s). The ClientHello delivery confirmation is an ACK packet from the server

View File

@ -1,4 +1,4 @@
zapret v.30
zapret v.31
English
-------
@ -167,7 +167,7 @@ nfqws
--hostcase ; менять регистр заголовка "Host:" по умолчанию на "host:".
--hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета
--hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase
--dpi-desync[=<mode>] ; атака по десинхронизации DPI. mode : fake rst rstack disorder disorder2
--dpi-desync[=<mode>] ; атака по десинхронизации DPI. mode : fake rst rstack disorder disorder2 split split2
--dpi-desync-fwmark=<int|0xHEX> ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000
--dpi-desync-ttl=<int> ; установить ttl для десинхронизирующих пакетов
--dpi-desync-fooling=none|md5sig|ts|badseq|badsum ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера
@ -226,7 +226,15 @@ nfqws
Этой последовательностью для DPI максимально усложняется задача реконструкции начального сообщения,
по которому принимается решение о блокировке. Некоторым DPI хватит и tcp сегментов в неправильном порядке,
поддельные части сделаны для дополнительной надежности и более сложных алгоритмов реконструкции.
Режим disorder2 отключает отправку поддельных частей. Он может быть использован как более быстрая альтернатива --wsize.
Режим disorder2 отключает отправку поддельных частей.
Режим split очень похож на disorder, только нет изменения порядка следования сегментов :
1. поддельная 1-я часть пакета, поле данных заполнено нулями
2. 1-я часть пакета
3. поддельная 1-я часть пакета, поле данных заполнено нулями. отсылка 2-й раз.
4. 2-я часть пакета
Режим split2 отключает отправку поддельных частей.
Он может быть использован как более быстрая альтернатива --wsize.
Есть DPI, которые анализируют ответы от сервера, в частности сертификат из ServerHello, где прописаны домены.
Подтверждением доставки ClientHello является ACK пакет от сервера с номером ACK sequence, соответствующим длине ClientHello+1.

View File

@ -0,0 +1,15 @@
# this script contain your special code to launch daemons and configure firewall
# use helpers from "functions" file and "zapret" init script
# in case of upgrade keep this file only, do not modify others
zapret_custom_daemons()
{
run_daemon 1 $NFQWS "$NFQWS_OPT_BASE $NFQWS_OPT_DESYNC"
}
zapret_custom_firewall()
{
local desync_http="--dport 80 -m mark ! --mark $DESYNC_MARK/$DESYNC_MARK"
local desync_https="--dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 2:4 -m mark ! --mark $DESYNC_MARK/$DESYNC_MARK"
fw_nfqws_post "$desync_http" "$desync_http" $QNUM
fw_nfqws_post "$desync_https" "$desync_https" $QNUM
}

View File

@ -0,0 +1,15 @@
# this script contain your special code to launch daemons and configure firewall
# use helpers from "functions" file and "zapret" init script
# in case of upgrade keep this file only, do not modify others
zapret_custom_daemons()
{
run_daemon $1 1 $NFQWS "$NFQWS_OPT_BASE $NFQWS_OPT_DESYNC"
}
zapret_custom_firewall()
{
local desync_http="--dport 80 -m mark ! --mark $DESYNC_MARK/$DESYNC_MARK"
local desync_https="--dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 2:4 -m mark ! --mark $DESYNC_MARK/$DESYNC_MARK"
fw_nfqws_post $1 "$desync_http" "$desync_http" $QNUM
fw_nfqws_post $1 "$desync_https" "$desync_https" $QNUM
}