Перейти к основному содержимому

Построение и сопровождение модели угроз STRIDE

Постройте модель угроз STRIDE по CPG, изучите потоки данных и границы доверия. Отберите угрозы для ревью и сравните модели после изменения архитектуры.

Руководства

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

CodeGraph извлекает из CPG предполагаемые процессы, хранилища и потоки данных, определяет границы доверия и формирует угрозы STRIDE. Ревьюер сопоставляет модель с развёрнутой архитектурой и дополняет её внешними системами, учётными записями и условиями эксплуатации.

Что содержит модель

Что содержит модель
Поле JSON Назначение при ревью
components Найти процесс, хранилище или внешнюю сущность и связать их с исходниками.
flows Проследить передачу данных между компонентами.
trust_boundaries Проверить переходы между областями с разными условиями доверия.
threats Разобрать категорию, серьёзность, затронутый компонент и основания каждой угрозы.

Категории STRIDE

STRIDE задаёт шесть категорий для систематического ревью:

Категории STRIDE
Категория Вопрос для проверки
spoofing Как компонент проверяет, кто к нему обращается?
tampering Как защищены данные и операции от подмены?
repudiation Какие записи позволяют установить автора действия?
info_disclosure Кто получает доступ к чувствительным данным?
dos Как компонент ограничивает потребление ресурсов?
elevation Как проверяются полномочия для привилегированной операции?

Подготовьте окружение

Установите CLI по руководству. Выполняйте примеры в PowerShell из корня репозитория CodeGraph. Нужен доступный сервис GoCPG gRPC и CPG проверяемой ревизии. Каждая команда требует явный --db; она не обновляет граф автоматически.

$env:CODEGRAPH_ALLOW_LOCAL_PYTHON_CLI = '1'
$cpgPath = 'C:/analysis/project.duckdb'

Замените значение $cpgPath идентификатором своего CPG. Выберите каталог, доступный для записи: выходные файлы ниже сохраняются в текущем каталоге и перезаписывают одноимённые файлы.

Сформируйте исходную модель

python -m src.cli threat-model generate `
  --db "$cpgPath" --language ru --format json `
  --min-severity medium --output 'threat-model.json'
if ($LASTEXITCODE -ne 0) { throw 'Threat model generation failed' }
$model = Get-Content -Raw 'threat-model.json' | ConvertFrom-Json
$model.threats.Count

Допустимые уровни --min-severity: low, medium, high, critical. Сохраните проект, проиндексированную Git-ревизию, аргументы команды и полученный JSON. Проверьте массивы components, flows, trust_boundaries и threats. Если threats пуст, проверьте извлечённые компоненты, потоки и основания их классификации. Формат gost оформляет модель для последующей проверки по требованиям. При --format json без --output команда добавляет сводку в stdout; такой поток не является одним JSON-документом.

Постройте диаграмму потоков данных

python -m src.cli threat-model dfd --db "$cpgPath" --format mermaid --output 'dfd.mmd'
if ($LASTEXITCODE -ne 0) { throw 'DFD generation failed' }

Откройте dfd.mmd в просмотрщике Mermaid. Сопоставьте компоненты, потоки и границы доверия с архитектурой. При отсутствии компонентов команда сообщает No components to diagram. и возвращает 0 без записи файла. Проверяйте сообщение; старый файл не доказывает успех текущего запуска.

Отберите угрозы

python -m src.cli threat-model list --db "$cpgPath" --severity high --category Tampering --format json

list заново строит модель из CPG, а не читает сохранённый threat-model.json. --severity high выбирает ровно уровень high, без critical. Категория задаётся строкой: поиск выполняется по подстроке без учёта регистра. Значения STRIDE: spoofing, tampering, repudiation, info_disclosure, dos, elevation. Опечатка может дать пустой результат. Выходной JSON — массив угроз с полями id, category, title, severity, cwe_ids, affected_component, status, risk_score.

Сравните с предыдущей моделью

python -m src.cli threat-model update --db "$cpgPath" `
  --previous 'threat-model.json' --changed-files 'src/file-one.py' 'src/file-two.py' `
  --language ru --format json --output 'threat-model-updated.json'
if ($LASTEXITCODE -ne 0) { throw 'Threat model update failed' }
$updated = Get-Content -Raw 'threat-model-updated.json' | ConvertFrom-Json
$updated.delta

Замените пути реальным списком изменений. update строит новую полную модель и сравнивает её с предыдущей. --changed-files сохраняет контекст, но не ограничивает анализ этими файлами. Новая модель заменяет старую: ручные статусы и меры защиты автоматически не сохраняются. Повторно перенесите проверенные решения после сверки. Генерация выше использует порог medium, а update строит модель с порогом low; появление угроз уровня low само по себе не означает регрессию. Проверьте счётчики delta, изменения компонентов и основания изменения каждой угрозы.

Проведите проверку модели

Например, вы добавляете приём событий от внешней системы. Найдите обработчик в components, проследите входящие связи в flows и определите границу доверия. Для spoofing проверьте аутентификацию отправителя, для tampering — проверку подписи и содержимого события, для repudiation — запись отправителя и результата обработки в журнал. Сохраните выбранные меры защиты и тесты вместе с решением по интеграции. Это пример ревью; конкретные компоненты и угрозы берите из модели своего проекта.

  1. Проверьте потоки, границы доверия, учётные записи и условия развёртывания.
  2. Разберите предполагаемые угрозы и обоснуйте отклонённые находки.
  3. Для каждой меры защиты назначьте ответственного, срок и способ проверки.
  4. Сохраните нерешённые угрозы и пробелы в доказательствах. Подтвердите результат каждой меры защиты до присвоения ей статуса успешной проверки.
  5. Перестройте модель после изменения архитектуры и повторно сопоставьте её с принятыми решениями.

Работа через MCP

Выберите проект и подключение с профилем codex:role:codegraph_appsec:read по руководству оператора MCP. Для локального stdio задайте переменную окружения CODEGRAPH_PROJECT с именем зарегистрированного проекта до запуска MCP-сервера. Например, для проекта codegraph в PowerShell: $env:CODEGRAPH_PROJECT = 'codegraph'. Инструменты используют CPG выбранного проекта:

  • codegraph_security_threat_model_generate формирует модель. Параметр min_severity задаёт минимальный уровень угроз, include_inferred включает угрозы, выведенные из анализа границ доверия. Выберите language (ru или en) и format (json, markdown, gost или sarif).
  • codegraph_security_threat_model_dfd_generate формирует диаграмму при format="mermaid" или возвращает компоненты, потоки и границы доверия при format="json".

Используйте массив components в JSON для сверки полного списка компонентов, включая внешние сущности, а диаграмму — для разбора связей между ними.