Новая схема дурения DPI, которые секут не только TLS ClientHello, но и ServerHello.
Как же с этим бороться ? Сложно заставить сервер посылать не то, на что он запрограммирован.
Лучшее решение было бы всем перейти на TLS 1.3, где ServerHello шифрован.
Но переход идет вяло. Владельцы серверов годами остаются на давно настроенных и стабильных системах. Потому там может быть только TLS 1.2.
Но кое-что все-таки сделать можно. Почему бы не возродить старую идею со сменой winsize, только наоборот ?
В nfqws добавлен параметр --wssize=<window_size>[:<scale_factor>]
Он позволяет менять window size и scale factor для сервера до тех пор, пока не будет отослан запрос, на который должен придти фрагментированный ответ, затем перестать менять winsize, чтобы вернуть скорость.
Менять winsize и scale factor надо во всех пакетах от начала соединения до отсылки TLS ClientHello, иначе это не сработает на linux серверах.
Типичное использование --wssize=1:6. scale_factor - это степень двойки, на которую умножается winsize.
Чем он больше, тем потом будет выше скорость, однако если его сделать слишком большим, то не будет достигнута цель, а если слишком малым - потом будут тормоза.
Для http такая схема бесполезна, поэтому заодно введена возможность в скриптах отдельно настраивать опции дурения nfqws для http и https
Код:
NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
#NFQWS_OPT_DESYNC_HTTP="--dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
#NFQWS_OPT_DESYNC_HTTPS="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"
Для http берется NFQWS_OPT_DESYNC_HTTP, если он пустой - NFQWS_OPT_DESYNC
Для https берется NFQWS_OPT_DESYNC_HTTPS, если он пустой - NFQWS_OPT_DESYNC
Схема себя показала эффективной против ТСПУ, даже без fake, но со split