Информационная безопасность
Модели угроз и STRIDE
Цели урока
- Применять STRIDE для систематического поиска угроз в любой системе
- Определять и минимизировать attack surface приложения
- Строить DFD и применять STRIDE per element к каждому компоненту
- Приоритизировать угрозы с помощью DREAD
2017. WannaCry зашифровал 230 000 серверов в 150 странах за 4 дня. Ущерб - 4 млрд долларов. Использовал уязвимость в SMBv1 - протоколу 30 лет. Знание attack surface не опциональная надстройка - это survival skill.
- **Microsoft SDL** - обязательный threat modeling перед каждым релизом снизил критические уязвимости на 50% (данные MS Security Response Center)
- **Equifax 2017** - 147M записей через CVE-2017-5638: STRIDE-анализ выявил бы Elevation + Info Disclosure через незапатченный Apache Struts
- **SolarWinds 2020** - Spoofing через подписанные обновления: attack surface включал цепочку поставок ПО, которую не рассматривали в threat model
- **Log4Shell (CVE-2021-44228)** - JNDI-инъекция через поле лога, затронула 93% корпоративных сетей: hidden attack surface в транзитивной зависимости
- **GitHub DDoS 2018** - 1.3 Тбит/с через memcached amplification: DoS через открытый порт 11211 - минимизация сетевой поверхности закрыла бы вектор
Clifford Stoll и первое задокументированное государственное кибершпионажное дело
1986 год. Администратор Lawrence Berkeley National Laboratory замечает расхождение в 75 центов в биллинговых логах. Начав расследование, Clifford Stoll обнаруживает хакера - немецкого гражданина, работавшего на КГБ, продававшего украденные данные о военных проектах США. Книга «The Cuckoo's Egg» (1988) - первая документация state-sponsored кибератаки. Атакующий использовал классические STRIDE-векторы: Spoofing (чужие учётные данные), Information Disclosure (доступ к секретным данным), Elevation (получение root-привилегий). Современные APT-группы используют те же категории - только инструменты сложнее.
Предварительные знания
STRIDE: шесть категорий угроз
1999 год. Два инженера Microsoft - **Loren Kohnfelder** и **Praerit Garg** - задались вопросом: как перестать гадать об угрозах и начать искать их системно? Ответ стал моделью **STRIDE** - шесть категорий, покрывающих все возможные атаки. Без STRIDE охотятся на угрозы наугад. С STRIDE - проверяют чеклист для каждого компонента.
| Категория | Нарушает (CIA) | Реальная атака | Контрмера |
|---|---|---|---|
| **Spoofing** | Authentication | SolarWinds 2020: подписанные обновления от имени легитимного вендора | MFA, code signing, сертификаты |
| **Tampering** | Integrity | SQL injection: атака на Heartland Payment, 130M карт (2008) | Подписи, хеширование, parameterized queries |
| **Repudiation** | Non-repudiation | Трейдер отрицает несанкционированные транзакции | Audit log, цифровые подписи, HSM |
| **Info Disclosure** | Confidentiality | Equifax 2017: 147M записей через CVE-2017-5638 (Apache Struts) | Шифрование, ACL, минимальные права |
| **DoS** | Availability | GitHub DDoS 2018: 1.3 Тбит/с через memcached amplification | Rate limiting, CDN, anycast |
| **Elevation** | Authorization | EternalBlue (WannaCry): повышение привилегий через SMBv1 | RBAC, sandboxing, принцип наименьших привилегий |
**STRIDE per Element** - продвинутый подход: для каждого типа компонента проверяются только релевантные категории. **Process** - все 6. **Data Store** - Tampering, Info Disclosure, DoS. **Data Flow** - Tampering, Info Disclosure. **External Entity** - Spoofing, Repudiation. Не каждый компонент уязвим ко всем шести.
STRIDE - **мнемоника для полноты**, не замена экспертизы. Без неё легко пропустить Repudiation (кто проверяет логи?) или Elevation (а если обычный пользователь подменит JWT-роль на admin?). С ней - системная проверка вместо интуитивного «кажется безопасно».
При code review: пройтись по STRIDE для каждого нового endpoint. Может ли кто-то Spoof вызов? Tampering с данными? Это занимает 2 минуты, но находит уязвимости до продакшена.
Злоумышленник отправляет 100 000 запросов в секунду на API-сервер, который падает под нагрузкой. Какая категория STRIDE?
Attack Surface: поверхность атаки
**Attack Surface** - совокупность всех точек, через которые атакующий может воздействовать на систему. Чем больше поверхность - тем больше вероятность найти незащищённую точку. WannaCry использовал SMB - протокол 30-летней давности, открытый на тысячах серверов просто потому что «так сложилось». Знание attack surface - это выживание.
| Категория | Примеры | Как уменьшить |
|---|---|---|
| **Сетевая** | Открытые порты, публичные API, DNS | Закрыть неиспользуемые порты, VPN, firewall rules, network segmentation |
| **Программная** | Endpoints, зависимости, file upload, GraphQL introspection | Убрать неиспользуемые routes, обновлять deps, input validation, disable introspection |
| **Человеческая** | Фишинг, social engineering, слабые пароли, подрядчики | Security awareness, MFA, принцип наименьших привилегий, PAM |
**Supply chain - скрытая поверхность.** Средний Node.js-проект: 200-400 транзитивных зависимостей. Каждая - потенциальная точка входа. ua-parser-js (78M загрузок/неделю) взломан в 2021: криптомайнер встроен в обновление. event-stream (2M загрузок/день) - скрытый стил Bitcoin-кошельков (2018). log4shell (CVE-2021-44228) - JNDI-инъекция через поле лога, затронуто 93% корпоративных сетей.
**Принцип минимальной поверхности:** каждый endpoint, каждый открытый порт, каждая зависимость - потенциальный вектор. Не используется - убрать. Сервис аутентификации не должен иметь доступ к сервису биллинга без явной необходимости.
В продакшне оставлен debug-endpoint /api/debug/users, показывающий всех пользователей без аутентификации. Что это?
Threat Modeling: процесс
**Threat Modeling** - структурированный поиск угроз **до** продакшена. Инструмент - **DFD (Data Flow Diagram)**: визуализация потоков данных между компонентами. Затем STRIDE к каждому элементу. Microsoft SDL: threat modeling снизил количество критических уязвимостей на 50%. Не потому что сложный процесс, а потому что любая система - это компоненты, связи и данные. DFD делает это видимым.
**Элементы DFD и применимые STRIDE-категории:** - **External Entity** (клиент) - Spoofing, Repudiation - **Process** (Web API) - все 6 категорий STRIDE - **Data Store** (DB) - Tampering, Info Disclosure, DoS - **Data Flow** (HTTPS/SQL) - Tampering, Info Disclosure
После составления списка угроз - **приоритизация**. SQL injection на странице оплаты - критично. Timing attack на странице «О нас» - теоретична. STRIDE находит угрозы, DREAD расставляет приоритеты.
**Когда проводить threat modeling?** В идеале - на этапе проектирования, до кода. Ретроспективный анализ существующей системы тоже ценен. Microsoft рекомендует обновлять threat model при каждом значительном изменении архитектуры.
DFD показывает Data Flow между браузером и API через HTTP (не HTTPS). Какие STRIDE-категории под угрозой?
DREAD: оценка рисков
Threat modeling даёт список угроз. Ресурсы ограничены. **DREAD** - система скоринга для приоритизации: что чинить первым. Пять критериев, каждый от 1 до 10. Субъективность минимальна - команда договаривается по числам, а не по интуиции.
| Критерий | SQL Injection на /login | XSS в комментариях |
|---|---|---|
| **D**amage | 10 - полный доступ к БД, дамп всех данных | 6 - кража cookies активного пользователя |
| **R**eproducibility | 10 - sqlmap автоматизирует, каждый раз работает | 8 - нужен активный пользователь на странице |
| **E**xploitability | 8 - sqlmap, автоматизированный сканер | 5 - нужен crafted payload |
| **A**ffected users | 10 - все пользователи в БД | 4 - только кто видит комментарий |
| **D**iscoverability | 9 - легко найти Burp Suite / scanner | 7 - видно в HTML-коде |
| **DREAD Score** | **(10+10+8+10+9)/5 = 9.4** | **(6+8+5+4+7)/5 = 6.0** |
**Вывод:** SQL Injection (9.4) - чинить немедленно, до следующего релиза. XSS (6.0) - следующий приоритет. DREAD превращает субъективное «вроде опасно» в числовой рейтинг для команды.
| Score | Приоритет | Действие |
|---|---|---|
| 8.0-10.0 | Критический | Исправить немедленно, до следующего релиза |
| 5.0-7.9 | Высокий | Запланировать на ближайший спринт |
| 2.0-4.9 | Средний | Включить в бэклог |
| 0.0-1.9 | Низкий | Документировать, мониторить |
**Критика DREAD:** Microsoft отказался от него в 2008 году - Discoverability оценивался субъективно (если уязвимость уже опубликована, discoverability всегда 10). Индустриальный стандарт сегодня: **CVSS v3.1** (NVD, CVE-базы), **Bug Bar** (Microsoft), **Risk Rating Methodology** (OWASP). DREAD - хорош для быстрой внутрикомандной приоритизации.
На практике комбинируют: STRIDE для **поиска** угроз, DREAD/CVSS для **приоритизации**. Threat model без приоритизации - просто список страшилок.
Threat modeling - только для больших компаний. Для стартапа или pet-project это overkill
Даже 30 минут threat modeling для pet-project находит критичные уязвимости: незащищённые endpoints, plain text пароли, отсутствие rate limiting
Ключевые идеи
- **STRIDE** - 6 категорий угроз (Spoofing, Tampering, Repudiation, Info Disclosure, DoS, Elevation). Системный чеклист вместо интуитивного поиска. WannaCry - Elevation через SMBv1, Equifax - Info Disclosure через незапатченный Struts
- **Attack Surface** - сетевая + программная + человеческая поверхность. Supply chain - скрытый вектор: Log4Shell затронул 93% корпоративных сетей через транзитивную зависимость
- **Threat Modeling** - DFD -> STRIDE per element -> приоритизация -> контрмеры. Microsoft SDL: -50% критических уязвимостей. Работает для проектов любого размера
- **DREAD** - скоринг 1-10 по 5 критериям для приоритизации: SQL injection 9.4 чинится до XSS 6.0. Индустриальный стандарт сегодня - CVSS v3.1
- **Survival skill, не академия:** 80% критичных уязвимостей находятся за первые 20% времени threat modeling
Связанные темы
Threat modeling - это ЧТО защищать. Следующие темы - КАК:
- Аутентификация и авторизация — Прямые контрмеры для Spoofing и Elevation of Privilege из STRIDE
- Что такое информационная безопасность — CIA Triad - основа, на которой строится STRIDE
- Backend security — Threat modeling для транспортного стека: HTTP/gRPC/WebSocket attack surface
Вопросы для размышления
- Нарисуйте DFD текущего проекта (даже на бумаге). Сколько элементов? Применили STRIDE хотя бы к одному?
- Какой элемент attack surface наиболее уязвим: сетевой, программный или человеческий? Почему?
- Если бы было 2 часа на security review - на какие STRIDE-категории потратить время в первую очередь?
Связанные уроки
- sec-03 — Аутентификация и авторизация - прямые контрмеры STRIDE Spoofing/Elevation
- sec-01 — CIA Triad - основа, на которой строится STRIDE
- bt-28-security — Threat modeling для backend-транспортного стека
- aie-34-prompt-injection-deep — Prompt injection - Spoofing/Tampering через LLM: та же STRIDE-логика, новый вектор
- sec-04 — Криптографические контрмеры для угроз из STRIDE
- bc-39-security-reentrancy — Smart contract vulnerabilities как подмножество STRIDE Elevation/Tampering
- alg-01-big-o