Модель угроз помогает разобрать, как внешние данные проходят через приложение, где меняется уровень доверия и какие меры защиты нужны компонентам. Используйте её при проектировании интеграции, ревью архитектуры и подготовке изменений безопасности.
CodeGraph извлекает из CPG предполагаемые процессы, хранилища и потоки данных, определяет границы доверия и формирует угрозы STRIDE. Ревьюер сопоставляет модель с развёрнутой архитектурой и дополняет её внешними системами, учётными записями и условиями эксплуатации.
Что содержит модель
| Поле JSON | Назначение при ревью |
|---|---|
components |
Найти процесс, хранилище или внешнюю сущность и связать их с исходниками. |
flows |
Проследить передачу данных между компонентами. |
trust_boundaries |
Проверить переходы между областями с разными условиями доверия. |
threats |
Разобрать категорию, серьёзность, затронутый компонент и основания каждой угрозы. |
Категории 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 — запись отправителя и результата
обработки в журнал. Сохраните выбранные меры защиты и тесты вместе с решением
по интеграции. Это пример ревью; конкретные компоненты и угрозы берите из модели
своего проекта.
- Проверьте потоки, границы доверия, учётные записи и условия развёртывания.
- Разберите предполагаемые угрозы и обоснуйте отклонённые находки.
- Для каждой меры защиты назначьте ответственного, срок и способ проверки.
- Сохраните нерешённые угрозы и пробелы в доказательствах. Подтвердите результат каждой меры защиты до присвоения ей статуса успешной проверки.
- Перестройте модель после изменения архитектуры и повторно сопоставьте её с принятыми решениями.
Работа через 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 для сверки полного списка компонентов,
включая внешние сущности, а диаграмму — для разбора связей между ними.