# Модель угроз

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Научиться **системно думать об угрозах** для облачного приложения: активы, злоумышленники, векторы атак и приоритизация мер — основа STRIDE и упрощённого threat modeling.

## Предварительно

- [Оглавление раздела 05](README.md)

## Время

**3–4 часа**

---

## Зачем модель угроз

Без неё безопасность — «поставим firewall». **Threat modeling** отвечает: **что** защищаем, **от кого**, **как** могут атаковать, **что** делаем в первую очередь.

Делайте на этапе проектирования ([C4](../03-proektirovanie/c4-model.md)), не после утечки.

---

## Активы (assets)

| Актив | Ценность для «Умного списка» |
|-------|------------------------------|
| Учётные записи | Email, хэш пароля |
| Списки и пункты | Персональные данные |
| Токены сессий / JWT | Доступ к API |
| Секреты инфраструктуры | Ключи БД, SMTP |
| Репутация | Доверие пользователей |

---

## Участники угроз

| Тип | Пример |
|-----|--------|
| Внешний атакующий | Сканирует интернет, брутфорс login |
| Злоумышленный пользователь | Доступ к чужому list_id |
| Инсайдер | Бывший сотрудник с ключом |
| Конкурент / бот | Scraping API |
| Не злоумышленник | Баг, misconfig, падение SaaS |

---

## STRIDE (мнемоника)

| Буква | Угроза | Пример |
|-------|--------|--------|
| **S** Spoofing | Подмена личности | Украденный JWT |
| **T** Tampering | Изменение данных | PATCH чужого item |
| **R** Repudiation | Отказ от действия | «Я не удалял» без аудита |
| **I** Information disclosure | Утечка | 500 с SQL в теле |
| **D** Denial of service | Недоступность | Flood на API |
| **E** Elevation of privilege | Повышение прав | user → admin |

Для каждого компонента C4 пройдите STRIDE в таблице.

---

## Упрощённая таблица угроз

| Компонент | Угроза | Мера |
|-----------|--------|------|
| Public API | DDoS | Rate limit, CDN, WAF |
| Login | Brute force | CAPTCHA, lockout, MFA |
| GET /lists/{id} | IDOR | Проверка owner на сервере |
| БД | Прямой доступ из интернета | Private subnet |
| Логи | Утечка PII | Маскирование email |
| CI | Украденный secret | Vault, OIDC, не long-lived keys |

**IDOR** — Insecure Direct Object Reference: сменил id в URL — увидел чужие данные.

---

## Диаграмма потока данных (DFD)

```mermaid
flowchart LR
  User[Пользователь] -->|HTTPS| API[API]
  API -->|TLS| DB[(DB private)]
  API -->|API key| Email[Email SaaS]
  Attacker[Атакующий] -.->|scan| API
```

Отметьте **trust boundaries** — границы, где меняется уровень доверия (интернет → DMZ → private).

---

## OWASP API Security Top 10 (выборка)

| Риск | Суть |
|------|------|
| Broken auth | Слабые токены, нет revoke |
| Broken authz | Нет проверки прав на объект |
| Excessive data exposure | API отдаёт лишние поля |
| Lack of rate limiting | Abuse и DDoS |
| Unsafe consumption of APIs | Слепое доверие webhook |

Полный список — на [owasp.org](https://owasp.org); для архитектора достаточно знать **категории**.

---

## Приоритизация: риск = вероятность × ущерб

| Угроза | Вероятность | Ущерб | Приоритет |
|--------|-------------|-------|-----------|
| IDOR на списках | Средняя | Высокий | P1 |
| Утечка пароля в git | Средняя | Критический | P1 |
| DDoS 1 Gbps | Низкая на старте | Средний | P2 |

Не всё сразу — **P1 до MVP**, P2 в бэклог с NFR.

---

## Security user stories

```
Как злоумышленник, я пытаюсь GET /lists/999 без прав,
чтобы украсть данные — система должна вернуть 403/404.
```

Добавляйте в тесты и пентест-чеклисты.

---

## Практика

1. STRIDE-таблица для Container «Backend API» (минимум 6 строк).  
2. Найдите IDOR в гипотетическом API без проверки owner.  
3. Три актива и один сценарий инсайдера.

---

## Самопроверка

1. Что такое trust boundary?  
2. Приведите пример Tampering в учебном кейсе.  
3. Чем threat modeling отличается от «у нас есть HTTPS»?

---

## Дальше

→ [IAM и управление доступом](iam-i-dostup.md)
