Skip to content

Моделирование угроз

Материал проходит ревью.

MiddleФундамент ~48 мин

Границы темы

Scope: повторяемый инженерный процесс для backend-сервиса: ограничить объект анализа, показать потоки и доверие, сформулировать угрозы, выбрать response и получить доказательства.

Не рассматриваем: threat intelligence конкретного противника, red team exercise, полный penetration test и обещание перечислить «все возможные атаки».

Что нужно знать заранее

Нужно уметь различать конфиденциальность, целостность и доступность из статьи «Триада CIA», читать простую архитектурную схему и понимать путь HTTP-запроса через API к хранилищу.

Результаты обучения

После статьи читатель сможет:

  1. определить границы конкретного моделирования;
  2. построить data-flow diagram с внешними сущностями и trust boundaries;
  3. записать угрозу как причинно-следственный сценарий;
  4. найти пропуски с помощью STRIDE;
  5. выбрать response и проверяемую mitigation;
  6. назвать событие, после которого модель нужно обновить.

Основная модель

Модель активов, нарушителей, границ доверия, угроз и защитных мер. — не диаграмма и не таблица сама по

себе. Это связка модель системы → сценарии угроз → решения → доказательства.

Диаграмма

OWASP рекомендует начинать с этих четырёх вопросов и не объявляет единственную обязательную методологию. NIST SP 800-154 рассматривает threat modeling как форму risk assessment и подчёркивает ограниченность ресурсов: модель нужна, чтобы тратить их на значимые сценарии, а не на абстрактную «максимальную безопасность».

Основные термины

ТерминОпределениеНе путать с
АктивДанные, функция или способность системы, потеря которой имеет влияниеТолько таблица базы данных
ActorЧеловек, сервис, процесс или внешняя система, способные действоватьТолько злонамеренный хакер
Граница доверияМесто, где меняются гарантии об identity, данных, среде или полномочияхСетевой firewall как единственный вариант
УгрозаВозможный нежелательный сценарий, способный причинить влияниеУже подтверждённая уязвимость
УязвимостьСлабость, которую можно использовать в сценарииЛюбая угроза
MitigationИзменение дизайна, control или процесса, снижающее рискНазвание купленного продукта
ДопущениеУтверждение, истинность которого требуется для моделиНеизменный факт
Остаточный рискРиск, остающийся после выбранных решенийРиск, о котором забыли

Контекст: webhook оплаты

Сервис принимает уведомление платёжного провайдера и переводит заказ из pending в paid. Нельзя начать с «какие атаки бывают на webhook». Сначала нужно описать систему.

Диаграмма

Границы здесь означают изменение гарантий:

  • входящий запрос контролируется внешней стороной;
  • proxy может подтвердить TLS-соединение, но не бизнес-полномочия события;
  • сообщение в очереди уже внутреннее, но может быть повторено или подменено при компрометации producer;
  • запись в БД меняет денежное состояние и требует более сильных инвариантов.

End-to-end процесс

1. Что моделируем

Зафиксируйте:

  • изменение или сценарий: «приём webhook оплаты», а не «весь fintech»;
  • версии диаграммы и контракта;
  • активы: статус заказа, сумма, provider event ID, ключ проверки подписи;
  • внешние зависимости и владельцев;
  • допущения: например, provider гарантирует уникальный event ID;
  • non-goals и срок следующего пересмотра.

2. Что может пойти не так

Формула полезного сценария:

text
actor + предусловие + действие/путь + актив + нарушенное свойство + влияние

Пример:

text
Внешний отправитель повторяет ранее перехваченный подписанный webhook.
Handler не хранит provider event ID и создаёт вторую операцию.
Нарушается целостность заказа: клиенту повторно начисляется платёж.

Это лучше записи «replay attack», потому что показывает точку изменения и ожидаемое влияние.

3. Что делаем

Для каждой приоритетной угрозы выберите явный response:

ResponseСмыслПример
УстранитьУбрать опасную возможность или потокНе принимать сумму из webhook, читать её у provider API
СнизитьУменьшить вероятность или влияниеПроверять подпись, timestamp и уникальность event ID
ПринятьДокументированно оставить остаточный рискПринять задержку reconciliation с владельцем и сроком
ПередатьПерераспределить финансовые последствияСтрахование; техническая ответственность всё равно остаётся

4. Достаточно ли хорошо

Mitigation считается завершённой не после merge, а когда есть доказательство:

  • негативный test повторного event ID;
  • constraint или idempotency record в хранилище;
  • metric повторов и alert на аномалию;
  • owner и дата проверки;
  • решение об остаточном риске.

STRIDE как эвристика

STRIDE помогает пройти по компонентам и потокам и спросить, не пропущен ли класс сценариев.

КатегорияВопросТипичное свойство
SpoofingМожет ли actor выдать себя за другого?Аутентичность, конфиденциальность
TamperingМожно ли неправомерно изменить данные или код?Целостность
RepudiationМожно ли убедительно отрицать действие из-за нехватки доказательств?Accountability
Information DisclosureМожет ли информация раскрыться без разрешения?Конфиденциальность
Denial of ServiceМожно ли лишить уполномоченного субъекта услуги?Доступность
Elevation of PrivilegeМожет ли actor получить более сильные полномочия?Авторизация, целостность

Что происходит под капотом

Threat model соединяет несколько видов доказательств:

Диаграмма

Если связь оборвана, появляется типичная фикция:

  • диаграмма без угроз — обычная документация архитектуры;
  • угроза без влияния — неприоритизированный страх;
  • control без сценария — checkbox;
  • mitigation без теста и сигнала — недоказанное обещание.

