Модель угроз¶
1. Контекст системы¶
1.1 Активы¶
| Актив | Описание | Ценность |
|---|---|---|
| Средства пользователей | Криптовалютные балансы | КРИТИЧЕСКАЯ |
| Данные пользователей | Email, история транзакций | ВЫСОКАЯ |
| JWT секреты | Ключи подписи токенов | КРИТИЧЕСКАЯ |
| API ключи | Fordefi, Crypto2B, Supabase | КРИТИЧЕСКАЯ |
| Админ доступ | Возможность одобрения выводов | КРИТИЧЕСКАЯ |
| Доступность системы | Uptime платформы | ВЫСОКАЯ |
1.2 Акторы¶
| Актор | Описание | Уровень доверия |
|---|---|---|
| Анонимный пользователь | Посетитель из интернета | НЕДОВЕРЕННЫЙ |
| Аутентифицированный пользователь | Авторизованный пользователь платформы | НИЗКИЙ |
| Администратор | Администратор платформы | ВЫСОКИЙ |
| Внешние сервисы | Fordefi, Crypto2B, Supabase | ДОВЕРЕННЫЕ |
| Злоумышленник | Вредоносный актор | ВРАЖДЕБНЫЙ |
2. STRIDE анализ¶
2.1 Spoofing (Подделка идентичности)¶
Угроза: Подделка JWT токена¶
Описание: Злоумышленник создаёт поддельные JWT токены для выдачи себя за пользователей.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | КРИТИЧЕСКОЕ |
| Риск | ВЫСОКИЙ |
Вектор атаки:
- Получение JWT_SECRET через breach
- Генерация токенов с произвольными claims
- Доступ к любому аккаунту
Существующие меры:
- ✅ Верификация подписи HS256
- ✅ Секрет хранится в env (не в коде)
- ✅ Expiration токена (24ч)
- ✅ Валидация issuer
Рекомендации:
- Рассмотреть RS256 для асимметричной подписи
- Реализовать blacklist токенов для logout
- Добавить JTI (JWT ID) для защиты от replay
Угроза: Перехват сессии¶
Описание: Злоумышленник крадёт валидный JWT у пользователя.
| Атрибут | Значение |
|---|---|
| Вероятность | СРЕДНЯЯ |
| Воздействие | ВЫСОКОЕ |
| Риск | ВЫСОКИЙ |
Вектор атаки:
- XSS для кражи токена из localStorage
- Перехват сети (при обходе HTTPS)
- Malware на устройстве пользователя
Существующие меры:
- ✅ Content Security Policy
- ✅ HTTPS принудительно (HSTS)
- ✅ HttpOnly не используется (localStorage) — компромисс для SPA
Рекомендации:
- Рассмотреть HttpOnly cookies для хранения токенов
- Реализовать привязку токена к IP/device fingerprint
Угроза: Выдача себя за администратора¶
Описание: Злоумышленник получает привилегии администратора.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | КРИТИЧЕСКОЕ |
| Риск | ВЫСОКИЙ |
Вектор атаки:
- Компрометация email аккаунта админа
- Социальная инженерия
- Манипуляция конфиг-файлом
Существующие меры:
- ✅ Админы определены в конфиге (не в БД)
- ✅ Отдельный тип токена AdminClaims
- ✅ Fordefi multi-sig для выводов
Рекомендации:
- MFA для аутентификации админов
- Аудит-логирование действий админов
2.2 Tampering (Подмена данных)¶
Угроза: Манипуляция транзакциями¶
Описание: Злоумышленник изменяет суммы или получателей транзакций.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | КРИТИЧЕСКОЕ |
| Риск | СРЕДНИЙ |
Вектор атаки:
- MITM атака на API запросы
- Эксплуатация пробелов в валидации
- Прямой доступ к БД
Существующие меры:
- ✅ HTTPS для всех коммуникаций
- ✅ Валидация входных данных (go-playground/validator)
- ✅ SafeDecimal для финансовых вычислений
- ✅ Таблица transactions — append-only
Рекомендации:
- Подпись запросов для финансовых операций
- Двойное подтверждение для крупных выводов
Угроза: Манипуляция балансом¶
Описание: Злоумышленник искусственно завышает свой баланс.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | КРИТИЧЕСКОЕ |
| Риск | СРЕДНИЙ |
Вектор атаки:
- Race condition в депозите/выводе
- Overflow в вычислении баланса
- Прямая манипуляция БД
Существующие меры:
- ✅ SafeDecimal (без overflow)
- ✅ Append-only архитектура (баланс = SUM транзакций, нет UPDATE)
- ✅ Единый сервис расчёта баланса (canonical)
Рекомендации:
- Периодическая сверка балансов
- Алерты на необычные изменения баланса
2.3 Repudiation (Отказ от действий)¶
Угроза: Отрицание транзакции¶
Описание: Пользователь отрицает, что делал запрос на вывод.
| Атрибут | Значение |
|---|---|
| Вероятность | СРЕДНЯЯ |
| Воздействие | СРЕДНЕЕ |
| Риск | СРЕДНИЙ |
Вектор атаки:
- Заявление о взломе аккаунта
- Оспаривание легитимных транзакций
Существующие меры:
- ✅ Immutable лог транзакций
- ✅ Записи с timestamps
- ✅ Атрибуция user ID
- ✅ Записи одобрений администратора
Рекомендации:
- Логирование IP адресов для транзакций
- Email подтверждение для выводов
2.4 Information Disclosure (Утечка информации)¶
Угроза: Раскрытие данных пользователей¶
Описание: Злоумышленник получает доступ к данным других пользователей.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | ВЫСОКОЕ |
| Риск | СРЕДНИЙ |
Вектор атаки:
- IDOR (Insecure Direct Object Reference)
- SQL injection
- Перебор API
Существующие меры:
- ✅ Скоупинг пользователя через JWT
- ✅ Параметризованные SQL запросы (sqlx)
- ✅ Rate limiting на API
Рекомендации:
- UUID для идентификаторов ресурсов (не sequential)
- Логирование доступа к чувствительным endpoints
Угроза: Утечка API ключей¶
Описание: Раскрытие API ключей внешних сервисов.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | КРИТИЧЕСКОЕ |
| Риск | ВЫСОКИЙ |
Вектор атаки:
- Коммит в git
- Раскрытие в сообщениях об ошибках
- Случайное логирование
Существующие меры:
- ✅ .env файл (не коммитится)
- ✅ .gitignore включает чувствительные файлы
- ✅ Структурированное логирование (без секретов)
Рекомендации:
- Сканирование секретов в CI/CD
- Vault для production секретов
2.5 Denial of Service (Отказ в обслуживании)¶
Угроза: DoS на API¶
Описание: Злоумышленник перегружает API запросами.
| Атрибут | Значение |
|---|---|
| Вероятность | ВЫСОКАЯ |
| Воздействие | ВЫСОКОЕ |
| Риск | ВЫСОКИЙ |
Вектор атаки:
- Credential stuffing
- Флуд endpoints
- Исчерпание ресурсов
Существующие меры:
- ✅ Rate limiting (token bucket)
- ✅ Финансовые: 5 req/мин
- ✅ Auth: 20 req/мин
- ✅ Общие: 100 req/мин
Рекомендации:
- WAF с защитой от DDoS
- Cloudflare или аналог
Угроза: Спам выводов¶
Описание: Злоумышленник переполняет очередь выводов.
| Атрибут | Значение |
|---|---|
| Вероятность | СРЕДНЯЯ |
| Воздействие | СРЕДНЕЕ |
| Риск | СРЕДНИЙ |
Вектор атаки:
- Создание множества мелких запросов на вывод
- Исчерпание capacity ревью администраторов
Существующие меры:
- ✅ Rate limiting на endpoint вывода (5/мин)
- ✅ Минимальная сумма вывода
- ✅ Валидация баланса
Рекомендации:
- Лимиты выводов на пользователя
- Авто-отклонение подозрительных паттернов
2.6 Elevation of Privilege (Повышение привилегий)¶
Угроза: Эскалация User → Admin¶
Описание: Обычный пользователь получает доступ администратора.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | КРИТИЧЕСКОЕ |
| Риск | СРЕДНИЙ |
Вектор атаки:
- Эксплуатация обхода middleware
- Манипуляция токеном
- Доступ на запись к конфиг-файлу
Существующие меры:
- ✅ Отдельные типы токенов (JWTClaims vs AdminClaims)
- ✅ Список админов в конфиге (не в БД)
- ✅ Middleware на всех admin маршрутах
Рекомендации:
- Unit тесты на обход auth
- Security-focused code review
Угроза: Вывод без одобрения¶
Описание: Обход одобрения администратора для выводов.
| Атрибут | Значение |
|---|---|
| Вероятность | НИЗКАЯ |
| Воздействие | КРИТИЧЕСКОЕ |
| Риск | СРЕДНИЙ |
Вектор атаки:
- Прямой вызов API выполнения
- Манипуляция state machine
- Прямой доступ к Fordefi API
Существующие меры:
- ✅ Многоэтапный workflow (request → admin → fordefi → complete)
- ✅ Fordefi multi-sig (внешний контроль)
- ✅ Валидация статуса на каждом этапе
Рекомендации:
- Валидация state machine в workflow
- Внешнее одобрение через Fordefi обеспечивает defense-in-depth
3. Сводка поверхности атаки¶
3.1 Внешняя поверхность атаки¶
| Компонент | Экспозиция | Риск |
|---|---|---|
| NGINX (443) | Интернет | СРЕДНИЙ |
| API (/api/*) | Аутентифицированные | СРЕДНИЙ |
| Admin API (/api/admin/*) | Только админы | ВЫСОКИЙ |
| Webhooks | Fordefi, Crypto2B | СРЕДНИЙ |
3.2 Внутренняя поверхность атаки¶
| Компонент | Доступ | Риск |
|---|---|---|
| PostgreSQL | localhost:5432 | НИЗКИЙ |
| Docker Socket | Только хост | НИЗКИЙ |
| .env файл | Файловая система сервера | ВЫСОКИЙ |
4. Матрица рисков¶
| Угроза | Вероятность | Воздействие | Уровень риска | Статус |
|---|---|---|---|---|
| Подделка JWT | НИЗКАЯ | КРИТИЧЕСКОЕ | ВЫСОКИЙ | Смягчено |
| Перехват сессии | СРЕДНЯЯ | ВЫСОКОЕ | ВЫСОКИЙ | Частично смягчено |
| Выдача за админа | НИЗКАЯ | КРИТИЧЕСКОЕ | ВЫСОКИЙ | Смягчено |
| Манипуляция транзакциями | НИЗКАЯ | КРИТИЧЕСКОЕ | СРЕДНИЙ | Смягчено |
| Манипуляция балансом | НИЗКАЯ | КРИТИЧЕСКОЕ | СРЕДНИЙ | Смягчено |
| Раскрытие данных | НИЗКАЯ | ВЫСОКОЕ | СРЕДНИЙ | Смягчено |
| Утечка API ключей | НИЗКАЯ | КРИТИЧЕСКОЕ | ВЫСОКИЙ | Смягчено |
| DoS на API | ВЫСОКАЯ | ВЫСОКОЕ | ВЫСОКИЙ | Смягчено |
| Эскалация привилегий | НИЗКАЯ | КРИТИЧЕСКОЕ | СРЕДНИЙ | Смягчено |
5. Рекомендуемые улучшения¶
Приоритет 1 (Критический)¶
- Реализовать blacklist токенов/logout
- Добавить MFA для аккаунтов админов
- Процедура ротации секретов
Приоритет 2 (Высокий)¶
- WAF с защитой от DDoS
- Подпись запросов для финансовых операций
- Сканирование секретов в CI/CD
Приоритет 3 (Средний)¶
- Рассмотреть HttpOnly cookies
- Логирование IP для транзакций
- Job сверки балансов