Обфускация трафика своими руками. Часть первая — OBFS4

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Предисловие

В Интернете (в том числе и здесь, на хабре) видел достаточно много статей на тему обфускации трафика. Однако, к сожалению, именно практического материала очень мало: он либо подан слишком сумбурно, либо пропущены какие-то шаги, либо сложно повторим.

Сейчас я нахожусь в ситуации, когда между мной и остальным интернетом находится непрозрачный прокси-сервер, подменяющий сертификат (и фактически осуществляющий MITM). Эта статья призвана помочь таким же как я (и, возможно, будет полезна в ближайшем будущем, учитывая то, что сейчас делает РосКомНадзор).

Давайте сразу оговоримся, что описывать основы основ в этой статье я не буду. Сейчас моя основная цель - более менее систематизировать гайды из сети и помочь людям, имеющим как минимум базовые навыки администрирования Linux поднять свой собственный прокси, трафик до которого будет обфусцироваться.

Итак, начнем с первых экспериментов. Что первым приходит в голову, когда мы говорим об обходе цензуры? Скорее всего, вы не задумываясь ответите Tor. И будете правы - действительно, сейчас Tor Browser - швейцарский нож в обходе любых блокировок. Но сейчас нас интересует конкретно то, как он работает с трафиком, а точнее, с помощью каких инструментов его обфусцирует.

Самым распространенным (и при этом мощным) инструментом обфускации трафика в Tor является obfs4. Посмотрим, как его развернуть.

Глава 1. OBFS4.

Безрезультатно перепробовав уйму утилит (ptproxy, ptadapter), потом попытавшись написать свою был обнаружен интересный проект - shapeshift dispatcher.

Он представляет собой написанный на go скрипт, универсальный для клиента и сервера. На сервере он перенаправляет получаемый обфусцируемый трафик, деобфусцирует его, и уже "чистый" трафик перенаправляет по указанному адресу.
На клиенте - создает сервер на localhost, принимающий "чистый" трафик, обфусцирует его, и, соответственно, передает куда надо.

Начнем наши эксперименты. Поскольку бинарники не предоставляются, для дальнейших действий придется собрать их самостоятельно. Благо, на go это делается просто - нужно просто склонировать репозиторий и запустить одну комманду. Инструкция, как установить go доступна на их официальном сайте. После установки (или, если он уже установлен), необходимо загрузить репозиторий (командой git clone https://github.com/OperatorFoundation/shapeshifter-dispatcherили загрузив и распаковав ZIP по ссылке https://github.com/OperatorFoundation/shapeshifter-dispatcher/archive/refs/heads/main.zip), перейти в директорию с исходниками и выполнить go build. Все остальное за вас сделают автоматически

Синтаксис комманды для запуска сервера выглядит так:

./shapeshifter-dispatcher \
		-transparent \
    -server \
    -state state \
    -orport 127.0.0.1:3333 \
    -transports obfs4 \
    -bindaddr obfs4-0.0.0.0:80 \
    -logLevel DEBUG \ 
    -enableLogging 

Во всей этой команде нас интересует только два арумента: orport и bindaddr. Давайте, для примера, запустим ее на сервере. Если вы все сделали правильно, в консоли вы увидите сообщение listening on 127.0.0.1:80(или ваш порт, в зависимости от того, что вы укажете). Теперь, для того, чтобы подключиться с клиента, необходимо узнать данные, которые сгенерировал obfs4proxy. Для этого, останавливаем выполнение сочетанием Ctrl+C и переходим в директорию state (или любую другую, которую вы передали в аргументе state). Там нас будут ждать два файла - obfs4_bridgeline.txt и obfs4_state.json. Нам необходимо открыть превый и из строки вида Bridge obfs4 ........ cert=CERTIFICATE_VALUE iat-mode=0 скопировать значение CERTIFICATE_VALUE.

Теперь запустим клиент. Синтаксис выглядит так:

./shapeshifter-dispatcher 
		-transparent \
    -client \
    -state state \ 
    -target [IP]:80 \
    -transports obfs4 \
    -proxylistenaddr 127.0.0.1:1443 \
    -optionsFile obfs4.json \
    -logLevel DEBUG \
    -enableLogging 

В этой команде нужно заменить [IP] на публичный адрес вашего сервера. Для подключения, необходимо создать файл obfs4.json рядом со скриптом или указать путь до него в аргументе optionsFile. Содержимое файла: {"cert": "CERTIFICATE_VALUE","iat-mode": 0}. Если не хотите сохранять файл, можно использовать аргумент -options {} вместо optionsFile. Обращайте внимание на пробелы в JSON - здесь это почему-то критично.

Консоль клиента
Консоль клиента
Консоль сервера
Консоль сервера

Это все, безусловно, прекрасно и красиво, но давайте теперь применим это в реальной ситуации. Для этого, я поднял на сервере PPTP VPN (к примеру, по этому гайду). Теперь, необходимо поменять порты для того, чтобы все работало. Стандартный для PPTP - 1723, его и укажем.

Новая команда запуска сервера:

./shapeshifter-dispatcher \
		-transparent \
    -server \
    -state state \
    -orport 127.0.0.1:1723 \
    -transports obfs4 \
    -bindaddr obfs4-0.0.0.0:80 \
    -logLevel DEBUG \ 
    -enableLogging 

клиента:

./shapeshifter-dispatcher 
		-transparent \
    -client \
    -state state \ 
    -target [IP]:80 \
    -transports obfs4 \
    -proxylistenaddr 127.0.0.1:1723 \
    -optionsFile obfs4.json \
    -logLevel DEBUG \
    -enableLogging 

Значения IP и порта можно менять на свои в зависимости от ваших конфигураций или используемых серверов.

В завершение первой части:

Это мой первый опыт написания подобных материалов, поэтому, буду рад конструктивной критике. Если в статье вы видите ошибку, или хотите ее чем-то дополнить, оставьте комментарий или свяжитесь со мной. Надеюсь, был Вам полезен.

Технологий обфускации трафика еще много, поэтому продолжение следует...

Источник: https://habr.com/ru/post/650649/


Интересные статьи

Интересные статьи

Хотим поделиться специфическими проблемами, возникшими у нас при обучении модели, и решениями, которые мы для этих проблем придумали.В прошлый раз мы остановились на том, что из-за необходимости защищ...
Привет, Хабр!В прошлой статье мы разобрались:- Что такое ui-тесты и для чего они нужны;- Как настроить окружение для тестов;- Как находить ui-элементы в проекте и простав...
Здравствуйте. В предыдущем опросе читатели выбрали следующие пункты на момент создания данной статьи: система характеристик оружия, система здоровья персонажа. А вот дерево навыков я так ...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.
В прошлой статье я рассказал краткую историю развития внутренних и внешних продуктов компании ДубльГИС. Сегодня погрузимся в детали развития одного из продуктов, а именно экспорта данных. Я ...