Skip to content

Ave-Sergeev/Omoikane

Repository files navigation

Omoikane


Русский | English

Описание

Данный проект представляет собой легковесный Explicit Proxy, написанный на Rust.
Благодаря архитектурным особенностям языка, обеспечиваются минимальные задержки и низкое потребление ресурсов.

  • Для запуска и использования не требуются root-права.
  • Вся обработка TCP-трафика происходит локально на вашем компьютере.
  • Поддержка протоколов DoH и DoT защищает DNS-запросы от перехвата и подмены (DNS Spoofing), обеспечивая корректный резолвинг адресов еще до установки соединения.
  • Функция динамического изменения отпечатков (fingerprint) сессий делает затруднительной блокировку трафика по сигнатурам (экспериментально).
  • Инструмент обрабатывает только фазу инициализации сессии (TLS-ClientHello, HTTP-headers). Основная полезная нагрузка (payload) передается транзитом без вмешательства, что сводит задержки и нагрузку на систему к минимуму.
  • Изменения применяются ко всем новым соединениям сразу после запуска и автоматически прекращаются при завершении работы.
  • Доступны сборки под популярные операционные системы: macOS, Windows и Linux.

Платформы:

  • macOS
    На Apple Silicon (aarch64-apple-darwin) & Intel (x86_64-apple-darwin).
    Статус: Тестирование и стабильная работа подтверждены на macOS автора (Apple Silicon).
  • Windows
    В Windows 7, 8, 10, 11 на процессорах Intel/AMD (x86_64-pc-windows-msvc).
    Статус: Тестирование и стабильная работа подтверждены на Windows 10 автора.
  • Linux
    На дистрибутивах Ubuntu, Debian, CentOS, Fedora, Alpine, Arch (x86_64-unknown-linux-musl).
    Статус: Тестирование не проводилось, работоспособность лишь теоретическая.

Быстрый старт

Самый быстрый способ начать работу — скачать скомпилированный бинарный файл:

  1. Перейдите на страницу Releases.
  2. Скачайте архив, соответствующий архитектуре вашей ОС.
  3. Распакуйте архив и переместите бинарный файл куда вам удобно. Запустите его из терминала.

⚠️ Примечание ⚠️
При первом запуске утилиты (для macOS) система может вывести предупреждение о «непроверенном разработчике». Это стандартное поведение для стороннего ПО — просто разрешите запуск в настройках (раздел "Конфиденциальность и безопасность").

О проекте

Основная задача:
Сохранение устойчивости TCP-соединений в условиях глубокого анализа трафика (DPI) на промежуточных узлах сети через механизмы фрагментации TCP-потока и манипуляции структурой пакетов. В том числе применение методов защиты от атак типа DNS Spoofing и Cache Poisoning, а также динамическое изменение отпечатков (fingerprint) сессии.

Текущее состояние:
Active Research & PoC 🦀
Несмотря на статус Proof of Concept, инструмент уже является полностью функциональным.
Ключевые механизмы манипуляции трафиком реализованы и стабильно работают в целевой среде. Тем не менее, архитектура и отдельные компоненты всё еще находятся на этапе активной доработки и оптимизации. Текущая итерация движется в сторону гексагональной архитектуры (Ports & Adapters).

Дисклеймер:
Настоящее программное обеспечение разработано в рамках подготовки магистерской диссертации и носит исключительно научно-исследовательский характер. Разработка представлена как Proof of Concept (доказательство концепции) с целью исследования механизмов обеспечения устойчивости информационного обмена при прохождении через узлы с глубоким анализом трафика (DPI).

Программное обеспечение предоставляется на условиях as is (как есть). Его использование допускается только в учебных и ознакомительных целях. Автор не дает никаких гарантий относительно работоспособности инструмента в специфических условиях и не несет ответственности за любой прямой или косвенный ущерб, возникший в результате использования данного ПО.

В данном репозитории не особо соблюдаются формальные промышленные стандарты ведения Git-истории (Best Practices). История коммитов намеренно упрощена автором.

Символизм:
Проект назван в честь японского мифологического бога разума, мудрости и стратегии, который вернул миру свет, найдя «хитрый способ» там, где прямое действие было бессильно.

Сборка

Инструкции по настройке окружения и сборке проекта находятся в примечаниях к разработке.

Конфигурация

