04Безопасность
Threat modeling (STRIDE)
Систематически перечислить угрозы прежде чем строить защиту.
Threat-моделирование для {{system}} через STRIDE.
STRIDE — 6 категорий угроз
| Буква | Угроза | Контрмеры |
|---|---|---|
| Spoofing | Поддельная identity | Auth, MFA, сильные creds |
| Tampering | Изменение данных | Подпись, integrity checks, immutable |
| Repudiation | "Я этого не делал" | Audit logs, non-repudiable signatures |
| Info disclosure | Утечка данных | Encryption, ACL, минимизация |
| Denial of Service | Сделать недоступным | Rate limit, capacity, throttling |
| Elevation of Privilege | Получить больше прав | Least privilege, sandboxing |
Шаги
1. Опиши систему
Data flow diagram (DFD):
- Внешние entities (пользователи, third-party)
- Процессы (твои сервисы)
- Data stores (БД, файлы)
- Data flows (как данные ходят между ними)
- Trust boundaries (где доверие меняется)
[User] ──HTTP──→ [Web Server] ──SQL──→ [Database]
│
└──HTTP──→ [Stripe API]
2. Для каждого элемента — прогон STRIDE
| Element | S | T | R | I | D | E |
|---|---|---|---|---|---|---|
| User → Web | session hijack | MITM | nothing logged | sniff creds | flood requests | impersonate admin |
| Web → DB | fake conn | SQL injection | no audit | dump DB | hammer DB | privilege escalation |
| Web → Stripe | spoof Stripe | MITM | nothing logged | leak amounts | rate limit | abuse webhook |
Не каждая угроза применима — отметь N/A с обоснованием.
3. Оцени severity (DREAD)
Для каждой угрозы:
- Damage (вред если случится) 1-10
- Reproducibility (легко повторить?) 1-10
- Exploitability (нужны ли скиллы?) 1-10
- Affected users (% пользователей) 1-10
- Discoverability (легко найти?) 1-10
Score = avg. > 7 = критично, надо фиксить.
4. Mitigation
Для каждой high-severity угрозы:
- Контрмера (что делать)
- Стоимость (время / деньги)
- Эффективность (закрывает полностью / частично)
- Owner (кто отвечает)
5. Acceptance
Что-то может остаться не митигированным:
- Слишком дорого
- Слишком редко
- Защита создаёт другие риски
Документируй "accepted risk" с обоснованием.
Пример
Threat: User credentials stuffing
STRIDE: S (Spoofing)
DREAD: D=8, R=10, E=4, A=3, D=8 → avg 6.6
Mitigation:
- Rate limiting on /login (5 attempts / 15 min / IP)
- 2FA available for users
- CAPTCHA after 2 failed
- haveibeenpwned check at signup
Status: Mitigated
Owner: Backend team
Когда делать threat modeling
- В начале проекта (high-level)
- При значимых изменениях (новая интеграция, фича)
- После security incident (что мы пропустили?)
- Раз в год — full review
Анти-паттерны
- ❌ "У нас маленький стартап, нас не атакуют" — атакуют ботами всех
- ❌ Threat model на 200 страниц — никто не читает
- ❌ Не пересматривать (система меняется)
- ❌ Только разработчики (бизнес-логика — отдельный класс угроз)
В конце
- DFD с trust boundaries
- Таблица threat × element × STRIDE
- Топ-5 угроз с DREAD score
- Mitigation plan
- Accepted risks с обоснованием
Похожие промты
site / security
Content Security Policy и security headers
CSP, HSTS, X-Frame, Permissions-Policy — закрыть основные классы атак за один проход.
securitycspheaders
Открыть
Продвинутый30-60 мин
site / security
Управление секретами
Где хранить, как ротировать, как обнаружить утечку.
securitysecrets
Открыть
Средний30-60 мин
site / security
Аутентификация и rate limiting
Защита логина, реги, восстановления пароля от brute force.
securityauthrate-limit
Открыть
Продвинутый30-60 мин