From ad5c9e8675b90a371b0c9755f9d79fc148848443 Mon Sep 17 00:00:00 2001 From: bol-van Date: Wed, 22 Jan 2020 21:57:45 +0300 Subject: [PATCH] huawei info, module, scripts --- docs/readme.txt | 35 +++++++++++++++++++++++++-- files/huawei/E8372/unfuck_nfqueue.ko | Bin 0 -> 5696 bytes files/huawei/E8372/unzapret | 9 +++++++ files/huawei/E8372/zapret | 15 ++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 files/huawei/E8372/unfuck_nfqueue.ko create mode 100755 files/huawei/E8372/unzapret create mode 100755 files/huawei/E8372/zapret 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 0000000000000000000000000000000000000000..c24ce5eb3d855ebbcbcac2d453e2db63a3ac53a1 GIT binary patch literal 5696 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 literal 0 HcmV?d00001 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