montana/Node/External-Audit/OPEN-RISKS.md
2026-05-21 03:44:38 +03:00

6.0 KiB
Raw Blame History

Открытые риски — VPN-сеть Montana

Версия: 2026-05-18

Реестр рисков, принятых сознательно или отложенных до пост-аудита. Каждый риск имеет ID, оценку и план.

Принятые риски (live с обоснованием)

R-1. Один SNI (www.googletagmanager.com) → single point of fingerprint

  • Severity: medium
  • Vector: AT-3 (DPI/цензор) выпускает rule «block any TLS to with SNI=googletagmanager»
  • Текущая митигация: SNI популярный, реальный Google handshake; mass-block нанесёт collateral на Google
  • План: SNI-pool из 35 популярных доменов (gstatic, googleapis, fonts.google, и т.п.), rotation по странам
  • Срок: до mainnet v2 (Q3 2026)

R-2. CF DNSSEC выключен

  • Severity: medium
  • Vector: AT-2 (active MITM) может подменить ответ DNS на ложный IP
  • Митигация-факт: клиент Reality верифит сервер через pbk — даже если IP подменён, без правильного privateKey клиент не получит коннект; max damage — DoS
  • План: включить DNSSEC в Cloudflare для зоны montana.quest
  • Срок: ближайшая неделя

R-3. DDoS на :443 узлов

  • Severity: medium
  • Vector: AT-7 (DDoS) кладёт один узел; остальные продолжают работать благодаря multi-A
  • Митигация-факт: auto-prune убирает упавший IP за ≤ 120s, клиенты переключаются
  • План: Cloudflare Spectrum на front-уровне (но это убьёт Reality direct-cooн — несовместимо). Альтернатива — anti-DDoS уровня хостинга
  • Срок: не блокирующий

R-4. Один Reality privateKey на все узлы

  • Severity: medium-high (blast radius)
  • Vector: AT-4/AT-6 — утечка с одного узла = компрометация всей сети
  • Митигация-факт: privateKey 0600 root:root; не в публичных артефактах; не в репозитории
  • План: регулярная ротация (раз в 6 месяцев или по триггеру)
  • Срок: процесс описан в OPERATIONS.md → "Ротация ключей Reality"

R-5. Reality xtls-rprx-vision может deprecate

  • Severity: low-medium
  • Vector: XTLS-team меняет протокол, новые клиенты несовместимы со старым сервером
  • Митигация: мониторинг XTLS releases; pin xray-install
  • План: при выпуске нового flow — миграция всех узлов одним rolling-update

TODO (P0/P1 закрыть до mainnet)

TODO-1. Endpoint /vpn/node/deregister уязвим к replay attack

  • Текущее: проверка только secret в body; атакующий, перехвативший один валидный запрос, может повторить
  • Severity: low (запрос идёт по HTTPS, secret в Keychain)
  • Фикс: добавить timestamp + HMAC + nonce
  • Срок: до mainnet

TODO-2. xray-core версия не pinned

  • Текущее: pinned только Xray-install; core качается latest
  • Severity: low (XTLS обычно semver, breaking changes редко)
  • Фикс: xray-install install --version v25.x.y
  • Срок: до mainnet

TODO-3. montana-node бинарь без verify

  • Текущее: join.sh качает бинарь с hub.montana.quest без SHA256
  • Severity: medium (если hub скомпрометирован — RCE на новых узлах)
  • Фикс: SHA256 в genesis-manifest.json + verify в join.sh
  • Срок: до mainnet

TODO-4. Нет HMAC между orchestrator → Cloudflare

  • Текущее: orchestrator → CF API через bearer token; нормально, но любой кто украл token из Moscow имеет full DNS write
  • Severity: medium
  • Фикс: scope token максимально (Zone.DNS:Edit only, ip allowlist)
  • Срок: ближайшая неделя

TODO-5. orchestrator работает на dev Flask server

  • Текущее: Flask dev app.run() — некачественно для prod
  • Severity: low (трафик низкий, локальный, за nginx)
  • Фикс: gunicorn или uwsgi
  • Срок: не блокирующий

Out of scope для текущего аудита

  • Корректность Reality cryptography (это XTLS upstream)
  • Корректность TimeChain proto on :8444 (отдельный аудит Montana-Protocol/Code/AUDIT.md)
  • Корректность iOS/Android клиентов (Happ, v2rayNG)

Закрытые риски (для истории)

ID Описание Закрыто
R-old-1 privateKey зашит в публичном join.sh → утечка через hub 2026-05-18: env-driven (C5)
R-old-2 Helsinki cascade — single point of failure 2026-05-18: переход на multi-A pool
R-old-3 xray под nobody, systemd warning 2026-05-18: dedicated xray:xray
R-old-4 RestartPreventExitStatus=23 блокирует Restart=always 2026-05-18: удалён из unit
R-old-5 CrowdSec FRA банит Moscow IP → watchdog не работает 2026-05-18: permanent whitelist
R-old-6 watchdog state desync с CF после ручного register 2026-05-18: sync каждый цикл
R-old-7 US ufw whitelist только Helsinki → клиенты не подключаются 2026-05-18: :443 ALLOW Anywhere