56 lines
4.3 KiB
Markdown
56 lines
4.3 KiB
Markdown
# Модель угроз — VPN-сеть Montana
|
||
|
||
Версия: **2026-05-18**
|
||
|
||
## Активы
|
||
|
||
- A1: privacy трафика пользователя (содержимое, метаданные)
|
||
- A2: доступность сервиса (uptime)
|
||
- A3: untraceability подключения (DPI не должен распознать Reality)
|
||
- A4: целостность DNS multi-A pool (только живые/наши узлы)
|
||
- A5: integrity конфигов узлов и orchestrator
|
||
|
||
## Атакующие
|
||
|
||
| Кто | Возможности |
|
||
|---|---|
|
||
| **AT-1 Passive observer на пути** | Снифать трафик, не модифицировать |
|
||
| **AT-2 Active MITM (BGP/ISP)** | Подменять трафик, terminate TLS |
|
||
| **AT-3 DPI/цензор** | Сигнатурный анализ, активный probing |
|
||
| **AT-4 Compromised hosting** | Image dump VM, доступ к файлам узла |
|
||
| **AT-5 Insider с admin TOKEN** | Изменения multi-A, добавление узлов |
|
||
| **AT-6 Утечка одного privateKey** | Поднять «фейковый» Reality на любом IP |
|
||
| **AT-7 DDoS на :443** | Заваливать сетевой стек узла |
|
||
| **AT-8 SSH brute-force** | Пытаться войти на узел |
|
||
|
||
## Угрозы и митигации
|
||
|
||
| ID | Угроза | Атакующий | Митигация | Остаточный риск |
|
||
|---|---|---|---|---|
|
||
| T-1 | Snooping трафика | AT-1 | TLS 1.3 + Reality auth | низкий |
|
||
| T-2 | Identity spoofing Reality-узла | AT-6 | privateKey 0600 root + не утечёт в git/hub (C1, C5) | средний (один ключ — один blast radius) |
|
||
| T-3 | DPI fingerprinting | AT-3 | Reality имитирует Google TLS handshake | средний (зависит от устойчивости Reality к новым DPI) |
|
||
| T-4 | Active probing узла | AT-3 | Reality short_id-gating: чужой клиент получает реальный Google response | низкий |
|
||
| T-5 | Подмена DNS-pool | AT-2 | Cloudflare DNSSEC выключен сейчас — РИСК; митигация: TTL 120s + клиент верифит cert через pbk | **средний — см. OPEN-RISKS R-2** |
|
||
| T-6 | Compromised узел читает чужой трафик | AT-4 | freedom outbound = прямо в интернет, узел видит destination как любой VPN | принято (см. N5) |
|
||
| T-7 | Утечка admin TOKEN | AT-5 | Только в Keychain (macOS) + /etc/montana/orchestrator-admin-token (0600); ротация по требованию | низкий |
|
||
| T-8 | Утечка CF API token | AT-5 | Token scoped только на zone montana.quest; ротация по требованию | низкий |
|
||
| T-9 | Узел падает — клиент таймаут | — | Orchestrator watchdog 30s + multi-A auto-prune; iPhone DNS TTL 120s | низкий |
|
||
| T-10 | Orchestrator падает — нет prune | — | systemd Restart=on-failure; ручной trigger возможен через `/register` | низкий (deg-graceful: pool остаётся как был) |
|
||
| T-11 | Crash-loop xray = CPU burn | — | StartLimitBurst=10/300s | низкий |
|
||
| T-12 | SSH brute force на узел | AT-8 | fail2ban + ufw + CrowdSec на FRA | низкий |
|
||
| T-13 | DDoS на :443 | AT-7 | Опираемся на хостинг-провайдера, BGP-уровень | **средний — см. OPEN-RISKS R-3** |
|
||
| T-14 | Подмена `cdn.montana.quest` через CF account takeover | AT-5+CF | CF account 2FA, API token scoped | низкий-средний |
|
||
| T-15 | Утечка privateKey через `join.sh` в публичный hub | — | Закрыто 2026-05-18: privateKey в env/защищённом файле, не в скрипте (C5) | **закрыто** |
|
||
|
||
## Доверенные элементы (assumed trusted)
|
||
|
||
- Cloudflare (DNS + API) — single trust anchor management plane
|
||
- macOS Keychain — где живут все управляющие токены
|
||
- Хостинг провайдеры (Timeweb FI/RU, THE.Hosting FRA/US) — image confidentiality
|
||
- Reality protocol (XTLS) — корректность реализации `xtls-rprx-vision`
|
||
|
||
## Out of scope
|
||
|
||
См. AUDIT-READINESS.md секция «Что мы НЕ гарантируем» (N1–N7).
|