Минимальный воспроизводимый пример

Создайте запись угрозы для webhook в следующем формате:

yaml
id: PAY-WH-01
scope: payment webhook v2
asset: order payment state
actor: external sender
preconditions:
  - valid event captured earlier
path: repeated webhook -> handler -> queue -> worker
violates: integrity
impact: duplicate financial operation
existing_controls:
  - signature verification
decision: mitigate
mitigations:
  - unique provider event id in durable storage
  - transactional state transition
verification:
  - replay the same event twice; one transition must occur
detection:
  - metric webhook_duplicate_total
owner: payments-team
review_trigger:
  - provider contract or event schema changes

Ожидаемый результат

Другой инженер без устного контекста может:

  1. воспроизвести сценарий;
  2. назвать нарушенное свойство и влияние;
  3. проверить mitigation;
  4. найти владельца и условие пересмотра.

Как диагностировать слабую запись

ПризнакЧто отсутствует
«Возможен replay»Путь, предусловие и impact
«Использовать Redis»Сценарий, semantics хранения и отказ Redis
risk: highОбоснование приоритета
fixedTest, telemetry и остаточный риск

Приоритизация без ложной точности

Для первой модели достаточно сравнимой качественной оценки:

ФакторВопрос
ВлияниеЧто произойдёт с пользователем, деньгами, данными и операциями?
ДостижимостьКакие предусловия нужны и доступны ли они actor?
МасштабОдин заказ, tenant, регион или вся система?
ОбнаруживаемостьУзнаем ли мы о сценарии и за какое время?
ОбратимостьМожно ли безопасно восстановить состояние?
УверенностьКакие утверждения подтверждены, а какие являются допущениями?

Число с двумя знаками после запятой не повышает качество модели, если исходные вероятности придуманы. Важнее единые критерии, evidence и владелец решения.

Failure modes и типичные ошибки

  1. Моделировать всю систему сразу. Scope становится неподъёмным, а решения — общими. Начните с изменения или критичного потока.
  2. Рисовать deployment diagram без trust boundaries. Сетевое соседство не объясняет, где меняются гарантии.
  3. Считать внутреннюю сеть доверенной. Внутренний producer тоже может быть скомпрометирован или ошибаться.
  4. Путать угрозу и уязвимость. Угроза может существовать до обнаружения конкретной слабости; уязвимость становится значимой в контексте сценария и влияния.
  5. Закрывать угрозу названием control. Нужны конфигурация, failure mode, test и наблюдаемость.
  6. Проводить сессию один раз. Новый data flow, dependency, privilege или assumption требует пересмотра.

Практическое задание

Задача: смоделируйте восстановление пароля или загрузку файла.

Подготовьте:

  1. scope и три non-goals;
  2. DFD с минимум одной trust boundary;
  3. активы и допущения;
  4. пять сценариев угроз, включая CIA и abuse availability;
  5. response, owner и verification для двух приоритетных сценариев;
  6. trigger для следующего пересмотра.

Критерии готовности: каждый сценарий содержит actor, путь, предусловие, актив и impact; mitigation проверяется негативным тестом или операционной процедурой.

Подсказка

Для password reset проверьте enumeration аккаунтов, кражу и повтор токена, подмену адреса доставки, массовую отправку писем и отказ identity/email provider.

Проверка знаний

ИНТЕРАКТИВНАЯ ПРОВЕРКА

Проверка знаний

0 / 4
01Команда начинает threat modeling нового webhook endpoint. Что сделать первым?
02Какая запись лучше всего описывает угрозу?
03Что делает mitigation проверяемой?
04Восстановите рабочий цикл моделирования угроз.
  1. Проверить модель и выполненные меры
  2. Описать систему и границы
  3. Выбрать response и владельца
  4. Найти и приоритизировать сценарии
Проверено: 0 из 4

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

  1. Почему DFD ещё не является threat model?
  2. Когда внутренняя очередь образует trust boundary?
  3. Почему risk: high недостаточно для решения?
  4. Какие изменения требуют пересмотра модели?
Ответы и критерии
  1. DFD описывает систему, но не содержит сценариев, решений и доказательств.
  2. Когда при переходе меняются гарантии об отправителе, формате, целостности, полномочиях или владении данными.
  3. Нужны влияние, предусловия, масштаб, обнаруживаемость, уверенность и владелец.
  4. Новые компоненты, data flows, privileges, зависимости, контракты, типы данных, сценарии использования и опровергнутые assumptions.

Краткое резюме

  • Threat modeling — непрерывный цикл, а не разовый документ.
  • Сначала моделируется система и доверие, затем угрозы и controls.
  • Полезная угроза — причинно-следственный, воспроизводимый сценарий.
  • STRIDE помогает искать пропуски, но не заменяет инженерное суждение.
  • Завершённая mitigation имеет owner, test, telemetry и остаточный риск.

Следующие шаги

В статье «Эшелонированная защита» выбранные mitigations раскладываются по независимым слоям предотвращения, обнаружения, ограничения ущерба и восстановления.

Источники

  • OWASP Threat Modeling Project — поддерживаемая точка входа и четыре методологически нейтральных вопроса.
  • OWASP Threat Modeling Cheat Sheet — практический цикл: system modeling, threat identification, response и review.
  • NIST SP 800-154, Initial Public Draft — data-centric threat modeling как форма risk assessment; источник явно остаётся draft.
  • FIPS 199 — свойства и потенциальное влияние, используемые для формулировки impact.