Suicide
26.01.2020, 15:30
Исследователи из Мэрилендского университета в рамках проекта Geneva (https://geneva.cs.umd.edu/) предприняли попытку создания движка (https://github.com/Kkevsterrr/geneva) для автоматизации определения методов, применяемых для цензурирования доступа к контенту. Вручную пытаться перебрать возможные бреши систем глубокого инспектирования пакетов (DPI) достаточно трудный и долгий процесс, в Geneva попытались использовать генетический алгоритм (https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D 1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1 %80%D0%B8%D1%82%D0%BC) для оценки особенностей DPI, определения ошибок в реализации и выработки оптимальной стратегии обхода блокировки на стороне клиента. Код проекта написан (https://github.com/Kkevsterrr/geneva) на языке Python.
Применяемое для блокировки DPI-оборудование имеет свои недоработки (https://github.com/bol-van/zapret), позволяющие скрыть обращение к запрещённому ресурсу или избежать блокировки. Например, в простейшем случае при организации блокировки через подстановку фиктивного ответа (применяется пассивными DPI) достаточно на стороне клиента отбросить (https://www.opennet.ru/tips/2999_iptables_block_tor.shtml) фиктивный ответ, отправленный DPI. В случае применения активного DPI можно попытаться скрыть сам факт обращения к заблокированному сайту, немного видоизменив параметры HTTP-запроса (например, добавив лишний пробел после "GET"), разделив на несколько пакетов данные согласования TLS-соединения или выполнив атаки TCB Teardown и TCB Desync. Суть упомянутых атак в отправке клиентом вначале фиктивного пакета с данными или флагами RST/ACK, который не получит целевой хост, но поймает DPI, примет на его основе решение и не станет анализировать идущий следом пакет с реальным запросом (например, в фиктивном первом пакете можно указать другой SNI, а для скрытия этого пакета от целевого хоста можно выставить низкий TTL, а также некорректную контрольную сумму, флаги или номер последовательности TCP).
Geneva пытается (https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf) выработать рабочий метод обхода DPI, используя четыре базовые примитива для манипуляции с сетевыми пакетами - отбрасывание, изменение заголовков, дублирование и фрагментация. Для подбора оптимальной стратегии применяется генетический алгоритм, моделирующий процессы, сходные с естественным отбором, через случайное комбинирование различных вариантов манипуляций с пакетами. В конечном счёте, на выходе примитивы комбинируются в "дерево действий", определяющее алгоритм обхода DPI.
https://www.opennet.ru/opennews/pics_base/0_1579897219.png (https://geneva.cs.umd.edu/figs/evolution-crossover-vert.png)
https://www.opennet.ru/opennews/pics_base/0_1579897254.png align=top (https://geneva.cs.umd.edu/figs/out-strategy-code.png)
Работа Geneva успешно опробована для обхода методов цензурирования, применяемых в Китае, Индии и Казахстане, в том числе при помощи Geneva было выявлено несколько новых брешей, о которых не было известно до этого. При этом Geneva эффективен только для обхода блокировок на основе DPI, при блокировании по IP-адресам он бесполезен и без VPN не обойтись. В ходе экспериментов выявлено (https://github.com/Kkevsterrr/geneva/blob/master/strategies.md) несколько десятков типовых стратегий обхода DPI, которые можно протестировать сразу без проведения полного анализа, например:
python3 engine.py --server-port 80 --strategy "[TCP:flagsA]-duplicate(tamper{TCP:dataofs:replace:10} tamper{TCP:chksum:corrupt},),)-|" --log debug
2020-01-24 20:54:41 DEBUG:[ENGINE] Engine created with strategy \/ (ID bm3kdw3r) to port 80
2020-01-24 20:54:41 DEBUG:[ENGINE] Configuring iptables rules
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A OUTPUT -p tcp --sport 80 -j NFQUEUE --queue-num 1
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A INPUT -p tcp --dport 80 -j NFQUEUE --queue-num 2
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A OUTPUT -p udp --sport 80 -j NFQUEUE --queue-num 1
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A INPUT -p udp --dport 80 -j NFQUEUE --queue-num 2
24.01.2020
http://www.opennet.ru/opennews/art.shtml?num=52249
Применяемое для блокировки DPI-оборудование имеет свои недоработки (https://github.com/bol-van/zapret), позволяющие скрыть обращение к запрещённому ресурсу или избежать блокировки. Например, в простейшем случае при организации блокировки через подстановку фиктивного ответа (применяется пассивными DPI) достаточно на стороне клиента отбросить (https://www.opennet.ru/tips/2999_iptables_block_tor.shtml) фиктивный ответ, отправленный DPI. В случае применения активного DPI можно попытаться скрыть сам факт обращения к заблокированному сайту, немного видоизменив параметры HTTP-запроса (например, добавив лишний пробел после "GET"), разделив на несколько пакетов данные согласования TLS-соединения или выполнив атаки TCB Teardown и TCB Desync. Суть упомянутых атак в отправке клиентом вначале фиктивного пакета с данными или флагами RST/ACK, который не получит целевой хост, но поймает DPI, примет на его основе решение и не станет анализировать идущий следом пакет с реальным запросом (например, в фиктивном первом пакете можно указать другой SNI, а для скрытия этого пакета от целевого хоста можно выставить низкий TTL, а также некорректную контрольную сумму, флаги или номер последовательности TCP).
Geneva пытается (https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf) выработать рабочий метод обхода DPI, используя четыре базовые примитива для манипуляции с сетевыми пакетами - отбрасывание, изменение заголовков, дублирование и фрагментация. Для подбора оптимальной стратегии применяется генетический алгоритм, моделирующий процессы, сходные с естественным отбором, через случайное комбинирование различных вариантов манипуляций с пакетами. В конечном счёте, на выходе примитивы комбинируются в "дерево действий", определяющее алгоритм обхода DPI.
https://www.opennet.ru/opennews/pics_base/0_1579897219.png (https://geneva.cs.umd.edu/figs/evolution-crossover-vert.png)
https://www.opennet.ru/opennews/pics_base/0_1579897254.png align=top (https://geneva.cs.umd.edu/figs/out-strategy-code.png)
Работа Geneva успешно опробована для обхода методов цензурирования, применяемых в Китае, Индии и Казахстане, в том числе при помощи Geneva было выявлено несколько новых брешей, о которых не было известно до этого. При этом Geneva эффективен только для обхода блокировок на основе DPI, при блокировании по IP-адресам он бесполезен и без VPN не обойтись. В ходе экспериментов выявлено (https://github.com/Kkevsterrr/geneva/blob/master/strategies.md) несколько десятков типовых стратегий обхода DPI, которые можно протестировать сразу без проведения полного анализа, например:
python3 engine.py --server-port 80 --strategy "[TCP:flagsA]-duplicate(tamper{TCP:dataofs:replace:10} tamper{TCP:chksum:corrupt},),)-|" --log debug
2020-01-24 20:54:41 DEBUG:[ENGINE] Engine created with strategy \/ (ID bm3kdw3r) to port 80
2020-01-24 20:54:41 DEBUG:[ENGINE] Configuring iptables rules
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A OUTPUT -p tcp --sport 80 -j NFQUEUE --queue-num 1
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A INPUT -p tcp --dport 80 -j NFQUEUE --queue-num 2
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A OUTPUT -p udp --sport 80 -j NFQUEUE --queue-num 1
2020-01-24 20:54:41 DEBUG:[ENGINE] iptables -A INPUT -p udp --dport 80 -j NFQUEUE --queue-num 2
24.01.2020
http://www.opennet.ru/opennews/art.shtml?num=52249