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