diff --git a/docs/readme.txt b/docs/readme.txt index 0bf792e..f71386c 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -170,7 +170,7 @@ nfqws --dpi-desync[=] ; атака по десинхронизации DPI. mode : fake rst rstack disorder disorder2 --dpi-desync-fwmark= ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000 --dpi-desync-ttl= ; установить ttl для десинхронизирующих пакетов - --dpi-desync-fooling=none|md5sig|badsum ; дополнительные методики как сделать, чтобы десинхронизирующий пакет не дошел до сервера + --dpi-desync-fooling=none|md5sig|ts|badseq|badsum ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера --dpi-desync-retrans=0|1 ; (только для fake,rst,rstack) 0(default)=отправлять оригинал следом за фейком 1=дропать оригинал, заставляя ОС выполнять ретрансмиссию через 0.2 сек --dpi-desync-skip-nosni=0|1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI --dpi-desync-split-pos=<1..1500> ; (только для disorder) разбивать пакет на указанной позиции @@ -194,7 +194,7 @@ nfqws В литературе такие атаки еще называют TCB desynchronization и TCB teardown. Надо, чтобы фейковые пакеты дошли до DPI, но не дошли до сервера. На вооружении есть следующие возможности : установить низкий TTL, посылать пакет с инвалидной чексуммой, -добавлять tcp option "MD5 signature". Все они не лишены недостатков. +добавлять tcp option "MD5 signature", испортить sequence numbers. Все они не лишены недостатков. * md5sig работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux. * badsum не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. @@ -202,12 +202,15 @@ nfqws В openwrt она сделана из коробки, в других роутерах как правило нет, и не всегда это можно изменить. Если nfqws работает на роутере, то не обязательно выключать nf_conntrack_checksum. Фейковый пакет не проходит FORWARD, он идет через OUTPUT. Но если роутер за другим NAT, например провайдерским, и он не пропускает invalid packets, вы ничего не сможете с этим сделать. +* пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence numbers * TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним. Необходим ip exclude list, заполняемый вручную. Вместе с ttl можно применять md5sig. Это ничего не испортит, зато дает неплохой шанс работы сайтов, до которых "плохой" пакет дойдет по TTL. Если не удается найти автоматическое решение, воспользуйтесь файлом zapret-hosts-user-exclude.txt. КАКИМ СТОИТ ВЫБИРАТЬ TTL : найдите минимальное значение, при котором обход еще работает. Это и будет номер хопа вашего DPI. +Режимы дурения могут сочетаться в любых комбинациях. --dpi-desync-fooling берет множество значений через запятую. + Для режимов fake, rst, rstack после фейка отправляем оригинальный пакет. Можно его отправить сразу следом за фейком, а можно его просто дропнуть. Если его дропнуть, ОС выполнит ретрансмиссию. Первая ретрансмиссия случается через 0.2 сек, потом задержка увеличивается экспоненциально. Задержка может дать надежную гарантию, что пакеты пойдут именно в нужном порядке и будут именно в нем обработаны на DPI. @@ -1034,6 +1037,34 @@ supersu : /system/su.d Если кто готов такую програмулину написать - все скажут спасибо. Тогда любой желающий с рутом сможет парой кликов настроить себе tpws. +Мобильные модемы и роутеры huawei +--------------------------------- + +Устройства типа E3372, E8372, E5770 разделяют общую идеологию построения системы. +Имеются 2 вычислительных ядра. Одно ядро выполняет vxworks, другое - linux. +На 4pda имеются модицифированные прошивки с telnet и adb. Их и нужно использовать. + +Дальнейшие утверждения проверены на E8372. На других может быть аналогично или похоже. +Присутствуют дополнительные аппаратные блоки для offload-а сетевых функций. +Не весь трафик идет через linux. Исходящий трафик с самого модема проходит +цепочку OUTPUT нормально, на FORWARD =>wan часть пакетов выпадает из tcpdump. + +tpws работает обычным образом. + +nfqueue поломан. можно собрать фиксящий модуль https://github.com/im-0/unfuck-nfqueue-on-e3372h, +используя исходники с huawei open source. Исходники содержат тулчейн и полусобирающееся, +неактуальное ядро. Конфиг можно взять с рабочего модема из /proc/config.gz. +С помощью этих исходников умельцы могут собрать модуль unfuck_nfqueue.ko. +После его применения NFQUEUE и nfqws для armhf работают нормально. + +Чтобы избежать проблемы с offload-ом при использвании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws. +Правила NFQUEUE пишутся для цепочки OUTPUT. +connbytes придется опускать, поскольку модуля в ядре нет. Но это не смертельно. + +Скрипт автозапуска - /system/etc/autorun.sh. Создайте свой скрипт настройки zapret, +запускайте из конца autorun.sh через "&". Скрипт должен в начале делать sleep 5, чтобы дождаться +поднятия сети и iptables от huawei. + Другие прошивки --------------- diff --git a/files/huawei/E8372/unfuck_nfqueue.ko b/files/huawei/E8372/unfuck_nfqueue.ko new file mode 100644 index 0000000..c24ce5e Binary files /dev/null and b/files/huawei/E8372/unfuck_nfqueue.ko differ diff --git a/files/huawei/E8372/unzapret b/files/huawei/E8372/unzapret new file mode 100755 index 0000000..f040dfc --- /dev/null +++ b/files/huawei/E8372/unzapret @@ -0,0 +1,9 @@ +#!/system/bin/busybox sh + +rule="PREROUTING -t nat -i br0 ! -d 192.168.0.0/16 -p tcp -m multiport --dports 80,443 -j REDIRECT --to-port 1" +iptables -C $rule 2>/dev/null && iptables -D $rule +killall tpws + +rule="OUTPUT -t mangle -o wan0 -p tcp -m multiport --dports 80,443 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass" +iptables -C $rule 2>/dev/null && iptables -D $rule +killall nfqws diff --git a/files/huawei/E8372/zapret b/files/huawei/E8372/zapret new file mode 100755 index 0000000..f19eed3 --- /dev/null +++ b/files/huawei/E8372/zapret @@ -0,0 +1,15 @@ +#!/system/bin/busybox sh + +# $1 - additional parameters for nfqws + +insmod /online/modules/unfuck_nfqueue.ko 2>/dev/null + +rule="PREROUTING -t nat -i br0 ! -d 192.168.0.0/16 -p tcp -m multiport --dports 80,443 -j REDIRECT --to-port 1" +iptables -C $rule 2>/dev/null || iptables -I $rule + +tpws --uid 1:3003 --port=1 --daemon + +rule="OUTPUT -t mangle -o wan0 -p tcp -m multiport --dports 80,443 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass" +iptables -C $rule 2>/dev/null || iptables -I $rule + +nfqws --uid 2 --qnum=200 --dpi-desync=disorder --dpi-desync-ttl=8 --dpi-desync-fooling=md5sig --daemon $1