Архитектура GhostNet: Техническое описание

GhostNet (GNA) — это распределенная оверлейная сеть (VPN) корпоративного класса, построенная на принципах Zero Trust. Система обеспечивает защищенное соединение между узлами, пробитие NAT (P2P), маршрутизацию трафика через шлюзы и централизованное управление через PKI с полной поддержкой Perfect Forward Secrecy (PFS).

Система состоит из трех независимых, но интегрированных компонентов:

  1. gna_lighthouse (Сигнальный Сервер & Оркестратор)
  2. gna_ca_server (Центр Сертификации)
  3. gna_agent (Универсальный Агент)

Фаза 1: Инициализация Инфраструктуры

Развертывание корневых компонентов доверия и управления.

  1. Инициализация gna_ca_server (Root of Trust):

    • Роль: Изолированный "Банк доверия". Хранит корневой ключ и базу данных.
    • Действие: Администратор запускает gna_ca_server --init-ca.
    • Результат: Генерируется Root CA Certificate и Private Key (Ed25519/ECDSA). Создается SQLite база данных (ca_database.db) для реестра сертификатов, инвайтов и CRL (списков отзыва).
    • Безопасность: Сервер не имеет доступа к интернету, слушает только локальный интерфейс 127.0.0.1:9100.
  2. Запуск gna_lighthouse (Orchestrator):

    • Роль: Координатор сети, DNS-авторитет и API-шлюз.
    • Конфигурация: Указывается GHOST_PSK (Pre-Shared Key) для защиты сигнального трафика и адрес CA-сервера.
    • Результат: Lighthouse поднимает:
      • UDP :50000 — Туннель для VPN-сигналов и реле трафика.
      • UDP :53 — Глобальный DNS-резолвер для зоны .ghost.
      • TCP :9000 — HTTPS панель управления (Dashboard).
      • TCP :9001 — Внутренний API для SPA-туннелей.

Фаза 2: Smart Onboarding (Присоединение Агента)

Процесс безопасного ввода нового устройства в сеть с привязкой к железу (Anti-Theft).

  1. Генерация Инвайта:

    • Администратор через веб-панель создает инвайт (Token) с заданными правами (User/Admin/Server) и сроком жизни.
    • gna_ca_server резервирует виртуальный IP (VIP) и сохраняет хэш токена.
  2. Запрос на присоединение:

    • Пользователь вводит токен в gna_agent.
    • Агент собирает Hardware Fingerprint (уникальный слепок железа: CPU, MAC, RAM) и генерирует временный ключ.
    • Отправляется зашифрованный JoinRequest на Lighthouse.
  3. Выпуск Сертификата:

    • Lighthouse проксирует запрос в CA.
    • gna_ca_server проверяет токен. Если валиден — генерирует постоянную пару ключей (Ed25519) и подписывает сертификат, жестко привязывая его к Hardware Fingerprint и VIP.
    • Приватный ключ и сертификат (PEM) отправляются агенту.
  4. Конфигурация Агента:

    • Агент сохраняет ключи в node.key / cert.pem и обновляет свой конфиг (VIP, настройки сети).
    • Теперь агент готов к работе и может доказать свою подлинность.

Фаза 3: Построение Сети и Handshake

Как агенты находят друг друга и строят защищенные каналы.

  1. Запуск и TUN-интерфейс:

    • Агент создает виртуальный интерфейс (например, ghost0), назначает IP и поднимает маршруты.
    • Windows: Автоматически отключает "засыпание" консоли (QuickEdit) и настраивает профиль сети.
    • Linux: Настраивает resolvectl для DNS.
  2. Локальный DNS-сервис:

    • Агент запускает встроенный DNS-сервер на 127.0.0.1:53 (или на VIP).
    • Все DNS-запросы ОС перехватываются агентом. Домены .ghost разрешаются локально, остальные — форвардятся (например, на 8.8.8.8).
  3. Authenticated Handshake:

    • Агент отправляет Handshake пакет на Lighthouse, подписанный приватным ключом.
    • Lighthouse проверяет подпись и Hardware Binding через CA (не украден ли ключ?).
    • Если всё ОК, узел помечается как Online.
  4. Распространение Карты Сети (Map Update):

    • Lighthouse рассылает всем активным агентам обновленный PeerList (Frame 0x04).
    • Агент обновляет свою таблицу маршрутизации и DNS-кэш (связка hostname -> VIP). Файл /etc/hosts больше не используется.

Фаза 4: Передача Данных (Data Plane & PFS)

GhostNet использует гибридную схему шифрования: ChaCha20-Poly1305 для скорости и X25519 для обмена ключами.

Режим 1: Perfect Forward Secrecy (PFS) — Основной

Трафик между узлами шифруется уникальными сессионными ключами, которые меняются каждые 10 минут.

  1. PfsRequest (0x06): Агент А хочет отправить данные Агенту Б. Он генерирует эфемерную пару ключей (X25519), подписывает публичную часть своим постоянным ключом и отправляет Б.
  2. PfsAccept (0x07): Агент Б проверяет подпись, генерирует свою эфемерную пару, вычисляет общий секрет (Shared Secret) и отправляет свой публичный ключ Агенту А.
  3. Сессия установлена: Оба агента вычисляют идентичный ключ шифрования.
  4. PfsData (0x08): Данные шифруются этим ключом. Даже если PSK сети или приватный ключ узла будет скомпрометирован в будущем, расшифровать перехваченный ранее трафик невозможно, так как эфемерные ключи удалены из памяти.

Режим 2: Relay (Ретрансляция)

Если прямой P2P канал (UDP Hole Punching) невозможен:

  • Агенты заворачивают зашифрованные пакеты (PfsData) в конверт для Lighthouse.
  • Lighthouse работает как "слепой" маршрутизатор: он видит заголовки, но не может расшифровать содержимое (PFS ключи есть только у участников).

Режим 3: Exit Node (Шлюз)

  • Клиент: Весь трафик (0.0.0.0/0) направляется в туннель к выбранному узлу-шлюзу.
  • Шлюз: Расшифровывает пакеты, применяет NAT (Masquerade) и выпускает их в интернет со своего IP.

Фаза 5: Управление и Безопасность

Secure Admin SPA (Single Page Application)

Администратор не имеет прямого доступа к порту 9000 сервера из интернета.

  1. Админ запускает локального агента в режиме --admin.
  2. Агент строит TCP-over-UDP туннель к Lighthouse (Frame 0x10, 0x12).
  3. Lighthouse проверяет сертификат админа (группа Admins) и открывает доступ к API.
  4. Браузер админа открывает локальный порт (например, 127.0.0.1:9999), который пробрасывается прямо в панель управления.

Active Enforcement (Мгновенная реакция)

  • Revocation: При отзыве сертификата или бане узла в панели, Lighthouse мгновенно рассылает всем агентам команду PeerRevoke (Frame 0x05).
  • Результат: Все агенты немедленно удаляют нарушителя из таблиц маршрутизации и сбрасывают ключи шифрования. Доступ блокируется за миллисекунды.

Remote CLI

Администратор может отправлять консольные команды (ping, ipconfig, systemctl) на удаленные узлы прямо из веб-интерфейса. Ответы приходят асинхронно через защищенный канал управления.