Update readme.txt

This commit is contained in:
ruti 2024-07-22 01:03:12 +03:00
parent c023a8d8a8
commit 2d8ada799c

View File

@ -1,16 +1,13 @@
Implementation of some DPI bypass methods. Implementation of some DPI bypass methods.
The program is a local SOCKS proxy server. The program is a local SOCKS proxy server.
--------------
Usage example: Usage example:
$ ciadpi --disorder 3 --auto=torst --tlsrec 1+s ciadpi --disorder 3 --auto=torst --tlsrec 1+s
$ ciadpi --fake -1 --ttl 8 ciadpi --fake -1 --ttl 8
-------------------- ---
Реализация некоторых способов запутывания DPI. ### Описание аргументов
Программа представляет собой локальный SOCKS прокси сервер.
--------------------
Описание аргументов:
-i, --ip <ip> -i, --ip <ip>
Прослушиваемый IP, по умолчанию 0.0.0.0 Прослушиваемый IP, по умолчанию 0.0.0.0
@ -55,13 +52,6 @@ $ ciadpi --fake -1 --ttl 8
sid_inv : session_id в TLS ServerHello и ClientHello не совпадают sid_inv : session_id в TLS ServerHello и ClientHello не совпадают
alert : TLS Error Alert в ответе alert : TLS Error Alert в ответе
none : Предыдущая группа пропущена, например из-за ограничения по доменам или протоколам none : Предыдущая группа пропущена, например из-за ограничения по доменам или протоколам
По умолчанию обрабатывается только torst
Можно указывать несколько групп опций, раделяя их данным параметром
Если соединение успешно прошло, то параметры для данного IP будут закешированны
Параметры, которые можно вынести в отдельную группу:
proto, hosts, dst, split, disorder, oob, fake, ttl, ip-opt, md5sig, fake-data, mod-http, tlsrec
Пример:
--auto=redirect --split=1+h --auto=torst --fake -1 --auto=sid_inv,alert --tlsrec 1+s
-u, --cache-ttl <sec> -u, --cache-ttl <sec>
Время жизни значения в кеше, по умолчанию 100800 (28 часов) Время жизни значения в кеше, по умолчанию 100800 (28 часов)
@ -69,7 +59,6 @@ $ ciadpi --fake -1 --ttl 8
-T, --timeout <sec> -T, --timeout <sec>
Таймаут ожидания первого ответа от сервера в секундах Таймаут ожидания первого ответа от сервера в секундах
В Linux переводится в миллисекунды, поэтому можно указать дробное число В Linux переводится в миллисекунды, поэтому можно указать дробное число
Истечение таймаута будет обработано --auto
-K, --proto[=t,h] -K, --proto[=t,h]
Белый список протоколов: tls,http Белый список протоколов: tls,http
@ -135,80 +124,70 @@ $ ciadpi --fake -1 --ttl 8
Разделить ClientHello на отдельные записи по указанному смещению Разделить ClientHello на отдельные записи по указанному смещению
Можно указывать несколько раз Можно указывать несколько раз
------- ### Подробнее
Детали:
---
--split --split
Разбивает запрос на части. Пример на запросе в 30 байт: Разбивает запрос на части. Пример на запросе в 30 байт:
- Параметры: --split 3 --split 7 - Параметры: --split 3 --split 7
- Порядок отправки: 1-3, 3-7, 7-30 - Порядок отправки: 1-3, 3-7, 7-30
---
--disorder --disorder
Часть, попадающая под disorder, будет отправлена с TTL=1, т.е. фактически не будет никуда доставлена. Часть, попадающая под disorder, будет отправлена с TTL=1, т.е. фактически не будет никуда доставлена.
Однако ОС узнает об этом лишь после отсылки последующей части, когда сервер сообщит о потере с помощью SACK. ОС узнает об этом лишь после отсылки последующей части, когда сервер сообщит о потере с помощью SACK.
Системе придется отослать предыдущий пакет заново, тем самым нарушив порядок. Системе придется отослать предыдущий пакет заново, тем самым нарушив обычный порядок.
Использовать disorder на нескольких позициях подряд нет смысла, т.к. они объединятся в один сегмент: - Параметры: --disorder 7
- Параметры: --disorder 3 --disorder 7
- Порядок отправки: 7-30, 1-7 - Порядок отправки: 7-30, 1-7
Сервер получает лишь 7-30 и сообщает о недостаче 1-7.
Однако, можно использовать split:
- Параметры: --disorder 3 --split 7 --disorder 23
- Порядок отправки: 3-7, 23-30, 1-3, 7-23
Сервер получает 3-7 и 23-30 и сообщает, что не получил 1-3 и 7-23.
Вышесказанное распространяется только на Linux. Вышесказанное распространяется только на Linux.
В Windows выполняется полная ретрансмиссия: В Windows выполняется полная ретрансмиссия:
- Параметры: --disorder 7 - Параметры: --disorder 7
- Порядок отправки: 7-30, 1-30 - Порядок отправки: 7-30, 1-30
Когда сервер сообщает о пропуске 1-7, система отсылает 1-30, т.е. и доставленные данные тоже.
DPI может среагировать на второй пакет, т.к. он никак не фрагментирован. Поэтому желательно использовать ещё и split:
Тут выручает split:
- Параметры: --split 7 --disorder 23 - Параметры: --split 7 --disorder 23
- Порядок отправки: 1-7, 23-30, 7-30 - Порядок отправки: 1-7, 23-30, 7-30
Сервер полчует 1-7 и 23-30, сообщает о пропуске 7-23.
В таком случае система отправит лишь 7-30.
На практике оптимально использовать: На практике оптимально использовать:
Linux: --disorder 3 Linux: --disorder 3
Windows: --split 1+s --disorder 3+s Windows: --split 1+s --disorder 3+s
---
--fake --fake
Пример:
- Параметры: --fake 7 - Параметры: --fake 7
- Порядок отправки: 1-7 фейк, 7-30 оригинал, 1-7 оригинал - Порядок отправки: 1-7 фейк, 7-30 оригинал, 1-7 оригинал
Данные в первой части запроса заменяются на поддельные. Данные в первой части запроса заменяются на поддельные.
Эта часть должна пройти через DPI, но не дойти до сервера. Эта часть должна пройти через DPI, но не дойти до сервера.
А раз часть не дойдет, то ОС отправит ее снова, тем самым изменив порядок подобно disorder. А раз часть не дойдет, то ОС отправит ее снова, тем самым изменив порядок подобно disorder.
Для того, чтобы фейк не дошел до сервера, есть опции ttl, ip-opt и md5sig. Для того, чтобы фейк не дошел до сервера, есть опции ttl, ip-opt и md5sig.
Можно подобрать такой TTL, чтобы пакет прошел через все DPI, но уничтожился по пути к серверу. TTL необходимо подбирать такой, чтобы пакет прошел через все DPI, но не дошел до сервера.
Однако некоторые серверы расположены ближе DPI и поддельные пакеты до них могут все таки дойти. Для Linux есть md5sig. Он устанавливает опцию TCP MD5 Signature, что не дает пакету быть принятым многими серверами.
Тогда, скорее всего, сайт пришлет ошибку и разорвет соединение. К сожалению, md5sig работает не во всех сборках.
Для того, чтобы обнаружить подобные ситуации, есть опция --auto:
--fake -1 --ttl 10 --auto=cl_err,sid_inv,alert --fake -1 --ttl 6
В данном примере - если возникнет ошибка с ttl=10, то он будет уменьшен до 6-ти
Помимо ttl, есть ip-opt. Он устанавливает IP Options для пакета.
Пакеты с такой опцией наверняка отбросятся на магистрали, пройдя через несколько маршрутизаторов.
Есть еще md5sig. Он устанавливает опцию TCP MD5 Signature, что не дает пакету быть принятым многими серверами.
Однако, md5sig работает не во всех сборках Linux, а ip-opt не работает на многих версиях Windows.
Для Windows есть еще один способ избежать обработки фейка сервером. Для Windows есть еще один способ избежать обработки фейка сервером.
Это комбинирование fake с disorder: Это комбинирование fake с disorder:
- Параметры: --disorder 1 --fake 7 - Параметры: --disorder 1 --fake 7
- Порядок отправки: 2-7 фейк, 7-30 оригинал, 1-30 оригинал - Порядок отправки: 2-7 фейк, 7-30 оригинал, 1-30 оригинал
Если поддельный пакет и дойдет до сервера, то он будет перезаписан из-за полной ретрансмисси. Если поддельный пакет и дойдет до сервера, то он будет перезаписан из-за полной ретрансмисси.
На практике оптимально использовать: На практике оптимально использовать:
Linux: --fake -1 --md5sig Linux: --fake -1 --md5sig
Windows: --disorder 1 --fake -1 Windows: --disorder 1 --fake -1
---
--oob --oob
TCP может отсылать данные вне основного потока, используя флаг URG, однако лишь 1 байт в пакете. TCP может отсылать данные вне основного потока, используя флаг URG, однако лишь 1 байт в пакете.
Все данные в таком пакете будут доставлены приложению, кроме последнего байта, который и является внеканальным: Все данные в таком пакете будут доставлены приложению, кроме последнего байта, который и является внеканальным:
- Параметры: --oob 3 - Параметры: --oob 3
- Отправка: 1-4 с флагом URG (1-3 данные запроса + 4-й байт, который будет усечен), 3-30 - Отправка: 1-4 с флагом URG (1-3 данные запроса + 4-й байт, который будет усечен), 3-30
Этот байт можно поместить, например, в SNI: --oob 3+s
Этот байт желательно помещать в SNI: --oob 3+s
---
--tlsrec --tlsrec
Одну TLS запись можно разбить на несколько, немного переделав заголовок. Одну TLS запись можно разбить на несколько, немного переделав заголовок.
На месте разбиения вставляется новый заголовок, увеличивая размер запроса на 5 байт. На месте разбиения вставляется новый заголовок, увеличивая размер запроса на 5 байт.
@ -216,17 +195,21 @@ TCP может отсылать данные вне основного пото
--tlsrec 3+s --tlsrec 3+s
Хоть tlsrec и oob запутывают DPI, они также могут запутать всякие мидлбоксы, Хоть tlsrec и oob запутывают DPI, они также могут запутать всякие мидлбоксы,
которые не поддерживают полноценный стек TCP/TLS, тем самым ограничив доступ к некоторым серверам. которые не поддерживают полноценный стек TCP/TLS.
Поэтому их следует использовать вместе с --auto: Из-за этого их следует использовать вместе с --auto:
--auto=torst --timeout 3 --tlsrec 3+s --auto=torst --timeout 3 --tlsrec 3+s
В примере tlsrec будет применяться лишь в случаях, когда сброшено подключение или вышел таймаут, т.е. когда, скорее всего, произошла блокировка. В примере tlsrec будет применяться лишь в случаях, когда сброшено подключение или вышел таймаут, т.е. когда, скорее всего, произошла блокировка.
Можно наоборот - отменять tlsrec, если сервер сбрасывает подключение или откидывает пакет: Можно наоборот - отменять tlsrec, если сервер сбрасывает подключение или откидывает пакет:
--tlsrec 3+s --auto=torst --timeout 3 --tlsrec 3+s --auto=torst --timeout 3
---
--auto, --hosts --auto, --hosts
Параметр auto делит опции на группы. Параметр auto делит опции на группы.
Для каждого запроса они обходятся слева на право. Для каждого запроса они обходятся слева на право.
Сначала проверяется триггер, указанный в auto, затем proto и hosts. Сначала проверяется триггер, указанный в auto, затем proto и hosts.
Можно указывать несколько групп опций, раделяя их данным параметром.
Параметры, которые можно вынести в отдельную группу:
proto, hosts, split, disorder, oob, fake, ttl, ip-opt, md5sig, fake-data, mod-http, tlsrec
Примеры: Примеры:
--fake -1 --ttl 10 --auto=alert,sid_inv --fake -1 --ttl 5 --fake -1 --ttl 10 --auto=alert,sid_inv --fake -1 --ttl 5
@ -247,18 +230,16 @@ TCP может отсылать данные вне основного пото
--proto=http --fake -1 --fake-data=':GET /...' --auto=none --fake -1 --proto=http --fake -1 --fake-data=':GET /...' --auto=none --fake -1
Переопределить фейковый пакет для HTTP Переопределить фейковый пакет для HTTP
------- ---
Сборка: ### Сборка
Для сборки понадобится: Для сборки понадобится:
make, gcc/clang для Linux, mingw для Windows make, gcc/clang для Linux, mingw для Windows
# Linux Linux: make
$ make Windows: make windows CC=x86_64-w64-mingw32-gcc
# Windows
$ make windows CC=x86_64-w64-mingw32-gcc
------------- ---
Дополнительная информация о DPI: ### Дополнительная информация о DPI, источники идей
https://github.com/bol-van/zapret/blob/master/docs/readme.txt https://github.com/bol-van/zapret/blob/master/docs/readme.txt
https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf
https://habr.com/ru/post/335436 https://habr.com/ru/post/335436