From cd60a05f862b8012fc59ce9026957d1e330d7341 Mon Sep 17 00:00:00 2001 From: bol-van Date: Tue, 12 Apr 2022 15:54:57 +0300 Subject: [PATCH] nfqws: fakeknown, udplen desync modes --- docs/changes.txt | 5 +++++ docs/readme.eng.md | 13 +++++++++---- docs/readme.txt | 13 +++++++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 87c0331..ef59f63 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -222,3 +222,8 @@ nfqws: hop-by-hop ipv6 desync and fooling v46 big startup script refactoring to support nftables and new openwrt snapshot builds with firewall4 + +v47 + +nfqws: QUIC initial decryption +nfqws: udplen, fakeknown dpi desync modes diff --git a/docs/readme.eng.md b/docs/readme.eng.md index b1d6ebe..328d760 100644 --- a/docs/readme.eng.md +++ b/docs/readme.eng.md @@ -152,7 +152,7 @@ nfqws takes the following parameters: --pidfile= ; write pid to file --user= ; drop root privs --uid=uid[:gid] ; drop root privs - --dpi-desync=[[,] ; desync dpi state. modes : synack fake rst rstack hopbyhop destopt ipfrag1 disorder disorder2 split split2 ipfrag2 + --dpi-desync=[[,] ; desync dpi state. modes : synack fake fakeknown rst rstack hopbyhop destopt ipfrag1 disorder disorder2 split split2 ipfrag2 udplen --dpi-desync-fwmark= ; override fwmark for desync packet. default = 0x40000000 --dpi-desync-ttl= ; set ttl for desync packet --dpi-desync-ttl6= ; set ipv6 hop limit for desync packet. by default ttl value is used @@ -183,8 +183,9 @@ WARNING. `--wsize` parameter is now not used anymore in scripts. TCP split can b After completion of the tcp 3-way handshake, the first data packet from the client goes. It usually has `GET / ...` or TLS ClientHello. We drop this packet, replacing with something else. -It can be a fake version with another harmless but valid http or https request (fake), tcp reset packet (rst,rstack), -split into 2 segments original packet with fake segment in the middle (disorder). +It can be a fake version with another harmless but valid http or https request (`fake`), tcp reset packet (`rst`,`rstack`), +split into 2 segments original packet with fake segment in the middle (`split`). +`fakeknown` sends fake only in response to known application protocol. In articles these attack have names **TCB desynchronization** and **TCB teardown**. Fake packet must reach DPI, but do not reach the destination server. The following means are available: set a low TTL, send a packet with bad checksum, @@ -420,7 +421,11 @@ Set conntrack timeouts appropriately. UDP attacks are limited. Its not possible to fragment UDP on transport level, only on network (ip) level. Only desync modes `fake`,`hopbyhop`,`destopt`,`ipfrag1` and `ipfrag2` are applicable. -`fake`,`hopbyhop`,`destopt` can be used in combo with `ipfrag2`. +`fake`,`hopbyhop`,`destopt` can be used in combo with `ipfrag2` and `udplen`. + +`udplen` increases udp payload size by `--dpi-desync-udplen-increment` bytes. Padding is filled with zeroes. +This option can resist DPIs that track outgoing UDP packet sizes. +Requires that application protocol does not depend on udp payload size. QUIC initial packets are recognized. Decryption and hostname extraction is supported so `--hostlist` parameter will work. For other protocols desync use `--dpi-desync-any-protocol`. diff --git a/docs/readme.txt b/docs/readme.txt index c8980f6..60dbeac 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -1,4 +1,4 @@ -zapret v.46 +zapret v.47 English ------- @@ -200,7 +200,7 @@ nfqws --hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета --hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase --domcase ; домен после Host: сделать таким : TeSt.cOm - --dpi-desync=[,][,,][, ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000 --dpi-desync-ttl= ; установить ttl для десинхронизирующих пакетов --dpi-desync-ttl6= ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение ttl @@ -217,6 +217,7 @@ nfqws --dpi-desync-fake-unknown= ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт --dpi-desync-fake-quic= ; файл, содержащий фейковый QUIC Initial --dpi-desync-fake-unknown-udp= ; файл, содержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fake, на замену стандартным нулям 64 байт + --dpi-desync-udplen-increment= ; насколько увеличивать длину udp пейлоада в режиме udplen --dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N --hostlist= ; применять дурение только к хостам из листа @@ -232,6 +233,7 @@ nfqws пакет сброса соединения (варианты rst, rstack), разбитый на части оригинальный пакет с перепутанным порядком следования сегментов + обрамление первого сегмента фейками (disorder), то же самое без перепутывания порядка сегментов (split). +fakeknown отличается от fake тем, что применяется только к распознанному протоколу. В литературе такие атаки еще называют TCB desynchronization и TCB teardown. Надо, чтобы фейковые пакеты дошли до DPI, но не дошли до сервера. На вооружении есть следующие возможности : установить низкий TTL, посылать пакет с инвалидной чексуммой, @@ -453,8 +455,11 @@ window size итоговый размер окна стал максимальн ПОДДЕРЖКА UDP Атаки на udp более ограничены в возможностях. udp нельзя фрагментировать иначе, чем на уровне ip. -Для UDP действуют только режимы десинхронизации fake,hopbyhop,destopt,ipfrag1,ipfrag2. -Возможно сочетание fake,hopbyhop,destopt с ipfrag2. +Для UDP действуют только режимы десинхронизации fake,hopbyhop,destopt,ipfrag1,ipfrag2,udplen. +Возможно сочетание fake,hopbyhop,destopt с ipfrag2 и udplen. +udplen увеличивает размер udp пакета на указанное в --dpi-desync-udplen-increment количество байтов. +Паддинг заполняется нулями. Предназначено для обмана DPI, ориентирующегося на размеры пакетов. +Может сработать, если пользовательсткий протокол не привязан жестко к размеру udp пейлоада. Поддерживается определение пакетов QUIC Initial с расшифровкой содержимого и имени хоста, то есть параметр --hostlist будет работать. Для десинхронизации других протоколов обязательно указывать --dpi-desync-any-protocol. Реализован conntrack для udp. Можно пользоваться --dpi-desync-cutoff. Таймаут conntrack для udp