Настройка сервиса является гибкой и поддерживает два уровня приоритетов:

  • CLI-аргументы — используются для быстрого запуска и переопределения основных параметров. Имеют наивысший приоритет.
  • Файл конфигурации (config.yaml) — предназначен для более тонкой настройки внутренних параметров proxy-engine редко требующих оперативного изменения. Шаблон файла с примерами настроек (config_example.yaml) находится в корне проекта.

Список доступных CLI-аргументов:
Полный список актуальных флагов и их описание можно посмотреть в терминале/консоли с помощью команды --help.
Если аргумент не указан явно, используются значения из config.yaml или значения по умолчанию.

  • APP
    • --ip - IP-адрес для прослушивания. (По умолчанию: 127.0.0.1)
    • --port - Порт для прослушивания. (По умолчанию: 8080)
    • --config - Путь к файлу конфигурации (YAML). (По умолчанию: не указан)
    • --silent - Настройка скрытия баннера и информационных сообщений в терминале: 'true', 'false'. (По умолчанию: false)
    • --log-level - Уровень детализации логов: off, error, warn, info, debug, trace. (По умолчанию: info)
  • DNS
    • --dns-mode - Режим работы DNS: system, doh, dot. (По умолчанию: system)
    • --dns-qtype - Тип запрашиваемых DNS записей: ipv4, ipv6, all. (По умолчанию: ipv4)
    • --dns-provider - Используемый провайдер для DoH/DoT: google, cloudflare, quad9. (По умолчанию: google)
  • HTTP
    • --http-split-mode - Фрагментация HTTP-request: none, fragment. (По умолчанию: none)
  • HTTPS (TLS)
    • --tls-split-mode - Фрагментация TLS-ClientHello: none, sni, random. (По умолчанию: none)
    • --tls-fake-ttl-mode - Стратегия ограничения дистанции (TTL) для фейк-пакета: none, custom. (По умолчанию: none)
    • --tls-fake-ttl-value — Количество хопов (прыжков) для стратегии custom, через которое фейк-пакет будет отброшен. (По умолчанию: 0, диапазон 0-255)
    • --tls-greased-padding - Динамическое изменение отпечатка (fingerprint) сессии путем повышения энтропии TLS-handshake (GREASE & Padding): true, false. (По умолчанию: false)

Примеры запуска в CLI

Все параметры имеют значения по умолчанию.
Сетевые условия у каждого провайдера индивидуальны.
Если стандартные настройки не дают нужного результата, необходимо «играться» с параметрами CLI-аргументов и тонкими настройками в файле config.yaml, подбирая рабочую комбинацию под конкретно ваш случай.

  • Скрытый режим: Отключает вывод баннера и информационных сообщений в терминал. Полезно при работе в фоне.

    ./<path_to_binary_file> --silent true

  • Базовый режим: Трафик пропускается без модификаций, используется системный DNS-resolver.
    Минималистичный запуск (используются дефолтные параметры):

    ./<path_to_binary_file>

    Полная запись (явное указание параметров):

    ./<path_to_binary_file> -i 127.0.0.1 -p 8080 --dns-mode system --log-level info --http-split-mode none --tls-split-mode none --tls-fake-ttl-mode none

  • Умеренный режим:. Включает фрагментацию пакетов, Сloudflare DNS-over-TLS (IPv4) для обхода простых ограничений.

    ./<path_to_binary_file> --dns-mode dot --dns-provider cloudflare --http-split-mode fragment --tls-split-mode random

  • Максимальный режим:. Использование DNS-over-HTTPS (IPv4), фрагментации пакетов, кастомной подстройки TTL, изменение fingerprint.

    ./<path_to_binary_file> --dns-mode doh --dns-provider cloudflare --http-split-mode fragment --tls-split-mode sni --tls-fake-ttl-mode custom --tls-fake-ttl-value 1 --tls-greased-padding true

Детали реализации

Описание архитектуры и ключевых алгоритмов проекта находится в примечаниях к разработке.

Лицензия

Исходный код проекта распространяется под свободной лицензией Apache License 2.0. Это позволяет использовать, копировать и модифицировать код в образовательных и исследовательских целях.

Поддержка проекта

Если вам что-то приглянулось в данном проекте, сочли его полезным, или просто понравился код - не стесняйтесь поставить ⭐ звездочку в благодарность.